diff options
author | Keith Wall <kwall@apache.org> | 2014-09-23 06:55:34 +0000 |
---|---|---|
committer | Keith Wall <kwall@apache.org> | 2014-09-23 06:55:34 +0000 |
commit | 822f0622694b341b44845e798c058990a9f69b8d (patch) | |
tree | 9d11acc50691515a909e9d05b555304cad34ed31 | |
parent | 325d8d7f53fbcffe62ba71a3d2ba830a1629e7eb (diff) | |
download | qpid-python-822f0622694b341b44845e798c058990a9f69b8d.tar.gz |
QPID-6111: [Java Broker] HA Tests - change JE tests to assert that JE replication ports are always relinquished.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1626955 13f79535-47bb-0310-9956-ffa450edef68
6 files changed, 169 insertions, 89 deletions
diff --git a/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java b/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java index 476924f11e..e9bcc5d754 100644 --- a/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java +++ b/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java @@ -51,11 +51,14 @@ import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHARemoteReplicationN import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode; import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNodeTestHelper; import org.apache.qpid.server.virtualhostnode.berkeleydb.NodeRole; +import org.apache.qpid.test.utils.PortHelper; import org.apache.qpid.test.utils.QpidTestCase; public class BDBHAVirtualHostNodeTest extends QpidTestCase { private BDBHAVirtualHostNodeTestHelper _helper; + private PortHelper _portHelper = new PortHelper(); + @Override protected void setUp() throws Exception { @@ -75,11 +78,13 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase { super.tearDown(); } + + _portHelper.waitUntilAllocatedPortsAreFree(); } public void testCreateAndActivateVirtualHostNode() throws Exception { - int node1PortNumber = findFreePort(); + int node1PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; @@ -132,7 +137,7 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase public void testMutableAttributes() throws Exception { - int node1PortNumber = findFreePort(); + int node1PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; @@ -161,9 +166,9 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase public void testTransferMasterToSelf() throws Exception { - int node1PortNumber = findFreePort(); - int node2PortNumber = getNextAvailable(node1PortNumber + 1); - int node3PortNumber = getNextAvailable(node2PortNumber + 1); + int node1PortNumber = _portHelper.getNextAvailable(); + int node2PortNumber = _portHelper.getNextAvailable(); + int node3PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; @@ -187,9 +192,9 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase public void testTransferMasterToRemoteReplica() throws Exception { - int node1PortNumber = findFreePort(); - int node2PortNumber = getNextAvailable(node1PortNumber + 1); - int node3PortNumber = getNextAvailable(node2PortNumber + 1); + int node1PortNumber = _portHelper.getNextAvailable(); + int node2PortNumber = _portHelper.getNextAvailable(); + int node3PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; @@ -233,7 +238,7 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase public void testMutatingRoleWhenNotReplica_IsDisallowed() throws Exception { - int nodePortNumber = findFreePort(); + int nodePortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + nodePortNumber; String groupName = "group"; String nodeName = "node1"; @@ -256,23 +261,30 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase public void testRemoveReplicaNode() throws Exception { - int node1PortNumber = findFreePort(); - int node2PortNumber = getNextAvailable(node1PortNumber + 1); - int node3PortNumber = getNextAvailable(node2PortNumber + 1); + int node1PortNumber = _portHelper.getNextAvailable(); + int node2PortNumber = _portHelper.getNextAvailable(); + int node3PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; + assertTrue(_portHelper.isPortAvailable(node1PortNumber)); + Map<String, Object> node1Attributes = _helper.createNodeAttributes(nodeName, groupName, helperAddress, helperAddress, nodeName, node1PortNumber, node2PortNumber, node3PortNumber); _helper.createAndStartHaVHN(node1Attributes); + assertTrue(_portHelper.isPortAvailable(node2PortNumber)); + Map<String, Object> node2Attributes = _helper.createNodeAttributes("node2", groupName, "localhost:" + node2PortNumber, helperAddress, nodeName); _helper.createAndStartHaVHN(node2Attributes); + assertTrue(_portHelper.isPortAvailable(node3PortNumber)); + Map<String, Object> node3Attributes = _helper.createNodeAttributes("node3", groupName, "localhost:" + node3PortNumber, helperAddress, nodeName); _helper.createAndStartHaVHN(node3Attributes); + BDBHAVirtualHostNode<?> master = _helper.awaitAndFindNodeInRole(NodeRole.MASTER); _helper.awaitRemoteNodes(master, 2); @@ -286,10 +298,9 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase assertNull("Remote node " + replica.getName() + " is not found", _helper.findRemoteNode(master, replica.getName())); } - public void testSetSynchronizationPolicyAttributesOnVirtualHost() throws Exception { - int node1PortNumber = findFreePort(); + int node1PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; @@ -346,9 +357,9 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase public void testNotPermittedNodeIsNotAllowedToConnect() throws Exception { - int node1PortNumber = findFreePort(); - int node2PortNumber = getNextAvailable(node1PortNumber+1); - int node3PortNumber = getNextAvailable(node2PortNumber+1); + int node1PortNumber = _portHelper.getNextAvailable(); + int node2PortNumber = _portHelper.getNextAvailable(); + int node3PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; @@ -374,9 +385,9 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase public void testCurrentNodeCannotBeRemovedFromPermittedNodeList() throws Exception { - int node1PortNumber = findFreePort(); - int node2PortNumber = getNextAvailable(node1PortNumber+1); - int node3PortNumber = getNextAvailable(node2PortNumber+1); + int node1PortNumber = _portHelper.getNextAvailable(); + int node2PortNumber = _portHelper.getNextAvailable(); + int node3PortNumber = _portHelper.getNextAvailable(); String node1Address = "localhost:" + node1PortNumber; String node2Address = "localhost:" + node2PortNumber; @@ -415,11 +426,11 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase public void testPermittedNodesAttributeModificationConditions() throws Exception { - int node1PortNumber = findFreePort(); - int node2PortNumber = getNextAvailable(node1PortNumber+1); - int node3PortNumber = getNextAvailable(node2PortNumber+1); - int node4PortNumber = getNextAvailable(node3PortNumber+1); - int node5PortNumber = getNextAvailable(node4PortNumber+1); + int node1PortNumber = _portHelper.getNextAvailable(); + int node2PortNumber = _portHelper.getNextAvailable(); + int node3PortNumber = _portHelper.getNextAvailable(); + int node4PortNumber = _portHelper.getNextAvailable(); + int node5PortNumber = _portHelper.getNextAvailable(); String node1Address = "localhost:" + node1PortNumber; String node2Address = "localhost:" + node2PortNumber; @@ -472,8 +483,8 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase public void testIntruderProtectionInManagementMode() throws Exception { - int node1PortNumber = findFreePort(); - int node2PortNumber = getNextAvailable(node1PortNumber + 1); + int node1PortNumber = _portHelper.getNextAvailable(); + int node2PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; @@ -517,8 +528,8 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase public void testIntruderConnected() throws Exception { - int node1PortNumber = findFreePort(); - int node2PortNumber = getNextAvailable(node1PortNumber + 1); + int node1PortNumber = _portHelper.getNextAvailable(); + int node2PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; @@ -553,13 +564,24 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase envConfig.setDurability(Durability.parse((String) node1Attributes.get(BDBHAVirtualHostNode.DURABILITY))); ReplicatedEnvironment intruder = null; + String originalThreadName = Thread.currentThread().getName(); try { intruder = new ReplicatedEnvironment(environmentPathFile, replicationConfig, envConfig); } finally { - intruder.close(); + try + { + if (intruder != null) + { + intruder.close(); + } + } + finally + { + Thread.currentThread().setName(originalThreadName); + } } assertTrue("Intruder protection was not triggered during expected timeout", stopLatch.await(20, TimeUnit.SECONDS)); diff --git a/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java b/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java index 7dc7352cfb..69d44bbe88 100644 --- a/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java +++ b/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java @@ -35,6 +35,7 @@ import java.util.concurrent.atomic.AtomicReference; import org.apache.log4j.Logger; import org.apache.qpid.server.store.berkeleydb.EnvironmentFacade; +import org.apache.qpid.test.utils.PortHelper; import org.apache.qpid.test.utils.QpidTestCase; import org.apache.qpid.test.utils.TestFileUtils; import org.apache.qpid.util.FileUtils; @@ -57,17 +58,20 @@ import org.codehaus.jackson.map.ObjectMapper; public class ReplicatedEnvironmentFacadeTest extends QpidTestCase { private static final Logger LOGGER = Logger.getLogger(ReplicatedEnvironmentFacadeTest.class); - private static final int TEST_NODE_PORT = new QpidTestCase().findFreePort(); private static final int LISTENER_TIMEOUT = 5; private static final int WAIT_STATE_CHANGE_TIMEOUT = 30; - private static final String TEST_GROUP_NAME = "testGroupName"; - private static final String TEST_NODE_NAME = "testNodeName"; - private static final String TEST_NODE_HOST_PORT = "localhost:" + TEST_NODE_PORT; - private static final String TEST_NODE_HELPER_HOST_PORT = TEST_NODE_HOST_PORT; - private static final Durability TEST_DURABILITY = Durability.parse("SYNC,NO_SYNC,SIMPLE_MAJORITY"); - private static final boolean TEST_DESIGNATED_PRIMARY = false; - private static final int TEST_PRIORITY = 1; - private static final int TEST_ELECTABLE_GROUP_OVERRIDE = 0; + + private final PortHelper _portHelper = new PortHelper(); + + private final String TEST_GROUP_NAME = "testGroupName"; + private final String TEST_NODE_NAME = "testNodeName"; + private final int TEST_NODE_PORT = _portHelper.getNextAvailable(); + private final String TEST_NODE_HOST_PORT = "localhost:" + TEST_NODE_PORT; + private final String TEST_NODE_HELPER_HOST_PORT = TEST_NODE_HOST_PORT; + private final Durability TEST_DURABILITY = Durability.parse("SYNC,NO_SYNC,SIMPLE_MAJORITY"); + private final boolean TEST_DESIGNATED_PRIMARY = false; + private final int TEST_PRIORITY = 1; + private final int TEST_ELECTABLE_GROUP_OVERRIDE = 0; private File _storePath; private final Map<String, ReplicatedEnvironmentFacade> _nodes = new HashMap<String, ReplicatedEnvironmentFacade>(); @@ -105,6 +109,8 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase super.tearDown(); } } + + _portHelper.waitUntilAllocatedPortsAreFree(); } public void testEnvironmentFacade() throws Exception { @@ -220,7 +226,7 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase ReplicatedEnvironmentFacade master = createMaster(); String nodeName2 = TEST_NODE_NAME + "_2"; String host = "localhost"; - int port = getNextAvailable(TEST_NODE_PORT + 1); + int port = _portHelper.getNextAvailable(); String node2NodeHostPort = host + ":" + port; final AtomicInteger invocationCount = new AtomicInteger(); @@ -264,7 +270,7 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase assertEquals("Unexpected number of nodes at start of test", 1, replicatedEnvironmentFacade.getNumberOfElectableGroupMembers()); String node2Name = TEST_NODE_NAME + "_2"; - String node2NodeHostPort = "localhost" + ":" + getNextAvailable(TEST_NODE_PORT + 1); + String node2NodeHostPort = "localhost" + ":" + _portHelper.getNextAvailable(); replicatedEnvironmentFacade.setPermittedNodes(Arrays.asList(replicatedEnvironmentFacade.getHostPort(), node2NodeHostPort)); createReplica(node2Name, node2NodeHostPort, new NoopReplicationGroupListener()); @@ -307,7 +313,7 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase assertTrue("Master was not started", stateChangeListener.awaitForStateChange(LISTENER_TIMEOUT, TimeUnit.SECONDS)); String node2Name = TEST_NODE_NAME + "_2"; - String node2NodeHostPort = "localhost" + ":" + getNextAvailable(TEST_NODE_PORT + 1); + String node2NodeHostPort = "localhost" + ":" + _portHelper.getNextAvailable(); replicatedEnvironmentFacade.setPermittedNodes(Arrays.asList(replicatedEnvironmentFacade.getHostPort(), node2NodeHostPort)); createReplica(node2Name, node2NodeHostPort, new NoopReplicationGroupListener()); @@ -357,7 +363,7 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase ReplicatedEnvironmentFacade replicatedEnvironmentFacade = addNode(stateChangeListener, listener); assertTrue("Master was not started", stateChangeListener.awaitForStateChange(LISTENER_TIMEOUT, TimeUnit.SECONDS)); - String node2NodeHostPort = "localhost" + ":" + getNextAvailable(TEST_NODE_PORT + 1); + String node2NodeHostPort = "localhost" + ":" + _portHelper.getNextAvailable(); replicatedEnvironmentFacade.setPermittedNodes(Arrays.asList(replicatedEnvironmentFacade.getHostPort(), node2NodeHostPort)); createReplica(node2Name, node2NodeHostPort, new NoopReplicationGroupListener()); @@ -380,7 +386,7 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase String node2Name = TEST_NODE_NAME + "_2"; - String node2NodeHostPort = "localhost:" + getNextAvailable(TEST_NODE_PORT + 1); + String node2NodeHostPort = "localhost:" + _portHelper.getNextAvailable(); ReplicatedEnvironmentFacade ref2 = createReplica(node2Name, node2NodeHostPort, new NoopReplicationGroupListener()); assertEquals("Unexpected group members count", 2, environmentFacade.getNumberOfElectableGroupMembers()); @@ -436,7 +442,7 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase masterEnvironment.setDesignatedPrimary(true); - int replica1Port = getNextAvailable(TEST_NODE_PORT + 1); + int replica1Port = _portHelper.getNextAvailable(); String node1NodeHostPort = "localhost:" + replica1Port; masterEnvironment.setPermittedNodes(Arrays.asList(masterEnvironment.getHostPort(), node1NodeHostPort)); ReplicatedEnvironmentFacade replica = createReplica(replicaName, node1NodeHostPort, new NoopReplicationGroupListener()); @@ -493,9 +499,9 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase addNode(stateChangeListener, new NoopReplicationGroupListener()); assertTrue("Master was not started", masterLatch.await(LISTENER_TIMEOUT, TimeUnit.SECONDS)); - int replica1Port = getNextAvailable(TEST_NODE_PORT + 1); + int replica1Port = _portHelper.getNextAvailable(); String node1NodeHostPort = "localhost:" + replica1Port; - int replica2Port = getNextAvailable(replica1Port + 1); + int replica2Port = _portHelper.getNextAvailable(); String node2NodeHostPort = "localhost:" + replica2Port; ReplicatedEnvironmentFacade replica1 = createReplica(TEST_NODE_NAME + "_1", node1NodeHostPort, new NoopReplicationGroupListener()); @@ -535,12 +541,12 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase ReplicatedEnvironmentFacade firstNode = addNode(stateChangeListener, new NoopReplicationGroupListener()); assertTrue("Environment did not become a master", firstNodeMasterStateLatch.await(10, TimeUnit.SECONDS)); - int replica1Port = getNextAvailable(TEST_NODE_PORT + 1); + int replica1Port = _portHelper.getNextAvailable(); String node1NodeHostPort = "localhost:" + replica1Port; ReplicatedEnvironmentFacade secondNode = createReplica(TEST_NODE_NAME + "_1", node1NodeHostPort, new NoopReplicationGroupListener()); assertEquals("Unexpected state", ReplicatedEnvironment.State.REPLICA.name(), secondNode.getNodeState()); - int replica2Port = getNextAvailable(replica1Port + 1); + int replica2Port = _portHelper.getNextAvailable(); String node2NodeHostPort = "localhost:" + replica2Port; final CountDownLatch replicaStateLatch = new CountDownLatch(1); final CountDownLatch masterStateLatch = new CountDownLatch(1); @@ -594,12 +600,12 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase ReplicatedEnvironmentFacade firstNode = addNode(stateChangeListener, new NoopReplicationGroupListener()); assertTrue("Environment did not become a master", firstNodeMasterStateLatch.await(10, TimeUnit.SECONDS)); - int replica1Port = getNextAvailable(TEST_NODE_PORT + 1); + int replica1Port = _portHelper.getNextAvailable(); String node1NodeHostPort = "localhost:" + replica1Port; ReplicatedEnvironmentFacade secondNode = createReplica(TEST_NODE_NAME + "_1", node1NodeHostPort, new NoopReplicationGroupListener()); assertEquals("Unexpected state", ReplicatedEnvironment.State.REPLICA.name(), secondNode.getNodeState()); - int replica2Port = getNextAvailable(replica1Port + 1); + int replica2Port = _portHelper.getNextAvailable(); String node2NodeHostPort = "localhost:" + replica2Port; final CountDownLatch replicaStateLatch = new CountDownLatch(1); final CountDownLatch masterStateLatch = new CountDownLatch(1); @@ -657,7 +663,7 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase Set<String> permittedNodes = new HashSet<String>(); permittedNodes.add("localhost:" + TEST_NODE_PORT); - permittedNodes.add("localhost:" + getNextAvailable(TEST_NODE_PORT + 1)); + permittedNodes.add("localhost:" + _portHelper.getNextAvailable()); firstNode.setPermittedNodes(permittedNodes); ReplicatedEnvironmentFacade.ReplicationNodeImpl replicationNode = new ReplicatedEnvironmentFacade.ReplicationNodeImpl(TEST_NODE_NAME, TEST_NODE_HOST_PORT); @@ -674,7 +680,7 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase { ReplicatedEnvironmentFacade firstNode = createMaster(); - int replica1Port = getNextAvailable(TEST_NODE_PORT + 1); + int replica1Port = _portHelper.getNextAvailable(); String node1NodeHostPort = "localhost:" + replica1Port; Set<String> permittedNodes = new HashSet<String>(); @@ -705,7 +711,7 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase } }; ReplicatedEnvironmentFacade firstNode = createMaster(listener); - int replica1Port = getNextAvailable(TEST_NODE_PORT + 1); + int replica1Port = _portHelper.getNextAvailable(); String node1NodeHostPort = "localhost:" + replica1Port; Set<String> permittedNodes = new HashSet<String>(); diff --git a/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeOperationalLoggingTest.java b/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeOperationalLoggingTest.java index a567efb00d..d71fb8b474 100644 --- a/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeOperationalLoggingTest.java +++ b/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeOperationalLoggingTest.java @@ -36,6 +36,7 @@ import org.apache.qpid.server.logging.messages.HighAvailabilityMessages; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.SystemConfig; import org.apache.qpid.server.store.berkeleydb.NoopConfigurationChangeListener; +import org.apache.qpid.test.utils.PortHelper; import org.apache.qpid.test.utils.QpidTestCase; import org.hamcrest.Description; import org.mockito.ArgumentMatcher; @@ -47,6 +48,7 @@ public class BDBHAVirtualHostNodeOperationalLoggingTest extends QpidTestCase { private BDBHAVirtualHostNodeTestHelper _helper; private EventLogger _eventLogger; + private PortHelper _portHelper = new PortHelper(); @Override protected void setUp() throws Exception @@ -69,11 +71,13 @@ public class BDBHAVirtualHostNodeOperationalLoggingTest extends QpidTestCase { super.tearDown(); } + + _portHelper.waitUntilAllocatedPortsAreFree(); } public void testCreate() throws Exception { - int node1PortNumber = findFreePort(); + int node1PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; @@ -97,7 +101,7 @@ public class BDBHAVirtualHostNodeOperationalLoggingTest extends QpidTestCase public void testDelete() throws Exception { - int node1PortNumber = findFreePort(); + int node1PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; @@ -118,7 +122,7 @@ public class BDBHAVirtualHostNodeOperationalLoggingTest extends QpidTestCase public void testSetPriority() throws Exception { - int node1PortNumber = findFreePort(); + int node1PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; @@ -141,7 +145,7 @@ public class BDBHAVirtualHostNodeOperationalLoggingTest extends QpidTestCase public void testSetQuorumOverride() throws Exception { - int node1PortNumber = findFreePort(); + int node1PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; @@ -164,7 +168,7 @@ public class BDBHAVirtualHostNodeOperationalLoggingTest extends QpidTestCase public void testSetDesignatedPrimary() throws Exception { - int node1PortNumber = findFreePort(); + int node1PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; @@ -187,8 +191,8 @@ public class BDBHAVirtualHostNodeOperationalLoggingTest extends QpidTestCase public void testRemoteNodeAdded() throws Exception { - int node1PortNumber = findFreePort(); - int node2PortNumber = getNextAvailable(node1PortNumber + 1); + int node1PortNumber = _portHelper.getNextAvailable(); + int node2PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; @@ -215,8 +219,8 @@ public class BDBHAVirtualHostNodeOperationalLoggingTest extends QpidTestCase public void testRemoteNodeRemoved() throws Exception { - int node1PortNumber = findFreePort(); - int node2PortNumber = getNextAvailable(node1PortNumber + 1); + int node1PortNumber = _portHelper.getNextAvailable(); + int node2PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; @@ -247,8 +251,8 @@ public class BDBHAVirtualHostNodeOperationalLoggingTest extends QpidTestCase public void testRemoteNodeDetached() throws Exception { - int node1PortNumber = findFreePort(); - int node2PortNumber = getNextAvailable(node1PortNumber + 1); + int node1PortNumber = _portHelper.getNextAvailable(); + int node2PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; @@ -299,8 +303,8 @@ public class BDBHAVirtualHostNodeOperationalLoggingTest extends QpidTestCase public void testRemoteNodeReAttached() throws Exception { - int node1PortNumber = findFreePort(); - int node2PortNumber = getNextAvailable(node1PortNumber + 1); + int node1PortNumber = _portHelper.getNextAvailable(); + int node2PortNumber = _portHelper.getNextAvailable(); String helperAddress = "localhost:" + node1PortNumber; String groupName = "group"; String nodeName = "node1"; diff --git a/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java b/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java index 0facfb0785..c12fecece3 100644 --- a/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java +++ b/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java @@ -102,10 +102,10 @@ public class BDBHAVirtualHostNodeTestHelper firstException = e; } } - if (firstException != null) - { - throw firstException; - } + } + if (firstException != null) + { + throw firstException; } } finally diff --git a/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/PortHelper.java b/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/PortHelper.java index e6e99175a1..72958ca607 100644 --- a/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/PortHelper.java +++ b/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/PortHelper.java @@ -21,6 +21,8 @@ package org.apache.qpid.test.utils; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; +import java.util.HashSet; +import java.util.NoSuchElementException; import java.util.Set; import org.apache.log4j.Logger; @@ -29,10 +31,72 @@ public class PortHelper { private static final Logger _logger = Logger.getLogger(PortHelper.class); + public static final int START_PORT_NUMBER = 10000; + private static final int DEFAULT_TIMEOUT_MILLIS = 5000; + public static final int MIN_PORT_NUMBER = 1; + public static final int MAX_PORT_NUMBER = 49151; + private int _timeout = DEFAULT_TIMEOUT_MILLIS; + + private final Set<Integer> _allocatedPorts = new HashSet<>(); + private int _highestIssuedPort = -1; + + /** + * Gets the next available port starting from given point. + * + * @param fromPort the port to scan for availability + * @throws java.util.NoSuchElementException if there are no ports available + */ + public int getNextAvailable(int fromPort) + { + if ((fromPort < MIN_PORT_NUMBER) || (fromPort > MAX_PORT_NUMBER)) + { + throw new IllegalArgumentException("Invalid start port: " + fromPort); + } + + for (int i = fromPort; i <= MAX_PORT_NUMBER; i++) + { + if (isPortAvailable(i)) + { + _allocatedPorts.add(i); + _highestIssuedPort = Math.max(_highestIssuedPort, i); + return i; + } + } + + throw new NoSuchElementException("Could not find an available port above " + fromPort); + } + + /** + * Gets the next available port that is higher than all other port numbers issued + * thus far. If no port numbers have been issued, a default is used. + * + * @throws java.util.NoSuchElementException if there are no ports available + */ + public int getNextAvailable() + { + + if (_highestIssuedPort < 0) + { + return getNextAvailable(START_PORT_NUMBER); + } + else + { + return getNextAvailable(_highestIssuedPort + 1); + } + } + + /** + * Tests that all ports allocated by getNextAvailable are free. + */ + public void waitUntilAllocatedPortsAreFree() + { + waitUntilPortsAreFree(_allocatedPorts); + } + public void waitUntilPortsAreFree(Set<Integer> ports) { _logger.debug("Checking if ports " + ports + " are free..."); diff --git a/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java b/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java index 74d2f1cf97..5c9dc12d77 100644 --- a/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java +++ b/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java @@ -166,9 +166,6 @@ public class QpidTestCase extends TestCase return System.getProperty(VIRTUAL_HOST_NODE_CONTEXT_BLUEPRINT); } - public static final int MIN_PORT_NUMBER = 1; - public static final int MAX_PORT_NUMBER = 49151; - /** * Gets the next available port starting at a port. @@ -178,25 +175,12 @@ public class QpidTestCase extends TestCase */ public int getNextAvailable(int fromPort) { - if ((fromPort < MIN_PORT_NUMBER) || (fromPort > MAX_PORT_NUMBER)) - { - throw new IllegalArgumentException("Invalid start port: " + fromPort); - } - - PortHelper portHelper = new PortHelper(); - for (int i = fromPort; i <= MAX_PORT_NUMBER; i++) - { - if (portHelper.isPortAvailable(i)) { - return i; - } - } - - throw new NoSuchElementException("Could not find an available port above " + fromPort); + return new PortHelper().getNextAvailable(fromPort); } public int findFreePort() { - return getNextAvailable(10000); + return new PortHelper().getNextAvailable(); } /** |