|
@@ -903,11 +903,26 @@ public class QuorumPeerMainTest extends QuorumPeerTestBase {
|
|
|
"waiting for server to start");
|
|
|
}
|
|
|
|
|
|
- assertTrue(svrs.mt[0].getQuorumPeer().getPeerState() == QuorumPeer.ServerState.LOOKING);
|
|
|
- assertTrue(svrs.mt[highestServerIndex].getQuorumPeer().getPeerState()
|
|
|
- == QuorumPeer.ServerState.LEADING);
|
|
|
+ // Expecting that only 3 node will be leader is wrong, even 2 node can be leader, when cluster is formed with 1 node
|
|
|
+ boolean firstAndSecondNodeFormedCluster = false;
|
|
|
+ if (QuorumPeer.ServerState.LEADING == svrs.mt[1].getQuorumPeer().getPeerState()) {
|
|
|
+ assertEquals(QuorumPeer.ServerState.FOLLOWING,
|
|
|
+ svrs.mt[0].getQuorumPeer().getPeerState());
|
|
|
+ assertEquals(QuorumPeer.ServerState.FOLLOWING,
|
|
|
+ svrs.mt[highestServerIndex].getQuorumPeer().getPeerState());
|
|
|
+ firstAndSecondNodeFormedCluster = true;
|
|
|
+ } else {
|
|
|
+ // Verify leader out of view scenario
|
|
|
+ assertEquals(QuorumPeer.ServerState.LOOKING,
|
|
|
+ svrs.mt[0].getQuorumPeer().getPeerState());
|
|
|
+ assertEquals(QuorumPeer.ServerState.LEADING,
|
|
|
+ svrs.mt[highestServerIndex].getQuorumPeer().getPeerState());
|
|
|
+ }
|
|
|
for (int i = 1; i < highestServerIndex; i++) {
|
|
|
- assertTrue(svrs.mt[i].getQuorumPeer().getPeerState() == QuorumPeer.ServerState.FOLLOWING);
|
|
|
+ assertTrue(
|
|
|
+ svrs.mt[i].getQuorumPeer().getPeerState() == QuorumPeer.ServerState.FOLLOWING
|
|
|
+ || svrs.mt[i].getQuorumPeer().getPeerState()
|
|
|
+ == QuorumPeer.ServerState.LEADING);
|
|
|
}
|
|
|
|
|
|
// Look through the logs for output that indicates Node 1 is LEADING or FOLLOWING
|
|
@@ -920,13 +935,18 @@ public class QuorumPeerMainTest extends QuorumPeerTestBase {
|
|
|
foundLeading = leading.matcher(line).matches();
|
|
|
foundFollowing = following.matcher(line).matches();
|
|
|
}
|
|
|
+ if (firstAndSecondNodeFormedCluster) {
|
|
|
+ assertTrue(foundFollowing,
|
|
|
+ "Corrupt peer should join quorum with servers having same server configuration");
|
|
|
+ } else {
|
|
|
+ assertFalse(foundLeading, "Corrupt peer should never become leader");
|
|
|
+ assertFalse(foundFollowing,
|
|
|
+ "Corrupt peer should not attempt connection to out of view leader");
|
|
|
+ }
|
|
|
|
|
|
} finally {
|
|
|
qlogger.removeAppender(appender);
|
|
|
}
|
|
|
-
|
|
|
- assertFalse(foundLeading, "Corrupt peer should never become leader");
|
|
|
- assertFalse(foundFollowing, "Corrupt peer should not attempt connection to out of view leader");
|
|
|
}
|
|
|
|
|
|
@Test
|