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();
+ }
+ }
}