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

gnodet pushed a commit to branch fix-flaky-jmx-lra
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 0716840b7308b10042a7ad43552d48a333d459ca
Author: Guillaume Nodet <[email protected]>
AuthorDate: Fri Mar 20 08:52:15 2026 +0100

    CAMEL-23214: Harden flaky JMXRobustRemoteConnectionTest and LRAFailuresIT
    
    JMXRobustRemoteConnectionTest:
    - Use @RegisterExtension with AvailablePortFinder.Port to prevent TOCTOU 
race
    - Add UnicastRemoteObject.unexportObject() in tearDown to prevent ObjID 
conflicts
    - Add null-safe connector.stop() check
    
    AbstractLRATestSupport:
    - Use AvailablePortFinder.find() instead of getNextAvailable() to prevent 
TOCTOU race
    - Keep Port reference alive to prevent port reuse
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../jmx/JMXRobustRemoteConnectionTest.java          | 21 +++++++++++++++++++--
 .../camel/service/lra/AbstractLRATestSupport.java   |  4 +++-
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git 
a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRobustRemoteConnectionTest.java
 
b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRobustRemoteConnectionTest.java
index 860121a530ee..659f5f083f2c 100644
--- 
a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRobustRemoteConnectionTest.java
+++ 
b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRobustRemoteConnectionTest.java
@@ -17,8 +17,10 @@
 package org.apache.camel.component.jmx;
 
 import java.io.File;
+import java.rmi.NoSuchObjectException;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.registry.Registry;
+import java.rmi.server.UnicastRemoteObject;
 import java.util.Collections;
 
 import javax.management.MBeanServerFactory;
@@ -30,6 +32,7 @@ import org.apache.camel.test.AvailablePortFinder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 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.assertThrows;
@@ -46,6 +49,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class JMXRobustRemoteConnectionTest extends SimpleBeanFixture {
 
+    @RegisterExtension
+    AvailablePortFinder.Port portHolder = AvailablePortFinder.find();
+
     JMXServiceURL url;
     JMXConnectorServer connector;
     Registry registry;
@@ -54,7 +60,7 @@ public class JMXRobustRemoteConnectionTest extends 
SimpleBeanFixture {
     @BeforeEach
     @Override
     public void setUp() throws Exception {
-        port = AvailablePortFinder.getNextAvailable();
+        port = portHolder.getPort();
         url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:" + 
port + "/" + DOMAIN);
 
         initContext();
@@ -65,7 +71,18 @@ public class JMXRobustRemoteConnectionTest extends 
SimpleBeanFixture {
     @AfterEach
     public void tearDown() throws Exception {
         super.tearDown();
-        connector.stop();
+        if (connector != null) {
+            connector.stop();
+        }
+        // Properly unexport the RMI registry to avoid ObjID conflicts on 
subsequent runs
+        if (registry != null) {
+            try {
+                UnicastRemoteObject.unexportObject(registry, true);
+            } catch (NoSuchObjectException e) {
+                // Already unexported, ignore
+            }
+            registry = null;
+        }
     }
 
     @Override
diff --git 
a/components/camel-lra/src/test/java/org/apache/camel/service/lra/AbstractLRATestSupport.java
 
b/components/camel-lra/src/test/java/org/apache/camel/service/lra/AbstractLRATestSupport.java
index 7f9c352f31b9..1dc987539784 100644
--- 
a/components/camel-lra/src/test/java/org/apache/camel/service/lra/AbstractLRATestSupport.java
+++ 
b/components/camel-lra/src/test/java/org/apache/camel/service/lra/AbstractLRATestSupport.java
@@ -47,6 +47,7 @@ public abstract class AbstractLRATestSupport extends 
CamelTestSupport {
     @RegisterExtension
     static MicroprofileLRAService service = 
MicroprofileLRAServiceFactory.createService();
 
+    private AvailablePortFinder.Port serverPortHolder;
     private Integer serverPort;
 
     private int activeLRAs;
@@ -107,7 +108,8 @@ public abstract class AbstractLRATestSupport extends 
CamelTestSupport {
 
     protected int getServerPort() {
         if (serverPort == null) {
-            serverPort = AvailablePortFinder.getNextAvailable();
+            serverPortHolder = AvailablePortFinder.find();
+            serverPort = serverPortHolder.getPort();
         }
         return serverPort;
     }

Reply via email to