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 af2f28e0f847 CAMEL-24005: Fix flaky 
JmsTransactedDeadLetterChannel*RollbackOnExceptionIT (#24611)
af2f28e0f847 is described below

commit af2f28e0f8479e3d37aaa1cbca4b0e308ade02a2
Author: Guillaume Nodet <[email protected]>
AuthorDate: Sun Jul 12 08:34:02 2026 +0200

    CAMEL-24005: Fix flaky JmsTransactedDeadLetterChannel*RollbackOnExceptionIT 
(#24611)
    
    CAMEL-24005: Fix flaky JmsTransactedDeadLetterChannel*RollbackOnExceptionIT
    
    Co-authored-by: Claude Opus 4.6 <[email protected]>
---
 ...nsactedDeadLetterChannelHandlerRollbackOnExceptionIT.java | 12 +++++++++++-
 ...ctedDeadLetterChannelNotHandlerRollbackOnExceptionIT.java | 12 +++++++++++-
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/tx/JmsTransactedDeadLetterChannelHandlerRollbackOnExceptionIT.java
 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/tx/JmsTransactedDeadLetterChannelHandlerRollbackOnExceptionIT.java
index ee99afecb2a8..362b17e04628 100644
--- 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/tx/JmsTransactedDeadLetterChannelHandlerRollbackOnExceptionIT.java
+++ 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/tx/JmsTransactedDeadLetterChannelHandlerRollbackOnExceptionIT.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.jms.integration.tx;
 
+import java.util.concurrent.TimeUnit;
+
 import jakarta.jms.ConnectionFactory;
 
 import org.apache.activemq.artemis.api.core.SimpleString;
@@ -23,6 +25,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Handler;
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.builder.NotifyBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.test.infra.artemis.common.ConnectionFactoryHelper;
@@ -36,6 +39,7 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static 
org.apache.camel.component.jms.JmsComponent.jmsComponentTransacted;
 import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 @Tags({ @Tag("not-parallel"), @Tag("transaction") })
 public class JmsTransactedDeadLetterChannelHandlerRollbackOnExceptionIT 
extends CamelTestSupport {
@@ -86,11 +90,17 @@ public class 
JmsTransactedDeadLetterChannelHandlerRollbackOnExceptionIT extends
 
     @Test
     public void shouldNotLoseMessagesOnExceptionInErrorHandler() {
+        // wait for the exchange to be fully done (processed + transaction 
committed/rolled back)
+        // before checking the DLQ, to avoid a race between route processing 
and the assertion
+        NotifyBuilder notify = new NotifyBuilder(context).whenDone(1).create();
+
         template.sendBody(testingEndpoint, "Hello World");
 
+        assertTrue(notify.matches(30, TimeUnit.SECONDS), "Exchange should be 
done");
+
         // as we handle new exception, then the exception is ignored
         // and causes the transaction to commit, so there is no message in the 
DLQ queue
-        Object dlqBody = consumer.receiveBody("activemq:" + DLQ_NAME, 10000);
+        Object dlqBody = consumer.receiveBody("activemq:" + DLQ_NAME, 2000);
         assertNull(dlqBody, "Should not rollback the transaction");
     }
 
diff --git 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/tx/JmsTransactedDeadLetterChannelNotHandlerRollbackOnExceptionIT.java
 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/tx/JmsTransactedDeadLetterChannelNotHandlerRollbackOnExceptionIT.java
index e48d5b895534..9124193b5f06 100644
--- 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/tx/JmsTransactedDeadLetterChannelNotHandlerRollbackOnExceptionIT.java
+++ 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/tx/JmsTransactedDeadLetterChannelNotHandlerRollbackOnExceptionIT.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.jms.integration.tx;
 
+import java.util.concurrent.TimeUnit;
+
 import jakarta.jms.ConnectionFactory;
 
 import org.apache.activemq.artemis.api.core.QueueConfiguration;
@@ -25,6 +27,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Handler;
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.builder.NotifyBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.test.infra.artemis.common.ConnectionFactoryHelper;
@@ -38,6 +41,7 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static 
org.apache.camel.component.jms.JmsComponent.jmsComponentTransacted;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 @Tags({ @Tag("not-parallel"), @Tag("transaction") })
 public class JmsTransactedDeadLetterChannelNotHandlerRollbackOnExceptionIT 
extends CamelTestSupport {
@@ -91,11 +95,17 @@ public class 
JmsTransactedDeadLetterChannelNotHandlerRollbackOnExceptionIT exten
 
     @Test
     public void shouldNotLoseMessagesOnExceptionInErrorHandler() {
+        // wait for the exchange to be fully done (processed + transaction 
rolled back)
+        // before checking the DLQ, to avoid a race between route processing 
and the assertion
+        NotifyBuilder notify = new NotifyBuilder(context).whenDone(1).create();
+
         template.sendBody(testingEndpoint, "Hello World");
 
+        assertTrue(notify.matches(30, TimeUnit.SECONDS), "Exchange should be 
done");
+
         // as we do not handle new exception, then the exception propagates 
back
         // and causes the transaction to rollback, and we can find the message 
in the DLQ
-        Object dlqBody = consumer.receiveBody("activemq:" + DLQ_NAME, 30000);
+        Object dlqBody = consumer.receiveBody("activemq:" + DLQ_NAME, 10000);
         assertEquals("Hello World", dlqBody);
     }
 

Reply via email to