diff options
| author | Andrew MacBean <macbean@apache.org> | 2014-10-08 16:34:10 +0000 |
|---|---|---|
| committer | Andrew MacBean <macbean@apache.org> | 2014-10-08 16:34:10 +0000 |
| commit | 596241e890427e48f78917b9b82aa73816dd2dd6 (patch) | |
| tree | 0c0796c35f48463065523b82089df2957919366a /qpid/java/bdbstore/src/test | |
| parent | 30eda2c517fe78eca4ccb42a5cc44a44af3ef7f7 (diff) | |
| download | qpid-python-596241e890427e48f78917b9b82aa73816dd2dd6.tar.gz | |
QPID-6134: [Java Broker] Restarting a node that has detected an intruder should go back into the ERROR state not ACTIVE
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1630167 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/bdbstore/src/test')
| -rw-r--r-- | qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java | 80 |
1 files changed, 64 insertions, 16 deletions
diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java index e23346cd6a..ee990d3211 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java @@ -42,6 +42,7 @@ import com.sleepycat.je.rep.ReplicatedEnvironment; import com.sleepycat.je.rep.ReplicationConfig; import org.apache.qpid.server.configuration.IllegalConfigurationException; +import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.ConfigurationChangeListener; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.RemoteReplicationNode; @@ -489,21 +490,70 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase nonMasterNode.setAttributes(Collections.<String, Object>singletonMap(BDBHAVirtualHostNode.PERMITTED_NODES, amendedPermittedNodes)); } + public void testIntruderProtection() throws Exception + { + int nodePortNumber = _portHelper.getNextAvailable(); + int intruderPortNumber = _portHelper.getNextAvailable(); + + String helperAddress = "localhost:" + nodePortNumber; + String groupName = "group"; + String nodeName = "node"; + + Map<String, Object> node1Attributes = _helper.createNodeAttributes(nodeName, groupName, helperAddress, helperAddress, nodeName, nodePortNumber, intruderPortNumber); + BDBHAVirtualHostNode<?> node = _helper.createAndStartHaVHN(node1Attributes); + + Map<String, Object> intruderAttributes = _helper.createNodeAttributes("intruder", groupName, "localhost:" + intruderPortNumber, helperAddress, nodeName); + intruderAttributes.put(BDBHAVirtualHostNode.PRIORITY, 0); + BDBHAVirtualHostNode<?> intruder = _helper.createAndStartHaVHN(intruderAttributes); + + final CountDownLatch stopLatch = new CountDownLatch(1); + ConfigurationChangeListener listener = new NoopConfigurationChangeListener() + { + @Override + public void stateChanged(ConfiguredObject<?> object, State oldState, State newState) + { + if (newState == State.ERRORED) + { + stopLatch.countDown(); + } + } + }; + node.addChangeListener(listener); + + List<String> permittedNodes = new ArrayList<String>(); + permittedNodes.add(helperAddress); + node.setAttributes(Collections.<String, Object>singletonMap(BDBHAVirtualHostNode.PERMITTED_NODES, permittedNodes)); + + assertTrue("Intruder protection was not triggered during expected timeout", stopLatch.await(10, TimeUnit.SECONDS)); + + // Try top re start the ERRORED node and ensure exception is thrown + try + { + node.start(); + fail("Restart of node should have thrown exception"); + } + catch (IllegalStateException ise) + { + assertEquals("Unexpected exception when restarting node post intruder detection", "Intruder node detected: " + "localhost:" + intruderPortNumber, ise.getMessage()); + } + _helper.awaitForAttributeChange(node, AbstractConfiguredObject.STATE, State.ERRORED); + } + public void testIntruderProtectionInManagementMode() throws Exception { - int node1PortNumber = _portHelper.getNextAvailable(); - int node2PortNumber = _portHelper.getNextAvailable(); + int nodePortNumber = _portHelper.getNextAvailable(); + int intruderPortNumber = _portHelper.getNextAvailable(); - String helperAddress = "localhost:" + node1PortNumber; + String helperAddress = "localhost:" + nodePortNumber; String groupName = "group"; - String nodeName = "node1"; + String nodeName = "node"; - Map<String, Object> node1Attributes = _helper.createNodeAttributes(nodeName, groupName, helperAddress, helperAddress, nodeName, node1PortNumber, node2PortNumber); - BDBHAVirtualHostNode<?> node1 = _helper.createAndStartHaVHN(node1Attributes); + Map<String, Object> nodeAttributes = _helper.createNodeAttributes(nodeName, groupName, helperAddress, helperAddress, nodeName, nodePortNumber, intruderPortNumber); + BDBHAVirtualHostNode<?> node = _helper.createAndStartHaVHN(nodeAttributes); - Map<String, Object> node2Attributes = _helper.createNodeAttributes("node2", groupName, "localhost:" + node2PortNumber, helperAddress, nodeName); - node2Attributes.put(BDBHAVirtualHostNode.PRIORITY, 0); - BDBHAVirtualHostNode<?> node2 = _helper.createAndStartHaVHN(node2Attributes); + Map<String, Object> intruderAttributes = _helper.createNodeAttributes("intruder", groupName, "localhost:" + intruderPortNumber, helperAddress, nodeName); + intruderAttributes.put(BDBHAVirtualHostNode.PRIORITY, 0); + BDBHAVirtualHostNode<?> intruder = _helper.createAndStartHaVHN(intruderAttributes); final CountDownLatch stopLatch = new CountDownLatch(1); ConfigurationChangeListener listener = new NoopConfigurationChangeListener() @@ -517,21 +567,19 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase } } }; - node1.addChangeListener(listener); + node.addChangeListener(listener); List<String> permittedNodes = new ArrayList<String>(); permittedNodes.add(helperAddress); - node1.setAttributes(Collections.<String, Object>singletonMap(BDBHAVirtualHostNode.PERMITTED_NODES, permittedNodes)); + node.setAttributes(Collections.<String, Object>singletonMap(BDBHAVirtualHostNode.PERMITTED_NODES, permittedNodes)); assertTrue("Intruder protection was not triggered during expected timeout", stopLatch.await(10, TimeUnit.SECONDS)); + // test that if management mode is enabled then the node can start without exception when(_helper.getBroker().isManagementMode()).thenReturn(true); - node1.start(); - - _helper.awaitRemoteNodes(node1, 1); + node.start(); - BDBHARemoteReplicationNode<?> remote = _helper.findRemoteNode(node1, node2.getName()); - remote.delete(); + _helper.awaitForAttributeChange(node, AbstractConfiguredObject.STATE, State.ERRORED); } public void testPermittedNodesChangedOnReplicaNodeOnlyOnceAfterBeingChangedOnMaster() throws Exception |
