+ @Test
+ public void testChangeServersVotingStatus() throws Exception {
+ new JavaTestKit(getSystem()) {
+ {
+ String memberId = "member-1-shard-default-" + shardMrgIDSuffix;
+
+ ActorRef respondActor = actorFactory
+ .createActor(Props.create(MockRespondActor.class, ChangeServersVotingStatus.class,
+ new ServerChangeReply(ServerChangeStatus.OK, null)), memberId);
+
+ ActorRef shardManager = getSystem().actorOf(newPropsShardMgrWithMockShardActor(respondActor));
+
+ shardManager.tell(new UpdateSchemaContext(TestModel.createTestContext()), getRef());
+ shardManager.tell(new ActorInitialized(), respondActor);
+ shardManager.tell(new ShardLeaderStateChanged(memberId, memberId, mock(DataTree.class),
+ DataStoreVersions.CURRENT_VERSION), getRef());
+ shardManager.tell(
+ new RoleChangeNotification(memberId, RaftState.Candidate.name(), RaftState.Leader.name()),
+ respondActor);
+
+ shardManager.tell(
+ new ChangeShardMembersVotingStatus("default", ImmutableMap.of("member-2", Boolean.TRUE)),
+ getRef());
+
+ ChangeServersVotingStatus actualChangeStatusMsg = MessageCollectorActor
+ .expectFirstMatching(respondActor, ChangeServersVotingStatus.class);
+ assertEquals("ChangeServersVotingStatus map", actualChangeStatusMsg.getServerVotingStatusMap(),
+ ImmutableMap.of(ShardIdentifier
+ .create("default", MemberName.forName("member-2"), shardMrgIDSuffix).toString(),
+ Boolean.TRUE));
+
+ expectMsgClass(duration("5 seconds"), Success.class);
+ }
+ };
+ }
+
+ @Test
+ public void testChangeServersVotingStatusWithNoLeader() throws Exception {
+ new JavaTestKit(getSystem()) {
+ {
+ String memberId = "member-1-shard-default-" + shardMrgIDSuffix;
+
+ ActorRef respondActor = actorFactory
+ .createActor(Props.create(MockRespondActor.class, ChangeServersVotingStatus.class,
+ new ServerChangeReply(ServerChangeStatus.NO_LEADER, null)), memberId);
+
+ ActorRef shardManager = getSystem().actorOf(newPropsShardMgrWithMockShardActor(respondActor));
+
+ shardManager.tell(new UpdateSchemaContext(TestModel.createTestContext()), getRef());
+ shardManager.tell(new ActorInitialized(), respondActor);
+ shardManager.tell(new RoleChangeNotification(memberId, null, RaftState.Follower.name()), respondActor);
+
+ shardManager.tell(
+ new ChangeShardMembersVotingStatus("default", ImmutableMap.of("member-2", Boolean.TRUE)),
+ getRef());
+
+ MessageCollectorActor.expectFirstMatching(respondActor, ChangeServersVotingStatus.class);
+
+ Status.Failure resp = expectMsgClass(duration("5 seconds"), Status.Failure.class);
+ assertEquals("Failure resposnse", true, resp.cause() instanceof NoShardLeaderException);
+ }
+ };
+ }
+
+ public static class TestShardManager extends ShardManager {