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 ddddb412468b6361240a896c005e31e90bc03d12 Author: Otavio Rodolfo Piske <angusyo...@gmail.com> AuthorDate: Wed Mar 13 10:59:14 2024 +0100 CAMEL-20477: rework a shared topic test to allow tests to run concurrently --- .../component/jms/TwoConsumerOnSameTopicTest.java | 132 --------------------- .../consumers/MultipleMessagesSameTopicIT.java | 66 +++++++++++ .../consumers/SingleMessageSameTopicIT.java | 110 +++++++++++++++++ 3 files changed, 176 insertions(+), 132 deletions(-) diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/TwoConsumerOnSameTopicTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/TwoConsumerOnSameTopicTest.java deleted file mode 100644 index 4d5fda5ed46..00000000000 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/TwoConsumerOnSameTopicTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.jms; - -import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.component.mock.MockEndpoint; -import org.awaitility.Awaitility; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -public class TwoConsumerOnSameTopicTest extends AbstractPersistentJMSTest { - - @Nested - class MultipleMessagesTest { - @Test - public void testMultipleMessagesOnSameTopic() throws Exception { - getMockEndpoint("mock:a").expectedBodiesReceived("Hello Camel 1", "Hello Camel 2", "Hello Camel 3", - "Hello Camel 4"); - getMockEndpoint("mock:b").expectedBodiesReceived("Hello Camel 1", "Hello Camel 2", "Hello Camel 3", - "Hello Camel 4"); - - template.sendBody("activemq:topic:TwoConsumerOnSameTopicTest", "Hello Camel 1"); - template.sendBody("activemq:topic:TwoConsumerOnSameTopicTest", "Hello Camel 2"); - template.sendBody("activemq:topic:TwoConsumerOnSameTopicTest", "Hello Camel 3"); - template.sendBody("activemq:topic:TwoConsumerOnSameTopicTest", "Hello Camel 4"); - - MockEndpoint.assertIsSatisfied(context); - } - } - - @Nested - class SingleMessageTest { - - @BeforeEach - void prepare() { - getMockEndpoint("mock:a").expectedBodiesReceived("Hello World"); - getMockEndpoint("mock:b").expectedBodiesReceived("Hello World"); - - template.sendBody("activemq:topic:TwoConsumerOnSameTopicTest", "Hello World"); - } - - @Test - void testTwoConsumerOnSameTopic() throws Exception { - MockEndpoint.assertIsSatisfied(context); - } - - @Test - void testStopAndStartOneRoute() throws Exception { - MockEndpoint.assertIsSatisfied(context); - - // now stop route A - context.getRouteController().stopRoute("a"); - - // send new message should go to B only - MockEndpoint.resetMocks(context); - - getMockEndpoint("mock:a").expectedMessageCount(0); - getMockEndpoint("mock:b").expectedBodiesReceived("Bye World"); - - template.sendBody("activemq:topic:TwoConsumerOnSameTopicTest", "Bye World"); - - MockEndpoint.assertIsSatisfied(context); - - // send new message should go to both A and B - MockEndpoint.resetMocks(context); - - // now start route A - context.getRouteController().startRoute("a"); - - getMockEndpoint("mock:a").expectedBodiesReceived("Hello World"); - getMockEndpoint("mock:b").expectedBodiesReceived("Hello World"); - - template.sendBody("activemq:topic:TwoConsumerOnSameTopicTest", "Hello World"); - } - - @Test - void testRemoveOneRoute() throws Exception { - MockEndpoint.assertIsSatisfied(context); - - // now stop and remove route A - context.getRouteController().stopRoute("a"); - assertTrue(context.removeRoute("a")); - - // send new message should go to B only - MockEndpoint.resetMocks(context); - - getMockEndpoint("mock:a").expectedMessageCount(0); - getMockEndpoint("mock:b").expectedBodiesReceived("Bye World"); - - template.sendBody("activemq:topic:TwoConsumerOnSameTopicTest", "Bye World"); - - MockEndpoint.assertIsSatisfied(context); - } - } - - @BeforeEach - void waitForConnections() { - Awaitility.await().until(() -> context.getRoute("a").getUptimeMillis() > 200); - Awaitility.await().until(() -> context.getRoute("a").getUptimeMillis() > 200); - } - - @Override - protected RouteBuilder createRouteBuilder() { - return new RouteBuilder() { - @Override - public void configure() { - from("activemq:topic:TwoConsumerOnSameTopicTest").routeId("a") - .to("log:a", "mock:a"); - - from("activemq:topic:TwoConsumerOnSameTopicTest").routeId("b") - .to("log:b", "mock:b"); - } - }; - } -} diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/consumers/MultipleMessagesSameTopicIT.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/consumers/MultipleMessagesSameTopicIT.java new file mode 100644 index 00000000000..2ff59fe3de7 --- /dev/null +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/consumers/MultipleMessagesSameTopicIT.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.camel.component.jms.integration.consumers; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.jms.AbstractPersistentJMSTest; +import org.apache.camel.component.mock.MockEndpoint; +import org.awaitility.Awaitility; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +/** + * Tests the behavior of 2 consumers consuming multiple messages from the topic + */ +public class MultipleMessagesSameTopicIT extends AbstractPersistentJMSTest { + + @Test + public void testMultipleMessagesOnSameTopic() throws Exception { + getMockEndpoint("mock:a").expectedBodiesReceived("Hello Camel 1", "Hello Camel 2", "Hello Camel 3", + "Hello Camel 4"); + getMockEndpoint("mock:b").expectedBodiesReceived("Hello Camel 1", "Hello Camel 2", "Hello Camel 3", + "Hello Camel 4"); + + template.sendBody("activemq:topic:MultipleMessagesSameTopicIT", "Hello Camel 1"); + template.sendBody("activemq:topic:MultipleMessagesSameTopicIT", "Hello Camel 2"); + template.sendBody("activemq:topic:MultipleMessagesSameTopicIT", "Hello Camel 3"); + template.sendBody("activemq:topic:MultipleMessagesSameTopicIT", "Hello Camel 4"); + + MockEndpoint.assertIsSatisfied(context); + } + + @BeforeEach + void waitForConnections() { + Awaitility.await().until(() -> context.getRoute("a").getUptimeMillis() > 200); + Awaitility.await().until(() -> context.getRoute("b").getUptimeMillis() > 200); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("activemq:topic:MultipleMessagesSameTopicIT").routeId("a") + .to("log:a", "mock:a"); + + from("activemq:topic:MultipleMessagesSameTopicIT").routeId("b") + .to("log:b", "mock:b"); + } + }; + } +} diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/consumers/SingleMessageSameTopicIT.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/consumers/SingleMessageSameTopicIT.java new file mode 100644 index 00000000000..af5e162603d --- /dev/null +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/consumers/SingleMessageSameTopicIT.java @@ -0,0 +1,110 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.jms.integration.consumers; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.jms.AbstractPersistentJMSTest; +import org.apache.camel.component.mock.MockEndpoint; +import org.awaitility.Awaitility; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class SingleMessageSameTopicIT extends AbstractPersistentJMSTest { + + @BeforeEach + void prepare() { + getMockEndpoint("mock:a").expectedBodiesReceived("Hello World"); + getMockEndpoint("mock:b").expectedBodiesReceived("Hello World"); + + template.sendBody("activemq:topic:SingleMessageSameTopicIT", "Hello World"); + } + + @Test + void testTwoConsumerOnSameTopic() throws Exception { + MockEndpoint.assertIsSatisfied(context); + } + + @Test + void testStopAndStartOneRoute() throws Exception { + MockEndpoint.assertIsSatisfied(context); + + // now stop route A + context.getRouteController().stopRoute("a"); + + // send a new message should go to B only + MockEndpoint.resetMocks(context); + + getMockEndpoint("mock:a").expectedMessageCount(0); + getMockEndpoint("mock:b").expectedBodiesReceived("Bye World"); + + template.sendBody("activemq:topic:SingleMessageSameTopicIT", "Bye World"); + + MockEndpoint.assertIsSatisfied(context); + + // send new message should go to both A and B + MockEndpoint.resetMocks(context); + + // now start route A + context.getRouteController().startRoute("a"); + + getMockEndpoint("mock:a").expectedBodiesReceived("Hello World"); + getMockEndpoint("mock:b").expectedBodiesReceived("Hello World"); + + template.sendBody("activemq:topic:SingleMessageSameTopicIT", "Hello World"); + } + + @Test + void testRemoveOneRoute() throws Exception { + MockEndpoint.assertIsSatisfied(context); + + // now stop and remove route A + context.getRouteController().stopRoute("a"); + assertTrue(context.removeRoute("a")); + + // send new message should go to B only + MockEndpoint.resetMocks(context); + + getMockEndpoint("mock:a").expectedMessageCount(0); + getMockEndpoint("mock:b").expectedBodiesReceived("Bye World"); + + template.sendBody("activemq:topic:SingleMessageSameTopicIT", "Bye World"); + + MockEndpoint.assertIsSatisfied(context); + } + + @BeforeEach + void waitForConnections() { + Awaitility.await().until(() -> context.getRoute("a").getUptimeMillis() > 200); + Awaitility.await().until(() -> context.getRoute("b").getUptimeMillis() > 200); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("activemq:topic:SingleMessageSameTopicIT").routeId("a") + .to("log:a", "mock:a"); + + from("activemq:topic:SingleMessageSameTopicIT").routeId("b") + .to("log:b", "mock:b"); + } + }; + } +}