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 8dec349a53c4 CAMEL-23214: Migrate AvailablePortFinder in camel-itest 
tests (#22124)
8dec349a53c4 is described below

commit 8dec349a53c4228ab34841567b452d60d5238061
Author: Guillaume Nodet <[email protected]>
AuthorDate: Fri Mar 20 09:12:59 2026 +0100

    CAMEL-23214: Migrate AvailablePortFinder in camel-itest tests (#22124)
    
    * CAMEL-23214: Migrate AvailablePortFinder in camel-itest tests
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    
    * CAMEL-23214: Fix port migration in camel-itest
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    
    * CAMEL-23214: Fix TOCTOU race in port allocation for non-test classes
    
    Replace getNextAvailable() (which releases the port immediately) with
    find() + keeping the Port reference in a field. This prevents another
    test from grabbing the same port before the server binds to it.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    
    ---------
    
    Co-authored-by: Claude Opus 4.6 <[email protected]>
---
 .../java/org/apache/camel/itest/ITestSupport.java  | 22 +++++++++++----
 ...ipientListInterceptSendToEndpointIssueTest.java | 10 +++----
 .../camel/itest/greeter/CxfToJmsInOutTest.java     |  5 ++--
 .../greeter/JettyRecipientListCxfIssueTest.java    | 16 ++++++-----
 .../camel/itest/greeter/JmsToCxfInOutTest.java     |  5 ++--
 .../apache/camel/itest/http/HttpTestServer.java    |  3 ++-
 .../camel/itest/jetty/JettyFreemarkerTest.java     |  6 +++--
 .../itest/jetty/JettyGroovySetHeaderTest.java      |  6 +++--
 .../camel/itest/jetty/JettyJmsShutdownTest.java    |  4 ++-
 .../itest/jetty/JettyMulticastJmsFileTest.java     |  7 ++---
 .../jetty/JettySimulateFailoverRoundRobinTest.java | 31 +++++++++++++---------
 .../camel/itest/jetty/JettyVelocityTest.java       |  6 +++--
 .../org/apache/camel/itest/jms/JmsHttpJmsTest.java |  5 ++--
 .../camel/itest/jms/JmsHttpPostIssueTest.java      |  5 ++--
 .../itest/jms/JmsHttpPostIssueWithMockTest.java    |  5 ++--
 .../apache/camel/itest/jms/JmsJettyAsyncTest.java  |  5 ++--
 .../itest/netty/NettyAsyncRequestReplyTest.java    |  6 +++--
 .../org/apache/camel/itest/tx/JmsToHttpRoute.java  |  4 ++-
 ...ndNoTransactionErrorHandlerConfiguredRoute.java |  3 ++-
 .../itest/tx/JmsToHttpWithOnExceptionRoute.java    |  4 ++-
 .../camel/itest/tx/JmsToHttpWithRollbackRoute.java |  4 ++-
 .../utils/extensions/FtpServiceExtension.java      |  7 +++--
 .../utils/extensions/GreeterServiceExtension.java  |  4 ++-
 23 files changed, 110 insertions(+), 63 deletions(-)

diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/ITestSupport.java 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/ITestSupport.java
index 6bea04d1c9d3..6ad6b3584770 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/ITestSupport.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/ITestSupport.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.itest;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.camel.test.AvailablePortFinder;
 
 /**
@@ -24,10 +27,17 @@ import org.apache.camel.test.AvailablePortFinder;
  */
 public final class ITestSupport {
 
-    static final int PORT1 = AvailablePortFinder.getNextAvailable();
-    static final int PORT2 = AvailablePortFinder.getNextAvailable();
-    static final int PORT3 = AvailablePortFinder.getNextAvailable();
-    static final int PORT4 = AvailablePortFinder.getNextAvailable();
+    private static final AvailablePortFinder.Port P1 = 
AvailablePortFinder.find();
+    private static final AvailablePortFinder.Port P2 = 
AvailablePortFinder.find();
+    private static final AvailablePortFinder.Port P3 = 
AvailablePortFinder.find();
+    private static final AvailablePortFinder.Port P4 = 
AvailablePortFinder.find();
+    static final int PORT1 = P1.getPort();
+    static final int PORT2 = P2.getPort();
+    static final int PORT3 = P3.getPort();
+    static final int PORT4 = P4.getPort();
+
+    // Keep Port references alive to prevent TOCTOU races
+    private static final List<AvailablePortFinder.Port> DYNAMIC_PORTS = new 
ArrayList<>();
 
     static {
         //set them as system properties so Spring can use the property 
placeholder
@@ -42,7 +52,9 @@ public final class ITestSupport {
     }
 
     public static int getPort(String name) {
-        int port = AvailablePortFinder.getNextAvailable();
+        AvailablePortFinder.Port p = AvailablePortFinder.find();
+        DYNAMIC_PORTS.add(p);
+        int port = p.getPort();
         System.setProperty(name, Integer.toString(port));
         return port;
     }
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpAndHttpRecipientListInterceptSendToEndpointIssueTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpAndHttpRecipientListInterceptSendToEndpointIssueTest.java
index 16f1f97420f5..0ec629f0ddc9 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpAndHttpRecipientListInterceptSendToEndpointIssueTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpAndHttpRecipientListInterceptSendToEndpointIssueTest.java
@@ -21,7 +21,6 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.itest.utils.extensions.FtpServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
@@ -29,12 +28,9 @@ public class 
FtpAndHttpRecipientListInterceptSendToEndpointIssueTest extends Cam
     @RegisterExtension
     public static FtpServiceExtension ftpServiceExtension = new 
FtpServiceExtension();
 
-    protected static int httpPort;
-
-    @BeforeAll
-    public static void initPort() throws Exception {
-        httpPort = AvailablePortFinder.getNextAvailable();
-    }
+    @RegisterExtension
+    static AvailablePortFinder.Port httpPortFinder = 
AvailablePortFinder.find();
+    protected static int httpPort = httpPortFinder.getPort();
 
     @Test
     void testFtpAndHttpIssue() throws Exception {
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CxfToJmsInOutTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CxfToJmsInOutTest.java
index 1918ac5918ad..b3a0f2d2cb0e 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CxfToJmsInOutTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CxfToJmsInOutTest.java
@@ -41,11 +41,12 @@ public class CxfToJmsInOutTest {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
 
-    private static int port = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    static AvailablePortFinder.Port port = AvailablePortFinder.find();
     static {
         //set them as system properties so Spring can use the property place 
holder
         //things to set them into the URL's in the spring contexts
-        System.setProperty("CxfToJmsInOutTest.port", Integer.toString(port));
+        System.setProperty("CxfToJmsInOutTest.port", 
Integer.toString(port.getPort()));
     }
 
     @Autowired
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JettyRecipientListCxfIssueTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JettyRecipientListCxfIssueTest.java
index 2e3cdbbc556b..6e763dbb493f 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JettyRecipientListCxfIssueTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JettyRecipientListCxfIssueTest.java
@@ -22,6 +22,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.spring.junit6.CamelSpringTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.support.AbstractApplicationContext;
@@ -34,15 +35,18 @@ public class JettyRecipientListCxfIssueTest extends 
CamelSpringTestSupport {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(JettyRecipientListCxfIssueTest.class);
 
-    private static int port1 = AvailablePortFinder.getNextAvailable();
-    private static int port2 = AvailablePortFinder.getNextAvailable();
-    private static int port3 = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    static AvailablePortFinder.Port port1 = AvailablePortFinder.find();
+    @RegisterExtension
+    static AvailablePortFinder.Port port2 = AvailablePortFinder.find();
+    @RegisterExtension
+    static AvailablePortFinder.Port port3 = AvailablePortFinder.find();
     static {
         //set them as system properties so Spring can use the property 
placeholder
         //things to set them into the URL's in the spring contexts
-        System.setProperty("RecipientListCxfTest.port1", 
Integer.toString(port1));
-        System.setProperty("RecipientListCxfTest.port2", 
Integer.toString(port2));
-        System.setProperty("RecipientListCxfTest.port3", 
Integer.toString(port3));
+        System.setProperty("RecipientListCxfTest.port1", 
Integer.toString(port1.getPort()));
+        System.setProperty("RecipientListCxfTest.port2", 
Integer.toString(port2.getPort()));
+        System.setProperty("RecipientListCxfTest.port3", 
Integer.toString(port3.getPort()));
     }
 
     @Override
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JmsToCxfInOutTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JmsToCxfInOutTest.java
index ac4fc23771c9..4bc25d7c7c9f 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JmsToCxfInOutTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JmsToCxfInOutTest.java
@@ -37,11 +37,12 @@ public class JmsToCxfInOutTest {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
 
-    private static int port = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    static AvailablePortFinder.Port port = AvailablePortFinder.find();
     static {
         //set them as system properties so Spring can use the property place 
holder
         //things to set them into the URL's in the spring contexts
-        System.setProperty("JmsToCxfInOutTest.port", Integer.toString(port));
+        System.setProperty("JmsToCxfInOutTest.port", 
Integer.toString(port.getPort()));
     }
 
     @Autowired
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/http/HttpTestServer.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/http/HttpTestServer.java
index ba78d1decaee..5d8fe9bbf78d 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/http/HttpTestServer.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/http/HttpTestServer.java
@@ -32,7 +32,8 @@ import org.apache.hc.core5.util.Timeout;
  */
 public class HttpTestServer {
 
-    public static final int PORT = AvailablePortFinder.getNextAvailable();
+    private static final AvailablePortFinder.Port PORT_HOLDER = 
AvailablePortFinder.find();
+    public static final int PORT = PORT_HOLDER.getPort();
 
     /** The request handler registry. */
     private final ServerBootstrap bootstrap;
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyFreemarkerTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyFreemarkerTest.java
index fe5ae05a52fd..cd52d6ce4454 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyFreemarkerTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyFreemarkerTest.java
@@ -28,6 +28,7 @@ import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -35,7 +36,9 @@ import static org.junit.jupiter.api.Assertions.fail;
 
 public class JettyFreemarkerTest extends CamelTestSupport {
 
-    private int port;
+    @RegisterExtension
+    static AvailablePortFinder.Port portFinder = AvailablePortFinder.find();
+    private int port = portFinder.getPort();
 
     @Test
     void testClasspath() {
@@ -77,7 +80,6 @@ public class JettyFreemarkerTest extends CamelTestSupport {
 
     @Override
     protected RouteBuilder createRouteBuilder() {
-        port = AvailablePortFinder.getNextAvailable();
 
         return new RouteBuilder() {
             public void configure() {
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyGroovySetHeaderTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyGroovySetHeaderTest.java
index 24af88e28e6e..450eafd569b8 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyGroovySetHeaderTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyGroovySetHeaderTest.java
@@ -21,13 +21,16 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.apache.camel.language.groovy.GroovyLanguage.groovy;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class JettyGroovySetHeaderTest extends CamelTestSupport {
 
-    private int port;
+    @RegisterExtension
+    static AvailablePortFinder.Port portFinder = AvailablePortFinder.find();
+    private int port = portFinder.getPort();
 
     @Test
     void testJettyGroovySetHeader() throws Exception {
@@ -45,7 +48,6 @@ public class JettyGroovySetHeaderTest extends 
CamelTestSupport {
 
     @Override
     protected RouteBuilder createRouteBuilder() {
-        port = AvailablePortFinder.getNextAvailable();
 
         return new RouteBuilder() {
             @Override
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsShutdownTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsShutdownTest.java
index 11144e1d6125..b0ee747ae494 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsShutdownTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsShutdownTest.java
@@ -39,9 +39,11 @@ public class JettyJmsShutdownTest {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
 
+    @RegisterExtension
+    static AvailablePortFinder.Port portHolder = AvailablePortFinder.find();
     private static final String URL;
     static {
-        int port = AvailablePortFinder.getNextAvailable();
+        int port = portHolder.getPort();
         URL = "http://localhost:"; + port + "/JettyJmsShutdownTest";
 
         //set them as system properties so Spring can use the property 
placeholder
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest.java
index f21126a7e8b0..4caaf105cb0b 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest.java
@@ -38,12 +38,13 @@ public class JettyMulticastJmsFileTest {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
 
-    private static int port = AvailablePortFinder.getNextAvailable();
-    private static final String URL = "http://localhost:"; + port + 
"/JettyMulticastJmsFileTest";
+    @RegisterExtension
+    static AvailablePortFinder.Port port = AvailablePortFinder.find();
+    private static final String URL = "http://localhost:"; + port.getPort() + 
"/JettyMulticastJmsFileTest";
     static {
         //set them as system properties so Spring can use the property 
placeholder
         //things to set them into the URL's in the spring contexts
-        System.setProperty("JettyMulticastJmsFileTest.port", 
Integer.toString(port));
+        System.setProperty("JettyMulticastJmsFileTest.port", 
Integer.toString(port.getPort()));
     }
 
     @Autowired
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySimulateFailoverRoundRobinTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySimulateFailoverRoundRobinTest.java
index 9d62bdeccd1e..18c1923d7927 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySimulateFailoverRoundRobinTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySimulateFailoverRoundRobinTest.java
@@ -28,24 +28,29 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class JettySimulateFailoverRoundRobinTest extends CamelTestSupport {
 
-    private static int port1 = AvailablePortFinder.getNextAvailable();
-    private static int port2 = AvailablePortFinder.getNextAvailable();
-    private static int port3 = AvailablePortFinder.getNextAvailable();
-    private static int port4 = AvailablePortFinder.getNextAvailable();
-
-    private String bad = "jetty:http://localhost:"; + port1 + "/bad";
-    private String bad2 = "jetty:http://localhost:"; + port2 + "/bad2";
-    private String good = "jetty:http://localhost:"; + port3 + "/good";
-    private String good2 = "jetty:http://localhost:"; + port4 + "/good2";
-    private String hbad = "http://localhost:"; + port1 + "/bad";
-    private String hbad2 = "http://localhost:"; + port2 + "/bad2";
-    private String hgood = "http://localhost:"; + port3 + "/good";
-    private String hgood2 = "http://localhost:"; + port4 + "/good2";
+    @RegisterExtension
+    static AvailablePortFinder.Port port1 = AvailablePortFinder.find();
+    @RegisterExtension
+    static AvailablePortFinder.Port port2 = AvailablePortFinder.find();
+    @RegisterExtension
+    static AvailablePortFinder.Port port3 = AvailablePortFinder.find();
+    @RegisterExtension
+    static AvailablePortFinder.Port port4 = AvailablePortFinder.find();
+
+    private String bad = "jetty:http://localhost:"; + port1.getPort() + "/bad";
+    private String bad2 = "jetty:http://localhost:"; + port2.getPort() + 
"/bad2";
+    private String good = "jetty:http://localhost:"; + port3.getPort() + 
"/good";
+    private String good2 = "jetty:http://localhost:"; + port4.getPort() + 
"/good2";
+    private String hbad = "http://localhost:"; + port1.getPort() + "/bad";
+    private String hbad2 = "http://localhost:"; + port2.getPort() + "/bad2";
+    private String hgood = "http://localhost:"; + port3.getPort() + "/good";
+    private String hgood2 = "http://localhost:"; + port4.getPort() + "/good2";
 
     @Test
     void testJettySimulateFailoverRoundRobin() throws Exception {
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyVelocityTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyVelocityTest.java
index f69880d1e84a..a1fda2be796f 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyVelocityTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyVelocityTest.java
@@ -28,6 +28,7 @@ import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -35,7 +36,9 @@ import static org.junit.jupiter.api.Assertions.fail;
 
 public class JettyVelocityTest extends CamelTestSupport {
 
-    private int port;
+    @RegisterExtension
+    static AvailablePortFinder.Port portFinder = AvailablePortFinder.find();
+    private int port = portFinder.getPort();
 
     @Test
     void testClasspath() {
@@ -77,7 +80,6 @@ public class JettyVelocityTest extends CamelTestSupport {
 
     @Override
     protected RouteBuilder createRouteBuilder() {
-        port = AvailablePortFinder.getNextAvailable();
 
         return new RouteBuilder() {
             public void configure() {
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpJmsTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpJmsTest.java
index 54b0e5dbc19b..9e6a5ee810a1 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpJmsTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpJmsTest.java
@@ -41,7 +41,9 @@ public class JmsHttpJmsTest extends CamelTestSupport {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
 
-    private int port;
+    @RegisterExtension
+    static AvailablePortFinder.Port portFinder = AvailablePortFinder.find();
+    private int port = portFinder.getPort();
 
     @Test
     void testJmsHttpJms() throws Exception {
@@ -67,7 +69,6 @@ public class JmsHttpJmsTest extends CamelTestSupport {
 
     @Override
     protected RouteBuilder createRouteBuilder() {
-        port = AvailablePortFinder.getNextAvailable();
 
         return new RouteBuilder() {
             public void configure() {
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueTest.java
index 91ba8cda10a1..d87678a44ea0 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueTest.java
@@ -42,7 +42,9 @@ public class JmsHttpPostIssueTest extends CamelTestSupport {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
 
-    private int port;
+    @RegisterExtension
+    static AvailablePortFinder.Port portFinder = AvailablePortFinder.find();
+    private int port = portFinder.getPort();
 
     @Test
     void testJmsInOnlyHttpPostIssue() {
@@ -61,7 +63,6 @@ public class JmsHttpPostIssueTest extends CamelTestSupport {
 
     @Override
     protected RouteBuilder createRouteBuilder() {
-        port = AvailablePortFinder.getNextAvailable();
 
         return new RouteBuilder() {
             public void configure() {
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueWithMockTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueWithMockTest.java
index 9a93a8a86f3d..2e10ff86d15f 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueWithMockTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueWithMockTest.java
@@ -41,7 +41,9 @@ public class JmsHttpPostIssueWithMockTest extends 
CamelTestSupport {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
 
-    private int port;
+    @RegisterExtension
+    static AvailablePortFinder.Port portFinder = AvailablePortFinder.find();
+    private int port = portFinder.getPort();
 
     @Test
     void testJmsInOnlyHttpPostIssue() throws Exception {
@@ -64,7 +66,6 @@ public class JmsHttpPostIssueWithMockTest extends 
CamelTestSupport {
 
     @Override
     protected RouteBuilder createRouteBuilder() {
-        port = AvailablePortFinder.getNextAvailable();
 
         return new RouteBuilder() {
             public void configure() {
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJettyAsyncTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJettyAsyncTest.java
index 526213ce6ffd..1e0e891b6cc8 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJettyAsyncTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJettyAsyncTest.java
@@ -36,8 +36,10 @@ public class JmsJettyAsyncTest extends CamelTestSupport {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
 
+    @RegisterExtension
+    static AvailablePortFinder.Port portFinder = AvailablePortFinder.find();
     private int size = 100;
-    private int port;
+    private int port = portFinder.getPort();
 
     @Test
     void testJmsJettyAsyncTest() throws Exception {
@@ -53,7 +55,6 @@ public class JmsJettyAsyncTest extends CamelTestSupport {
 
     @Override
     protected RouteBuilder createRouteBuilder() {
-        port = AvailablePortFinder.getNextAvailable();
 
         return new RouteBuilder() {
             @Override
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/netty/NettyAsyncRequestReplyTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/netty/NettyAsyncRequestReplyTest.java
index b0a06f9eacdb..7f1811e50ed5 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/netty/NettyAsyncRequestReplyTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/netty/NettyAsyncRequestReplyTest.java
@@ -49,9 +49,12 @@ public class NettyAsyncRequestReplyTest extends 
CamelTestSupport {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
 
+    @RegisterExtension
+    static AvailablePortFinder.Port portFinder = AvailablePortFinder.find();
+
     private static final Logger LOG = 
LoggerFactory.getLogger(NettyAsyncRequestReplyTest.class);
 
-    private int port;
+    private int port = portFinder.getPort();
 
     @Test
     void testNetty() {
@@ -101,7 +104,6 @@ public class NettyAsyncRequestReplyTest extends 
CamelTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
-                port = AvailablePortFinder.getNextAvailable();
 
                 from("netty:tcp://localhost:" + port + 
"?textline=true&sync=true&reuseAddress=true&synchronous=false")
                         .to("activemq:queue:NettyAsyncRequestReplyTest")
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpRoute.java 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpRoute.java
index 7f77c1249dce..ae3377d949bc 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpRoute.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpRoute.java
@@ -33,6 +33,7 @@ import static 
org.apache.camel.itest.TransactionSupport.transactionErrorHandler;
  */
 public class JmsToHttpRoute extends RouteBuilder {
     protected static int counter;
+    protected AvailablePortFinder.Port portHolder;
     protected int port;
 
     @Resource(name = "PROPAGATION_REQUIRED")
@@ -46,7 +47,8 @@ public class JmsToHttpRoute extends RouteBuilder {
 
     @Override
     public void configure() {
-        port = AvailablePortFinder.getNextAvailable();
+        portHolder = AvailablePortFinder.find();
+        port = portHolder.getPort();
 
         // configure a global transacted error handler
         errorHandler(transactionErrorHandler(required));
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute.java
index 3ff925f8acc8..57dbe61acfa6 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute.java
@@ -30,7 +30,8 @@ public class 
JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute
 
     @Override
     public void configure() {
-        port = AvailablePortFinder.getNextAvailable();
+        portHolder = AvailablePortFinder.find();
+        port = portHolder.getPort();
 
         // if its a 404 then regard it as handled
         onException(HttpOperationFailedException.class).onWhen(exchange -> {
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionRoute.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionRoute.java
index 91a5eede0183..e0e4ed12b264 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionRoute.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionRoute.java
@@ -33,6 +33,7 @@ import static 
org.apache.camel.itest.TransactionSupport.transactionErrorHandler;
  */
 public class JmsToHttpWithOnExceptionRoute extends RouteBuilder {
     protected static int counter;
+    protected AvailablePortFinder.Port portHolder;
     protected int port;
 
     @Resource(name = "PROPAGATION_REQUIRED")
@@ -45,7 +46,8 @@ public class JmsToHttpWithOnExceptionRoute extends 
RouteBuilder {
 
     @Override
     public void configure() {
-        port = AvailablePortFinder.getNextAvailable();
+        portHolder = AvailablePortFinder.find();
+        port = portHolder.getPort();
 
         // configure a global transacted error handler
         errorHandler(transactionErrorHandler(required));
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithRollbackRoute.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithRollbackRoute.java
index 82ae446d7a30..4f44bbdcfdc8 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithRollbackRoute.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithRollbackRoute.java
@@ -33,6 +33,7 @@ import static 
org.apache.camel.itest.TransactionSupport.transactionErrorHandler;
  */
 public class JmsToHttpWithRollbackRoute extends RouteBuilder {
     protected static int counter;
+    protected AvailablePortFinder.Port portHolder;
     protected int port;
 
     @Resource(name = "PROPAGATION_REQUIRED")
@@ -46,7 +47,8 @@ public class JmsToHttpWithRollbackRoute extends RouteBuilder {
 
     @Override
     public void configure() {
-        port = AvailablePortFinder.getNextAvailable();
+        portHolder = AvailablePortFinder.find();
+        port = portHolder.getPort();
 
         // configure a global transacted error handler
         errorHandler(transactionErrorHandler(required));
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/FtpServiceExtension.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/FtpServiceExtension.java
index f96bd98adba0..5e2a19550e97 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/FtpServiceExtension.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/FtpServiceExtension.java
@@ -32,18 +32,21 @@ import org.junit.jupiter.api.extension.BeforeAllCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 
 public class FtpServiceExtension implements BeforeAllCallback, 
AfterAllCallback {
+    private static AvailablePortFinder.Port ftpPortHolder;
     private static int ftpPort;
     private static FtpServer ftpServer;
 
     public FtpServiceExtension() {
         if (ftpPort == 0) {
-            ftpPort = AvailablePortFinder.getNextAvailable();
+            ftpPortHolder = AvailablePortFinder.find();
+            ftpPort = ftpPortHolder.getPort();
         }
     }
 
     public FtpServiceExtension(String property) {
         if (ftpPort == 0) {
-            ftpPort = AvailablePortFinder.getNextAvailable();
+            ftpPortHolder = AvailablePortFinder.find();
+            ftpPort = ftpPortHolder.getPort();
         }
 
         //set them as system properties so Spring can use the property 
placeholder
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/GreeterServiceExtension.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/GreeterServiceExtension.java
index 7885649ede42..dcd0ee4ef51b 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/GreeterServiceExtension.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/GreeterServiceExtension.java
@@ -31,10 +31,12 @@ public class GreeterServiceExtension implements 
BeforeAllCallback, AfterAllCallb
 
     private static final GreeterImpl GREETER;
     private static final String ADDRESS;
+    private static final AvailablePortFinder.Port PORT_HOLDER;
     private static final int PORT;
 
     static {
-        PORT = AvailablePortFinder.getNextAvailable();
+        PORT_HOLDER = AvailablePortFinder.find();
+        PORT = PORT_HOLDER.getPort();
         GREETER = new GreeterImpl();
 
         ADDRESS = "http://localhost:"; + PORT + "/SoapContext/SoapPort";

Reply via email to