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 906eeb62a19362061af0840b8c82f8f3564f7534 Author: Otavio Rodolfo Piske <[email protected]> AuthorDate: Thu Aug 25 09:45:20 2022 +0200 (chores) camel-jms: test stability cleanups - Isolate a few tests - Adjust timeouts - Use unique resources - Remove duplicated code - Move some logic to the setup methods - Cleanup resources - Avoid blocking for too long - Make a flaky test non-parallel - Other minor cleanups --- .../jms/ActiveMQOriginalDestinationTest.java | 2 +- .../component/jms/JmsAsyncStartListenerTest.java | 2 +- .../jms/JmsBatchResequencerJMSPriorityTest.java | 20 ++++++--- ...msDeadLetterQueueUsingTransferExchangeTest.java | 4 +- .../jms/JmsDefaultTaskExecutorTypeTest.java | 39 +++++++++--------- .../JmsMessageCreatedStrategyComponentTest.java | 2 +- .../jms/JmsMessageCreatedStrategyEndpointTest.java | 2 +- .../jms/JmsMessageIDNotOverridenAMQTest.java | 2 +- .../component/jms/JmsPollingConsumerTest.java | 21 +++++----- .../jms/JmsProducerConcurrentWithReplyTest.java | 15 +++++-- ...RequestReplyExclusiveReplyToConcurrentTest.java | 16 ++++++-- .../component/jms/JmsRouteUsingJMSXGroupTest.java | 37 ++++++++++++++--- .../camel/component/jms/JmsSelectorInTest.java | 2 + ...BodyNullErrorHandlerUseOriginalMessageTest.java | 6 ++- .../jms/JmsSimpleRequestLateReplyTest.java | 2 +- .../JmsStreamMessageTypeNoStreamCachingTest.java | 48 ++++++++-------------- .../component/jms/JmsStreamMessageTypeTest.java | 5 +-- .../component/jms/JmsTransferExchangeTest.java | 12 +++--- .../component/jms/ProduceMessageConverterTest.java | 4 +- .../issues/JmsBlockedAsyncRoutingEngineTest.java | 2 +- .../jms/issues/JmsCustomJMSReplyToIssueTest.java | 2 +- .../component/jms/issues/JmsInOnlyIssueTest.java | 4 +- .../issues/JmsInOutPersistentReplyQueueTest.java | 4 ++ .../jms/issues/JmsToFileMessageIdTest.java | 4 +- ...TransactionErrorHandlerRedeliveryDelayTest.java | 12 ++++-- ...tionErrorHandlerRedeliveryDelayTest-context.xml | 2 +- 26 files changed, 162 insertions(+), 109 deletions(-) diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/ActiveMQOriginalDestinationTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/ActiveMQOriginalDestinationTest.java index 6f3d3d403e1..bc72c2fc061 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/ActiveMQOriginalDestinationTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/ActiveMQOriginalDestinationTest.java @@ -92,7 +92,7 @@ public class ActiveMQOriginalDestinationTest extends AbstractJMSTest { * <p/> * This implementation uses ActiveMQ specific code which can be moved to activemq-camel when it supports Camel 2.16 */ - private class OriginalDestinationPropagateStrategy implements MessageCreatedStrategy { + private static class OriginalDestinationPropagateStrategy implements MessageCreatedStrategy { // TODO: This is supported out of the box from ActiveMQ 5.14 onwards, and hence remove OriginalDestinationPropagateStrategy diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStartListenerTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStartListenerTest.java index 2063e9f79b9..7d5b5da0180 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStartListenerTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStartListenerTest.java @@ -41,7 +41,7 @@ public class JmsAsyncStartListenerTest extends AbstractPersistentJMSTest { result.expectedMessageCount(2); template.sendBody("activemq:queue:JmsAsyncStartListenerTest", "Hello World"); - template.sendBody("activemq:queue:JmsAsyncStartListenerTest", "Gooday World"); + template.sendBody("activemq:queue:JmsAsyncStartListenerTest", "Goodbye World"); result.assertIsSatisfied(); } diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java index 1b277584a24..ef02ebb03aa 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java @@ -16,20 +16,22 @@ */ package org.apache.camel.component.jms; +import java.util.concurrent.TimeUnit; + import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.parallel.Isolated; /** * JMSPriority being ordered using the resequencer in batch mode. */ +@Isolated public class JmsBatchResequencerJMSPriorityTest extends AbstractJMSTest { - @Test - public void testBatchResequencerJMSPriority() throws Exception { - MockEndpoint mock = getMockEndpoint("mock:result"); - mock.expectedBodiesReceived("G", "A", "B", "E", "H", "C", "D", "F"); - + @BeforeEach + void sendMessages() { // must use preserveMessageQos=true to be able to specify the JMSPriority to be used template.sendBodyAndHeader("jms:queue:JmsBatchResequencerJMSPriorityTest?preserveMessageQos=true", "A", "JMSPriority", 6); @@ -47,8 +49,14 @@ public class JmsBatchResequencerJMSPriorityTest extends AbstractJMSTest { 8); template.sendBodyAndHeader("jms:queue:JmsBatchResequencerJMSPriorityTest?preserveMessageQos=true", "H", "JMSPriority", 6); + } + + @Test + public void testBatchResequencerJMSPriority() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedBodiesReceived("G", "A", "B", "E", "H", "C", "D", "F"); - assertMockEndpointsSatisfied(); + assertMockEndpointsSatisfied(5, TimeUnit.SECONDS); } @Override diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterQueueUsingTransferExchangeTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterQueueUsingTransferExchangeTest.java index c685bf7e4e3..58cf7a9e9be 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterQueueUsingTransferExchangeTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterQueueUsingTransferExchangeTest.java @@ -41,7 +41,7 @@ public class JmsDeadLetterQueueUsingTransferExchangeTest extends AbstractJMSTest @Test public void testKabom() throws Exception { - MockEndpoint mock = getMockEndpoint("mock:dead"); + MockEndpoint mock = getMockEndpoint("mock:JmsDeadLetterQueueUsingTransferExchangeTest.dead"); mock.expectedBodiesReceived("Kabom"); template.sendBody("direct:start", "Kabom"); @@ -68,7 +68,7 @@ public class JmsDeadLetterQueueUsingTransferExchangeTest extends AbstractJMSTest } }).to("mock:result"); - from(getUri()).to("mock:dead"); + from(getUri()).to("mock:JmsDeadLetterQueueUsingTransferExchangeTest.dead"); } }; } diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDefaultTaskExecutorTypeTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDefaultTaskExecutorTypeTest.java index 22d92e0e677..ffe2e710c92 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDefaultTaskExecutorTypeTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDefaultTaskExecutorTypeTest.java @@ -50,6 +50,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue; @Tags({ @Tag("not-parallel"), @Tag("slow") }) @Timeout(60) public class JmsDefaultTaskExecutorTypeTest extends CamelTestSupport { + public static final int MESSAGE_COUNT = 500; + public static final int POOL_SIZE = 5; + private static final Logger LOG = LoggerFactory.getLogger(JmsDefaultTaskExecutorTypeTest.class); @RegisterExtension @@ -60,8 +63,8 @@ public class JmsDefaultTaskExecutorTypeTest extends CamelTestSupport { context.getRouteController().startRoute("threadPool"); Long beforeThreadCount = currentThreadCount(); getMockEndpoint("mock:result.threadPool").expectedMessageCount(1000); - doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.threadPool", 500, 5, DefaultTaskExecutorType.ThreadPool); - doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.threadPool", 500, 5, DefaultTaskExecutorType.ThreadPool); + doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.threadPool", DefaultTaskExecutorType.ThreadPool); + doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.threadPool", DefaultTaskExecutorType.ThreadPool); assertMockEndpointsSatisfied(); Long numberThreadsCreated = currentThreadCount() - beforeThreadCount; LOG.info("Number of threads created, testThreadPoolTaskExecutor: {}", numberThreadsCreated); @@ -74,9 +77,9 @@ public class JmsDefaultTaskExecutorTypeTest extends CamelTestSupport { context.getRouteController().startRoute("simpleAsync"); Long beforeThreadCount = currentThreadCount(); getMockEndpoint("mock:result.simpleAsync").expectedMessageCount(1000); - doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.simpleAsync", 500, 5, DefaultTaskExecutorType.SimpleAsync); - doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.simpleAsync", 500, 5, DefaultTaskExecutorType.SimpleAsync); - assertMockEndpointsSatisfied(); + doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.simpleAsync", DefaultTaskExecutorType.SimpleAsync); + doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.simpleAsync", DefaultTaskExecutorType.SimpleAsync); + assertMockEndpointsSatisfied(40, TimeUnit.SECONDS); Long numberThreadsCreated = currentThreadCount() - beforeThreadCount; LOG.info("Number of threads created, testSimpleAsyncTaskExecutor: " + numberThreadsCreated); assertTrue(numberThreadsCreated >= 800, "Number of threads created should be equal or higher than " @@ -88,8 +91,8 @@ public class JmsDefaultTaskExecutorTypeTest extends CamelTestSupport { context.getRouteController().startRoute("default"); Long beforeThreadCount = currentThreadCount(); getMockEndpoint("mock:result.default").expectedMessageCount(1000); - doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.default", 500, 5, null); - doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.default", 500, 5, null); + doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.default", null); + doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.default", null); assertMockEndpointsSatisfied(); Long numberThreadsCreated = currentThreadCount() - beforeThreadCount; LOG.info("Number of threads created, testDefaultTaskExecutor: {}", numberThreadsCreated); @@ -106,9 +109,9 @@ public class JmsDefaultTaskExecutorTypeTest extends CamelTestSupport { context.getRouteController().startRoute("default"); Long beforeThreadCount = currentThreadCount(); getMockEndpoint("mock:result.default").expectedMessageCount(1000); - doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.default", 500, 5, DefaultTaskExecutorType.ThreadPool); - doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.default", 500, 5, DefaultTaskExecutorType.ThreadPool); - assertMockEndpointsSatisfied(); + doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.default", DefaultTaskExecutorType.ThreadPool); + doSendMessages("foo.JmsDefaultTaskExecutorTypeTest.default", DefaultTaskExecutorType.ThreadPool); + assertMockEndpointsSatisfied(40, TimeUnit.SECONDS); Long numberThreadsCreated = currentThreadCount() - beforeThreadCount; LOG.info("Number of threads created, testDefaultTaskExecutorThreadPoolAtComponentConfig: " + numberThreadsCreated); assertTrue(numberThreadsCreated <= 100, "Number of threads created should be equal or lower than " @@ -120,8 +123,7 @@ public class JmsDefaultTaskExecutorTypeTest extends CamelTestSupport { IllegalAccessException, InvocationTargetException { Method m = ThreadHelper.class.getDeclaredMethod("nextThreadCounter", (Class<?>[]) null); m.setAccessible(true); - Long nextThreadCount = (Long) m.invoke(null); - return nextThreadCount; + return (Long) m.invoke(null); } @Override @@ -152,22 +154,21 @@ public class JmsDefaultTaskExecutorTypeTest extends CamelTestSupport { return null; }); } - } private void doSendMessages( - final String queueName, int messages, int poolSize, + final String queueName, final DefaultTaskExecutorType defaultTaskExecutorType) throws Exception { - ExecutorService executor = Executors.newFixedThreadPool(poolSize); - final CountDownLatch latch = new CountDownLatch(messages); + final ExecutorService executor = Executors.newFixedThreadPool(POOL_SIZE); + final CountDownLatch latch = new CountDownLatch(MESSAGE_COUNT); try { - doSendMessages(queueName, messages, defaultTaskExecutorType, latch, executor); + doSendMessages(queueName, MESSAGE_COUNT, defaultTaskExecutorType, latch, executor); executor.shutdown(); - executor.awaitTermination(5, TimeUnit.SECONDS); + executor.awaitTermination(POOL_SIZE, TimeUnit.SECONDS); } finally { - latch.await(5, TimeUnit.SECONDS); + latch.await(POOL_SIZE, TimeUnit.SECONDS); } } diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageCreatedStrategyComponentTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageCreatedStrategyComponentTest.java index 9d66e15ec69..70617504cf3 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageCreatedStrategyComponentTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageCreatedStrategyComponentTest.java @@ -65,7 +65,7 @@ public class JmsMessageCreatedStrategyComponentTest extends AbstractJMSTest { }; } - private class MyMessageCreatedStrategy implements MessageCreatedStrategy { + private static class MyMessageCreatedStrategy implements MessageCreatedStrategy { @Override public void onMessageCreated(Message message, Session session, Exchange exchange, Throwable cause) { diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageCreatedStrategyEndpointTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageCreatedStrategyEndpointTest.java index 8ad2695653b..c9cc2c2cfd6 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageCreatedStrategyEndpointTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageCreatedStrategyEndpointTest.java @@ -62,7 +62,7 @@ public class JmsMessageCreatedStrategyEndpointTest extends AbstractJMSTest { }; } - private class MyMessageCreatedStrategy implements MessageCreatedStrategy { + private static class MyMessageCreatedStrategy implements MessageCreatedStrategy { @Override public void onMessageCreated(Message message, Session session, Exchange exchange, Throwable cause) { diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageIDNotOverridenAMQTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageIDNotOverridenAMQTest.java index 898f88eb275..b096a6139f5 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageIDNotOverridenAMQTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageIDNotOverridenAMQTest.java @@ -79,7 +79,7 @@ public class JmsMessageIDNotOverridenAMQTest extends AbstractJMSTest { }; } - private class MyMessageCreatedStrategy implements MessageCreatedStrategy { + private static class MyMessageCreatedStrategy implements MessageCreatedStrategy { @Override public void onMessageCreated(Message message, Session session, Exchange exchange, Throwable cause) { diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsPollingConsumerTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsPollingConsumerTest.java index b876d8e0264..18f29387fde 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsPollingConsumerTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsPollingConsumerTest.java @@ -26,17 +26,19 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.parallel.Isolated; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; +@Isolated public class JmsPollingConsumerTest extends AbstractJMSTest { @Nested class ConsumerWaitTest { - private CountDownLatch latch = new CountDownLatch(1); + private final CountDownLatch latch = new CountDownLatch(1); @BeforeEach void setupConsumer() { @@ -68,7 +70,7 @@ public class JmsPollingConsumerTest extends AbstractJMSTest { @Nested class ConsumerNoWaitTest { - private CountDownLatch latch = new CountDownLatch(1); + private final CountDownLatch latch = new CountDownLatch(1); private volatile String body; @BeforeEach @@ -90,8 +92,7 @@ public class JmsPollingConsumerTest extends AbstractJMSTest { MockEndpoint mock = getMockEndpoint("mock:result"); mock.expectedBodiesReceived("Hello Claus"); - // wait a little to demonstrate we can start poll before we have a msg on the queue - assertTrue(latch.await(500, TimeUnit.MILLISECONDS)); + assertTrue(latch.await(1, TimeUnit.SECONDS)); assertNull(body, "Message body should be null because there was no message and the polling consumer is 'no wait'"); template.sendBody("direct:start", "Hello"); @@ -102,7 +103,7 @@ public class JmsPollingConsumerTest extends AbstractJMSTest { @Nested class LowTimeoutTest { - private CountDownLatch latch = new CountDownLatch(1); + private final CountDownLatch latch = new CountDownLatch(1); private volatile String body; @BeforeEach @@ -132,12 +133,10 @@ public class JmsPollingConsumerTest extends AbstractJMSTest { @Nested class HighTimeOutTest { - private CountDownLatch latch = new CountDownLatch(1); + private final CountDownLatch latch = new CountDownLatch(1); @BeforeEach void setupConsumer() { - // use another thread for polling consumer to demonstrate that we can wait before - // the message is sent to the queue Executors.newSingleThreadExecutor().execute(() -> { String body = consumer.receiveBody("activemq:queue.JmsPollingConsumerTest.start", 3000, String.class); template.sendBody("activemq:queue.JmsPollingConsumerTest.foo", body + " Claus"); @@ -150,10 +149,12 @@ public class JmsPollingConsumerTest extends AbstractJMSTest { MockEndpoint mock = getMockEndpoint("mock:result"); mock.expectedBodiesReceived("Hello Claus"); - // wait a little to demonstrate we can start poll before we have a msg on the queue assertFalse(latch.await(500, TimeUnit.MILLISECONDS), - "No message should have been received within 500 milliseconds"); + "No message should have been received within 500 milliseconds because the test has not sent any"); + template.sendBody("direct:start", "Hello"); + assertTrue(latch.await(5, TimeUnit.SECONDS), + "A message should have been received but it was not"); assertMockEndpointsSatisfied(); } diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerConcurrentWithReplyTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerConcurrentWithReplyTest.java index a41fd8a91bc..021500e3aec 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerConcurrentWithReplyTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerConcurrentWithReplyTest.java @@ -21,8 +21,10 @@ 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.builder.RouteBuilder; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.Timeout; @@ -34,6 +36,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @TestInstance(TestInstance.Lifecycle.PER_METHOD) public class JmsProducerConcurrentWithReplyTest extends AbstractJMSTest { + private ExecutorService executor; + + @AfterEach + void cleanupExecutor() { + executor.shutdownNow(); + } + @Test public void testNoConcurrentProducers() throws Exception { doSendMessages(1, 1); @@ -48,7 +57,7 @@ public class JmsProducerConcurrentWithReplyTest extends AbstractJMSTest { getMockEndpoint("mock:result").expectedMessageCount(files); getMockEndpoint("mock:result").expectsNoDuplicates(body()); - ExecutorService executor = Executors.newFixedThreadPool(poolSize); + executor = Executors.newFixedThreadPool(poolSize); final List<Future<String>> futures = new ArrayList<>(); for (int i = 0; i < files; i++) { final int index = i; @@ -59,10 +68,10 @@ public class JmsProducerConcurrentWithReplyTest extends AbstractJMSTest { assertMockEndpointsSatisfied(); for (int i = 0; i < futures.size(); i++) { - Object out = futures.get(i).get(); + Object out = futures.get(i).get(5, TimeUnit.SECONDS); assertEquals("Bye Message " + i, out); } - executor.shutdownNow(); + } @Override diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToConcurrentTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToConcurrentTest.java index cd117506ad8..75241cb066f 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToConcurrentTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToConcurrentTest.java @@ -26,6 +26,7 @@ import org.apache.camel.util.StopWatch; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.parallel.Isolated; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,6 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; +@Isolated public class JmsRequestReplyExclusiveReplyToConcurrentTest extends AbstractJMSTest { private static final Logger LOG = LoggerFactory.getLogger(JmsRequestReplyExclusiveReplyToConcurrentTest.class); @@ -47,10 +49,16 @@ public class JmsRequestReplyExclusiveReplyToConcurrentTest extends AbstractJMSTe } @AfterEach - void cleanupExecutor() throws InterruptedException { - // just sleep a bit before shutting down - Thread.sleep(1000); - executor.shutdownNow(); + void cleanupExecutor() { + executor.shutdown(); + try { + final boolean finished = executor.awaitTermination(1, TimeUnit.SECONDS); + if (!finished) { + LOG.debug("Executor tasks did not terminate within the timeout (shutdown will be forced)"); + } + } catch (InterruptedException e) { + executor.shutdownNow(); + } } @Test diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingJMSXGroupTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingJMSXGroupTest.java index a20994885f6..4f48cfa0895 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingJMSXGroupTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingJMSXGroupTest.java @@ -18,30 +18,40 @@ package org.apache.camel.component.jms; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import org.apache.camel.builder.RouteBuilder; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import static org.apache.camel.component.jms.JmsConstants.JMS_X_GROUP_ID; import static org.apache.camel.test.junit5.TestSupport.body; +@Timeout(20) public class JmsRouteUsingJMSXGroupTest extends AbstractJMSTest { + public static final int POOL_SIZE = 1; + private static final Logger LOG = LoggerFactory.getLogger(JmsRouteUsingJMSXGroupTest.class); + + private ExecutorService executor; @Test public void testNoConcurrentProducersJMSXGroupID() throws Exception { - doSendMessages(1, 1); + doSendMessages(1); } @Test public void testConcurrentProducersJMSXGroupID() throws Exception { - doSendMessages(10, 1); + doSendMessages(10); } - private void doSendMessages(int files, int poolSize) throws Exception { + private void doSendMessages(int files) throws Exception { getMockEndpoint("mock:result").expectedMessageCount(files * 2); getMockEndpoint("mock:result").expectsNoDuplicates(body()); - ExecutorService executor = Executors.newFixedThreadPool(poolSize); for (int i = 0; i < files; i++) { final int index = i; executor.submit(() -> { @@ -53,7 +63,24 @@ public class JmsRouteUsingJMSXGroupTest extends AbstractJMSTest { } assertMockEndpointsSatisfied(); - executor.shutdownNow(); + } + + @BeforeEach + void setupExecutor() { + executor = Executors.newFixedThreadPool(POOL_SIZE); + } + + @AfterEach + void cleanupExecutor() { + executor.shutdown(); + try { + final boolean finished = executor.awaitTermination(1, TimeUnit.SECONDS); + if (!finished) { + LOG.debug("Executor tasks did not terminate within the timeout (shutdown will be forced)"); + } + } catch (InterruptedException e) { + executor.shutdownNow(); + } } @Override diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorInTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorInTest.java index 441b8966675..965bb34d0b6 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorInTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorInTest.java @@ -20,10 +20,12 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; +import org.junit.jupiter.api.parallel.Isolated; import static org.junit.jupiter.api.Assertions.assertEquals; @Timeout(30) +@Isolated public class JmsSelectorInTest extends AbstractJMSTest { @Test diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSetBodyNullErrorHandlerUseOriginalMessageTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSetBodyNullErrorHandlerUseOriginalMessageTest.java index 40f85cc5d38..590fa083785 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSetBodyNullErrorHandlerUseOriginalMessageTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSetBodyNullErrorHandlerUseOriginalMessageTest.java @@ -33,7 +33,8 @@ public class JmsSetBodyNullErrorHandlerUseOriginalMessageTest extends AbstractPe assertMockEndpointsSatisfied(); - String body = consumer.receiveBody("activemq:queue:dead", 5000, String.class); + String body = consumer.receiveBody("activemq:queue:JmsSetBodyNullErrorHandlerUseOriginalMessageTest.dead", 5000, + String.class); assertEquals("Hello World", body); } @@ -42,7 +43,8 @@ public class JmsSetBodyNullErrorHandlerUseOriginalMessageTest extends AbstractPe return new RouteBuilder() { @Override public void configure() { - errorHandler(deadLetterChannel("activemq:queue:dead").useOriginalMessage()); + errorHandler(deadLetterChannel("activemq:queue:JmsSetBodyNullErrorHandlerUseOriginalMessageTest.dead") + .useOriginalMessage()); from("activemq:queue:JmsSetBodyNullErrorHandlerUseOriginalMessageTest") .to("mock:foo") diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestLateReplyTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestLateReplyTest.java index f87736a8532..93d85b352b8 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestLateReplyTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestLateReplyTest.java @@ -133,6 +133,6 @@ public class JmsSimpleRequestLateReplyTest extends AbstractJMSTest { protected static String getQueueEndpointName() { // need to use a fixed queue for reply as a temp queue may be deleted - return "activemq:queue:hello.queue?replyTo=myReplyQueue"; + return "activemq:queue:JmsSimpleRequestLateReplyTest?replyTo=JmsSimpleRequestLateReplyTest.reply"; } } diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeNoStreamCachingTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeNoStreamCachingTest.java index e2c8a3dfca0..a8515a42562 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeNoStreamCachingTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeNoStreamCachingTest.java @@ -23,12 +23,16 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.test.infra.activemq.services.ActiveMQService; import org.apache.camel.util.FileUtil; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.parallel.ResourceLock; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf; import static org.apache.camel.test.junit5.TestSupport.deleteDirectory; import static org.junit.jupiter.api.Assertions.assertEquals; +@ResourceLock("target/stream/JmsStreamMessageTypeNoStreamCachingTest") public class JmsStreamMessageTypeNoStreamCachingTest extends AbstractJMSTest { @Override @@ -59,36 +63,17 @@ public class JmsStreamMessageTypeNoStreamCachingTest extends AbstractJMSTest { return camelContext; } - @Test - public void testStreamType() throws Exception { + @ParameterizedTest + @ValueSource(strings = { "message1.xml", "message1.txt" }) + @DisplayName("Tests stream type with both a small (message1.xml) and a large file (message1.txt)") + public void testStreamType(String filename) throws Exception { getMockEndpoint("mock:resultJmsStreamMessageTypeNoStreamCachingTest").expectedMessageCount(1); // copy the file - FileUtil.copyFile(new File("src/test/data/message1.xml"), new File("target/stream/in/message1.xml")); + final File baseFile = new File("src/test/data/", filename); + final File sourceFile = new File("target/stream/JmsStreamMessageTypeNoStreamCachingTest/in", filename); - assertMockEndpointsSatisfied(); - - Object body = getMockEndpoint("mock:resultJmsStreamMessageTypeNoStreamCachingTest").getReceivedExchanges().get(0) - .getIn().getBody(); - StreamMessageInputStream is = assertIsInstanceOf(StreamMessageInputStream.class, body); - - // no more bytes should be available on the inputstream - assertEquals(0, is.available()); - - // assert on the content of input versus output file - String srcContent = context.getTypeConverter().mandatoryConvertTo(String.class, new File("src/test/data/message1.xml")); - String dstContent - = context.getTypeConverter().mandatoryConvertTo(String.class, - new File("target/stream/JmsStreamMessageTypeNoStreamCachingTest/out/message1.xml")); - assertEquals(srcContent, dstContent, "both the source and destination files should have the same content"); - } - - @Test - public void testStreamTypeWithBigFile() throws Exception { - getMockEndpoint("mock:resultJmsStreamMessageTypeNoStreamCachingTest").expectedMessageCount(1); - - // copy the file - FileUtil.copyFile(new File("src/test/data/message1.txt"), new File("target/stream/in/message1.txt")); + FileUtil.copyFile(baseFile, sourceFile); assertMockEndpointsSatisfied(); @@ -96,14 +81,14 @@ public class JmsStreamMessageTypeNoStreamCachingTest extends AbstractJMSTest { .getIn().getBody(); StreamMessageInputStream is = assertIsInstanceOf(StreamMessageInputStream.class, body); - // no more bytes should be available on the inputstream + // no more bytes should be available on the input stream assertEquals(0, is.available()); // assert on the content of input versus output file - String srcContent = context.getTypeConverter().mandatoryConvertTo(String.class, new File("src/test/data/message1.txt")); + String srcContent = context.getTypeConverter().mandatoryConvertTo(String.class, baseFile); String dstContent = context.getTypeConverter().mandatoryConvertTo(String.class, - new File("target/stream/JmsStreamMessageTypeNoStreamCachingTest/out/message1.txt")); + new File("target/stream/JmsStreamMessageTypeNoStreamCachingTest/out/", filename)); assertEquals(srcContent, dstContent, "both the source and destination files should have the same content"); } @@ -112,7 +97,8 @@ public class JmsStreamMessageTypeNoStreamCachingTest extends AbstractJMSTest { return new RouteBuilder() { @Override public void configure() { - from("file:target/stream/in").to("jms:queue:JmsStreamMessageTypeNoStreamCachingTest"); + from("file:target/stream/JmsStreamMessageTypeNoStreamCachingTest/in") + .to("jms:queue:JmsStreamMessageTypeNoStreamCachingTest"); from("jms:queue:JmsStreamMessageTypeNoStreamCachingTest") .to("file:target/stream/JmsStreamMessageTypeNoStreamCachingTest/out") diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java index 2e31df32b64..2f4aa126efa 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java @@ -25,8 +25,7 @@ import org.apache.camel.test.infra.activemq.services.ActiveMQService; import org.apache.camel.util.FileUtil; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Tags; +import org.junit.jupiter.api.parallel.ResourceLock; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -37,7 +36,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; /** * This test cannot run in parallel: it reuses the same path for different test iterations */ -@Tags({ @Tag("not-parallel") }) +@ResourceLock("target/stream/JmsStreamMessageTypeTest") public class JmsStreamMessageTypeTest extends AbstractJMSTest { @Override diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExchangeTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExchangeTest.java index 3c028396ffc..da3c61e6763 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExchangeTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExchangeTest.java @@ -16,6 +16,8 @@ */ package org.apache.camel.component.jms; +import java.util.concurrent.TimeUnit; + import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.junit.jupiter.api.Test; @@ -23,14 +25,14 @@ import org.junit.jupiter.api.Test; public class JmsTransferExchangeTest extends AbstractJMSTest { protected String getUri() { - return "activemq:queue:foo?transferExchange=true"; + return "activemq:queue:JmsTransferExchangeTest?transferExchange=true"; } @Test public void testBodyOnly() throws Exception { MockEndpoint mock = getMockEndpoint("mock:result"); mock.expectedBodiesReceived("Hello World"); - mock.expectedHeaderReceived("JMSDestination", "queue://foo"); + mock.expectedHeaderReceived("JMSDestination", "queue://JmsTransferExchangeTest"); template.sendBody("direct:start", "Hello World"); @@ -42,7 +44,7 @@ public class JmsTransferExchangeTest extends AbstractJMSTest { MockEndpoint mock = getMockEndpoint("mock:result"); mock.expectedBodiesReceived("Hello World"); mock.expectedHeaderReceived("foo", "cheese"); - mock.expectedHeaderReceived("JMSDestination", "queue://foo"); + mock.expectedHeaderReceived("JMSDestination", "queue://JmsTransferExchangeTest"); template.sendBodyAndHeader("direct:start", "Hello World", "foo", "cheese"); @@ -55,7 +57,7 @@ public class JmsTransferExchangeTest extends AbstractJMSTest { mock.expectedBodiesReceived("Hello World"); mock.expectedHeaderReceived("foo", "cheese"); mock.expectedPropertyReceived("bar", 123); - mock.expectedHeaderReceived("JMSDestination", "queue://foo"); + mock.expectedHeaderReceived("JMSDestination", "queue://JmsTransferExchangeTest"); template.send("direct:start", exchange -> { exchange.getIn().setBody("Hello World"); @@ -63,7 +65,7 @@ public class JmsTransferExchangeTest extends AbstractJMSTest { exchange.setProperty("bar", 123); }); - assertMockEndpointsSatisfied(); + assertMockEndpointsSatisfied(5, TimeUnit.SECONDS); } @Override diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/ProduceMessageConverterTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/ProduceMessageConverterTest.java index efbc639f52b..36d4198f05c 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/ProduceMessageConverterTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/ProduceMessageConverterTest.java @@ -43,7 +43,7 @@ public class ProduceMessageConverterTest extends AbstractJMSTest { MockEndpoint mock = getMockEndpoint("mock:result"); mock.expectedBodiesReceived("Hello World"); - template.sendBody("activemq:queue:hello?messageConverter=#myMessageConverter", "World"); + template.sendBody("activemq:queue:ProduceMessageConverterTest?messageConverter=#myMessageConverter", "World"); assertMockEndpointsSatisfied(); } @@ -52,7 +52,7 @@ public class ProduceMessageConverterTest extends AbstractJMSTest { protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { public void configure() { - from("activemq:queue:hello").to("mock:result"); + from("activemq:queue:ProduceMessageConverterTest").to("mock:result"); } }; } diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsBlockedAsyncRoutingEngineTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsBlockedAsyncRoutingEngineTest.java index 5e8d3f4e598..a6267d12efb 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsBlockedAsyncRoutingEngineTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsBlockedAsyncRoutingEngineTest.java @@ -141,7 +141,7 @@ public class JmsBlockedAsyncRoutingEngineTest extends CamelTestSupport { }; } - private class DelayerBrokerPlugin extends BrokerPluginSupport { + private static class DelayerBrokerPlugin extends BrokerPluginSupport { int i; @Override diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsCustomJMSReplyToIssueTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsCustomJMSReplyToIssueTest.java index f3f878ad05b..0deffcc35a6 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsCustomJMSReplyToIssueTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsCustomJMSReplyToIssueTest.java @@ -30,7 +30,7 @@ import org.springframework.jms.core.JmsTemplate; import static org.junit.jupiter.api.Assertions.assertEquals; -@Timeout(10) +@Timeout(15) public class JmsCustomJMSReplyToIssueTest extends AbstractJMSTest { private JmsComponent amq; diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOnlyIssueTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOnlyIssueTest.java index ccf24fea347..a0030ad9e30 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOnlyIssueTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOnlyIssueTest.java @@ -50,7 +50,7 @@ public class JmsInOnlyIssueTest extends AbstractJMSTest { final CompletableFuture<Object> future = template.asyncSendBody("activemq:queue:JmsInOnlyIssueTest.in", "Hello World"); - assertDoesNotThrow(() -> future.get(1, TimeUnit.SECONDS)); + assertDoesNotThrow(() -> future.get(5, TimeUnit.SECONDS)); assertMockEndpointsSatisfied(); } @@ -83,7 +83,7 @@ public class JmsInOnlyIssueTest extends AbstractJMSTest { exchange.getIn().setBody("Hello World"); }); - assertDoesNotThrow(() -> future.get(1, TimeUnit.SECONDS)); + assertDoesNotThrow(() -> future.get(5, TimeUnit.SECONDS)); assertMockEndpointsSatisfied(); } diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOutPersistentReplyQueueTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOutPersistentReplyQueueTest.java index 89638285f2f..87dcf8b44c4 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOutPersistentReplyQueueTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOutPersistentReplyQueueTest.java @@ -19,8 +19,12 @@ package org.apache.camel.component.jms.issues; import org.apache.camel.ExchangePattern; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.jms.AbstractJMSTest; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Tags; import org.junit.jupiter.api.Test; +// Not parallel due to processing some part of the route concurrently (may be delayed when running on the test threads) +@Tags({ @Tag("not-parallel") }) public class JmsInOutPersistentReplyQueueTest extends AbstractJMSTest { @Test diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsToFileMessageIdTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsToFileMessageIdTest.java index 7ec9de1074c..bd8f98ca7d7 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsToFileMessageIdTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsToFileMessageIdTest.java @@ -36,7 +36,7 @@ public class JmsToFileMessageIdTest extends AbstractJMSTest { MockEndpoint mock = getMockEndpoint("mock:result"); mock.expectedMessageCount(1); - template.sendBody("activemq:foo", "Hello World"); + template.sendBody("activemq:JmsToFileMessageIdTest", "Hello World"); assertMockEndpointsSatisfied(); } @@ -52,7 +52,7 @@ public class JmsToFileMessageIdTest extends AbstractJMSTest { @Override public void configure() { // Make a route from an activemq queue to a file endpoint, then try to call getMessageId() - from("activemq:foo") + from("activemq:JmsToFileMessageIdTest") .process(exchange -> { // assert camel id is based on jms id String camelId = exchange.getIn().getMessageId(); diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/TransactionErrorHandlerRedeliveryDelayTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/TransactionErrorHandlerRedeliveryDelayTest.java index 35860ce09e6..a9467c88e8f 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/TransactionErrorHandlerRedeliveryDelayTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/TransactionErrorHandlerRedeliveryDelayTest.java @@ -16,6 +16,8 @@ */ package org.apache.camel.component.jms.issues; +import java.util.concurrent.atomic.LongAdder; + import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.test.spring.junit5.CamelSpringTestSupport; @@ -30,7 +32,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; */ public class TransactionErrorHandlerRedeliveryDelayTest extends CamelSpringTestSupport { - private static volatile int counter; + private static LongAdder counter = new LongAdder(); @Override protected AbstractApplicationContext createApplicationContext() { @@ -42,7 +44,7 @@ public class TransactionErrorHandlerRedeliveryDelayTest extends CamelSpringTestS public void testTransactedRedeliveryDelay() throws Exception { getMockEndpoint("mock:result").expectedBodiesReceived("Bye World"); - template.sendBody("activemq:queue:in", "Hello World"); + template.sendBody("activemq:queue:TransactionErrorHandlerRedeliveryDelayTest.in", "Hello World"); assertMockEndpointsSatisfied(); } @@ -54,8 +56,10 @@ public class TransactionErrorHandlerRedeliveryDelayTest extends CamelSpringTestS @Override public void process(Exchange exchange) { - if (counter++ < 3) { - throw new IllegalArgumentException("Forced exception as counter is " + counter); + int counterValue = counter.intValue(); + counter.increment(); + if (counterValue < 3) { + throw new IllegalArgumentException("Forced exception as counter is " + counterValue); } assertTrue(exchange.isTransacted(), "Should be transacted"); exchange.getIn().setBody("Bye World"); diff --git a/components/camel-jms/src/test/resources/org/apache/camel/component/jms/issues/TransactionErrorHandlerRedeliveryDelayTest-context.xml b/components/camel-jms/src/test/resources/org/apache/camel/component/jms/issues/TransactionErrorHandlerRedeliveryDelayTest-context.xml index 7264364b436..4ce20a95881 100644 --- a/components/camel-jms/src/test/resources/org/apache/camel/component/jms/issues/TransactionErrorHandlerRedeliveryDelayTest-context.xml +++ b/components/camel-jms/src/test/resources/org/apache/camel/component/jms/issues/TransactionErrorHandlerRedeliveryDelayTest-context.xml @@ -26,7 +26,7 @@ <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <jmxAgent id="agent" disabled="true"/> <route errorHandlerRef="myTransactionErrorHandler"> - <from uri="activemq:queue:in"/> + <from uri="activemq:queue:TransactionErrorHandlerRedeliveryDelayTest.in"/> <transacted ref="required"/> <process ref="myFailureProcessor"/> <to uri="mock:result"/>
