@Test
public void testBecomeLeaderOnReceivingMajorityVotesInFiveNodeCluster() {

    MockRaftActorContext raftActorContext = createActorContext();
    raftActorContext.getTermInformation().update(2L, "other");
    raftActorContext.setReplicatedLog(new MockRaftActorContext.MockReplicatedLogBuilder()
            .createEntries(0, 5, 1).build());
    raftActorContext.setCommitIndex(raftActorContext.getReplicatedLog().lastIndex());
    raftActorContext.setLastApplied(raftActorContext.getReplicatedLog().lastIndex());
    raftActorContext.setPeerAddresses(setupPeers(4));
    candidate = new Candidate(raftActorContext);
    RequestVote requestVote = MessageCollectorActor.expectFirstMatching(peerActors[0], RequestVote.class);
    assertEquals("getTerm", 3L, requestVote.getTerm());
    assertEquals("getCandidateId", raftActorContext.getId(), requestVote.getCandidateId());
    assertEquals("getLastLogTerm", 1L, requestVote.getLastLogTerm());
    assertEquals("getLastLogIndex", 4L, requestVote.getLastLogIndex());
    MessageCollectorActor.expectFirstMatching(peerActors[1], RequestVote.class);
    MessageCollectorActor.expectFirstMatching(peerActors[2], RequestVote.class);
    MessageCollectorActor.expectFirstMatching(peerActors[3], RequestVote.class);
    // First peers denies the vote.
    candidate = candidate.handleMessage(peerActors[0], new RequestVoteReply(1, false));
    assertEquals("Behavior", RaftState.Candidate, candidate.state());
    candidate = candidate.handleMessage(peerActors[1], new RequestVoteReply(1, true));
    assertEquals("Behavior", RaftState.Candidate, candidate.state());
    candidate = candidate.handleMessage(peerActors[2], new RequestVoteReply(1, true));
    assertEquals("Behavior", RaftState.Leader, candidate.state());
}