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);