public void testTransferMasterAnotherNode() throws Exception
{
final CountDownLatch firstNodeReplicaStateLatch = new CountDownLatch(1);
final CountDownLatch firstNodeMasterStateLatch = new CountDownLatch(1);
StateChangeListener stateChangeListener = new StateChangeListener(){
@Override
public void stateChange(StateChangeEvent event) throws RuntimeException
{
ReplicatedEnvironment.State state = event.getState();
if (state == ReplicatedEnvironment.State.REPLICA)
{
firstNodeReplicaStateLatch.countDown();
}
if (state == ReplicatedEnvironment.State.MASTER)
{
firstNodeMasterStateLatch.countDown();
}
}
};
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);
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);
String node2NodeHostPort = "localhost:" + replica2Port;
final CountDownLatch replicaStateLatch = new CountDownLatch(1);
final CountDownLatch masterStateLatch = new CountDownLatch(1);
StateChangeListener testStateChangeListener = new StateChangeListener()
{
@Override
public void stateChange(StateChangeEvent event) throws RuntimeException
{
ReplicatedEnvironment.State state = event.getState();