+
+ private void sendFollower2RequestLeadershipTransferToLeader() {
+ testLog.info("sendFollower2RequestLeadershipTransferToLeader starting");
+
+ leaderActor.tell(
+ new RequestLeadership(follower2Id, requestLeadershipResultCollectorActor), ActorRef.noSender());
+
+ testLog.info("sendFollower2RequestLeadershipTransferToLeader ending");
+ }
+
+ private void createRequestLeadershipResultCollectorActor() {
+ testLog.info("createRequestLeadershipResultCollectorActor starting");
+
+ requestLeadershipResultCollectorActor = factory.createActor(MessageCollectorActor.props());
+
+ testLog.info("createRequestLeadershipResultCollectorActor ending");
+ }
+
+ @Test
+ public void testSuccessfulRequestLeadershipTransferToFollower2() {
+ testLog.info("testSuccessfulRequestLeadershipTransferToFollower2 starting");
+
+ createRaftActors();
+ createRequestLeadershipResultCollectorActor();
+
+ sendFollower2RequestLeadershipTransferToLeader();
+
+ verifyRaftState(follower2Actor, RaftState.Leader);
+
+ expectMatching(requestLeadershipResultCollectorActor, Status.Success.class, 1);
+
+ testLog.info("testSuccessfulRequestLeadershipTransferToFollower2 ending");
+ }
+
+ @Test
+ public void testRequestLeadershipTransferToFollower2WithFollower2Lagging() {
+ testLog.info("testRequestLeadershipTransferToFollower2WithFollower2Lagging starting");
+
+ createRaftActors();
+ createRequestLeadershipResultCollectorActor();
+
+ sendPayloadWithFollower2Lagging();
+
+ sendFollower2RequestLeadershipTransferToLeader();
+
+ verifyRaftState(follower1Actor, RaftState.Follower);
+ verifyRaftState(follower2Actor, RaftState.Follower);
+ verifyRaftState(follower3Actor, RaftState.Follower);
+
+ Status.Failure failure = expectFirstMatching(requestLeadershipResultCollectorActor, Status.Failure.class);
+ assertTrue(failure.cause() instanceof LeadershipTransferFailedException);
+
+ testLog.info("testRequestLeadershipTransferToFollower2WithFollower2Lagging ending");
+ }
+
+ @Test
+ public void testRequestLeadershipTransferToFollower2WithFollower2Shutdown() throws Exception {
+ testLog.info("testRequestLeadershipTransferToFollower2WithFollower2Shutdown starting");
+
+ createRaftActors();
+ createRequestLeadershipResultCollectorActor();
+
+ sendShutDown(follower2Actor);
+
+ sendFollower2RequestLeadershipTransferToLeader();
+
+ verifyRaftState(follower1Actor, RaftState.Follower);
+ verifyRaftState(follower3Actor, RaftState.Follower);
+
+ Status.Failure failure = expectFirstMatching(requestLeadershipResultCollectorActor, Status.Failure.class);
+ assertTrue(failure.cause() instanceof LeadershipTransferFailedException);
+
+ testLog.info("testRequestLeadershipTransferToFollower2WithFollower2Shutdown ending");
+ }