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 b21e302  camel-test-infra-kafka: enable singleton services for Strimzi
b21e302 is described below

commit b21e302e6c553b5fb5f57f1bb2f2b6099844ec97
Author: Otavio Rodolfo Piske <[email protected]>
AuthorDate: Thu Mar 24 13:03:06 2022 +0100

    camel-test-infra-kafka: enable singleton services for Strimzi
---
 .../infra/common/services/SingletonService.java}   | 53 +++++++++++++---------
 .../infra/kafka/services/KafkaServiceFactory.java  | 29 +++++++++++-
 2 files changed, 58 insertions(+), 24 deletions(-)

diff --git 
a/test-infra/camel-test-infra-kafka/src/test/java/org/apache/camel/test/infra/kafka/services/ContainerLocalSingletonKafkaService.java
 
b/test-infra/camel-test-infra-common/src/test/java/org/apache/camel/test/infra/common/services/SingletonService.java
similarity index 50%
rename from 
test-infra/camel-test-infra-kafka/src/test/java/org/apache/camel/test/infra/kafka/services/ContainerLocalSingletonKafkaService.java
rename to 
test-infra/camel-test-infra-common/src/test/java/org/apache/camel/test/infra/common/services/SingletonService.java
index b3b1f09..e30fc73 100644
--- 
a/test-infra/camel-test-infra-kafka/src/test/java/org/apache/camel/test/infra/kafka/services/ContainerLocalSingletonKafkaService.java
+++ 
b/test-infra/camel-test-infra-common/src/test/java/org/apache/camel/test/infra/common/services/SingletonService.java
@@ -15,45 +15,54 @@
  * limitations under the License.
  */
 
-package org.apache.camel.test.infra.kafka.services;
+package org.apache.camel.test.infra.common.services;
 
 import org.junit.jupiter.api.extension.ExtensionContext;
-import org.testcontainers.containers.KafkaContainer;
-import org.testcontainers.utility.DockerImageName;
+import org.slf4j.LoggerFactory;
 
-public class ContainerLocalSingletonKafkaService extends 
ContainerLocalKafkaService
-        implements ExtensionContext.Store.CloseableResource {
+/**
+ * This is a wrapper class for creating singleton services
+ *
+ * @param <T> The type of the service to be wrapped
+ */
+public class SingletonService<T extends TestService> implements 
ExtensionContext.Store.CloseableResource, TestService {
+    private final T service;
+    private final String name;
 
-    public ContainerLocalSingletonKafkaService(KafkaContainer container) {
-        super(container);
+    public SingletonService(T service, String name) {
+        this.service = service;
+        this.name = name;
     }
 
-    public ContainerLocalSingletonKafkaService() {
-        super();
+    protected void addToStore(ExtensionContext extensionContext) {
+        
extensionContext.getRoot().getStore(ExtensionContext.Namespace.GLOBAL).getOrComputeIfAbsent(name,
 s -> {
+            LoggerFactory.getLogger(SingletonService.class).debug("Registering 
singleton service {}", name);
+            service.initialize();
+            return this;
+        });
     }
 
     @Override
-    public void beforeAll(ExtensionContext extensionContext) {
-        
extensionContext.getRoot().getStore(ExtensionContext.Namespace.GLOBAL).getOrComputeIfAbsent("kafka",
 s -> {
-            super.initialize();
-            return this;
-        });
+    public void registerProperties() {
+        service.registerProperties();
+    }
+
+    @Override
+    public void initialize() {
+        service.initialize();
     }
 
     @Override
-    public void afterAll(ExtensionContext extensionContext) {
-        // no op
+    public void shutdown() {
+        service.shutdown();
     }
 
     @Override
     public void close() {
-        super.shutdown();
+        service.shutdown();
     }
 
-    public static ContainerLocalSingletonKafkaService kafka3Container() {
-        KafkaContainer container
-                = new 
KafkaContainer(DockerImageName.parse(ContainerLocalKafkaService.KAFKA3_IMAGE_NAME))
-                        .withEmbeddedZookeeper();
-        return new ContainerLocalSingletonKafkaService(container);
+    protected T getService() {
+        return service;
     }
 }
diff --git 
a/test-infra/camel-test-infra-kafka/src/test/java/org/apache/camel/test/infra/kafka/services/KafkaServiceFactory.java
 
b/test-infra/camel-test-infra-kafka/src/test/java/org/apache/camel/test/infra/kafka/services/KafkaServiceFactory.java
index 43ba6b3..ae15028 100644
--- 
a/test-infra/camel-test-infra-kafka/src/test/java/org/apache/camel/test/infra/kafka/services/KafkaServiceFactory.java
+++ 
b/test-infra/camel-test-infra-kafka/src/test/java/org/apache/camel/test/infra/kafka/services/KafkaServiceFactory.java
@@ -18,8 +18,31 @@
 package org.apache.camel.test.infra.kafka.services;
 
 import org.apache.camel.test.infra.common.services.SimpleTestServiceBuilder;
+import org.apache.camel.test.infra.common.services.SingletonService;
+import org.junit.jupiter.api.extension.ExtensionContext;
 
 public final class KafkaServiceFactory {
+    static class SingletonKafkaService extends SingletonService<KafkaService> 
implements KafkaService {
+        public SingletonKafkaService(KafkaService service, String name) {
+            super(service, name);
+        }
+
+        @Override
+        public String getBootstrapServers() {
+            return getService().getBootstrapServers();
+        }
+
+        @Override
+        public void beforeAll(ExtensionContext extensionContext) {
+            addToStore(extensionContext);
+        }
+
+        @Override
+        public void afterAll(ExtensionContext extensionContext) {
+            // NO-OP
+        }
+    }
+
     private KafkaServiceFactory() {
 
     }
@@ -39,9 +62,11 @@ public final class KafkaServiceFactory {
 
     public static KafkaService createSingletonService() {
         return builder()
-                .addLocalMapping(() -> new 
ContainerLocalSingletonKafkaService())
+                .addLocalMapping(() -> new SingletonKafkaService(new 
ContainerLocalKafkaService(), "kafka"))
                 .addRemoteMapping(RemoteKafkaService::new)
-                .addMapping("local-kafka3-container", 
ContainerLocalSingletonKafkaService::kafka3Container)
+                .addMapping("local-kafka3-container",
+                        () -> new 
SingletonKafkaService(ContainerLocalKafkaService.kafka3Container(), "kafka3"))
+                .addMapping("local-strimzi-container", () -> new 
SingletonKafkaService(new StrimziService(), "strimzi"))
                 .build();
     }
 

Reply via email to