summaryrefslogtreecommitdiff
path: root/qpid/java/bdbstore/systests
diff options
context:
space:
mode:
authorAlex Rudyy <orudyy@apache.org>2014-07-04 01:16:07 +0000
committerAlex Rudyy <orudyy@apache.org>2014-07-04 01:16:07 +0000
commita2dfed6abeaad71e69d9d73c6db42b47d7d93c66 (patch)
tree3d985f74b3e8c434bb65c6517093e944b2ba8b34 /qpid/java/bdbstore/systests
parent29481e51fdbd1a87c7ec75eac8e60ba93028e123 (diff)
downloadqpid-python-a2dfed6abeaad71e69d9d73c6db42b47d7d93c66.tar.gz
QPID-5867: Add intruder protection functionality for a cluster of BDB HA virtual host nodes
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1607772 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/bdbstore/systests')
-rw-r--r--qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeRestTest.java60
1 files changed, 56 insertions, 4 deletions
diff --git a/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeRestTest.java b/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeRestTest.java
index ac6ca45877..1b904c94a4 100644
--- a/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeRestTest.java
+++ b/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeRestTest.java
@@ -31,11 +31,16 @@ import java.util.Map;
import javax.servlet.http.HttpServletResponse;
+import com.sleepycat.je.Durability;
+import com.sleepycat.je.EnvironmentConfig;
+import com.sleepycat.je.rep.ReplicatedEnvironment;
+import com.sleepycat.je.rep.ReplicationConfig;
import org.apache.qpid.server.model.RemoteReplicationNode;
import org.apache.qpid.server.model.State;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.model.VirtualHostNode;
import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade;
+import org.apache.qpid.server.virtualhost.berkeleydb.BDBHAVirtualHost;
import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHARemoteReplicationNode;
import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode;
import org.apache.qpid.systest.rest.Asserts;
@@ -136,7 +141,7 @@ public class BDBHAVirtualHostNodeRestTest extends QpidRestTestCase
Map<String, Object> remoteNode1 = findRemoteNodeByName(remoteNodes, NODE1);
assertEquals("Node 1 observed from node 2 is in the wrong state",
- "UNAVAILABLE", remoteNode1.get(BDBHARemoteReplicationNode.STATE));
+ "UNAVAILABLE", remoteNode1.get(BDBHARemoteReplicationNode.STATE));
assertEquals("Node 1 observed from node 2 has the wrong role",
"UNKNOWN", remoteNode1.get(BDBHARemoteReplicationNode.ROLE));
@@ -240,8 +245,57 @@ public class BDBHAVirtualHostNodeRestTest extends QpidRestTestCase
assertEquals("Unexpected number of remote nodes on " + NODE2, 1, data.size());
}
+ public void testIntruderProtection() throws Exception
+ {
+ createHANode(NODE1, _node1HaPort, _node1HaPort);
+ assertNode(NODE1, _node1HaPort, _node1HaPort, NODE1);
+
+ String virtualHostRestUrl = "virtualhost/" + NODE1 + "/" + _hostName;
+
+ Map<String,Object> hostData = new HashMap<String,Object>();
+ hostData.put(BDBHAVirtualHost.PERMITTED_NODES, Arrays.asList( "localhost:" + _node1HaPort, "localhost:" + _node3HaPort));
+ getRestTestHelper().submitRequest(virtualHostRestUrl, "PUT", hostData, 200);
+
+ // add permitted node
+ Map<String, Object> node3Data = createNodeAttributeMap(NODE3, _node3HaPort, _node1HaPort);
+ node3Data.put(BDBHAVirtualHostNode.HELPER_NODE_NAME, NODE1);
+ getRestTestHelper().submitRequest(_baseNodeRestUrl + NODE3, "PUT", node3Data, 201);
+ assertNode(NODE3, _node3HaPort, _node1HaPort, NODE1);
+ assertRemoteNodes(NODE1, NODE3);
+
+ // try to add not permitted node
+ Map<String, Object> nodeData = createNodeAttributeMap(NODE2, _node2HaPort, _node1HaPort);
+ nodeData.put(BDBHAVirtualHostNode.HELPER_NODE_NAME, NODE1);
+ getRestTestHelper().submitRequest(_baseNodeRestUrl + NODE2, "PUT", nodeData, 409);
+
+ assertRemoteNodes(NODE1, NODE3);
+
+ //connect intruder node
+ String nodeName = NODE2;
+ String nodeHostPort = (String)nodeData.get(BDBHAVirtualHostNode.ADDRESS);
+ File environmentPathFile = new File((String)nodeData.get(BDBHAVirtualHostNode.STORE_PATH), nodeName);
+ environmentPathFile.mkdirs();
+ ReplicationConfig replicationConfig = new ReplicationConfig((String)nodeData.get(BDBHAVirtualHostNode.GROUP_NAME), nodeName, nodeHostPort);
+ replicationConfig.setHelperHosts((String)nodeData.get(BDBHAVirtualHostNode.HELPER_ADDRESS));
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setAllowCreate(true);
+ envConfig.setTransactional(true);
+ envConfig.setDurability(Durability.parse((String)nodeData.get(BDBHAVirtualHostNode.DURABILITY)));
+ ReplicatedEnvironment intruder = new ReplicatedEnvironment(environmentPathFile, replicationConfig, envConfig);
+
+ waitForAttributeChanged(_baseNodeRestUrl + NODE1, VirtualHost.STATE, State.ERRORED.name());
+ }
+
private void createHANode(String nodeName, int nodePort, int helperPort) throws Exception
{
+ Map<String, Object> nodeData = createNodeAttributeMap(nodeName, nodePort, helperPort);
+
+ int responseCode = getRestTestHelper().submitRequest(_baseNodeRestUrl + nodeName, "PUT", nodeData);
+ assertEquals("Unexpected response code for virtual host node " + nodeName + " creation request", 201, responseCode);
+ }
+
+ private Map<String, Object> createNodeAttributeMap(String nodeName, int nodePort, int helperPort)
+ {
Map<String, Object> nodeData = new HashMap<String, Object>();
nodeData.put(BDBHAVirtualHostNode.NAME, nodeName);
nodeData.put(BDBHAVirtualHostNode.TYPE, "BDB_HA");
@@ -249,9 +303,7 @@ public class BDBHAVirtualHostNodeRestTest extends QpidRestTestCase
nodeData.put(BDBHAVirtualHostNode.GROUP_NAME, _hostName);
nodeData.put(BDBHAVirtualHostNode.ADDRESS, "localhost:" + nodePort);
nodeData.put(BDBHAVirtualHostNode.HELPER_ADDRESS, "localhost:" + helperPort);
-
- int responseCode = getRestTestHelper().submitRequest(_baseNodeRestUrl + nodeName, "PUT", nodeData);
- assertEquals("Unexpected response code for virtual host node " + nodeName + " creation request", 201, responseCode);
+ return nodeData;
}
private void assertNode(String nodeName, int nodePort, int nodeHelperPort, String masterNode) throws Exception