This is an automated email from the ASF dual-hosted git repository.

jlmonteiro pushed a commit to branch fix/ephemeral-ports-in-tests
in repository https://gitbox.apache.org/repos/asf/activemq.git

commit 0670330ac9acbba08687cda0e049a54de219b529
Author: Jean-Louis Monteiro <[email protected]>
AuthorDate: Wed Feb 18 23:06:32 2026 +0100

    Use ephemeral ports in tests to avoid port conflicts
---
 .../broker/ft/JDBCQueueMasterSlaveTest.java        |  6 +--
 .../broker/ft/QueueMasterSlaveTestSupport.java     | 15 ++++++-
 .../ft/kahaDbJdbcLeaseQueueMasterSlaveTest.java    |  6 +--
 .../broker/ft/mKahaDbQueueMasterSlaveTest.java     |  6 +--
 .../apache/activemq/bugs/AMQ4485LowLimitTest.java  | 52 +++++++++++++---------
 ...kOfXBrokersWithNDestsFanoutTransactionTest.java | 45 ++++++++++++-------
 .../failover/ConnectionHangOnStartupTest.java      | 15 +++++--
 ...BrokerConnectionDuplexExcludedDestinations.java | 19 ++++----
 ...TopicSendReceiveUsingJavaConfigurationTest.java | 24 ++++++----
 .../apache/activemq/broker/ft/sharedFileMaster.xml |  2 +-
 .../apache/activemq/broker/ft/sharedFileSlave.xml  |  2 +-
 .../apache/activemq/usecases/receiver-duplex.xml   |  2 +-
 .../org/apache/activemq/usecases/sender-duplex.xml |  4 +-
 13 files changed, 123 insertions(+), 75 deletions(-)

diff --git 
a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/JDBCQueueMasterSlaveTest.java
 
b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/JDBCQueueMasterSlaveTest.java
index 1d987bfeb4..a5b482f682 100644
--- 
a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/JDBCQueueMasterSlaveTest.java
+++ 
b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/JDBCQueueMasterSlaveTest.java
@@ -36,8 +36,6 @@ import org.apache.derby.jdbc.EmbeddedDataSource;
 
 public class JDBCQueueMasterSlaveTest extends QueueMasterSlaveTestSupport {
     protected SyncCreateDataSource sharedDs;
-    protected String MASTER_URL = "tcp://localhost:62001";
-    protected String SLAVE_URL  = "tcp://localhost:62002";
     protected String findStatement;
 
     protected void setUp() throws Exception {
@@ -55,7 +53,7 @@ public class JDBCQueueMasterSlaveTest extends 
QueueMasterSlaveTestSupport {
     protected void createMaster() throws Exception {
         master = new BrokerService();
         master.setBrokerName("master");
-        master.addConnector(MASTER_URL);
+        master.addConnector("tcp://localhost:0");
         master.setUseJmx(false);
         master.setPersistent(true);
         master.setDeleteAllMessagesOnStartup(true);
@@ -83,7 +81,7 @@ public class JDBCQueueMasterSlaveTest extends 
QueueMasterSlaveTestSupport {
                     BrokerService broker = new BrokerService();
                     broker.setBrokerName("slave");
                     TransportConnector connector = new TransportConnector();
-                    connector.setUri(new URI(SLAVE_URL));
+                    connector.setUri(new URI("tcp://localhost:" + masterPort));
                     broker.addConnector(connector);
                     // no need for 
broker.setMasterConnectorURI(masterConnectorURI)
                     // as the db lock provides the slave/master initialisation
diff --git 
a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveTestSupport.java
 
b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveTestSupport.java
index adc4a0f4e5..b1aae94f3c 100644
--- 
a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveTestSupport.java
+++ 
b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveTestSupport.java
@@ -48,10 +48,14 @@ abstract public class QueueMasterSlaveTestSupport extends 
JmsTopicSendReceiveWit
     protected CountDownLatch slaveStarted;
     protected int inflightMessageCount;
     protected int failureCount = 50;
-    protected String uriString = 
"failover://(tcp://localhost:62001,tcp://localhost:62002)?randomize=false&useExponentialBackOff=false";
+    protected int masterPort;
+    protected String uriString;
 
     @Override
     protected void setUp() throws Exception {
+        // Use ephemeral port for XML-based broker configs
+        System.setProperty("masterPort", "0");
+
         slaveStarted = new CountDownLatch(1);
         slave.set(null);
         setMaxTestTime(TimeUnit.MINUTES.toMillis(10));
@@ -64,6 +68,15 @@ abstract public class QueueMasterSlaveTestSupport extends 
JmsTopicSendReceiveWit
         failureCount = super.messageCount / 2;
         super.topic = isTopic();
         createMaster();
+
+        // Get the actual port assigned by the OS after master starts
+        masterPort = 
master.getTransportConnectors().get(0).getConnectUri().getPort();
+        uriString = "failover://(tcp://localhost:" + masterPort
+                + ")?randomize=false&useExponentialBackOff=false";
+
+        // Slave reuses the same port so failover reconnects to the same 
address
+        System.setProperty("slavePort", String.valueOf(masterPort));
+
         createSlave();
         // wait for thing to connect
         Thread.sleep(1000);
diff --git 
a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/kahaDbJdbcLeaseQueueMasterSlaveTest.java
 
b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/kahaDbJdbcLeaseQueueMasterSlaveTest.java
index 89f6f5ca5a..19359d8753 100644
--- 
a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/kahaDbJdbcLeaseQueueMasterSlaveTest.java
+++ 
b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/kahaDbJdbcLeaseQueueMasterSlaveTest.java
@@ -32,8 +32,6 @@ import org.apache.derby.jdbc.EmbeddedDataSource;
 
 public class kahaDbJdbcLeaseQueueMasterSlaveTest extends 
QueueMasterSlaveTestSupport {
     protected DataSource sharedDs;
-    protected String MASTER_URL = "tcp://localhost:62001";
-    protected String SLAVE_URL  = "tcp://localhost:62002";
     File sharedDbDirFile;
 
     @Override
@@ -54,7 +52,7 @@ public class kahaDbJdbcLeaseQueueMasterSlaveTest extends 
QueueMasterSlaveTestSup
     protected void createMaster() throws Exception {
         master = new BrokerService();
         master.setBrokerName("master");
-        master.addConnector(MASTER_URL);
+        master.addConnector("tcp://localhost:0");
         master.setUseJmx(false);
         master.setPersistent(true);
         master.setDeleteAllMessagesOnStartup(true);
@@ -87,7 +85,7 @@ public class kahaDbJdbcLeaseQueueMasterSlaveTest extends 
QueueMasterSlaveTestSup
                     BrokerService broker = new BrokerService();
                     broker.setBrokerName("slave");
                     TransportConnector connector = new TransportConnector();
-                    connector.setUri(new URI(SLAVE_URL));
+                    connector.setUri(new URI("tcp://localhost:" + masterPort));
                     broker.addConnector(connector);
                     broker.setUseJmx(false);
                     broker.setPersistent(true);
diff --git 
a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/mKahaDbQueueMasterSlaveTest.java
 
b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/mKahaDbQueueMasterSlaveTest.java
index ad9cca1ba0..917b6a3558 100644
--- 
a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/mKahaDbQueueMasterSlaveTest.java
+++ 
b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/ft/mKahaDbQueueMasterSlaveTest.java
@@ -26,13 +26,11 @@ import 
org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter;
 import org.apache.activemq.store.kahadb.MultiKahaDBPersistenceAdapter;
 
 public class mKahaDbQueueMasterSlaveTest extends QueueMasterSlaveTestSupport {
-    protected String MASTER_URL = "tcp://localhost:62001";
-    protected String SLAVE_URL  = "tcp://localhost:62002";
 
     protected void createMaster() throws Exception {
         master = new BrokerService();
         master.setBrokerName("master");
-        master.addConnector(MASTER_URL);
+        master.addConnector("tcp://localhost:0");
         master.setUseJmx(false);
         master.setPersistent(true);
         master.setDeleteAllMessagesOnStartup(true);
@@ -59,7 +57,7 @@ public class mKahaDbQueueMasterSlaveTest extends 
QueueMasterSlaveTestSupport {
                     BrokerService broker = new BrokerService();
                     broker.setBrokerName("slave");
                     TransportConnector connector = new TransportConnector();
-                    connector.setUri(new URI(SLAVE_URL));
+                    connector.setUri(new URI("tcp://localhost:" + masterPort));
                     broker.addConnector(connector);
                     // no need for 
broker.setMasterConnectorURI(masterConnectorURI)
                     // as the db lock provides the slave/master initialisation
diff --git 
a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ4485LowLimitTest.java
 
b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ4485LowLimitTest.java
index cc77fd3880..2da510caf7 100644
--- 
a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ4485LowLimitTest.java
+++ 
b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ4485LowLimitTest.java
@@ -63,22 +63,30 @@ import org.slf4j.LoggerFactory;
 public class AMQ4485LowLimitTest extends JmsMultipleBrokersTestSupport {
     static final String payload = new String(new byte[10 * 1024]);
     private static final Logger LOG = 
LoggerFactory.getLogger(AMQ4485LowLimitTest.class);
-    final int portBase = 61600;
     int numBrokers = 4;
+    final int[] brokerPorts = new int[numBrokers];
     final int numProducers = 10;
     final int numMessages = 200;
     final int consumerSleepTime = 5;
-    StringBuilder brokersUrl = new StringBuilder();
     HashMap<ActiveMQQueue, AtomicInteger> accumulators = new 
HashMap<ActiveMQQueue, AtomicInteger>();
     private ArrayList<Throwable> exceptions = new ArrayList<Throwable>();
 
-    protected void buildUrlList() throws Exception {
+    protected void collectBrokerPorts() throws Exception {
         for (int i = 0; i < numBrokers; i++) {
-            brokersUrl.append("tcp://localhost:" + (portBase + i));
+            final BrokerService broker = brokers.get("B" + i).broker;
+            brokerPorts[i] = 
broker.getTransportConnectors().get(0).getConnectUri().getPort();
+        }
+    }
+
+    protected String buildBrokersUrl() {
+        final StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < numBrokers; i++) {
+            sb.append("tcp://localhost:").append(brokerPorts[i]);
             if (i != numBrokers - 1) {
-                brokersUrl.append(',');
+                sb.append(',');
             }
         }
+        return sb.toString();
     }
 
     protected BrokerService createBroker(int brokerid) throws Exception {
@@ -95,11 +103,8 @@ public class AMQ4485LowLimitTest extends 
JmsMultipleBrokersTestSupport {
 
         broker.setUseJmx(true);
         broker.setBrokerName("B" + brokerid);
-        broker.addConnector(new URI("tcp://localhost:" + (portBase + 
brokerid)));
+        broker.addConnector(new URI("tcp://localhost:0"));
 
-        if (addToNetwork) {
-            addNetworkConnector(broker);
-        }
         broker.setSchedulePeriodForDestinationPurge(0);
         broker.getSystemUsage().getMemoryUsage().setLimit(256 * 1024 * 1024l);
 
@@ -132,12 +137,11 @@ public class AMQ4485LowLimitTest extends 
JmsMultipleBrokersTestSupport {
         return broker;
     }
 
-    private void addNetworkConnector(BrokerService broker) throws Exception {
-        StringBuilder networkConnectorUrl = new 
StringBuilder("static:(").append(brokersUrl.toString());
-        networkConnectorUrl.append(')');
+    private void addNetworkConnector(BrokerService broker, String brokersUrl) 
throws Exception {
+        final String networkConnectorUrl = "static:(" + brokersUrl + ")";
 
         for (int i = 0; i < 2; i++) {
-            NetworkConnector nc = new DiscoveryNetworkConnector(new 
URI(networkConnectorUrl.toString()));
+            final NetworkConnector nc = new DiscoveryNetworkConnector(new 
URI(networkConnectorUrl));
             nc.setName("Bridge-" + i);
             nc.setNetworkTTL(1);
             nc.setDecreaseNetworkConsumerPriority(true);
@@ -146,6 +150,7 @@ public class AMQ4485LowLimitTest extends 
JmsMultipleBrokersTestSupport {
             nc.setDynamicallyIncludedDestinations(
                 Arrays.asList(new ActiveMQDestination[]{new 
ActiveMQQueue("GW.*")}));
             broker.addNetworkConnector(nc);
+            nc.start();
         }
     }
 
@@ -156,7 +161,8 @@ public class AMQ4485LowLimitTest extends 
JmsMultipleBrokersTestSupport {
         BrokerService b = createBroker(0, false);
         b.start();
 
-        ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("tcp://localhost:" + (portBase + 0));
+        final int port = 
b.getTransportConnectors().get(0).getConnectUri().getPort();
+        ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("tcp://localhost:" + port);
         connectionFactory.setWatchTopicAdvisories(false);
 
         QueueConnection c1 = connectionFactory.createQueueConnection();
@@ -207,13 +213,19 @@ public class AMQ4485LowLimitTest extends 
JmsMultipleBrokersTestSupport {
 
     public void testBrokers() throws Exception {
 
-        buildUrlList();
-
         for (int i = 0; i < numBrokers; i++) {
             createBroker(i);
         }
 
         startAllBrokers();
+
+        // Get actual ports after brokers start and add network connectors
+        collectBrokerPorts();
+        final String brokersUrl = buildBrokersUrl();
+        for (int i = 0; i < numBrokers; i++) {
+            addNetworkConnector(brokers.get("B" + i).broker, brokersUrl);
+        }
+
         waitForBridgeFormation(numBrokers - 1);
 
         verifyPeerBrokerInfos(numBrokers - 1);
@@ -266,7 +278,7 @@ public class AMQ4485LowLimitTest extends 
JmsMultipleBrokersTestSupport {
 
     private void startConsumer(String brokerName, ActiveMQDestination 
destination) throws Exception {
         int id = Integer.parseInt(brokerName.substring(1));
-        ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("tcp://localhost:" + (portBase + id));
+        ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("tcp://localhost:" + brokerPorts[id]);
         connectionFactory.setWatchTopicAdvisories(false);
         QueueConnection queueConnection = 
connectionFactory.createQueueConnection();
         queueConnection.start();
@@ -303,7 +315,7 @@ public class AMQ4485LowLimitTest extends 
JmsMultipleBrokersTestSupport {
         ActiveMQQueue compositeQ = new ActiveMQQueue(compositeDest.toString());
 
         for (int id = 0; id < nBrokers; id++) {
-            ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("failover:(tcp://localhost:" + (portBase + id) + ")");
+            ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("failover:(tcp://localhost:" + brokerPorts[id] + ")");
             connectionFactory.setWatchTopicAdvisories(false);
 
             QueueConnection queueConnection = 
connectionFactory.createQueueConnection();
@@ -330,7 +342,7 @@ public class AMQ4485LowLimitTest extends 
JmsMultipleBrokersTestSupport {
     private List<ConsumerState> startAllGWConsumers(int nBrokers) throws 
Exception {
         List<ConsumerState> consumerStates = new LinkedList<ConsumerState>();
         for (int id = 0; id < nBrokers; id++) {
-            ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("failover:(tcp://localhost:" + (portBase + id) + ")");
+            ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("failover:(tcp://localhost:" + brokerPorts[id] + ")");
             connectionFactory.setWatchTopicAdvisories(false);
 
             QueueConnection queueConnection = 
connectionFactory.createQueueConnection();
@@ -393,7 +405,7 @@ public class AMQ4485LowLimitTest extends 
JmsMultipleBrokersTestSupport {
                 @Override
                 public void run() {
                     try {
-                        ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("failover:(tcp://localhost:" + (portBase + id) + ")");
+                        ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("failover:(tcp://localhost:" + brokerPorts[id] + ")");
                         connectionFactory.setWatchTopicAdvisories(false);
                         QueueConnection queueConnection = 
connectionFactory.createQueueConnection();
                         queueConnection.start();
diff --git 
a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ4485NetworkOfXBrokersWithNDestsFanoutTransactionTest.java
 
b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ4485NetworkOfXBrokersWithNDestsFanoutTransactionTest.java
index 4c7a4621a5..b8ed30543f 100644
--- 
a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ4485NetworkOfXBrokersWithNDestsFanoutTransactionTest.java
+++ 
b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ4485NetworkOfXBrokersWithNDestsFanoutTransactionTest.java
@@ -59,22 +59,30 @@ import org.slf4j.LoggerFactory;
 public class AMQ4485NetworkOfXBrokersWithNDestsFanoutTransactionTest extends 
JmsMultipleBrokersTestSupport {
     static final String payload = new String(new byte[10 * 1024]);
     private static final Logger LOG = 
LoggerFactory.getLogger(AMQ4485NetworkOfXBrokersWithNDestsFanoutTransactionTest.class);
-    final int portBase = 61600;
     final int numBrokers = 4;
+    final int[] brokerPorts = new int[numBrokers];
     final int numProducers = 10;
     final int numMessages = 800;
     final int consumerSleepTime = 20;
-    StringBuilder brokersUrl = new StringBuilder();
     HashMap<ActiveMQQueue, AtomicInteger> accumulators = new 
HashMap<ActiveMQQueue, AtomicInteger>();
     private ArrayList<Throwable> exceptions = new ArrayList<Throwable>();
 
-    protected void buildUrlList() throws Exception {
+    protected void collectBrokerPorts() throws Exception {
         for (int i = 0; i < numBrokers; i++) {
-            brokersUrl.append("tcp://localhost:" + (portBase + i));
+            final BrokerService broker = brokers.get("B" + i).broker;
+            brokerPorts[i] = 
broker.getTransportConnectors().get(0).getConnectUri().getPort();
+        }
+    }
+
+    protected String buildBrokersUrl() {
+        final StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < numBrokers; i++) {
+            sb.append("tcp://localhost:").append(brokerPorts[i]);
             if (i != numBrokers - 1) {
-                brokersUrl.append(',');
+                sb.append(',');
             }
         }
+        return sb.toString();
     }
 
     protected BrokerService createBroker(int brokerid) throws Exception {
@@ -86,9 +94,8 @@ public class 
AMQ4485NetworkOfXBrokersWithNDestsFanoutTransactionTest extends Jms
 
         broker.setUseJmx(true);
         broker.setBrokerName("B" + brokerid);
-        broker.addConnector(new URI("tcp://localhost:" + (portBase + 
brokerid)));
+        broker.addConnector(new URI("tcp://localhost:0"));
 
-        addNetworkConnector(broker);
         broker.setSchedulePeriodForDestinationPurge(0);
         broker.getSystemUsage().setSendFailIfNoSpace(true);
         broker.getSystemUsage().getMemoryUsage().setLimit(512 * 1024 * 1024);
@@ -113,12 +120,11 @@ public class 
AMQ4485NetworkOfXBrokersWithNDestsFanoutTransactionTest extends Jms
         return broker;
     }
 
-    private void addNetworkConnector(BrokerService broker) throws Exception {
-        StringBuilder networkConnectorUrl = new 
StringBuilder("static:(").append(brokersUrl.toString());
-        networkConnectorUrl.append(')');
+    private void addNetworkConnector(BrokerService broker, String brokersUrl) 
throws Exception {
+        final String networkConnectorUrl = "static:(" + brokersUrl + ")";
 
         for (int i = 0; i < 2; i++) {
-            NetworkConnector nc = new DiscoveryNetworkConnector(new 
URI(networkConnectorUrl.toString()));
+            final NetworkConnector nc = new DiscoveryNetworkConnector(new 
URI(networkConnectorUrl));
             nc.setName("Bridge-" + i);
             nc.setNetworkTTL(1);
             nc.setDecreaseNetworkConsumerPriority(true);
@@ -127,18 +133,25 @@ public class 
AMQ4485NetworkOfXBrokersWithNDestsFanoutTransactionTest extends Jms
             nc.setDynamicallyIncludedDestinations(
                     Arrays.asList(new ActiveMQDestination[]{new 
ActiveMQQueue("GW.*")}));
             broker.addNetworkConnector(nc);
+            nc.start();
         }
     }
 
     public void testBrokers() throws Exception {
 
-        buildUrlList();
-
         for (int i = 0; i < numBrokers; i++) {
             createBroker(i);
         }
 
         startAllBrokers();
+
+        // Get actual ports after brokers start and add network connectors
+        collectBrokerPorts();
+        final String brokersUrl = buildBrokersUrl();
+        for (int i = 0; i < numBrokers; i++) {
+            addNetworkConnector(brokers.get("B" + i).broker, brokersUrl);
+        }
+
         waitForBridgeFormation(numBrokers - 1);
 
         verifyPeerBrokerInfos(numBrokers - 1);
@@ -192,7 +205,7 @@ public class 
AMQ4485NetworkOfXBrokersWithNDestsFanoutTransactionTest extends Jms
         ActiveMQQueue compositeQ = new ActiveMQQueue(compositeDest.toString());
 
         for (int id = 0; id < nBrokers; id++) {
-            ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("failover:(tcp://localhost:" + (portBase + id) + ")");
+            ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("failover:(tcp://localhost:" + brokerPorts[id] + ")");
             connectionFactory.setWatchTopicAdvisories(false);
 
             QueueConnection queueConnection = 
connectionFactory.createQueueConnection();
@@ -219,7 +232,7 @@ public class 
AMQ4485NetworkOfXBrokersWithNDestsFanoutTransactionTest extends Jms
     private List<ConsumerState> startAllGWConsumers(int nBrokers) throws 
Exception {
         List<ConsumerState> consumerStates = new LinkedList<ConsumerState>();
         for (int id = 0; id < nBrokers; id++) {
-            ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("failover:(tcp://localhost:" + (portBase + id) + ")");
+            ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("failover:(tcp://localhost:" + brokerPorts[id] + ")");
             connectionFactory.setWatchTopicAdvisories(false);
 
             QueueConnection queueConnection = 
connectionFactory.createQueueConnection();
@@ -281,7 +294,7 @@ public class 
AMQ4485NetworkOfXBrokersWithNDestsFanoutTransactionTest extends Jms
                 @Override
                 public void run() {
                     try {
-                        ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("failover:(tcp://localhost:" + (portBase + id) + ")");
+                        ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("failover:(tcp://localhost:" + brokerPorts[id] + ")");
                         connectionFactory.setWatchTopicAdvisories(false);
                         QueueConnection queueConnection = 
connectionFactory.createQueueConnection();
                         queueConnection.start();
diff --git 
a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/failover/ConnectionHangOnStartupTest.java
 
b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/failover/ConnectionHangOnStartupTest.java
index ea604c28ed..497ede89eb 100644
--- 
a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/failover/ConnectionHangOnStartupTest.java
+++ 
b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/failover/ConnectionHangOnStartupTest.java
@@ -37,10 +37,7 @@ public class ConnectionHangOnStartupTest {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(ConnectionHangOnStartupTest.class);
 
-    // short maxInactivityDurationInitalDelay to trigger the bug, short
-    // maxReconnectDelay so that the test runs faster (because it will retry
-    // connection sooner)
-    protected String uriString = 
"failover://(tcp://localhost:62001?wireFormat.maxInactivityDurationInitalDelay=1,tcp://localhost:62002?wireFormat.maxInactivityDurationInitalDelay=1)?randomize=false&maxReconnectDelay=200";
+    protected String uriString;
     protected BrokerService master = null;
     protected AtomicReference<BrokerService> slave = new 
AtomicReference<BrokerService>();
 
@@ -60,10 +57,20 @@ public class ConnectionHangOnStartupTest {
     }
 
     protected void createMaster() throws Exception {
+        // Use ephemeral port for XML-based broker config
+        System.setProperty("masterPort", "0");
+
         BrokerFactoryBean brokerFactory = new BrokerFactoryBean(new 
ClassPathResource(getMasterXml()));
         brokerFactory.afterPropertiesSet();
         master = brokerFactory.getBroker();
         master.start();
+
+        // Get actual port and build failover URI with short 
maxInactivityDurationInitalDelay
+        // to trigger the bug, and short maxReconnectDelay so the test runs 
faster
+        final int masterPort = 
master.getTransportConnectors().get(0).getConnectUri().getPort();
+        System.setProperty("slavePort", String.valueOf(masterPort));
+        uriString = "failover://(tcp://localhost:" + masterPort
+                + 
"?wireFormat.maxInactivityDurationInitalDelay=1)?randomize=false&maxReconnectDelay=200";
     }
 
     protected void createSlave() throws Exception {
diff --git 
a/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TestBrokerConnectionDuplexExcludedDestinations.java
 
b/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TestBrokerConnectionDuplexExcludedDestinations.java
index 2e0f11b6cc..0e26e43fe2 100644
--- 
a/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TestBrokerConnectionDuplexExcludedDestinations.java
+++ 
b/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TestBrokerConnectionDuplexExcludedDestinations.java
@@ -48,33 +48,36 @@ public class TestBrokerConnectionDuplexExcludedDestinations 
extends TestCase {
 
     @Override
     public void setUp() throws Exception {
-        // Hub broker
+        // Hub broker - start first to get its port
         String configFileName = 
"org/apache/activemq/usecases/receiver-duplex.xml";
         URI uri = new URI("xbean:" + configFileName);
         receiverBroker = BrokerFactory.createBroker(uri);
         receiverBroker.setPersistent(false);
         receiverBroker.setBrokerName("Hub");
+        receiverBroker.start();
+
+        // Get hub's actual port and set it for the sender XML network 
connector
+        final int hubPort = 
receiverBroker.getTransportConnectors().get(0).getConnectUri().getPort();
+        System.setProperty("receiverPort", String.valueOf(hubPort));
 
-        // Spoke broker
+        // Spoke broker - created after hub starts so ${receiverPort} is 
resolved
         configFileName = "org/apache/activemq/usecases/sender-duplex.xml";
         uri = new URI("xbean:" + configFileName);
         senderBroker = BrokerFactory.createBroker(uri);
         senderBroker.setPersistent(false);
         senderBroker.setBrokerName("Spoke");
-
-        // Start both Hub and Spoke broker
-        receiverBroker.start();
         senderBroker.start();
 
-        // create hub session
-        ConnectionFactory cfHub = new 
ActiveMQConnectionFactory("tcp://localhost:62002");
+        final int spokePort = 
senderBroker.getTransportConnectors().get(0).getConnectUri().getPort();
 
+        // create hub session
+        final ConnectionFactory cfHub = new 
ActiveMQConnectionFactory("tcp://localhost:" + hubPort);
         hubConnection = cfHub.createConnection();
         hubConnection.start();
         hubSession = hubConnection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
 
         // create spoke session
-        ConnectionFactory cfSpoke = new 
ActiveMQConnectionFactory("tcp://localhost:62001");
+        final ConnectionFactory cfSpoke = new 
ActiveMQConnectionFactory("tcp://localhost:" + spokePort);
         spokeConnection = cfSpoke.createConnection();
         spokeConnection.start();
         spokeSession = spokeConnection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
diff --git 
a/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TwoBrokerTopicSendReceiveUsingJavaConfigurationTest.java
 
b/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TwoBrokerTopicSendReceiveUsingJavaConfigurationTest.java
index c1f2c949d8..0d0c26c2a9 100644
--- 
a/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TwoBrokerTopicSendReceiveUsingJavaConfigurationTest.java
+++ 
b/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TwoBrokerTopicSendReceiveUsingJavaConfigurationTest.java
@@ -22,11 +22,13 @@ import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.activemq.broker.BrokerService;
 
 /**
- * 
+ *
  */
 public class TwoBrokerTopicSendReceiveUsingJavaConfigurationTest extends 
TwoBrokerTopicSendReceiveTest {
     BrokerService receiveBroker;
     BrokerService sendBroker;
+    int sendPort;
+    int receivePort;
 
     protected ActiveMQConnectionFactory createReceiverConnectionFactory() 
throws JMSException {
         try {
@@ -34,12 +36,16 @@ public class 
TwoBrokerTopicSendReceiveUsingJavaConfigurationTest extends TwoBrok
             receiveBroker.setBrokerName("receiveBroker");
             receiveBroker.setUseJmx(false);
             receiveBroker.setPersistent(false);
-            receiveBroker.addConnector("tcp://localhost:62002");
-            
receiveBroker.addNetworkConnector("static:failover:tcp://localhost:62001");
+            receiveBroker.addConnector("tcp://localhost:0");
             receiveBroker.start();
 
-            ActiveMQConnectionFactory factory = new 
ActiveMQConnectionFactory("tcp://localhost:62002");
-            return factory;
+            receivePort = 
receiveBroker.getTransportConnectors().get(0).getConnectUri().getPort();
+
+            // Add network connectors now that both ports are known
+            sendBroker.addNetworkConnector("static:failover:tcp://localhost:" 
+ receivePort);
+            
receiveBroker.addNetworkConnector("static:failover:tcp://localhost:" + 
sendPort);
+
+            return new ActiveMQConnectionFactory("tcp://localhost:" + 
receivePort);
         } catch (Exception e) {
             e.printStackTrace();
             return null;
@@ -52,12 +58,12 @@ public class 
TwoBrokerTopicSendReceiveUsingJavaConfigurationTest extends TwoBrok
             sendBroker.setBrokerName("sendBroker");
             sendBroker.setUseJmx(false);
             sendBroker.setPersistent(false);
-            sendBroker.addConnector("tcp://localhost:62001");
-            
sendBroker.addNetworkConnector("static:failover:tcp://localhost:62002");
+            sendBroker.addConnector("tcp://localhost:0");
             sendBroker.start();
 
-            ActiveMQConnectionFactory factory = new 
ActiveMQConnectionFactory("tcp://localhost:62001");
-            return factory;
+            sendPort = 
sendBroker.getTransportConnectors().get(0).getConnectUri().getPort();
+
+            return new ActiveMQConnectionFactory("tcp://localhost:" + 
sendPort);
         } catch (Exception e) {
             e.printStackTrace();
             return null;
diff --git 
a/activemq-unit-tests/src/test/resources/org/apache/activemq/broker/ft/sharedFileMaster.xml
 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/broker/ft/sharedFileMaster.xml
index f5eef67da2..81ecf2dc64 100644
--- 
a/activemq-unit-tests/src/test/resources/org/apache/activemq/broker/ft/sharedFileMaster.xml
+++ 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/broker/ft/sharedFileMaster.xml
@@ -26,7 +26,7 @@
 
   <broker brokerName="shared"  useJmx="false" 
deleteAllMessagesOnStartup="true"  
xmlns="http://activemq.apache.org/schema/core";>
     <transportConnectors>
-      <transportConnector uri="tcp://localhost:62001"/>
+      <transportConnector uri="tcp://localhost:0"/>
     </transportConnectors>
        
   </broker>
diff --git 
a/activemq-unit-tests/src/test/resources/org/apache/activemq/broker/ft/sharedFileSlave.xml
 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/broker/ft/sharedFileSlave.xml
index 7c88a8c689..999366befb 100644
--- 
a/activemq-unit-tests/src/test/resources/org/apache/activemq/broker/ft/sharedFileSlave.xml
+++ 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/broker/ft/sharedFileSlave.xml
@@ -26,7 +26,7 @@
 
   <broker brokerName="shared" useJmx="false"  
deleteAllMessagesOnStartup="false"  
xmlns="http://activemq.apache.org/schema/core";>
     <transportConnectors>
-      <transportConnector uri="tcp://localhost:62002"/>
+      <transportConnector uri="tcp://localhost:${slavePort}"/>
     </transportConnectors>
     
        
diff --git 
a/activemq-unit-tests/src/test/resources/org/apache/activemq/usecases/receiver-duplex.xml
 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/usecases/receiver-duplex.xml
index 9b4750fd69..08471f6f32 100644
--- 
a/activemq-unit-tests/src/test/resources/org/apache/activemq/usecases/receiver-duplex.xml
+++ 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/usecases/receiver-duplex.xml
@@ -33,7 +33,7 @@
 
     <!-- The transport connectors ActiveMQ will listen to -->
     <transportConnectors>
-       <transportConnector uri="tcp://localhost:62002"/>
+       <transportConnector uri="tcp://localhost:0"/>
     </transportConnectors>
 
     
diff --git 
a/activemq-unit-tests/src/test/resources/org/apache/activemq/usecases/sender-duplex.xml
 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/usecases/sender-duplex.xml
index a8195c0745..2d3038b2ba 100644
--- 
a/activemq-unit-tests/src/test/resources/org/apache/activemq/usecases/sender-duplex.xml
+++ 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/usecases/sender-duplex.xml
@@ -30,7 +30,7 @@
     <!-- The store and forward broker networks ActiveMQ will listen to -->
     <networkConnectors>
       <!-- by default just auto discover the other brokers -->
-      <networkConnector name="monitoring" uri="static:(tcp://localhost:62002)" 
duplex="true" >
+      <networkConnector name="monitoring" 
uri="static:(tcp://localhost:${receiverPort})" duplex="true" >
        <dynamicallyIncludedDestinations>
                <queue physicalName="include.test.foo"/>
                <topic physicalName="include.test.bar"/>
@@ -51,7 +51,7 @@
 
     <!-- The transport connectors ActiveMQ will listen to -->
     <transportConnectors>
-       <transportConnector uri="tcp://localhost:62001"/>
+       <transportConnector uri="tcp://localhost:0"/>
     </transportConnectors>
   
       


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact



Reply via email to