This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 60bd8b2d67bf CAMEL-19542: Fix flaky camel-sjms surefire tests
60bd8b2d67bf is described below
commit 60bd8b2d67bfe6dd02a02c55fce9117caca5a6b0
Author: Guillaume Nodet <[email protected]>
AuthorDate: Thu Jul 2 23:55:44 2026 +0200
CAMEL-19542: Fix flaky camel-sjms surefire tests
Replace Thread.sleep waits in test methods with explicit assertion timeouts
to prevent intermittent CI failures under load.
- Remove Thread.sleep(3000) from InOutConsumerTopicTest and
InOnlyConsumerAsyncFalseTest test methods
- Add explicit 20-second timeout to MockEndpoint.assertIsSatisfied() in 8
consumer tests with deliberate processing delays
- Replace immediate queue-count assertions with Awaitility await() in
QueueProducerQoSTest for broker expiry race condition
---
.../sjms/consumer/InOnlyConsumerAsyncFalseTest.java | 6 +++---
.../component/sjms/consumer/InOnlyConsumerTopicTest.java | 4 +++-
.../sjms/consumer/InOutConcurrentConsumerTest.java | 3 ++-
.../sjms/consumer/InOutConsumerQueueAsyncTest.java | 4 +++-
.../component/sjms/consumer/InOutConsumerQueueTest.java | 4 +++-
.../sjms/consumer/InOutConsumerTempQueueAsyncTest.java | 4 +++-
.../sjms/consumer/InOutConsumerTempQueueTest.java | 4 +++-
.../component/sjms/consumer/InOutConsumerTopicTest.java | 5 +++--
.../component/sjms/producer/QueueProducerQoSTest.java | 15 +++++++++++----
9 files changed, 34 insertions(+), 15 deletions(-)
diff --git
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerAsyncFalseTest.java
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerAsyncFalseTest.java
index 8bd983666be0..76fc56e453b5 100644
---
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerAsyncFalseTest.java
+++
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerAsyncFalseTest.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.component.sjms.consumer;
+import java.util.concurrent.TimeUnit;
+
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
@@ -46,9 +48,7 @@ public class InOnlyConsumerAsyncFalseTest extends
JmsTestSupport {
// the reason is that the first message is processed asynchronously
// and it takes 2 sec to complete, so in between we have time to
// process the 2nd message on the queue
- Thread.sleep(3000);
-
- MockEndpoint.assertIsSatisfied(context);
+ MockEndpoint.assertIsSatisfied(context, 20, TimeUnit.SECONDS);
assertEquals(beforeThreadName, afterThreadName);
}
diff --git
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerTopicTest.java
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerTopicTest.java
index 208668d05bf6..8b500acc25c8 100644
---
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerTopicTest.java
+++
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerTopicTest.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.component.sjms.consumer;
+import java.util.concurrent.TimeUnit;
+
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
@@ -35,7 +37,7 @@ public class InOnlyConsumerTopicTest extends JmsTestSupport {
getMockEndpoint("mock:result").expectedBodiesReceived("Hello Camel",
"Hello World");
template.sendBody("sjms:topic:in.only.InOnlyConsumerTopicTest.topic",
"Hello Camel");
template.sendBody("sjms:topic:in.only.InOnlyConsumerTopicTest.topic",
"Hello World");
- MockEndpoint.assertIsSatisfied(context);
+ MockEndpoint.assertIsSatisfied(context, 20, TimeUnit.SECONDS);
}
@Override
diff --git
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConcurrentConsumerTest.java
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConcurrentConsumerTest.java
index 69b4ec6c78d5..d485f9d4bec1 100644
---
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConcurrentConsumerTest.java
+++
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConcurrentConsumerTest.java
@@ -21,6 +21,7 @@ import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
import org.apache.camel.CamelContext;
import org.apache.camel.EndpointInject;
@@ -58,7 +59,7 @@ public class InOutConcurrentConsumerTest extends
JmsTestSupport {
futures.add(out);
}
- MockEndpoint.assertIsSatisfied(context);
+ MockEndpoint.assertIsSatisfied(context, 20, TimeUnit.SECONDS);
for (int i = 0; i < futures.size(); i++) {
Object out = futures.get(i).get();
diff --git
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerQueueAsyncTest.java
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerQueueAsyncTest.java
index 5aeb3b9898fb..e70e042be868 100644
---
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerQueueAsyncTest.java
+++
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerQueueAsyncTest.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.component.sjms.consumer;
+import java.util.concurrent.TimeUnit;
+
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
@@ -40,7 +42,7 @@ public class InOutConsumerQueueAsyncTest extends
JmsCommonTestSupport {
template.sendBody("sjms:start.queue.InOutConsumerQueueAsyncTest",
"Hello Camel");
template.sendBody("sjms:start.queue.InOutConsumerQueueAsyncTest",
"Hello World");
- MockEndpoint.assertIsSatisfied(context);
+ MockEndpoint.assertIsSatisfied(context, 20, TimeUnit.SECONDS);
}
@Override
diff --git
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerQueueTest.java
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerQueueTest.java
index afe0300e3e57..1f1fd15ce5e4 100644
---
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerQueueTest.java
+++
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerQueueTest.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.component.sjms.consumer;
+import java.util.concurrent.TimeUnit;
+
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
@@ -32,7 +34,7 @@ public class InOutConsumerQueueTest extends JmsTestSupport {
template.sendBody("sjms:start.queue.InOutConsumerQueueTest", "Hello
Camel");
template.sendBody("sjms:start.queue.InOutConsumerQueueTest", "Hello
World");
- MockEndpoint.assertIsSatisfied(context);
+ MockEndpoint.assertIsSatisfied(context, 20, TimeUnit.SECONDS);
}
@Override
diff --git
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerTempQueueAsyncTest.java
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerTempQueueAsyncTest.java
index e3b366196d6d..3c85950f8d8e 100644
---
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerTempQueueAsyncTest.java
+++
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerTempQueueAsyncTest.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.component.sjms.consumer;
+import java.util.concurrent.TimeUnit;
+
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.Processor;
@@ -33,7 +35,7 @@ public class InOutConsumerTempQueueAsyncTest extends
JmsTestSupport {
template.sendBody("sjms:start.queue.InOutConsumerTempQueueAsyncTest",
"Hello Camel");
template.sendBody("sjms:start.queue.InOutConsumerTempQueueAsyncTest",
"Hello World");
- MockEndpoint.assertIsSatisfied(context);
+ MockEndpoint.assertIsSatisfied(context, 20, TimeUnit.SECONDS);
}
@Override
diff --git
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerTempQueueTest.java
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerTempQueueTest.java
index a380d0947787..f31528fd98cb 100644
---
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerTempQueueTest.java
+++
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerTempQueueTest.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.component.sjms.consumer;
+import java.util.concurrent.TimeUnit;
+
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
@@ -31,7 +33,7 @@ public class InOutConsumerTempQueueTest extends
JmsTestSupport {
template.sendBody("sjms:start.queue.InOutConsumerTempQueueTest",
"Hello Camel");
template.sendBody("sjms:start.queue.InOutConsumerTempQueueTest",
"Hello World");
- MockEndpoint.assertIsSatisfied(context);
+ MockEndpoint.assertIsSatisfied(context, 20, TimeUnit.SECONDS);
}
@Override
diff --git
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerTopicTest.java
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerTopicTest.java
index d9ac19cb5a95..fa504ba517b5 100644
---
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerTopicTest.java
+++
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerTopicTest.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.component.sjms.consumer;
+import java.util.concurrent.TimeUnit;
+
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
@@ -35,8 +37,7 @@ public class InOutConsumerTopicTest extends JmsTestSupport {
getMockEndpoint("mock:result").expectedBodiesReceived("Hello Camel",
"Hello World");
template.sendBody("sjms:topic:start.topic.InOutConsumerTopicTest",
"Hello Camel");
template.sendBody("sjms:topic:start.topic.InOutConsumerTopicTest",
"Hello World");
- Thread.sleep(3000);
- MockEndpoint.assertIsSatisfied(context);
+ MockEndpoint.assertIsSatisfied(context, 20, TimeUnit.SECONDS);
}
@Override
diff --git
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/QueueProducerQoSTest.java
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/QueueProducerQoSTest.java
index 300e3ba0f572..60cd121dfcb7 100644
---
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/QueueProducerQoSTest.java
+++
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/QueueProducerQoSTest.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.component.sjms.producer;
+import java.util.concurrent.TimeUnit;
+
import jakarta.jms.Connection;
import jakarta.jms.Session;
@@ -35,6 +37,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.api.parallel.Isolated;
+import static org.awaitility.Awaitility.await;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -93,8 +96,10 @@ public class QueueProducerQoSTest extends CamelTestSupport {
mockExpiredAdvisory.assertIsSatisfied(10_000);
- assertEquals(0, service.countMessages(TEST_INOUT_DESTINATION_NAME),
- "There were unexpected messages left in the queue: " +
TEST_INOUT_DESTINATION_NAME);
+ // The broker may need a moment to finish removing the expired message
from the original queue
+ await().atMost(10, TimeUnit.SECONDS).untilAsserted(
+ () -> assertEquals(0,
service.countMessages(TEST_INOUT_DESTINATION_NAME),
+ "There were unexpected messages left in the queue: " +
TEST_INOUT_DESTINATION_NAME));
}
@Test
@@ -106,8 +111,10 @@ public class QueueProducerQoSTest extends CamelTestSupport
{
mockExpiredAdvisory.assertIsSatisfied(10_000);
- assertEquals(0, service.countMessages(TEST_INONLY_DESTINATION_NAME),
- "There were unexpected messages left in the queue: " +
TEST_INONLY_DESTINATION_NAME);
+ // The broker may need a moment to finish removing the expired message
from the original queue
+ await().atMost(10, TimeUnit.SECONDS).untilAsserted(
+ () -> assertEquals(0,
service.countMessages(TEST_INONLY_DESTINATION_NAME),
+ "There were unexpected messages left in the queue: " +
TEST_INONLY_DESTINATION_NAME));
}
private static Configuration configureArtemis(Configuration configuration)
{