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 2023/08/11 11:22:41 UTC

[camel] branch main updated: CAMEL-19735: use singleton services to speed up camel-rocketmq tests (#11081)

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


The following commit(s) were added to refs/heads/main by this push:
     new b2bd16f255d CAMEL-19735: use singleton services to speed up camel-rocketmq tests (#11081)
b2bd16f255d is described below

commit b2bd16f255d333b6c22d2a9db43a7be5b4fb8abe
Author: Otavio Rodolfo Piske <or...@users.noreply.github.com>
AuthorDate: Fri Aug 11 13:22:35 2023 +0200

    CAMEL-19735: use singleton services to speed up camel-rocketmq tests (#11081)
---
 .../rocketmq/RocketMQRequestReplyRouteTest.java    | 15 +++-----
 .../component/rocketmq/RocketMQRouteTest.java      |  9 +----
 .../component/rocketmq/RocketMQTestSupport.java    | 23 +++++-------
 .../infra/rocketmq/services/RocketMQContainer.java | 10 ------
 .../infra/rocketmq/services/RocketMQService.java   | 33 +++++++++++++++++
 .../rocketmq/services/RocketMQServiceFactory.java  | 42 ++++++++++++++++++++++
 6 files changed, 88 insertions(+), 44 deletions(-)

diff --git a/components/camel-rocketmq/src/test/java/org/apache/camel/component/rocketmq/RocketMQRequestReplyRouteTest.java b/components/camel-rocketmq/src/test/java/org/apache/camel/component/rocketmq/RocketMQRequestReplyRouteTest.java
index 8d0650b1517..0f9aee5602d 100644
--- a/components/camel-rocketmq/src/test/java/org/apache/camel/component/rocketmq/RocketMQRequestReplyRouteTest.java
+++ b/components/camel-rocketmq/src/test/java/org/apache/camel/component/rocketmq/RocketMQRequestReplyRouteTest.java
@@ -24,9 +24,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.infra.rocketmq.services.RocketMQService;
-import org.apache.camel.test.infra.rocketmq.services.RocketMQServiceFactory;
-import org.apache.camel.test.junit5.CamelTestSupport;
 import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
 import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
@@ -38,11 +35,10 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class RocketMQRequestReplyRouteTest extends CamelTestSupport {
+public class RocketMQRequestReplyRouteTest extends RocketMQTestSupport {
 
-    private static final String START_ENDPOINT_URI = "rocketmq:START_TOPIC?producerGroup=p1&consumerGroup=c1";
+    private static final String START_ENDPOINT_URI = "rocketmq:START_TOPIC_RRT?producerGroup=p1&consumerGroup=c1";
 
     private static final String INTERMEDIATE_ENDPOINT_URI = "rocketmq:INTERMEDIATE_TOPIC" +
                                                             "?producerGroup=intermediaProducer" +
@@ -61,12 +57,9 @@ public class RocketMQRequestReplyRouteTest extends CamelTestSupport {
 
     private DefaultMQProducer replierProducer;
 
-    @RegisterExtension
-    public static RocketMQService rocketMQService = RocketMQServiceFactory.createService();
-
     @BeforeAll
     static void beforeAll() throws Exception {
-        rocketMQService.createTopic("START_TOPIC");
+        rocketMQService.createTopic("START_TOPIC_RRT");
         rocketMQService.createTopic("INTERMEDIATE_TOPIC");
         rocketMQService.createTopic("REPLY_TO_TOPIC");
     }
@@ -136,7 +129,7 @@ public class RocketMQRequestReplyRouteTest extends CamelTestSupport {
 
     @AfterAll
     public static void afterAll() throws IOException, InterruptedException {
-        rocketMQService.deleteTopic("START_TOPIC");
+        rocketMQService.deleteTopic("START_TOPIC_RRT");
         rocketMQService.deleteTopic("INTERMEDIATE_TOPIC");
         rocketMQService.deleteTopic("REPLY_TO_TOPIC");
     }
diff --git a/components/camel-rocketmq/src/test/java/org/apache/camel/component/rocketmq/RocketMQRouteTest.java b/components/camel-rocketmq/src/test/java/org/apache/camel/component/rocketmq/RocketMQRouteTest.java
index d1eaed5c72e..ea7745fd751 100644
--- a/components/camel-rocketmq/src/test/java/org/apache/camel/component/rocketmq/RocketMQRouteTest.java
+++ b/components/camel-rocketmq/src/test/java/org/apache/camel/component/rocketmq/RocketMQRouteTest.java
@@ -22,16 +22,12 @@ import java.io.IOException;
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.infra.rocketmq.services.RocketMQService;
-import org.apache.camel.test.infra.rocketmq.services.RocketMQServiceFactory;
-import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class RocketMQRouteTest extends CamelTestSupport {
+public class RocketMQRouteTest extends RocketMQTestSupport {
 
     public static final String EXPECTED_MESSAGE = "hello, RocketMQ.";
 
@@ -41,9 +37,6 @@ public class RocketMQRouteTest extends CamelTestSupport {
 
     private MockEndpoint resultEndpoint;
 
-    @RegisterExtension
-    public static RocketMQService rocketMQService = RocketMQServiceFactory.createService();
-
     @BeforeAll
     static void beforeAll() throws Exception {
         rocketMQService.createTopic("START_TOPIC");
diff --git a/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQServiceFactory.java b/components/camel-rocketmq/src/test/java/org/apache/camel/component/rocketmq/RocketMQTestSupport.java
similarity index 60%
copy from test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQServiceFactory.java
copy to components/camel-rocketmq/src/test/java/org/apache/camel/component/rocketmq/RocketMQTestSupport.java
index 58124d9f73e..c8440c46ae3 100644
--- a/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQServiceFactory.java
+++ b/components/camel-rocketmq/src/test/java/org/apache/camel/component/rocketmq/RocketMQTestSupport.java
@@ -14,22 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.infra.rocketmq.services;
 
-import org.apache.camel.test.infra.common.services.SimpleTestServiceBuilder;
+package org.apache.camel.component.rocketmq;
 
-public final class RocketMQServiceFactory {
-    private RocketMQServiceFactory() {
+import org.apache.camel.test.infra.rocketmq.services.RocketMQService;
+import org.apache.camel.test.infra.rocketmq.services.RocketMQServiceFactory;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-    }
-
-    public static SimpleTestServiceBuilder<RocketMQService> builder() {
-        return new SimpleTestServiceBuilder<>("rocketmq");
-    }
-
-    public static RocketMQService createService() {
-        return builder()
-                .addLocalMapping(RocketMQContainer::new)
-                .build();
-    }
+abstract class RocketMQTestSupport extends CamelTestSupport {
+    @RegisterExtension
+    public static RocketMQService rocketMQService = RocketMQServiceFactory.createSingletonService();
 }
diff --git a/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQContainer.java b/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQContainer.java
index c2dbce69739..3ce6e742d06 100644
--- a/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQContainer.java
+++ b/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQContainer.java
@@ -74,16 +74,6 @@ public class RocketMQContainer implements RocketMQService, ContainerService<Rock
         brokerContainer2.stop();
     }
 
-    @Override
-    public void afterTestExecution(ExtensionContext extensionContext) throws Exception {
-
-    }
-
-    @Override
-    public void beforeTestExecution(ExtensionContext extensionContext) throws Exception {
-
-    }
-
     public void createTopic(String topic) {
         Awaitility.await()
                 .atMost(20, TimeUnit.SECONDS)
diff --git a/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQService.java b/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQService.java
index 0334269d392..194e1a6751e 100644
--- a/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQService.java
+++ b/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQService.java
@@ -21,6 +21,9 @@ import java.io.IOException;
 import org.apache.camel.test.infra.common.services.TestService;
 import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
 import org.junit.jupiter.api.extension.BeforeTestExecutionCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public interface RocketMQService extends TestService, BeforeTestExecutionCallback, AfterTestExecutionCallback {
     String nameserverAddress();
@@ -32,4 +35,34 @@ public interface RocketMQService extends TestService, BeforeTestExecutionCallbac
     void createTopic(String topic);
 
     void deleteTopic(String topic) throws IOException, InterruptedException;
+
+    @Override
+    default void beforeAll(ExtensionContext extensionContext) {
+        try {
+            initialize();
+        } catch (Exception e) {
+            Logger log = LoggerFactory.getLogger(RocketMQService.class);
+
+            final Object o = extensionContext.getTestInstance().get();
+            log.error("Failed to initialize service {} for test {} on ({})", this.getClass().getSimpleName(),
+                    extensionContext.getDisplayName(), o.getClass().getName());
+
+            throw e;
+        }
+    }
+
+    @Override
+    default void beforeTestExecution(ExtensionContext extensionContext) {
+        //no op
+    }
+
+    @Override
+    default void afterAll(ExtensionContext extensionContext) {
+        shutdown();
+    }
+
+    @Override
+    default void afterTestExecution(ExtensionContext context) {
+        //no op
+    }
 }
diff --git a/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQServiceFactory.java b/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQServiceFactory.java
index 58124d9f73e..d4966f3d983 100644
--- a/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQServiceFactory.java
+++ b/test-infra/camel-test-infra-rocketmq/src/test/java/org/apache/camel/test/infra/rocketmq/services/RocketMQServiceFactory.java
@@ -16,9 +16,35 @@
  */
 package org.apache.camel.test.infra.rocketmq.services;
 
+import java.io.IOException;
+
 import org.apache.camel.test.infra.common.services.SimpleTestServiceBuilder;
+import org.apache.camel.test.infra.common.services.SingletonService;
 
 public final class RocketMQServiceFactory {
+
+    static class SingletonKRocketMQService extends SingletonService<RocketMQService> implements RocketMQService {
+        public SingletonKRocketMQService(RocketMQService service, String name) {
+            super(service, name);
+        }
+
+        @Override
+        public String nameserverAddress() {
+            return getService().nameserverAddress();
+        }
+
+        @Override
+        public void createTopic(String topic) {
+            getService().createTopic(topic);
+        }
+
+        @Override
+        public void deleteTopic(String topic) throws IOException, InterruptedException {
+            getService().deleteTopic(topic);
+        }
+    }
+
+
     private RocketMQServiceFactory() {
 
     }
@@ -32,4 +58,20 @@ public final class RocketMQServiceFactory {
                 .addLocalMapping(RocketMQContainer::new)
                 .build();
     }
+
+    public static RocketMQService createSingletonService() {
+        return SingletonServiceHolder.INSTANCE;
+    }
+
+    private static class SingletonServiceHolder {
+        static final RocketMQService INSTANCE;
+
+        static {
+            SimpleTestServiceBuilder<RocketMQService> instance = builder();
+
+            instance.addLocalMapping(() -> new SingletonKRocketMQService(new RocketMQContainer(), "rocketmq"));
+
+            INSTANCE = instance.build();
+        }
+    }
 }