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 2022/08/26 07:08:09 UTC

[camel] 03/04: (camel-test-infra-activemq) Generate truly unique broker

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 b1ef563a6c4db322b9ebf80d2d2b9a4a828128b6
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Thu Aug 25 14:35:26 2022 +0200

    (camel-test-infra-activemq) Generate truly unique broker
---
 test-infra/camel-test-infra-activemq/pom.xml       |  5 +++
 .../services/ActiveMQEmbeddedServiceBuilder.java   | 51 ++++++++++++++++++----
 2 files changed, 47 insertions(+), 9 deletions(-)

diff --git a/test-infra/camel-test-infra-activemq/pom.xml b/test-infra/camel-test-infra-activemq/pom.xml
index 5536efa8267..e8d96b281ce 100644
--- a/test-infra/camel-test-infra-activemq/pom.xml
+++ b/test-infra/camel-test-infra-activemq/pom.xml
@@ -53,6 +53,11 @@
             <type>test-jar</type>
         </dependency>
 
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.activemq</groupId>
             <artifactId>activemq-broker</artifactId>
diff --git a/test-infra/camel-test-infra-activemq/src/test/java/org/apache/camel/test/infra/activemq/services/ActiveMQEmbeddedServiceBuilder.java b/test-infra/camel-test-infra-activemq/src/test/java/org/apache/camel/test/infra/activemq/services/ActiveMQEmbeddedServiceBuilder.java
index 2c6438adb99..21159fb143f 100644
--- a/test-infra/camel-test-infra-activemq/src/test/java/org/apache/camel/test/infra/activemq/services/ActiveMQEmbeddedServiceBuilder.java
+++ b/test-infra/camel-test-infra-activemq/src/test/java/org/apache/camel/test/infra/activemq/services/ActiveMQEmbeddedServiceBuilder.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.net.URI;
 import java.util.List;
 import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.atomic.LongAdder;
 import java.util.function.Consumer;
 
 import javax.management.ObjectName;
@@ -48,6 +49,9 @@ import org.apache.activemq.store.PersistenceAdapterFactory;
 import org.apache.activemq.thread.TaskRunnerFactory;
 import org.apache.activemq.usage.SystemUsage;
 import org.apache.activemq.util.IOExceptionHandler;
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static org.junit.jupiter.api.Assertions.fail;
 
@@ -57,10 +61,13 @@ import static org.junit.jupiter.api.Assertions.fail;
  * embedded ActiveMQ, they can use this to wrap the broker service into the test-infra compatible service that can be
  * managed by Junit 5.
  */
-public class ActiveMQEmbeddedServiceBuilder {
-    private BrokerService brokerService;
+public final class ActiveMQEmbeddedServiceBuilder {
+    private static final Logger LOG = LoggerFactory.getLogger(ActiveMQEmbeddedServiceBuilder.class);
 
-    public ActiveMQEmbeddedServiceBuilder() {
+    private static final LongAdder BROKER_COUNT = new LongAdder();
+    private final BrokerService brokerService;
+
+    private ActiveMQEmbeddedServiceBuilder() {
         brokerService = new BrokerService();
     }
 
@@ -602,16 +609,40 @@ public class ActiveMQEmbeddedServiceBuilder {
     }
 
     private static String generateDataDirectoryPathForInstance(String name) {
-        return ActiveMQEmbeddedServiceBuilder.class.getResource("/").getFile() + name
-               + ThreadLocalRandom.current().nextInt(1000);
+        final String dataDirectoryPath = ActiveMQEmbeddedServiceBuilder.class.getResource("/").getFile() + name;
+
+        final File dataDirectory = new File(dataDirectoryPath);
+        if (dataDirectory.exists()) {
+            try {
+                FileUtils.deleteDirectory(dataDirectory);
+            } catch (IOException e) {
+                LOG.warn(
+                        "Could not delete the data directory at {}: {} (the error will be ignored, but the tests are likely to fail)",
+                        dataDirectoryPath, e.getMessage());
+            }
+        }
+
+        return dataDirectoryPath;
+    }
+
+    private static String generateSemiUniqueBrokerName() {
+        final String semiUniqueName
+                = ActiveMQEmbeddedServiceBuilder.class.getSimpleName() + "-" + BROKER_COUNT.longValue() + "."
+                  + ThreadLocalRandom.current().nextInt(1000);
+
+        BROKER_COUNT.increment();
+        return semiUniqueName;
     }
 
     public static ActiveMQEmbeddedServiceBuilder defaultBroker() {
-        return defaultBroker(ActiveMQEmbeddedServiceBuilder.class.getSimpleName());
+        final String semiUniqueName = generateSemiUniqueBrokerName();
+
+        return defaultBroker(semiUniqueName);
     }
 
     public static ActiveMQEmbeddedServiceBuilder defaultBroker(String name) {
         final String dataDirectoryPath = generateDataDirectoryPathForInstance(name);
+
         return new ActiveMQEmbeddedServiceBuilder()
                 .withDeleteAllMessagesOnStartup(true)
                 .withBrokerName(name)
@@ -621,9 +652,11 @@ public class ActiveMQEmbeddedServiceBuilder {
     }
 
     public static ActiveMQEmbeddedServiceBuilder persistentBroker() {
-        final String name = "persistent" + ActiveMQEmbeddedServiceBuilder.class.getSimpleName()
-                            + ThreadLocalRandom.current().nextInt(1000);
-        return persistentBroker(name);
+        String semiUniqueName = "persistent" + generateSemiUniqueBrokerName();
+
+        BROKER_COUNT.increment();
+
+        return persistentBroker(semiUniqueName);
     }
 
     public static ActiveMQEmbeddedServiceBuilder persistentBroker(String name) {