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

gnodet 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 10c8980edf68 CAMEL-23431: Migrate AS2 tests from AvailablePortFinder 
to port-0 binding
10c8980edf68 is described below

commit 10c8980edf681a2e61b00469e2e009d44c5235cd
Author: Guillaume Nodet <[email protected]>
AuthorDate: Wed May 6 17:41:01 2026 +0200

    CAMEL-23431: Migrate AS2 tests from AvailablePortFinder to port-0 binding
    
    - Add getLocalPort() to AS2ServerConnection and AS2AsyncMDNServerConnection
    - Migrate AS2 API tests to bind to port 0 and read back actual port
    - Migrate AS2 component tests to use port 0 in configuration with 
doPostSetup() port readback
    - Eliminates TOCTOU race condition from AvailablePortFinder in 10 test files
---
 .../component/as2/AS2ServerManagerEncryptedIT.java   |  6 +++---
 .../camel/component/as2/AS2ServerManagerIT.java      | 12 ++++++------
 .../camel/component/as2/AS2ServerManagerITBase.java  | 20 ++++++++++++++------
 .../camel/component/as2/AS2ServerSecTestBase.java    | 20 ++++++++++++++------
 4 files changed, 37 insertions(+), 21 deletions(-)

diff --git 
a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerEncryptedIT.java
 
b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerEncryptedIT.java
index 09e415d54007..e4a6392d791f 100644
--- 
a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerEncryptedIT.java
+++ 
b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerEncryptedIT.java
@@ -60,7 +60,7 @@ public class AS2ServerManagerEncryptedIT extends 
AS2ServerManagerITBase {
     public void receiveEnvelopedMessageTest() throws Exception {
         AS2ClientConnection clientConnection
                 = new AS2ClientConnection(
-                        AS2_VERSION, USER_AGENT, CLIENT_FQDN, TARGET_HOST, 
targetPort.getPort(), HTTP_SOCKET_TIMEOUT,
+                        AS2_VERSION, USER_AGENT, CLIENT_FQDN, TARGET_HOST, 
targetPort, HTTP_SOCKET_TIMEOUT,
                         HTTP_CONNECTION_TIMEOUT, HTTP_CONNECTION_POOL_SIZE, 
HTTP_CONNECTION_POOL_TTL, clientSslContext,
                         null);
         AS2ClientManager clientManager = new 
AS2ClientManager(clientConnection);
@@ -96,7 +96,7 @@ public class AS2ServerManagerEncryptedIT extends 
AS2ServerManagerITBase {
         assertEquals(AS2_NAME, 
request.getFirstHeader(AS2Header.AS2_TO).getValue(), "Unexpected AS2 to value");
         
assertTrue(request.getFirstHeader(AS2Header.MESSAGE_ID).getValue().endsWith(CLIENT_FQDN
 + ">"),
                 "Unexpected message id value");
-        assertEquals(TARGET_HOST + ":" + targetPort.getPort(), 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
+        assertEquals(TARGET_HOST + ":" + targetPort, 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
                 "Unexpected target host value");
         assertEquals(USER_AGENT, 
request.getFirstHeader(AS2Header.USER_AGENT).getValue(), "Unexpected user agent 
value");
         assertNotNull(request.getFirstHeader(AS2Header.DATE), "Date value 
missing");
@@ -133,7 +133,7 @@ public class AS2ServerManagerEncryptedIT extends 
AS2ServerManagerITBase {
     public void receiveEnvelopedCompressedAndSignedMessageTest() throws 
Exception {
         AS2ClientConnection clientConnection
                 = new AS2ClientConnection(
-                        AS2_VERSION, USER_AGENT, CLIENT_FQDN, TARGET_HOST, 
targetPort.getPort(), HTTP_SOCKET_TIMEOUT,
+                        AS2_VERSION, USER_AGENT, CLIENT_FQDN, TARGET_HOST, 
targetPort, HTTP_SOCKET_TIMEOUT,
                         HTTP_CONNECTION_TIMEOUT, HTTP_CONNECTION_POOL_SIZE, 
HTTP_CONNECTION_POOL_TTL, clientSslContext,
                         null);
         AS2ClientManager clientManager = new 
AS2ClientManager(clientConnection);
diff --git 
a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java
 
b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java
index 42d5eabc19de..5fa7367d76d1 100644
--- 
a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java
+++ 
b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java
@@ -127,7 +127,7 @@ public class AS2ServerManagerIT extends 
AS2ServerManagerITBase {
         assertEquals(AS2_NAME, 
request.getFirstHeader(AS2Header.AS2_TO).getValue(), "Unexpected AS2 to value");
         
assertTrue(request.getFirstHeader(AS2Header.MESSAGE_ID).getValue().endsWith(CLIENT_FQDN
 + ">"),
                 "Unexpected message id value");
-        assertEquals(TARGET_HOST + ":" + targetPort.getPort(), 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
+        assertEquals(TARGET_HOST + ":" + targetPort, 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
                 "Unexpected target host value");
         assertEquals(USER_AGENT, 
request.getFirstHeader(AS2Header.USER_AGENT).getValue(), "Unexpected user agent 
value");
         assertNotNull(request.getFirstHeader(AS2Header.DATE), "Date value 
missing");
@@ -204,7 +204,7 @@ public class AS2ServerManagerIT extends 
AS2ServerManagerITBase {
         assertEquals(AS2_NAME, 
request.getFirstHeader(AS2Header.AS2_TO).getValue(), "Unexpected AS2 to value");
         
assertTrue(request.getFirstHeader(AS2Header.MESSAGE_ID).getValue().endsWith(CLIENT_FQDN
 + ">"),
                 "Unexpected message id value");
-        assertEquals(TARGET_HOST + ":" + targetPort.getPort(), 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
+        assertEquals(TARGET_HOST + ":" + targetPort, 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
                 "Unexpected target host value");
         assertEquals(USER_AGENT, 
request.getFirstHeader(AS2Header.USER_AGENT).getValue(), "Unexpected user agent 
value");
         assertNotNull(request.getFirstHeader(AS2Header.DATE), "Date value 
missing");
@@ -242,7 +242,7 @@ public class AS2ServerManagerIT extends 
AS2ServerManagerITBase {
     private AS2ClientConnection getAs2ClientConnection() throws IOException {
         AS2ClientConnection clientConnection
                 = new AS2ClientConnection(
-                        AS2_VERSION, USER_AGENT, CLIENT_FQDN, TARGET_HOST, 
targetPort.getPort(), HTTP_SOCKET_TIMEOUT,
+                        AS2_VERSION, USER_AGENT, CLIENT_FQDN, TARGET_HOST, 
targetPort, HTTP_SOCKET_TIMEOUT,
                         HTTP_CONNECTION_TIMEOUT, HTTP_CONNECTION_POOL_SIZE, 
HTTP_CONNECTION_POOL_TTL, clientSslContext,
                         null);
         return clientConnection;
@@ -303,7 +303,7 @@ public class AS2ServerManagerIT extends 
AS2ServerManagerITBase {
         assertEquals(AS2_NAME, 
request.getFirstHeader(AS2Header.AS2_TO).getValue(), "Unexpected AS2 to value");
         
assertTrue(request.getFirstHeader(AS2Header.MESSAGE_ID).getValue().endsWith(CLIENT_FQDN
 + ">"),
                 "Unexpected message id value");
-        assertEquals(TARGET_HOST + ":" + targetPort.getPort(), 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
+        assertEquals(TARGET_HOST + ":" + targetPort, 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
                 "Unexpected target host value");
         assertEquals(USER_AGENT, 
request.getFirstHeader(AS2Header.USER_AGENT).getValue(), "Unexpected user agent 
value");
         assertNotNull(request.getFirstHeader(AS2Header.DATE), "Date value 
missing");
@@ -382,7 +382,7 @@ public class AS2ServerManagerIT extends 
AS2ServerManagerITBase {
         assertEquals(AS2_NAME, 
request.getFirstHeader(AS2Header.AS2_TO).getValue(), "Unexpected AS2 to value");
         
assertTrue(request.getFirstHeader(AS2Header.MESSAGE_ID).getValue().endsWith(CLIENT_FQDN
 + ">"),
                 "Unexpected message id value");
-        assertEquals(TARGET_HOST + ":" + targetPort.getPort(), 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
+        assertEquals(TARGET_HOST + ":" + targetPort, 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
                 "Unexpected target host value");
         assertEquals(USER_AGENT, 
request.getFirstHeader(AS2Header.USER_AGENT).getValue(), "Unexpected user agent 
value");
         assertNotNull(request.getFirstHeader(AS2Header.DATE), "Date value 
missing");
@@ -473,7 +473,7 @@ public class AS2ServerManagerIT extends 
AS2ServerManagerITBase {
         assertEquals(AS2_NAME, 
request.getFirstHeader(AS2Header.AS2_TO).getValue(), "Unexpected AS2 to value");
         
assertTrue(request.getFirstHeader(AS2Header.MESSAGE_ID).getValue().endsWith(CLIENT_FQDN
 + ">"),
                 "Unexpected message id value");
-        assertEquals(TARGET_HOST + ":" + targetPort.getPort(), 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
+        assertEquals(TARGET_HOST + ":" + targetPort, 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
                 "Unexpected target host value");
         assertEquals(USER_AGENT, 
request.getFirstHeader(AS2Header.USER_AGENT).getValue(), "Unexpected user agent 
value");
         assertNotNull(request.getFirstHeader(AS2Header.DATE), "Date value 
missing");
diff --git 
a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerITBase.java
 
b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerITBase.java
index 624f6f5d0980..65a4fa0346a8 100644
--- 
a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerITBase.java
+++ 
b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerITBase.java
@@ -53,7 +53,6 @@ import org.apache.camel.support.jsse.KeyStoreParameters;
 import org.apache.camel.support.jsse.SSLContextParameters;
 import org.apache.camel.support.jsse.SSLContextServerParameters;
 import org.apache.camel.support.jsse.TrustManagersParameters;
-import org.apache.camel.test.AvailablePortFinder;
 import org.apache.hc.core5.http.HttpException;
 import org.apache.hc.core5.http.HttpRequest;
 import org.apache.hc.core5.http.HttpVersion;
@@ -68,7 +67,6 @@ import org.bouncycastle.cert.jcajce.JcaCertStore;
 import org.bouncycastle.cms.jcajce.ZlibExpanderProvider;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -84,8 +82,7 @@ public class AS2ServerManagerITBase extends 
AbstractAS2ITSupport {
 
     protected static final String METHOD = "POST";
     protected static final String TARGET_HOST = "localhost";
-    @RegisterExtension
-    protected AvailablePortFinder.Port targetPort = AvailablePortFinder.find();
+    protected int targetPort;
     protected static final Duration HTTP_SOCKET_TIMEOUT = 
Duration.ofSeconds(5);
     protected static final Duration HTTP_CONNECTION_TIMEOUT = 
Duration.ofSeconds(5);
     protected static final Integer HTTP_CONNECTION_POOL_SIZE = 5;
@@ -144,7 +141,18 @@ public class AS2ServerManagerITBase extends 
AbstractAS2ITSupport {
 
     @Override
     protected void customizeConfiguration(AS2Configuration configuration) {
-        configuration.setServerPortNumber(targetPort.getPort());
+        configuration.setServerPortNumber(0);
+    }
+
+    @Override
+    protected void doPostSetup() throws Exception {
+        super.doPostSetup();
+        for (var e : context.getEndpoints()) {
+            if (e instanceof AS2Endpoint as2e && as2e.getAS2ServerConnection() 
!= null) {
+                targetPort = as2e.getAS2ServerConnection().getLocalPort();
+                break;
+            }
+        }
     }
 
     @Override
@@ -291,7 +299,7 @@ public class AS2ServerManagerITBase extends 
AbstractAS2ITSupport {
         assertEquals(AS2_NAME, 
request.getFirstHeader(AS2Header.AS2_TO).getValue(), "Unexpected AS2 to value");
         
assertTrue(request.getFirstHeader(AS2Header.MESSAGE_ID).getValue().endsWith(CLIENT_FQDN
 + ">"),
                 "Unexpected message id value");
-        assertEquals(TARGET_HOST + ":" + targetPort.getPort(), 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
+        assertEquals(TARGET_HOST + ":" + targetPort, 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
                 "Unexpected target host value");
         assertEquals(USER_AGENT, 
request.getFirstHeader(AS2Header.USER_AGENT).getValue(), "Unexpected user agent 
value");
         assertNotNull(request.getFirstHeader(AS2Header.DATE), "Date value 
missing");
diff --git 
a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerSecTestBase.java
 
b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerSecTestBase.java
index e3acd5d538eb..94ab8c811377 100644
--- 
a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerSecTestBase.java
+++ 
b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerSecTestBase.java
@@ -39,7 +39,6 @@ import 
org.apache.camel.component.as2.api.entity.AS2DispositionType;
 import 
org.apache.camel.component.as2.api.entity.AS2MessageDispositionNotificationEntity;
 import 
org.apache.camel.component.as2.api.entity.DispositionNotificationMultipartReportEntity;
 import org.apache.camel.component.as2.api.util.MicUtils;
-import org.apache.camel.test.AvailablePortFinder;
 import org.apache.hc.core5.http.ClassicHttpRequest;
 import org.apache.hc.core5.http.ClassicHttpResponse;
 import org.apache.hc.core5.http.HttpEntity;
@@ -49,7 +48,6 @@ import org.apache.hc.core5.http.HttpResponse;
 import org.apache.hc.core5.http.protocol.HttpCoreContext;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -59,8 +57,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 public class AS2ServerSecTestBase extends AbstractAS2ITSupport {
 
     protected static final String TARGET_HOST = "localhost";
-    @RegisterExtension
-    protected AvailablePortFinder.Port targetPort = AvailablePortFinder.find();
+    protected int targetPort;
     protected static final Duration HTTP_SOCKET_TIMEOUT = 
Duration.ofSeconds(5);
     protected static final Duration HTTP_CONNECTION_TIMEOUT = 
Duration.ofSeconds(5);
     protected static final Integer HTTP_CONNECTION_POOL_SIZE = 5;
@@ -114,7 +111,18 @@ public class AS2ServerSecTestBase extends 
AbstractAS2ITSupport {
 
     @Override
     protected void customizeConfiguration(AS2Configuration configuration) {
-        configuration.setServerPortNumber(targetPort.getPort());
+        configuration.setServerPortNumber(0);
+    }
+
+    @Override
+    protected void doPostSetup() throws Exception {
+        super.doPostSetup();
+        for (var e : context.getEndpoints()) {
+            if (e instanceof AS2Endpoint as2e && as2e.getAS2ServerConnection() 
!= null) {
+                targetPort = as2e.getAS2ServerConnection().getLocalPort();
+                break;
+            }
+        }
     }
 
     @Override
@@ -233,7 +241,7 @@ public class AS2ServerSecTestBase extends 
AbstractAS2ITSupport {
     protected AS2ClientManager clientConnection() throws IOException {
         AS2ClientConnection clientConnection
                 = new AS2ClientConnection(
-                        AS2_VERSION, USER_AGENT, CLIENT_FQDN, TARGET_HOST, 
targetPort.getPort(), HTTP_SOCKET_TIMEOUT,
+                        AS2_VERSION, USER_AGENT, CLIENT_FQDN, TARGET_HOST, 
targetPort, HTTP_SOCKET_TIMEOUT,
                         HTTP_CONNECTION_TIMEOUT, HTTP_CONNECTION_POOL_SIZE, 
HTTP_CONNECTION_POOL_TTL, null,
                         null);
         return new AS2ClientManager(clientConnection);

Reply via email to