You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by jb...@apache.org on 2026/02/17 15:33:45 UTC

(activemq) branch main updated: Use ephemeral ports in HTTP/WS transport tests (#1675)

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

jbonofre pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq.git


The following commit(s) were added to refs/heads/main by this push:
     new 965b3bcfda Use ephemeral ports in HTTP/WS transport tests (#1675)
965b3bcfda is described below

commit 965b3bcfdac38462a48ef30393b910353ea4404e
Author: Jean-Louis Monteiro <je...@gmail.com>
AuthorDate: Tue Feb 17 16:33:40 2026 +0100

    Use ephemeral ports in HTTP/WS transport tests (#1675)
---
 .../transport/http/HttpTransportBrokerTest.java    |  4 +--
 .../transport/https/HttpsTransportBrokerTest.java  |  2 +-
 .../transport/ws/MQTTWSSTransportTest.java         |  2 +-
 .../activemq/transport/ws/MQTTWSTransportTest.java |  4 +++
 .../transport/ws/StompWSSTransportTest.java        |  2 +-
 .../transport/ws/WSTransportHttpTraceTest.java     |  5 ++--
 .../transport/ws/WSTransportLinkStealingTest.java  |  5 ++--
 .../activemq/transport/ws/WSTransportTest.java     |  6 ++---
 .../transport/ws/WSTransportTestSupport.java       | 30 +++++++++++-----------
 .../transport/wss/WSSTransportHttpTraceTest.java   |  5 ++--
 .../wss/WSSTransportLinkStealingTest.java          |  2 +-
 .../activemq/transport/wss/WSSTransportTest.java   |  6 ++---
 .../apache/activemq/broker/BrokerTestSupport.java  |  1 +
 .../transport/TransportBrokerTestSupport.java      |  4 ++-
 .../auto/AutoNIOSslTransportBrokerTest.java        |  2 +-
 .../transport/auto/AutoSslTransportBrokerTest.java |  2 +-
 .../transport/nio/NIOSSLTransportBrokerTest.java   |  2 +-
 .../transport/tcp/SslTransportBrokerTest.java      |  2 +-
 18 files changed, 47 insertions(+), 39 deletions(-)

diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/http/HttpTransportBrokerTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/http/HttpTransportBrokerTest.java
index 2170541525..488964ad5f 100644
--- a/activemq-http/src/test/java/org/apache/activemq/transport/http/HttpTransportBrokerTest.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/http/HttpTransportBrokerTest.java
@@ -27,13 +27,13 @@ import org.apache.activemq.transport.TransportBrokerTestSupport;
 public class HttpTransportBrokerTest extends TransportBrokerTestSupport {
 
     protected String getBindLocation() {
-        return "http://localhost:8081";
+        return "http://localhost:0";
     }
 
     protected void setUp() throws Exception {
         maxWait = 2000;
         super.setUp();
-        WaitForJettyListener.waitForJettySocketToAccept(getBindLocation());
+        WaitForJettyListener.waitForJettySocketToAccept(connector.getPublishableConnectURI().toString());
     }
 
     protected BrokerService createBroker() throws Exception {
diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/https/HttpsTransportBrokerTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/https/HttpsTransportBrokerTest.java
index b57cf907f6..37738bcd65 100644
--- a/activemq-http/src/test/java/org/apache/activemq/transport/https/HttpsTransportBrokerTest.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/https/HttpsTransportBrokerTest.java
@@ -25,7 +25,7 @@ public class HttpsTransportBrokerTest extends HttpTransportBrokerTest {
 
     @Override
     protected String getBindLocation() {
-        return "https://localhost:8161";
+        return "https://localhost:0";
     }
 
     @Override
diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSSTransportTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSSTransportTest.java
index f0a9ac9acc..f519f6ecf8 100644
--- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSSTransportTest.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSSTransportTest.java
@@ -40,7 +40,7 @@ public class MQTTWSSTransportTest extends MQTTWSTransportTest {
 
     @Override
     protected String getWSConnectorURI() {
-        return "wss://localhost:61623";
+        return "wss://localhost:0";
     }
 
 }
diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSTransportTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSTransportTest.java
index 671f77f64f..9c524c4d3e 100644
--- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSTransportTest.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSTransportTest.java
@@ -73,6 +73,7 @@ public class MQTTWSTransportTest extends WSTransportTestSupport {
 
         SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
         sslContextFactory.setTrustAll(true);
+        sslContextFactory.setEndpointIdentificationAlgorithm(null);
         ClientConnector clientConnector = new ClientConnector();
         clientConnector.setSslContextFactory(sslContextFactory);
 
@@ -97,6 +98,9 @@ public class MQTTWSTransportTest extends WSTransportTestSupport {
         if (wsMQTTConnection != null) {
             wsMQTTConnection.close();
             wsMQTTConnection = null;
+        }
+        if (wsClient != null) {
+            wsClient.stop();
             wsClient = null;
         }
 
diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/StompWSSTransportTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/StompWSSTransportTest.java
index a00eac1a5d..89f8bfaf4a 100644
--- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/StompWSSTransportTest.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/StompWSSTransportTest.java
@@ -20,7 +20,7 @@ public class StompWSSTransportTest extends StompWSTransportTest {
 
     @Override
     protected String getWSConnectorURI() {
-        return "wss://localhost:61623";
+        return "wss://localhost:0";
     }
 
 }
diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportHttpTraceTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportHttpTraceTest.java
index 64392b15a9..7a39d6cb87 100644
--- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportHttpTraceTest.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportHttpTraceTest.java
@@ -43,7 +43,7 @@ public class WSTransportHttpTraceTest extends WSTransportTestSupport {
 
     @Override
     protected String getWSConnectorURI() {
-        String uri = "ws://127.0.0.1:61623?websocket.maxTextMessageSize=99999&transport.maxIdleTime=1001";
+        String uri = "ws://127.0.0.1:0?websocket.maxTextMessageSize=99999&transport.maxIdleTime=1001";
         uri = enableTraceParam != null ? uri + "&" + enableTraceParam : uri;
         return uri;
     }
@@ -54,7 +54,8 @@ public class WSTransportHttpTraceTest extends WSTransportTestSupport {
      */
     @Test(timeout=10000)
     public void testHttpTraceEnabled() throws Exception {
-        HttpTraceTestSupport.testHttpTraceEnabled("http://127.0.0.1:61623", expectedStatus, null);
+        HttpTraceTestSupport.testHttpTraceEnabled("http://127.0.0.1:" + wsConnectUri.getPort(),
+                expectedStatus, null);
     }
 
 }
diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportLinkStealingTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportLinkStealingTest.java
index 2ca03c86d7..096b87bea1 100644
--- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportLinkStealingTest.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportLinkStealingTest.java
@@ -20,6 +20,7 @@ package org.apache.activemq.transport.ws;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import java.io.IOException;
 import java.net.URI;
 
 import org.apache.activemq.broker.BrokerFactory;
@@ -37,7 +38,6 @@ public class WSTransportLinkStealingTest {
     private static final Logger LOG = LoggerFactory.getLogger(WSTransportLinkStealingTest.class);
 
     private BrokerService broker;
-
     protected BrokerService createBroker(boolean deleteMessages) throws Exception {
         BrokerService broker = BrokerFactory.createBroker(
                 new URI("broker:()/localhost?persistent=false&useJmx=false"));
@@ -59,7 +59,8 @@ public class WSTransportLinkStealingTest {
     }
 
     protected String getWSConnectorURI() {
-        return "ws://127.0.0.1:61623?allowLinkStealing=true&websocket.maxTextMessageSize=99999&transport.maxIdleTime=1001";
+        return "ws://127.0.0.1:0" +
+               "?allowLinkStealing=true&websocket.maxTextMessageSize=99999&transport.maxIdleTime=1001";
     }
 
     protected void stopBroker() {
diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportTest.java
index 9ea1cbbbfb..d0e2d3bccc 100644
--- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportTest.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportTest.java
@@ -58,8 +58,6 @@ public class WSTransportTest extends WSTransportTestSupport {
     private String stompUri;
     private StompConnection stompConnection = new StompConnection();
 
-    protected final int port = 61623;
-
     @Override
     protected void addAdditionalConnectors(BrokerService service) throws Exception {
         stompUri = service.addConnector("stomp://localhost:0").getPublishableConnectString();
@@ -67,7 +65,7 @@ public class WSTransportTest extends WSTransportTestSupport {
 
     @Override
     protected String getWSConnectorURI() {
-        return "ws://127.0.0.1:" + port + "?websocket.maxTextMessageSize=99999&transport.maxIdleTime=1001";
+        return "ws://127.0.0.1:0?websocket.maxTextMessageSize=99999&transport.maxIdleTime=1001";
     }
 
     protected Server createWebServer() throws Exception {
@@ -138,7 +136,7 @@ public class WSTransportTest extends WSTransportTestSupport {
 
     @Test(timeout=10000)
     public void testGet() throws Exception {
-        testGet("http://127.0.0.1:" + port, null);
+        testGet("http://127.0.0.1:" + wsConnectUri.getPort(), null);
     }
 
 
diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportTestSupport.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportTestSupport.java
index 8c4a2c7684..7a3c3933b9 100644
--- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportTestSupport.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportTestSupport.java
@@ -17,14 +17,14 @@
 package org.apache.activemq.transport.ws;
 
 import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.URI;
 
 import jakarta.jms.JMSException;
 import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
-import javax.net.ServerSocketFactory;
-
 import org.apache.activemq.broker.BrokerService;
 import org.apache.activemq.broker.jmx.BrokerViewMBean;
 import org.apache.activemq.broker.jmx.QueueViewMBean;
@@ -70,11 +70,14 @@ public class WSTransportTestSupport {
     }
 
     protected String getWSConnectionURI() {
+        if (wsConnectUri != null) {
+            return wsConnectUri.toString();
+        }
         return "ws://127.0.0.1:" + getProxyPort();
     }
 
     protected String getWSConnectorURI() {
-        return "ws://127.0.0.1:" + getProxyPort() +
+        return "ws://127.0.0.1:0" +
                "?allowLinkStealing=" + isAllowLinkStealing() +
                "&websocket.maxTextMessageSize=99999" +
                "&transport.idleTimeout=1001" +
@@ -101,7 +104,8 @@ public class WSTransportTestSupport {
         context.afterPropertiesSet();
         broker.setSslContext(context);
 
-        wsConnectUri = broker.addConnector(getWSConnectorURI()).getPublishableConnectURI();
+        org.apache.activemq.broker.TransportConnector wsConnector =
+                broker.addConnector(getWSConnectorURI());
 
         broker.setAdvisorySupport(advisorySupport);
         broker.setUseJmx(true);
@@ -113,6 +117,8 @@ public class WSTransportTestSupport {
 
         addAdditionalConnectors(broker);
 
+        wsConnectUri = wsConnector.getPublishableConnectURI();
+
         return broker;
     }
 
@@ -126,18 +132,12 @@ public class WSTransportTestSupport {
 
     protected int getProxyPort() {
         if (proxyPort == 0) {
-            ServerSocket ss = null;
-            try {
-                ss = ServerSocketFactory.getDefault().createServerSocket(0);
+            try (ServerSocket ss = new ServerSocket()) {
+                ss.setReuseAddress(true);
+                ss.bind(new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 0));
                 proxyPort = ss.getLocalPort();
-            } catch (IOException e) { // ignore
-            } finally {
-                try {
-                    if (ss != null ) {
-                        ss.close();
-                    }
-                } catch (IOException e) { // ignore
-                }
+            } catch (IOException e) {
+                throw new IllegalStateException("Could not find a free TCP/IP port for WS tests", e);
             }
         }
 
diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportHttpTraceTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportHttpTraceTest.java
index c3f2599b1e..e160047790 100644
--- a/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportHttpTraceTest.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportHttpTraceTest.java
@@ -44,12 +44,13 @@ public class WSSTransportHttpTraceTest extends WSTransportHttpTraceTest {
         factory.setEndpointIdentificationAlgorithm(null);       // service cert does not contain a SAN
         factory.setSslContext(broker.getSslContext().getSSLContext());
 
-        HttpTraceTestSupport.testHttpTraceEnabled("https://127.0.0.1:61623", expectedStatus, factory);
+        HttpTraceTestSupport.testHttpTraceEnabled("https://localhost:" + wsConnectUri.getPort(),
+                expectedStatus, factory);
     }
 
     @Override
     protected String getWSConnectorURI() {
-        String uri = "wss://127.0.0.1:61623?websocket.maxTextMessageSize=99999&transport.maxIdleTime=1001";
+        String uri = "wss://localhost:0?websocket.maxTextMessageSize=99999&transport.maxIdleTime=1001";
         uri = enableTraceParam != null ? uri + "&" + enableTraceParam : uri;
         return uri;
     }
diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportLinkStealingTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportLinkStealingTest.java
index dfa9a79247..0cc532beb5 100644
--- a/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportLinkStealingTest.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportLinkStealingTest.java
@@ -22,6 +22,6 @@ public class WSSTransportLinkStealingTest extends WSTransportLinkStealingTest {
 
     @Override
     protected String getWSConnectorURI() {
-        return "wss://localhost:61623?allowLinkStealing=true";
+        return "wss://localhost:0?allowLinkStealing=true";
     }
 }
diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportTest.java
index c93886c61e..2387802016 100644
--- a/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportTest.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportTest.java
@@ -41,7 +41,7 @@ public class WSSTransportTest extends WSTransportTest {
 
     @Override
     protected String getWSConnectorURI() {
-        return "wss://localhost:" + port;
+        return "wss://localhost:0";
     }
 
     @Ignore
@@ -52,12 +52,12 @@ public class WSSTransportTest extends WSTransportTest {
         factory.setEndpointIdentificationAlgorithm(null);       // service cert does not contain a SAN
         factory.setSslContext(broker.getSslContext().getSSLContext());
 
-        testGet("https://127.0.0.1:" + port, factory);
+        testGet("https://127.0.0.1:" + wsConnectUri.getPort(), factory);
     }
 
     @Override
     protected String getTestURI() {
         int proxyPort = getProxyPort();
-        return "https://localhost:" + proxyPort + "/websocket.html#wss://localhost:" + port;
+        return "https://localhost:" + proxyPort + "/websocket.html#" + wsConnectUri;
     }
 }
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerTestSupport.java b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerTestSupport.java
index b9a9ec991e..0e4242a0da 100644
--- a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerTestSupport.java
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerTestSupport.java
@@ -86,6 +86,7 @@ public class BrokerTestSupport extends CombinationTestSupport {
         policyMap.setDefaultEntry(getDefaultPolicy());
         broker.setDestinationPolicy(policyMap);
         broker.start();
+        broker.waitUntilStarted();
     }
 
     protected PolicyEntry getDefaultPolicy() {
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/TransportBrokerTestSupport.java b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/TransportBrokerTestSupport.java
index 8c19ea88b8..59ca6a04c0 100644
--- a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/TransportBrokerTestSupport.java
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/TransportBrokerTestSupport.java
@@ -30,10 +30,12 @@ public abstract class TransportBrokerTestSupport extends BrokerTest {
 
     protected TransportConnector connector;
     private ArrayList<StubConnection> connections = new ArrayList<StubConnection>();
+    private URI bindURI;
 
     @Override
     protected void setUp() throws Exception {
         super.setUp();
+        bindURI = connector.getPublishableConnectURI();
     }
 
     @Override
@@ -68,7 +70,7 @@ public abstract class TransportBrokerTestSupport extends BrokerTest {
     }
 
     protected URI getBindURI() throws URISyntaxException {
-        return new URI(getBindLocation());
+        return bindURI;
     }
 
     @Override
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/auto/AutoNIOSslTransportBrokerTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/auto/AutoNIOSslTransportBrokerTest.java
index cb90b415c3..1758f6501b 100644
--- a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/auto/AutoNIOSslTransportBrokerTest.java
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/auto/AutoNIOSslTransportBrokerTest.java
@@ -38,7 +38,7 @@ public class AutoNIOSslTransportBrokerTest extends TransportBrokerTestSupport {
 
     @Override
     protected URI getBindURI() throws URISyntaxException {
-        return new URI("auto+nio+ssl://localhost:0?soWriteTimeout=20000");
+        return new URI(super.getBindURI().toString() + "?soWriteTimeout=20000");
     }
 
     @Override
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/auto/AutoSslTransportBrokerTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/auto/AutoSslTransportBrokerTest.java
index 203f6ee97a..603153921e 100644
--- a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/auto/AutoSslTransportBrokerTest.java
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/auto/AutoSslTransportBrokerTest.java
@@ -36,7 +36,7 @@ public class AutoSslTransportBrokerTest extends TransportBrokerTestSupport {
 
     @Override
     protected URI getBindURI() throws URISyntaxException {
-        return new URI("auto+ssl://localhost:0?soWriteTimeout=20000");
+        return new URI(super.getBindURI().toString() + "?soWriteTimeout=20000");
     }
 
     @Override
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/nio/NIOSSLTransportBrokerTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/nio/NIOSSLTransportBrokerTest.java
index 2d6d13ef19..1d7a3a7b05 100644
--- a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/nio/NIOSSLTransportBrokerTest.java
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/nio/NIOSSLTransportBrokerTest.java
@@ -36,7 +36,7 @@ public class NIOSSLTransportBrokerTest extends TransportBrokerTestSupport {
 
     @Override
     protected URI getBindURI() throws URISyntaxException {
-        return new URI("nio+ssl://localhost:0?soWriteTimeout=20000");
+        return new URI(super.getBindURI().toString() + "?soWriteTimeout=20000");
     }
 
     @Override
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/tcp/SslTransportBrokerTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/tcp/SslTransportBrokerTest.java
index 33f44e85e0..6913a8f952 100644
--- a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/tcp/SslTransportBrokerTest.java
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/tcp/SslTransportBrokerTest.java
@@ -35,7 +35,7 @@ public class SslTransportBrokerTest extends TransportBrokerTestSupport {
 
     @Override
     protected URI getBindURI() throws URISyntaxException {
-        return new URI("ssl://localhost:0?soWriteTimeout=20000");
+        return new URI(super.getBindURI().toString() + "?soWriteTimeout=20000");
     }
 
     protected void setUp() throws Exception {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@activemq.apache.org
For additional commands, e-mail: commits-help@activemq.apache.org
For further information, visit: https://activemq.apache.org/contact