You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2024/09/11 08:00:15 UTC
(camel) 01/07: CAMEL-19538: Replaced Thread.sleep() in camel-mllp
This is an automated email from the ASF dual-hosted git repository.
orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit fc4c39d13cf51713dfe4da9d7c62975a865b6634
Author: Nikita Konovalov <nk...@redhat.com>
AuthorDate: Thu Jul 25 14:46:26 2024 +0200
CAMEL-19538: Replaced Thread.sleep() in camel-mllp
---
.../MllpTcpServerConsumerLenientBindTest.java | 8 ++--
.../mllp/MllpIdleTimeoutStrategyTest.java | 9 +++--
...TcpClientProducerIdleConnectionTimeoutTest.java | 46 ++++++++++++----------
.../mllp/MllpTcpServerConsumerBindTimeoutTest.java | 8 +++-
.../mllp/MllpTcpServerConsumerConnectionTest.java | 26 ++++++------
...rConsumerEndOfDataAndValidationTestSupport.java | 31 +++++++--------
.../camel/test/executor/PooledExecutorTest.java | 5 +--
.../camel/test/tcp/JavaSocketManualTests.java | 23 ++++++-----
8 files changed, 84 insertions(+), 72 deletions(-)
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/MllpTcpServerConsumerLenientBindTest.java b/components/camel-mllp/src/test/java/org/apache/camel/MllpTcpServerConsumerLenientBindTest.java
index 6e007d69885..e885463f5e8 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/MllpTcpServerConsumerLenientBindTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/MllpTcpServerConsumerLenientBindTest.java
@@ -18,6 +18,7 @@ package org.apache.camel;
import java.net.ServerSocket;
import java.net.SocketTimeoutException;
+import java.util.concurrent.TimeUnit;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
@@ -28,6 +29,7 @@ import org.apache.camel.test.junit5.CamelTestSupport;
import org.apache.camel.test.mllp.Hl7TestMessageGenerator;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
import static org.apache.camel.test.junit5.TestSupport.assertStringContains;
@@ -86,10 +88,10 @@ public class MllpTcpServerConsumerLenientBindTest extends CamelTestSupport {
assertIsInstanceOf(SocketTimeoutException.class, expectedEx.getCause());
}
mllpClient.reset();
-
portBlocker.close();
- Thread.sleep(2000);
- assertEquals(ServiceStatus.Started, context.getStatus());
+
+ Awaitility.await().pollDelay(2000, TimeUnit.MILLISECONDS)
+ .untilAsserted(() -> assertEquals(ServiceStatus.Started, context.getStatus()));
mllpClient.connect();
String acknowledgement
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpIdleTimeoutStrategyTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpIdleTimeoutStrategyTest.java
index 699e1cd56fb..de9c31457c0 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpIdleTimeoutStrategyTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpIdleTimeoutStrategyTest.java
@@ -37,6 +37,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.mockito.Mockito;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.never;
@@ -146,10 +147,12 @@ public class MllpIdleTimeoutStrategyTest extends CamelTestSupport {
private void sendHl7Message(ProducerTemplate template) throws Exception {
target.expectedMessageCount(1);
- // Need to send one message to get the connection established
+
template.sendBody(Hl7TestMessageGenerator.generateMessage());
- Thread.sleep(IDLE_TIMEOUT * 3);
- MockEndpoint.assertIsSatisfied(context, 5, TimeUnit.SECONDS);
+
+ // Need to send one message to get the connection established
+ Awaitility.await().pollDelay(IDLE_TIMEOUT * 3, TimeUnit.MILLISECONDS)
+ .untilAsserted(() -> MockEndpoint.assertIsSatisfied(context, 5, TimeUnit.SECONDS));
}
@Test
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerIdleConnectionTimeoutTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerIdleConnectionTimeoutTest.java
index 970e17acccc..9927885d52a 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerIdleConnectionTimeoutTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerIdleConnectionTimeoutTest.java
@@ -35,6 +35,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -114,17 +115,18 @@ public class MllpTcpClientProducerIdleConnectionTimeoutTest extends CamelTestSup
// Need to send one message to get the connection established
source.sendBody(Hl7TestMessageGenerator.generateMessage());
- Thread.sleep(IDLE_TIMEOUT / 2);
- source.sendBody(Hl7TestMessageGenerator.generateMessage());
-
- assertTrue(done.matches(5, TimeUnit.SECONDS), "Should have completed two exchanges");
+ Awaitility.await().untilAsserted(() -> {
+ source.sendBody(Hl7TestMessageGenerator.generateMessage());
- MockEndpoint.assertIsSatisfied(context, 5, TimeUnit.SECONDS);
+ assertTrue(done.matches(5, TimeUnit.SECONDS), "Should have completed two exchanges");
- Thread.sleep((long) (IDLE_TIMEOUT * 1.1));
+ MockEndpoint.assertIsSatisfied(context, 5, TimeUnit.SECONDS);
+ });
- assertThrows(MllpJUnitResourceException.class,
- () -> mllpServer.checkClientConnections());
+ Awaitility.await().untilAsserted(() -> {
+ assertThrows(MllpJUnitResourceException.class,
+ () -> mllpServer.checkClientConnections());
+ });
}
@Test
@@ -138,23 +140,25 @@ public class MllpTcpClientProducerIdleConnectionTimeoutTest extends CamelTestSup
// Need to send one message to get the connection established
source.sendBody(Hl7TestMessageGenerator.generateMessage());
- Thread.sleep(IDLE_TIMEOUT / 2);
- source.sendBody(Hl7TestMessageGenerator.generateMessage());
-
- assertTrue(done.matches(5, TimeUnit.SECONDS), "Should have completed two exchanges");
+ Awaitility.await().untilAsserted(() -> {
+ Thread.sleep(IDLE_TIMEOUT / 2);
+ source.sendBody(Hl7TestMessageGenerator.generateMessage());
- Thread.sleep((long) (IDLE_TIMEOUT * 1.1));
+ assertTrue(done.matches(5, TimeUnit.SECONDS), "Should have completed two exchanges");
+ });
- try {
- mllpServer.checkClientConnections();
- fail("Should receive and exception for the closed connection");
- } catch (MllpJUnitResourceException expectedEx) {
- // Eat this
- }
+ Awaitility.await().untilAsserted(() -> {
+ try {
+ mllpServer.checkClientConnections();
+ fail("Should receive and exception for the closed connection");
+ } catch (MllpJUnitResourceException expectedEx) {
+ // Eat this
+ }
- source.sendBody(Hl7TestMessageGenerator.generateMessage());
+ source.sendBody(Hl7TestMessageGenerator.generateMessage());
- MockEndpoint.assertIsSatisfied(context, 5, TimeUnit.SECONDS);
+ MockEndpoint.assertIsSatisfied(context, 5, TimeUnit.SECONDS);
+ });
log.debug("Breakpoint");
}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerBindTimeoutTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerBindTimeoutTest.java
index 7a5519d629c..2419818a579 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerBindTimeoutTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerBindTimeoutTest.java
@@ -30,8 +30,10 @@ import org.apache.camel.test.AvailablePortFinder;
import org.apache.camel.test.junit.rule.mllp.MllpClientResource;
import org.apache.camel.test.junit5.CamelTestSupport;
import org.apache.camel.test.mllp.Hl7TestMessageGenerator;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
public class MllpTcpServerConsumerBindTimeoutTest extends CamelTestSupport {
@@ -92,8 +94,10 @@ public class MllpTcpServerConsumerBindTimeoutTest extends CamelTestSupport {
public void run() {
try {
ServerSocket tmpSocket = new ServerSocket(mllpClient.getMllpPort());
- Thread.sleep(15000);
- tmpSocket.close();
+ Awaitility.await().untilAsserted(() -> {
+ tmpSocket.close();
+ Assertions.assertTrue(tmpSocket.isClosed());
+ });
} catch (Exception ex) {
throw new RuntimeCamelException("Exception caught in dummy listener", ex);
}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerConnectionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerConnectionTest.java
index 4fc5c437b25..a4ebc6cc00f 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerConnectionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerConnectionTest.java
@@ -28,6 +28,7 @@ import org.apache.camel.test.junit.rule.mllp.MllpJUnitResourceException;
import org.apache.camel.test.junit5.CamelTestSupport;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
@@ -83,13 +84,11 @@ public class MllpTcpServerConsumerConnectionTest extends CamelTestSupport {
for (int i = 1; i <= connectionCount; ++i) {
mllpClient.connect();
- Thread.sleep(connectionMillis);
mllpClient.close();
}
// Connect one more time and allow a client thread to start
mllpClient.connect();
- Thread.sleep(1000);
mllpClient.close();
MockEndpoint.assertIsSatisfied(context, 15, TimeUnit.SECONDS);
@@ -107,13 +106,11 @@ public class MllpTcpServerConsumerConnectionTest extends CamelTestSupport {
for (int i = 1; i <= connectionCount; ++i) {
mllpClient.connect();
- Thread.sleep(connectionMillis);
mllpClient.reset();
}
// Connect one more time and allow a client thread to start
mllpClient.connect();
- Thread.sleep(1000);
mllpClient.reset();
MockEndpoint.assertIsSatisfied(context, 15, TimeUnit.SECONDS);
@@ -136,17 +133,18 @@ public class MllpTcpServerConsumerConnectionTest extends CamelTestSupport {
mllpClient.connect();
mllpClient.sendMessageAndWaitForAcknowledgement(testMessage);
- Thread.sleep(idleTimeout + RECEIVE_TIMEOUT);
-
- try {
- mllpClient.checkConnection();
- fail("The MllpClientResource should have thrown an exception when writing to the reset socket");
- } catch (MllpJUnitResourceException expectedEx) {
- assertEquals("checkConnection failed - read() returned END_OF_STREAM", expectedEx.getMessage());
- assertNull(expectedEx.getCause());
- }
- MockEndpoint.assertIsSatisfied(context, 15, TimeUnit.SECONDS);
+ Awaitility.await().untilAsserted(() -> {
+ try {
+ mllpClient.checkConnection();
+ fail("The MllpClientResource should have thrown an exception when writing to the reset socket");
+ } catch (MllpJUnitResourceException expectedEx) {
+ assertEquals("checkConnection failed - read() returned END_OF_STREAM", expectedEx.getMessage());
+ assertNull(expectedEx.getCause());
+ }
+
+ MockEndpoint.assertIsSatisfied(context, 15, TimeUnit.SECONDS);
+ });
}
void addTestRouteWithIdleTimeout(final int idleTimeout) throws Exception {
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/TcpServerConsumerEndOfDataAndValidationTestSupport.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/TcpServerConsumerEndOfDataAndValidationTestSupport.java
index e1ded8a621e..4b947ae8075 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/TcpServerConsumerEndOfDataAndValidationTestSupport.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/TcpServerConsumerEndOfDataAndValidationTestSupport.java
@@ -36,6 +36,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
import static org.apache.camel.component.mllp.MllpExceptionTestSupport.LOG_PHI_TRUE;
import static org.hamcrest.CoreMatchers.instanceOf;
@@ -138,8 +139,6 @@ public abstract class TcpServerConsumerEndOfDataAndValidationTestSupport extends
setExpectedCounts();
mllpClient.connect();
-
- Thread.sleep(5000);
mllpClient.sendMessageAndWaitForAcknowledgement(Hl7TestMessageGenerator.generateMessage(), 10000);
}
@@ -187,7 +186,6 @@ public abstract class TcpServerConsumerEndOfDataAndValidationTestSupport extends
log.info("Expected exception reading response");
}
mllpClient.disconnect();
- Thread.sleep(1000);
mllpClient.connect();
log.info("Sending TEST_MESSAGE_4");
@@ -243,20 +241,21 @@ public abstract class TcpServerConsumerEndOfDataAndValidationTestSupport extends
log.info("Sending first message");
mllpClient.sendFramedData(Hl7TestMessageGenerator.generateMessage(10001));
- Thread.sleep(RECEIVE_TIMEOUT * 5);
-
- mllpClient.setSendEndOfBlock(true);
- mllpClient.setSendEndOfData(true);
+ Awaitility.await().pollDelay(RECEIVE_TIMEOUT * 5, TimeUnit.MILLISECONDS).untilAsserted(() -> {
+ mllpClient.setSendEndOfBlock(true);
+ mllpClient.setSendEndOfData(true);
- try {
- log.info("Attempting to send second message");
- String acknowledgement
- = mllpClient.sendMessageAndWaitForAcknowledgement(Hl7TestMessageGenerator.generateMessage(10002));
- assertEquals("", acknowledgement, "If the send doesn't throw an exception, the acknowledgement should be empty");
- } catch (MllpJUnitResourceException expected) {
- assertThat("If the send throws an exception, the cause should be a SocketException", expected.getCause(),
- instanceOf(SocketException.class));
- }
+ try {
+ log.info("Attempting to send second message");
+ String acknowledgement
+ = mllpClient.sendMessageAndWaitForAcknowledgement(Hl7TestMessageGenerator.generateMessage(10002));
+ assertEquals("", acknowledgement,
+ "If the send doesn't throw an exception, the acknowledgement should be empty");
+ } catch (MllpJUnitResourceException expected) {
+ assertThat("If the send throws an exception, the cause should be a SocketException", expected.getCause(),
+ instanceOf(SocketException.class));
+ }
+ });
mllpClient.disconnect();
mllpClient.connect();
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/test/executor/PooledExecutorTest.java b/components/camel-mllp/src/test/java/org/apache/camel/test/executor/PooledExecutorTest.java
index 40c9898d69e..8ecf7344e53 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/test/executor/PooledExecutorTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/test/executor/PooledExecutorTest.java
@@ -52,15 +52,12 @@ public class PooledExecutorTest {
log.info("Starting first set of runnables");
startRunnables(runnableCount, runCount);
- Thread.sleep(THREAD_COUNT * TestRunnable.SLEEP_MILLIS);
-
log.info("Starting second set of runnables");
startRunnables(runnableCount, runCount);
}
- void startRunnables(int runnableCount, int runCount) throws InterruptedException {
+ void startRunnables(int runnableCount, int runCount) {
for (int id = 1; id <= runnableCount; ++id) {
- Thread.sleep(TestRunnable.SLEEP_MILLIS / 2);
try {
instance.addRunnable(new TestRunnable(id, runCount));
} catch (RejectedExecutionException rejectedEx) {
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/test/tcp/JavaSocketManualTests.java b/components/camel-mllp/src/test/java/org/apache/camel/test/tcp/JavaSocketManualTests.java
index 16a8c0c0175..30b8623f0c1 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/test/tcp/JavaSocketManualTests.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/test/tcp/JavaSocketManualTests.java
@@ -31,7 +31,9 @@ import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
/**
@@ -283,15 +285,18 @@ public class JavaSocketManualTests {
log.info("Client Socket read() timed-out before close");
}
clientSocket.getOutputStream().write(27);
- Thread.sleep(1000);
- log.info("Client Socket available() returned {} after close", clientSocket.getInputStream().available());
- log.info("Client Socket read() returned {} after close", clientSocket.getInputStream().read());
- // Javadoc for Socket says closing the InputStream will close the connection
- clientSocket.getInputStream().close();
- if (!clientSocket.isClosed()) {
- log.warn("Closing input stream didn't close socket");
- clientSocket.close();
- }
+ Awaitility.await().untilAsserted(() -> {
+ log.info("Client Socket available() returned {} after close", clientSocket.getInputStream().available());
+ log.info("Client Socket read() returned {} after close", clientSocket.getInputStream().read());
+ // Javadoc for Socket says closing the InputStream will close the connection
+ clientSocket.getInputStream().close();
+ if (!clientSocket.isClosed()) {
+ log.warn("Closing input stream didn't close socket");
+ clientSocket.close();
+ }
+ assertTrue(clientSocket.isClosed());
+ });
+
log.info("Sleeping ...");
Thread.sleep(5000);