+ @Test
+ public void testServerRemovedShardActorNotRunning() throws Exception {
+ new JavaTestKit(getSystem()) {{
+ MockConfiguration mockConfig =
+ new MockConfiguration(ImmutableMap.<String, List<String>>builder().
+ put("default", Arrays.asList("member-1", "member-2")).
+ put("astronauts", Arrays.asList("member-2")).
+ put("people", Arrays.asList("member-1", "member-2")).build());
+
+ TestActorRef<TestShardManager> shardManager = TestActorRef.create(getSystem(),
+ newShardMgrProps(mockConfig));
+
+ shardManager.underlyingActor().waitForRecoveryComplete();
+
+ shardManager.tell(new FindLocalShard("people", false), getRef());
+ expectMsgClass(duration("5 seconds"), NotInitializedException.class);
+
+ shardManager.tell(new FindLocalShard("default", false), getRef());
+ expectMsgClass(duration("5 seconds"), NotInitializedException.class);
+
+ // Removed the default shard replica from member-1
+ ShardIdentifier.Builder builder = new ShardIdentifier.Builder();
+ final ShardIdentifier shardId = builder.shardName("default").memberName("member-1").type("config1").build();
+ shardManager.tell(new ServerRemoved(shardId.toString()), getRef());
+
+ shardManager.underlyingActor().verifySnapshotPersisted(Sets.newHashSet("people"));
+ }};
+ }
+
+ @Test
+ public void testServerRemovedShardActorRunning() throws Exception {
+ new JavaTestKit(getSystem()) {{
+ MockConfiguration mockConfig =
+ new MockConfiguration(ImmutableMap.<String, List<String>>builder().
+ put("default", Arrays.asList("member-1", "member-2")).
+ put("astronauts", Arrays.asList("member-2")).
+ put("people", Arrays.asList("member-1", "member-2")).build());
+
+ TestActorRef<TestShardManager> shardManager = TestActorRef.create(getSystem(),
+ newShardMgrProps(mockConfig));
+
+ TestActorRef<MessageCollectorActor> shard = TestActorRef.create(getSystem(), MessageCollectorActor.props());
+
+ watch(shard);
+
+ shardManager.underlyingActor().waitForRecoveryComplete();
+
+ shardManager.underlyingActor().addShardActor("default", shard);
+
+ shardManager.tell(new UpdateSchemaContext(TestModel.createTestContext()), getRef());
+
+ shardManager.tell(new FindLocalShard("people", false), getRef());
+ expectMsgClass(duration("5 seconds"), NotInitializedException.class);
+
+ shardManager.tell(new FindLocalShard("default", false), getRef());
+ expectMsgClass(duration("5 seconds"), NotInitializedException.class);
+
+ // Removed the default shard replica from member-1
+ ShardIdentifier.Builder builder = new ShardIdentifier.Builder();
+ final ShardIdentifier shardId = builder.shardName("default").memberName("member-1").type("config1").build();
+ shardManager.tell(new ServerRemoved(shardId.toString()), getRef());
+
+ shardManager.underlyingActor().verifySnapshotPersisted(Sets.newHashSet("people"));
+
+ expectMsgClass(duration("5 seconds"), Terminated.class);
+ }};
+ }
+
+