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 7b6319ae749f0a3c2f5e38c358e2c9a3c11acfc3
Author: Otavio Rodolfo Piske <[email protected]>
AuthorDate: Thu Aug 4 11:22:56 2022 +0200

    CAMEL-18347: fix Kafka services in test infra not being singleton
---
 .../infra/kafka/services/KafkaServiceFactory.java  | 34 +++++++++++++++-------
 .../test/infra/kafka/services/StrimziService.java  |  8 +++--
 2 files changed, 29 insertions(+), 13 deletions(-)

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 ae150286a39..ceb5c6d42f9 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
@@ -43,6 +43,9 @@ public final class KafkaServiceFactory {
         }
     }
 
+    private static SimpleTestServiceBuilder<KafkaService> instance;
+    private static KafkaService kafkaService;
+
     private KafkaServiceFactory() {
 
     }
@@ -52,22 +55,33 @@ public final class KafkaServiceFactory {
     }
 
     public static KafkaService createService() {
-        return builder()
-                .addLocalMapping(ContainerLocalKafkaService::new)
+        SimpleTestServiceBuilder<KafkaService> builder = new 
SimpleTestServiceBuilder<>("kafka");
+
+        return builder.addLocalMapping(ContainerLocalKafkaService::new)
                 .addMapping("local-strimzi-container", StrimziService::new)
                 .addRemoteMapping(RemoteKafkaService::new)
                 .addMapping("local-kafka3-container", 
ContainerLocalKafkaService::kafka3Container)
                 .build();
     }
 
-    public static KafkaService createSingletonService() {
-        return builder()
-                .addLocalMapping(() -> new SingletonKafkaService(new 
ContainerLocalKafkaService(), "kafka"))
-                .addRemoteMapping(RemoteKafkaService::new)
-                .addMapping("local-kafka3-container",
-                        () -> new 
SingletonKafkaService(ContainerLocalKafkaService.kafka3Container(), "kafka3"))
-                .addMapping("local-strimzi-container", () -> new 
SingletonKafkaService(new StrimziService(), "strimzi"))
-                .build();
+    public static synchronized KafkaService createSingletonService() {
+        if (kafkaService == null) {
+            if (instance == null) {
+                instance = builder();
+
+                instance.addLocalMapping(() -> new SingletonKafkaService(new 
ContainerLocalKafkaService(), "kafka"))
+                        .addRemoteMapping(RemoteKafkaService::new)
+                        .addMapping("local-kafka3-container",
+                                () -> new 
SingletonKafkaService(ContainerLocalKafkaService.kafka3Container(), "kafka3"))
+                        .addMapping("local-strimzi-container",
+                                () -> new SingletonKafkaService(new 
StrimziService(), "strimzi"));
+
+            }
+
+            kafkaService = instance.build();
+        }
+
+        return kafkaService;
     }
 
 }
diff --git 
a/test-infra/camel-test-infra-kafka/src/test/java/org/apache/camel/test/infra/kafka/services/StrimziService.java
 
b/test-infra/camel-test-infra-kafka/src/test/java/org/apache/camel/test/infra/kafka/services/StrimziService.java
index 2ce288e01a1..dae2076e82d 100644
--- 
a/test-infra/camel-test-infra-kafka/src/test/java/org/apache/camel/test/infra/kafka/services/StrimziService.java
+++ 
b/test-infra/camel-test-infra-kafka/src/test/java/org/apache/camel/test/infra/kafka/services/StrimziService.java
@@ -31,12 +31,14 @@ public class StrimziService implements KafkaService, 
ContainerService<StrimziCon
     private final StrimziContainer strimziContainer;
 
     public StrimziService() {
+        this("zookeeper-" + TestUtils.randomWithRange(1, 100),
+             "strimzi-" + TestUtils.randomWithRange(1, 100));
+    }
+
+    public StrimziService(String zookeeperInstanceName, String 
strimziInstanceName) {
         Network network = Network.newNetwork();
 
-        String zookeeperInstanceName = "zookeeper-" + 
TestUtils.randomWithRange(1, 100);
         zookeeperContainer = initZookeeperContainer(network, 
zookeeperInstanceName);
-
-        String strimziInstanceName = "strimzi-" + TestUtils.randomWithRange(1, 
100);
         strimziContainer = initStrimziContainer(network, strimziInstanceName, 
zookeeperInstanceName);
     }
 

Reply via email to