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