+ @Test
+ public void testFollowerLeaderStateChanges() {
+ testLog.info("testFollowerLeaderStateChanges");
+
+ ActorRef roleChangeNotifier = factory.createActor(
+ MessageCollectorActor.props(), factory.generateActorId("roleChangeNotifier"));
+ follower1Builder.roleChangeNotifier(roleChangeNotifier);
+
+ setupLeaderAndNonVotingFollower();
+
+ ((DefaultConfigParamsImpl)follower1Context.getConfigParams()).setElectionTimeoutFactor(2);
+ ((DefaultConfigParamsImpl)follower1Context.getConfigParams())
+ .setHeartBeatInterval(FiniteDuration.apply(100, TimeUnit.MILLISECONDS));
+
+ MessageCollectorActor.clearMessages(roleChangeNotifier);
+ follower1Actor.tell(ElectionTimeout.INSTANCE, ActorRef.noSender());
+ followerInstance.startDropMessages(AppendEntries.class);
+
+ LeaderStateChanged leaderStateChanged = MessageCollectorActor.expectFirstMatching(roleChangeNotifier,
+ LeaderStateChanged.class);
+ assertEquals("getLeaderId", null, leaderStateChanged.getLeaderId());
+
+ MessageCollectorActor.clearMessages(roleChangeNotifier);
+ followerInstance.stopDropMessages(AppendEntries.class);
+
+ leaderStateChanged = MessageCollectorActor.expectFirstMatching(roleChangeNotifier,
+ LeaderStateChanged.class);
+ assertEquals("getLeaderId", leaderId, leaderStateChanged.getLeaderId());
+ }
+