BUG-5280: switch tests to ClientBackedDataStore
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / shardmanager / ShardManagerTest.java
index 521a0b86bdec17d48b8eddbe000f43834ebcc806..6a8830c25b2d213bf105decd8e170c306e37d2d9 100644 (file)
@@ -59,7 +59,6 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
-import org.apache.commons.lang3.SerializationUtils;
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.opendaylight.controller.cluster.access.concepts.MemberName;
@@ -68,6 +67,7 @@ import org.opendaylight.controller.cluster.datastore.ClusterWrapperImpl;
 import org.opendaylight.controller.cluster.datastore.DataStoreVersions;
 import org.opendaylight.controller.cluster.datastore.DatastoreContext;
 import org.opendaylight.controller.cluster.datastore.DatastoreContextFactory;
+import org.opendaylight.controller.cluster.datastore.DistributedDataStore;
 import org.opendaylight.controller.cluster.datastore.Shard;
 import org.opendaylight.controller.cluster.datastore.ShardManager.SchemaContextModules;
 import org.opendaylight.controller.cluster.datastore.config.ConfigurationImpl;
@@ -83,8 +83,6 @@ import org.opendaylight.controller.cluster.datastore.messages.ActorInitialized;
 import org.opendaylight.controller.cluster.datastore.messages.AddShardReplica;
 import org.opendaylight.controller.cluster.datastore.messages.ChangeShardMembersVotingStatus;
 import org.opendaylight.controller.cluster.datastore.messages.CreateShard;
-import org.opendaylight.controller.cluster.datastore.messages.DatastoreSnapshot;
-import org.opendaylight.controller.cluster.datastore.messages.DatastoreSnapshot.ShardSnapshot;
 import org.opendaylight.controller.cluster.datastore.messages.FindLocalShard;
 import org.opendaylight.controller.cluster.datastore.messages.FindPrimary;
 import org.opendaylight.controller.cluster.datastore.messages.LocalPrimaryShardFound;
@@ -97,6 +95,9 @@ import org.opendaylight.controller.cluster.datastore.messages.RemotePrimaryShard
 import org.opendaylight.controller.cluster.datastore.messages.RemoveShardReplica;
 import org.opendaylight.controller.cluster.datastore.messages.ShardLeaderStateChanged;
 import org.opendaylight.controller.cluster.datastore.messages.UpdateSchemaContext;
+import org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot;
+import org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot.ShardSnapshot;
+import org.opendaylight.controller.cluster.datastore.persisted.ShardManagerSnapshot;
 import org.opendaylight.controller.cluster.datastore.utils.ForwardingActor;
 import org.opendaylight.controller.cluster.datastore.utils.MockClusterWrapper;
 import org.opendaylight.controller.cluster.datastore.utils.MockConfiguration;
@@ -168,7 +169,8 @@ public class ShardManagerTest extends AbstractShardManagerTest {
     }
 
     private TestShardManager.Builder newTestShardMgrBuilderWithMockShardActor(ActorRef shardActor) {
-        return TestShardManager.builder(datastoreContextBuilder).shardActor(shardActor);
+        return TestShardManager.builder(datastoreContextBuilder).shardActor(shardActor)
+                .distributedDataStore(mock(DistributedDataStore.class));
     }
 
 
@@ -634,7 +636,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
         // Create an ActorSystem ShardManager actor for member-1.
 
         final ActorSystem system1 = newActorSystem("Member1");
-        Cluster.get(system1).join(AddressFromURIString.parse("akka.tcp://cluster-test@127.0.0.1:2558"));
+        Cluster.get(system1).join(AddressFromURIString.parse("akka://cluster-test@127.0.0.1:2558"));
 
         final TestActorRef<TestShardManager> shardManager1 = TestActorRef.create(system1,
                 newTestShardMgrBuilderWithMockShardActor().cluster(
@@ -645,7 +647,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
 
         final ActorSystem system2 = newActorSystem("Member2");
 
-        Cluster.get(system2).join(AddressFromURIString.parse("akka.tcp://cluster-test@127.0.0.1:2558"));
+        Cluster.get(system2).join(AddressFromURIString.parse("akka://cluster-test@127.0.0.1:2558"));
 
         final ActorRef mockShardActor2 = newMockShardActor(system2, "astronauts", "member-2");
 
@@ -684,7 +686,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
 
                 shardManager2.underlyingActor().verifyFindPrimary();
 
-                Cluster.get(system2).down(AddressFromURIString.parse("akka.tcp://cluster-test@127.0.0.1:2558"));
+                Cluster.get(system2).down(AddressFromURIString.parse("akka://cluster-test@127.0.0.1:2558"));
 
                 shardManager1.underlyingActor().waitForMemberRemoved();
 
@@ -705,7 +707,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
         // Create an ActorSystem ShardManager actor for member-1.
 
         final ActorSystem system1 = newActorSystem("Member1");
-        Cluster.get(system1).join(AddressFromURIString.parse("akka.tcp://cluster-test@127.0.0.1:2558"));
+        Cluster.get(system1).join(AddressFromURIString.parse("akka://cluster-test@127.0.0.1:2558"));
 
         final ActorRef mockShardActor1 = newMockShardActor(system1, Shard.DEFAULT_NAME, "member-1");
 
@@ -718,7 +720,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
 
         final ActorSystem system2 = newActorSystem("Member2");
 
-        Cluster.get(system2).join(AddressFromURIString.parse("akka.tcp://cluster-test@127.0.0.1:2558"));
+        Cluster.get(system2).join(AddressFromURIString.parse("akka://cluster-test@127.0.0.1:2558"));
 
         final ActorRef mockShardActor2 = newMockShardActor(system2, Shard.DEFAULT_NAME, "member-2");
 
@@ -758,7 +760,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
                 assertTrue("Unexpected primary path " + path, path.contains("member-2-shard-default-config"));
 
                 shardManager1.tell(MockClusterWrapper.createUnreachableMember("member-2",
-                        "akka.tcp://cluster-test@127.0.0.1:2558"), getRef());
+                        "akka://cluster-test@127.0.0.1:2558"), getRef());
 
                 shardManager1.underlyingActor().waitForUnreachableMember();
 
@@ -767,7 +769,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
                 MessageCollectorActor.clearMessages(mockShardActor1);
 
                 shardManager1.tell(
-                        MockClusterWrapper.createMemberRemoved("member-2", "akka.tcp://cluster-test@127.0.0.1:2558"),
+                        MockClusterWrapper.createMemberRemoved("member-2", "akka://cluster-test@127.0.0.1:2558"),
                         getRef());
 
                 MessageCollectorActor.expectFirstMatching(mockShardActor1, PeerDown.class);
@@ -777,7 +779,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
                 expectMsgClass(duration("5 seconds"), NoShardLeaderException.class);
 
                 shardManager1.tell(
-                        MockClusterWrapper.createReachableMember("member-2", "akka.tcp://cluster-test@127.0.0.1:2558"),
+                        MockClusterWrapper.createReachableMember("member-2", "akka://cluster-test@127.0.0.1:2558"),
                         getRef());
 
                 shardManager1.underlyingActor().waitForReachableMember();
@@ -793,7 +795,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
                 assertTrue("Unexpected primary path " + path1, path1.contains("member-2-shard-default-config"));
 
                 shardManager1.tell(
-                        MockClusterWrapper.createMemberUp("member-2", "akka.tcp://cluster-test@127.0.0.1:2558"),
+                        MockClusterWrapper.createMemberUp("member-2", "akka://cluster-test@127.0.0.1:2558"),
                         getRef());
 
                 MessageCollectorActor.expectFirstMatching(mockShardActor1, PeerUp.class);
@@ -801,13 +803,13 @@ public class ShardManagerTest extends AbstractShardManagerTest {
                 // Test FindPrimary wait succeeds after reachable member event.
 
                 shardManager1.tell(MockClusterWrapper.createUnreachableMember("member-2",
-                        "akka.tcp://cluster-test@127.0.0.1:2558"), getRef());
+                        "akka://cluster-test@127.0.0.1:2558"), getRef());
                 shardManager1.underlyingActor().waitForUnreachableMember();
 
                 shardManager1.tell(new FindPrimary("default", true), getRef());
 
                 shardManager1.tell(
-                        MockClusterWrapper.createReachableMember("member-2", "akka.tcp://cluster-test@127.0.0.1:2558"),
+                        MockClusterWrapper.createReachableMember("member-2", "akka://cluster-test@127.0.0.1:2558"),
                         getRef());
 
                 RemotePrimaryShardFound found2 = expectMsgClass(duration("5 seconds"), RemotePrimaryShardFound.class);
@@ -827,7 +829,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
         // Create an ActorSystem ShardManager actor for member-1.
 
         final ActorSystem system1 = newActorSystem("Member1");
-        Cluster.get(system1).join(AddressFromURIString.parse("akka.tcp://cluster-test@127.0.0.1:2558"));
+        Cluster.get(system1).join(AddressFromURIString.parse("akka://cluster-test@127.0.0.1:2558"));
 
         final ActorRef mockShardActor1 = newMockShardActor(system1, Shard.DEFAULT_NAME, "member-1");
 
@@ -842,7 +844,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
 
         final ActorSystem system2 = newActorSystem("Member2");
 
-        Cluster.get(system2).join(AddressFromURIString.parse("akka.tcp://cluster-test@127.0.0.1:2558"));
+        Cluster.get(system2).join(AddressFromURIString.parse("akka://cluster-test@127.0.0.1:2558"));
 
         final ActorRef mockShardActor2 = newMockShardActor(system2, Shard.DEFAULT_NAME, "member-2");
 
@@ -885,7 +887,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
                         system1.actorSelection(mockShardActor1.path()), DataStoreVersions.CURRENT_VERSION));
 
                 shardManager1.tell(MockClusterWrapper.createUnreachableMember("member-2",
-                        "akka.tcp://cluster-test@127.0.0.1:2558"), getRef());
+                        "akka://cluster-test@127.0.0.1:2558"), getRef());
 
                 shardManager1.underlyingActor().waitForUnreachableMember();
 
@@ -1372,9 +1374,8 @@ public class ShardManagerTest extends AbstractShardManagerTest {
         assertEquals("Shard names", Sets.newHashSet("shard1", "shard2", "astronauts"), Sets.newHashSet(
                 Lists.transform(datastoreSnapshot.getShardSnapshots(), shardNameTransformer)));
 
-        byte[] snapshotBytes = datastoreSnapshot.getShardManagerSnapshot();
-        assertNotNull("Expected ShardManagerSnapshot", snapshotBytes);
-        ShardManagerSnapshot snapshot = SerializationUtils.deserialize(snapshotBytes);
+        ShardManagerSnapshot snapshot = datastoreSnapshot.getShardManagerSnapshot();
+        assertNotNull("Expected ShardManagerSnapshot", snapshot);
         assertEquals("Shard names", Sets.newHashSet("shard1", "shard2", "astronauts"),
                 Sets.newHashSet(snapshot.getShardList()));
 
@@ -1393,9 +1394,10 @@ public class ShardManagerTest extends AbstractShardManagerTest {
                 .put("shard1", Collections.<String>emptyList()).put("shard2", Collections.<String>emptyList())
                 .put("astronauts", Collections.<String>emptyList()).build());
 
-        ShardManagerSnapshot snapshot = new ShardManagerSnapshot(Arrays.asList("shard1", "shard2", "astronauts"));
-        DatastoreSnapshot restoreFromSnapshot = new DatastoreSnapshot(shardMrgIDSuffix,
-                SerializationUtils.serialize(snapshot), Collections.<ShardSnapshot>emptyList());
+        ShardManagerSnapshot snapshot =
+                new ShardManagerSnapshot(Arrays.asList("shard1", "shard2", "astronauts"), Collections.emptyMap());
+        DatastoreSnapshot restoreFromSnapshot = new DatastoreSnapshot(shardMrgIDSuffix, snapshot,
+                Collections.<ShardSnapshot>emptyList());
         TestActorRef<TestShardManager> shardManager = actorFactory.createTestActor(newTestShardMgrBuilder(mockConfig)
                 .restoreFromSnapshot(restoreFromSnapshot).props().withDispatcher(Dispatchers.DefaultDispatcherId()));
 
@@ -1413,11 +1415,9 @@ public class ShardManagerTest extends AbstractShardManagerTest {
 
         assertEquals("getType", shardMrgIDSuffix, datastoreSnapshot.getType());
 
-        byte[] snapshotBytes = datastoreSnapshot.getShardManagerSnapshot();
-        assertNotNull("Expected ShardManagerSnapshot", snapshotBytes);
-        snapshot = SerializationUtils.deserialize(snapshotBytes);
+        assertNotNull("Expected ShardManagerSnapshot", datastoreSnapshot.getShardManagerSnapshot());
         assertEquals("Shard names", Sets.newHashSet("shard1", "shard2", "astronauts"),
-                Sets.newHashSet(snapshot.getShardList()));
+                Sets.newHashSet(datastoreSnapshot.getShardManagerSnapshot().getShardList()));
 
         LOG.info("testRestoreFromSnapshot ending");
     }
@@ -1449,7 +1449,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
 
         // Create an ActorSystem ShardManager actor for member-1.
         final ActorSystem system1 = newActorSystem("Member1");
-        Cluster.get(system1).join(AddressFromURIString.parse("akka.tcp://cluster-test@127.0.0.1:2558"));
+        Cluster.get(system1).join(AddressFromURIString.parse("akka://cluster-test@127.0.0.1:2558"));
         ActorRef mockDefaultShardActor = newMockShardActor(system1, Shard.DEFAULT_NAME, "member-1");
         final TestActorRef<TestShardManager> newReplicaShardManager = TestActorRef.create(system1,
                 newTestShardMgrBuilder(mockConfig).shardActor(mockDefaultShardActor)
@@ -1459,7 +1459,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
 
         // Create an ActorSystem ShardManager actor for member-2.
         final ActorSystem system2 = newActorSystem("Member2");
-        Cluster.get(system2).join(AddressFromURIString.parse("akka.tcp://cluster-test@127.0.0.1:2558"));
+        Cluster.get(system2).join(AddressFromURIString.parse("akka://cluster-test@127.0.0.1:2558"));
 
         String memberId2 = "member-2-shard-astronauts-" + shardMrgIDSuffix;
         String name = ShardIdentifier.create("astronauts", MEMBER_2, "config").toString();
@@ -1495,7 +1495,8 @@ public class ShardManagerTest extends AbstractShardManagerTest {
                 // Have a dummy snapshot to be overwritten by the new data
                 // persisted.
                 String[] restoredShards = { "default", "people" };
-                ShardManagerSnapshot snapshot = new ShardManagerSnapshot(Arrays.asList(restoredShards));
+                ShardManagerSnapshot snapshot =
+                        new ShardManagerSnapshot(Arrays.asList(restoredShards), Collections.emptyMap());
                 InMemorySnapshotStore.addSnapshot(shardManagerID, snapshot);
                 Uninterruptibles.sleepUninterruptibly(2, TimeUnit.MILLISECONDS);
 
@@ -1680,7 +1681,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
 
                 newReplicaShardManager.tell(new UpdateSchemaContext(TestModel.createTestContext()), getRef());
                 MockClusterWrapper.sendMemberUp(newReplicaShardManager, "member-2",
-                        AddressFromURIString.parse("akka.tcp://non-existent@127.0.0.1:5").toString());
+                        AddressFromURIString.parse("akka://non-existent@127.0.0.1:5").toString());
 
                 newReplicaShardManager.tell(new AddShardReplica("astronauts"), getRef());
                 Status.Failure resp = expectMsgClass(duration("5 seconds"), Status.Failure.class);
@@ -1748,7 +1749,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
 
         // Create an ActorSystem ShardManager actor for member-1.
         final ActorSystem system1 = newActorSystem("Member1");
-        Cluster.get(system1).join(AddressFromURIString.parse("akka.tcp://cluster-test@127.0.0.1:2558"));
+        Cluster.get(system1).join(AddressFromURIString.parse("akka://cluster-test@127.0.0.1:2558"));
         ActorRef mockDefaultShardActor = newMockShardActor(system1, Shard.DEFAULT_NAME, "member-1");
 
         final TestActorRef<TestShardManager> newReplicaShardManager = TestActorRef.create(system1,
@@ -1758,7 +1759,7 @@ public class ShardManagerTest extends AbstractShardManagerTest {
 
         // Create an ActorSystem ShardManager actor for member-2.
         final ActorSystem system2 = newActorSystem("Member2");
-        Cluster.get(system2).join(AddressFromURIString.parse("akka.tcp://cluster-test@127.0.0.1:2558"));
+        Cluster.get(system2).join(AddressFromURIString.parse("akka://cluster-test@127.0.0.1:2558"));
 
         String name = ShardIdentifier.create("default", MEMBER_2, shardMrgIDSuffix).toString();
         String memberId2 = "member-2-shard-default-" + shardMrgIDSuffix;
@@ -1774,11 +1775,11 @@ public class ShardManagerTest extends AbstractShardManagerTest {
                 shardManagerID);
 
         // Because mockShardLeaderActor is created at the top level of the actor system it has an address like so,
-        //    akka.tcp://cluster-test@127.0.0.1:2559/user/member-2-shard-default-config1
+        //    akka://cluster-test@127.0.0.1:2559/user/member-2-shard-default-config1
         // However when a shard manager has a local shard which is a follower and a leader that is remote it will
         // try to compute an address for the remote shard leader using the ShardPeerAddressResolver. This address will
         // look like so,
-        //    akka.tcp://cluster-test@127.0.0.1:2559/user/shardmanager-config1/member-2-shard-default-config1
+        //    akka://cluster-test@127.0.0.1:2559/user/shardmanager-config1/member-2-shard-default-config1
         // In this specific case if we did a FindPrimary for shard default from member-1 we would come up
         // with the address of an actor which does not exist, therefore any message sent to that actor would go to
         // dead letters.
@@ -1950,12 +1951,14 @@ public class ShardManagerTest extends AbstractShardManagerTest {
         LOG.info("testShardPersistenceWithRestoredData starting");
         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());
-                String[] restoredShards = { "default", "astronauts" };
-                ShardManagerSnapshot snapshot = new ShardManagerSnapshot(Arrays.asList(restoredShards));
+                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());
+                String[] restoredShards = {"default", "astronauts"};
+                ShardManagerSnapshot snapshot =
+                        new ShardManagerSnapshot(Arrays.asList(restoredShards), Collections.emptyMap());
                 InMemorySnapshotStore.addSnapshot("shard-manager-" + shardMrgIDSuffix, snapshot);
 
                 // create shardManager to come up with restored data