You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by afine <gi...@git.apache.org> on 2017/12/14 16:49:09 UTC
[GitHub] zookeeper pull request #432: ZOOKEEPER-2953: Flaky Test: testNoLogBeforeLead...
Github user afine commented on a diff in the pull request:
https://github.com/apache/zookeeper/pull/432#discussion_r156999341
--- Diff: src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java ---
@@ -335,6 +336,100 @@ public void testHighestZxidJoinLate() throws Exception {
output[0], 2);
}
+ /**
+ * This test validates that if a quorum member determines that it is leader without the support of the rest of the
+ * quorum (the other members do not believe it to be the leader) it will stop attempting to lead and become a follower.
+ *
+ * @throws IOException
+ * @throws InterruptedException
+ */
+ @Test
+ public void testElectionFraud() throws IOException, InterruptedException {
+ // capture QuorumPeer logging
+ Layout layout = Logger.getRootLogger().getAppender("CONSOLE").getLayout();
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ WriterAppender appender = new WriterAppender(layout, os);
+ appender.setThreshold(Level.INFO);
+ Logger qlogger = Logger.getLogger(QuorumPeer.class);
+ qlogger.addAppender(appender);
+
+ int numServers = 3;
+
+ // used for assertions later
+ boolean foundLeading = false;
+ boolean foundLooking = false;
+ boolean foundFollowing = false;
+
+ try {
+ // spin up a quorum, we use a small ticktime to make the test run faster
+ Servers servers = LaunchServers(numServers, 500);
+
+ // find the leader
+ int trueLeader = -1;
+ for (int i = 0; i < numServers; i++) {
+ if (servers.mt[i].main.quorumPeer.leader != null) {
+ trueLeader = i;
+ }
+ }
+ Assert.assertTrue("There should be a leader", trueLeader >= 0);
+
+ // find a follower
+ int falseLeader = (trueLeader + 1) % numServers;
+ Assert.assertTrue(servers.mt[falseLeader].main.quorumPeer.follower != null);
--- End diff --
fixed
---