summaryrefslogtreecommitdiff
path: root/qpid/java/bdbstore/systests/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/bdbstore/systests/src/test/java')
-rw-r--r--qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java9
-rw-r--r--qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostRestTest.java12
-rw-r--r--qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java58
-rw-r--r--qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java46
4 files changed, 86 insertions, 39 deletions
diff --git a/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java b/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java
index 301375d0fb..fcbd210311 100644
--- a/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java
+++ b/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java
@@ -226,7 +226,7 @@ public class BDBHAVirtualHostNodeRestTest extends QpidRestTestCase
assertEquals("Unexpected number of remote nodes on " + NODE2, 1, data.size());
}
- public void testIntruderBDBHAVHNNotAllowedNoConnect() throws Exception
+ public void testIntruderBDBHAVHNNotAllowedToConnect() throws Exception
{
createHANode(NODE1, _node1HaPort, _node1HaPort);
assertNode(NODE1, _node1HaPort, _node1HaPort, NODE1);
@@ -304,6 +304,7 @@ public class BDBHAVirtualHostNodeRestTest extends QpidRestTestCase
intruder.close();
}
}
+
waitForAttributeChanged(_baseNodeRestUrl + NODE1, VirtualHostNode.STATE, State.ERRORED.name());
waitForAttributeChanged(_baseNodeRestUrl + NODE3, VirtualHostNode.STATE, State.ERRORED.name());
}
@@ -329,7 +330,11 @@ public class BDBHAVirtualHostNodeRestTest extends QpidRestTestCase
nodeData.put(BDBHAVirtualHostNode.HELPER_NODE_NAME, NODE1);
Map<String,String> context = new HashMap<>();
nodeData.put(BDBHAVirtualHostNode.CONTEXT, context);
- String bluePrint = GroupCreator.getBlueprint("localhost", _node1HaPort, _node2HaPort, _node3HaPort);
+ if (nodePort == helperPort)
+ {
+ nodeData.put(BDBHAVirtualHostNode.PERMITTED_NODES, GroupCreator.getPermittedNodes("localhost", _node1HaPort, _node2HaPort, _node3HaPort));
+ }
+ String bluePrint = GroupCreator.getBlueprint();
context.put(AbstractVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, bluePrint);
return nodeData;
}
diff --git a/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostRestTest.java b/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostRestTest.java
index 07ce033a55..f73a2878d3 100644
--- a/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostRestTest.java
+++ b/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostRestTest.java
@@ -27,6 +27,7 @@ import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
@@ -49,6 +50,8 @@ public class BDBHAVirtualHostRestTest extends QpidRestTestCase
private Object _nodeName;
private String _virtualhostUrl;
private String _bluePrint;
+ private List<String> _permittedNodes;
+ private String _address;
@Override
public void setUp() throws Exception
@@ -59,8 +62,9 @@ public class BDBHAVirtualHostRestTest extends QpidRestTestCase
_storeBaseDir = new File(TMP_FOLDER, "store-" + _hostName + "-" + System.currentTimeMillis());
_nodeHaPort = getNextAvailable(getRestTestHelper().getHttpPort() + 1);
_virtualhostUrl = "virtualhost/" + _nodeName + "/" + _hostName;
- _bluePrint = GroupCreator.getBlueprint("localhost", _nodeHaPort);
-
+ _bluePrint = GroupCreator.getBlueprint();
+ _permittedNodes = GroupCreator.getPermittedNodes("localhost", _nodeHaPort);
+ _address = "localhost:" + _nodeHaPort;
super.setUp();
}
@@ -93,9 +97,11 @@ public class BDBHAVirtualHostRestTest extends QpidRestTestCase
nodeAttributes.put(BDBHAVirtualHostNode.TYPE, "BDB_HA");
nodeAttributes.put(BDBHAVirtualHostNode.STORE_PATH, _storeBaseDir.getPath() + File.separator + _nodeName);
nodeAttributes.put(BDBHAVirtualHostNode.GROUP_NAME, _hostName);
- nodeAttributes.put(BDBHAVirtualHostNode.ADDRESS, "localhost:" + _nodeHaPort);
+ nodeAttributes.put(BDBHAVirtualHostNode.ADDRESS, _address);
nodeAttributes.put(BDBHAVirtualHostNode.HELPER_ADDRESS, "localhost:" + _nodeHaPort);
nodeAttributes.put(BDBHAVirtualHostNode.HELPER_NODE_NAME, _nodeName);
+
+ nodeAttributes.put(BDBHAVirtualHostNode.PERMITTED_NODES, _permittedNodes);
Map<String, String> context = new HashMap<String,String>();
context.put(AbstractVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, _bluePrint);
diff --git a/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java b/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java
index f7dce4f3f5..673e492d52 100644
--- a/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java
+++ b/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java
@@ -52,7 +52,6 @@ import org.apache.qpid.server.model.Plugin;
import org.apache.qpid.server.model.Port;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.model.VirtualHostNode;
-import org.apache.qpid.server.virtualhost.berkeleydb.BDBHAVirtualHost;
import org.apache.qpid.server.virtualhost.berkeleydb.BDBHAVirtualHostImpl;
import org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode;
import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHARemoteReplicationNode;
@@ -118,7 +117,8 @@ public class GroupCreator
brokerPort = _testcase.getNextAvailable(bdbPort + 1);
}
- String bluePrintJson = getBlueprint(_ipAddressOfBroker, bdbPorts);
+ String bluePrintJson = getBlueprint();
+ List<String> permittedNodes = getPermittedNodes(_ipAddressOfBroker, bdbPorts);
String helperName = null;
for (Map.Entry<Integer,Integer> entry: _brokerPortToBdbPortMap.entrySet())
@@ -145,6 +145,7 @@ public class GroupCreator
virtualHostNodeAttributes.put(BDBHAVirtualHostNode.HELPER_ADDRESS, getHelperHostPort());
virtualHostNodeAttributes.put(BDBHAVirtualHostNode.TYPE, BDBHAVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE);
virtualHostNodeAttributes.put(BDBHAVirtualHostNode.HELPER_NODE_NAME, helperName);
+ virtualHostNodeAttributes.put(BDBHAVirtualHostNode.PERMITTED_NODES, permittedNodes);
Map<String, String> context = new HashMap<>();
context.put(ReplicationConfig.INSUFFICIENT_REPLICAS_TIMEOUT, "2 s");
@@ -365,11 +366,6 @@ public class GroupCreator
return _ipAddressOfBroker + ":" + _bdbHelperPort;
}
- public void setHelperHostPort(int bdbHelperPort)
- {
- _bdbHelperPort = bdbHelperPort;
- }
-
public int getBrokerPortNumberOfPrimary()
{
if (_numberOfNodes != 2)
@@ -406,21 +402,6 @@ public class GroupCreator
}
}
- public void modifyClusterNodeBdbAddress(int brokerPortNumberToBeMoved, int newBdbPort)
- {
- TestBrokerConfiguration config = _testcase.getBrokerConfiguration(brokerPortNumberToBeMoved);
- String nodeName = getNodeNameForNodeAt(_brokerPortToBdbPortMap.get(brokerPortNumberToBeMoved));
-
- Map<String, Object> objectAttributes = config.getObjectAttributes(VirtualHostNode.class, nodeName);
-
- String oldBdbHostPort = (String)objectAttributes.get(BDBHAVirtualHostNode.ADDRESS);
- String[] oldHostAndPort = StringUtils.split(oldBdbHostPort, ":");
- String oldHost = oldHostAndPort[0];
- String newBdbHostPort = oldHost + ":" + newBdbPort;
- config.setObjectAttribute(VirtualHostNode.class, nodeName, BDBHAVirtualHostNode.ADDRESS, newBdbHostPort);
- config.setSaved(false);
- }
-
public String getNodeNameForBrokerPort(final int brokerPort)
{
return getNodeNameForNodeAt(_brokerPortToBdbPortMap.get(brokerPort));
@@ -491,20 +472,25 @@ public class GroupCreator
public void awaitNodeToAttainRole(int localNodePort, int remoteNodePort, String desiredRole) throws Exception
{
+ awaitNodeToAttainAttributeValue(localNodePort, remoteNodePort, BDBHARemoteReplicationNode.ROLE, desiredRole);
+ }
+
+ public void awaitNodeToAttainAttributeValue(int localNodePort, int remoteNodePort, String attributeName, String desiredValue) throws Exception
+ {
final long startTime = System.currentTimeMillis();
Map<String, Object> data = Collections.emptyMap();
- while(!desiredRole.equals(data.get(BDBHARemoteReplicationNode.ROLE)) && (System.currentTimeMillis() - startTime) < 30000)
+ while(!desiredValue.equals(data.get(attributeName)) && (System.currentTimeMillis() - startTime) < 30000)
{
- LOGGER.debug("Awaiting node '" + getNodeNameForBrokerPort(remoteNodePort) + "' to transit into " + desiredRole + " role");
+ LOGGER.debug("Awaiting node '" + getNodeNameForBrokerPort(remoteNodePort) + "' to transit into " + desiredValue + " role");
data = getNodeAttributes(localNodePort, remoteNodePort);
- if (!desiredRole.equals(data.get(BDBHARemoteReplicationNode.ROLE)))
+ if (!desiredValue.equals(data.get(attributeName)))
{
Thread.sleep(1000);
}
}
- LOGGER.debug("Node '" + getNodeNameForBrokerPort(remoteNodePort) + "' role is " + data.get(BDBHARemoteReplicationNode.ROLE));
- Assert.assertEquals("Node is in unexpected role", desiredRole, data.get(BDBHARemoteReplicationNode.ROLE));
+ LOGGER.debug("Node '" + getNodeNameForBrokerPort(remoteNodePort) + "' attribute '" + attributeName + "' is " + data.get(attributeName));
+ Assert.assertEquals("Unexpected " + attributeName + " at " + localNodePort, desiredValue, data.get(attributeName));
}
public RestTestHelper createRestTestHelper(int brokerPort)
@@ -515,16 +501,10 @@ public class GroupCreator
return helper;
}
- public static String getBlueprint(String hostName, int... ports) throws Exception
+ public static String getBlueprint() throws Exception
{
- List<String> permittedNodes = new ArrayList<String>();
- for (int port:ports)
- {
- permittedNodes.add(hostName + ":" + port);
- }
Map<String,Object> bluePrint = new HashMap<>();
bluePrint.put(VirtualHost.TYPE, BDBHAVirtualHostImpl.VIRTUAL_HOST_TYPE);
- bluePrint.put(BDBHAVirtualHost.PERMITTED_NODES, permittedNodes);
StringWriter writer = new StringWriter();
ObjectMapper mapper = new ObjectMapper();
@@ -532,4 +512,14 @@ public class GroupCreator
mapper.writeValue(writer, bluePrint);
return writer.toString();
}
+
+ public static List<String> getPermittedNodes(String hostName, int... ports)
+ {
+ List<String> permittedNodes = new ArrayList<String>();
+ for (int port: ports)
+ {
+ permittedNodes.add(hostName + ":" + port);
+ }
+ return permittedNodes;
+ }
}
diff --git a/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java b/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java
index d6ba419de1..5701c8c9c8 100644
--- a/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java
+++ b/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java
@@ -33,10 +33,15 @@ import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;
+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.log4j.Logger;
import org.apache.qpid.client.AMQConnection;
import org.apache.qpid.jms.ConnectionListener;
import org.apache.qpid.jms.ConnectionURL;
+import org.apache.qpid.server.model.State;
import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode;
import org.apache.qpid.test.utils.QpidBrokerTestCase;
import org.apache.qpid.test.utils.TestUtils;
@@ -320,6 +325,47 @@ public class MultiNodeTest extends QpidBrokerTestCase
assertProducingConsuming(connection);
}
+ public void testClusterCannotStartWithIntruder() throws Exception
+ {
+ int intruderPort = getNextAvailable(Collections.max(_groupCreator.getBdbPortNumbers()) + 1);
+ String nodeName = "intruder";
+ String nodeHostPort = _groupCreator.getIpAddressOfBrokerHost() + ":" + intruderPort;
+ File environmentPathFile = new File(System.getProperty("QPID_WORK"), intruderPort + "");
+ environmentPathFile.mkdirs();
+ ReplicationConfig replicationConfig = new ReplicationConfig(_groupCreator.getGroupName(), nodeName, nodeHostPort);
+ replicationConfig.setHelperHosts(_groupCreator.getHelperHostPort());
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setAllowCreate(true);
+ envConfig.setTransactional(true);
+ envConfig.setDurability(new Durability(Durability.SyncPolicy.SYNC, Durability.SyncPolicy.WRITE_NO_SYNC, Durability.ReplicaAckPolicy.SIMPLE_MAJORITY));
+
+ ReplicatedEnvironment intruder = null;
+ try
+ {
+ intruder = new ReplicatedEnvironment(environmentPathFile, replicationConfig, envConfig);
+ }
+ finally
+ {
+ if (intruder != null)
+ {
+ intruder.close();
+ }
+ }
+
+ for (int port: _groupCreator.getBrokerPortNumbersForNodes())
+ {
+ _groupCreator.awaitNodeToAttainAttributeValue(port, port, BDBHAVirtualHostNode.STATE, State.ERRORED.name());
+ }
+
+ _groupCreator.stopCluster();
+ _groupCreator.startCluster();
+
+ for (int port: _groupCreator.getBrokerPortNumbersForNodes())
+ {
+ _groupCreator.awaitNodeToAttainAttributeValue(port, port, BDBHAVirtualHostNode.STATE, State.ERRORED.name());
+ }
+ }
+
private final class FailoverAwaitingListener implements ConnectionListener
{
private final CountDownLatch _failoverCompletionLatch = new CountDownLatch(1);