BUG-5903: do not rely on primary info on failure
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / config / ConfigurationImplTest.java
index bcfbeb4b584c84ba266c0d84c7dc729c1b0a5ccb..f4ba78e7aabf1875a545c21e7d55c1554b0e9d84 100644 (file)
@@ -17,17 +17,24 @@ import java.net.URI;
 import java.util.Collection;
 import java.util.Set;
 import org.junit.Assert;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
+import org.opendaylight.controller.cluster.access.concepts.MemberName;
 import org.opendaylight.controller.cluster.datastore.shardstrategy.ModuleShardStrategy;
 import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategy;
 
 public class ConfigurationImplTest {
+    private static final MemberName MEMBER_1 = MemberName.forName("member-1");
+    private static final MemberName MEMBER_2 = MemberName.forName("member-2");
+    private static final MemberName MEMBER_3 = MemberName.forName("member-3");
+    private static final MemberName MEMBER_4 = MemberName.forName("member-4");
+    private static final MemberName MEMBER_5 = MemberName.forName("member-5");
+    private static final MemberName MEMBER_100 = MemberName.forName("member-100");
 
-    private static ConfigurationImpl configuration;
+    private ConfigurationImpl configuration;
 
-    @BeforeClass
-    public static void staticSetup(){
+    @Before
+    public void setup(){
         configuration = new ConfigurationImpl("module-shards.conf", "modules.conf");
     }
 
@@ -38,26 +45,26 @@ public class ConfigurationImplTest {
 
     @Test
     public void testGetMemberShardNames(){
-        Collection<String> memberShardNames = configuration.getMemberShardNames("member-1");
+        Collection<String> memberShardNames = configuration.getMemberShardNames(MEMBER_1);
         assertEquals("getMemberShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
                 ImmutableSortedSet.copyOf(memberShardNames));
 
-        memberShardNames = configuration.getMemberShardNames("member-2");
+        memberShardNames = configuration.getMemberShardNames(MEMBER_2);
         assertEquals("getMemberShardNames", ImmutableSortedSet.of("default"),
                 ImmutableSortedSet.copyOf(memberShardNames));
 
-        memberShardNames = configuration.getMemberShardNames("member-100");
+        memberShardNames = configuration.getMemberShardNames(MEMBER_100);
         assertEquals("getMemberShardNames size", 0, memberShardNames.size());
     }
 
     @Test
     public void testGetMembersFromShardName(){
-        Collection<String> members = configuration.getMembersFromShardName("default");
-        assertEquals("getMembersFromShardName", ImmutableSortedSet.of("member-1", "member-2", "member-3"),
+        Collection<MemberName> members = configuration.getMembersFromShardName("default");
+        assertEquals("getMembersFromShardName", ImmutableSortedSet.of(MEMBER_1, MEMBER_2, MEMBER_3),
                 ImmutableSortedSet.copyOf(members));
 
         members = configuration.getMembersFromShardName("cars-1");
-        assertEquals("getMembersFromShardName", ImmutableSortedSet.of("member-1"),
+        assertEquals("getMembersFromShardName", ImmutableSortedSet.of(MEMBER_1),
                 ImmutableSortedSet.copyOf(members));
 
         // Try to find a shard which is not present
@@ -122,17 +129,17 @@ public class ConfigurationImplTest {
         String moduleName = "oven";
         String shardName = "oven-shard";
         String shardStrategyName = ModuleShardStrategy.NAME;
-        Collection<String> shardMemberNames = ImmutableSortedSet.of("member-1", "member-4", "member-5");
+        Collection<MemberName> shardMemberNames = ImmutableSortedSet.of(MEMBER_1, MEMBER_4, MEMBER_5);
 
         configuration.addModuleShardConfiguration(new ModuleShardConfiguration(namespace, moduleName, shardName,
                 shardStrategyName, shardMemberNames));
 
         assertEquals("getMemberShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default", shardName),
-                ImmutableSortedSet.copyOf(configuration.getMemberShardNames("member-1")));
+                ImmutableSortedSet.copyOf(configuration.getMemberShardNames(MEMBER_1)));
         assertEquals("getMemberShardNames", ImmutableSortedSet.of(shardName),
-                ImmutableSortedSet.copyOf(configuration.getMemberShardNames("member-4")));
+                ImmutableSortedSet.copyOf(configuration.getMemberShardNames(MEMBER_4)));
         assertEquals("getMemberShardNames", ImmutableSortedSet.of(shardName),
-                ImmutableSortedSet.copyOf(configuration.getMemberShardNames("member-5")));
+                ImmutableSortedSet.copyOf(configuration.getMemberShardNames(MEMBER_5)));
         assertEquals("getMembersFromShardName", shardMemberNames,
                 ImmutableSortedSet.copyOf(configuration.getMembersFromShardName(shardName)));
         assertEquals("getShardNameForModule", shardName, configuration.getShardNameForModule(moduleName));
@@ -148,7 +155,41 @@ public class ConfigurationImplTest {
 
     @Test
     public void testGetUniqueMemberNamesForAllShards() {
-        assertEquals("getUniqueMemberNamesForAllShards", Sets.newHashSet("member-1", "member-2", "member-3"),
+        assertEquals("getUniqueMemberNamesForAllShards", Sets.newHashSet(MEMBER_1, MEMBER_2, MEMBER_3),
                 configuration.getUniqueMemberNamesForAllShards());
     }
+
+    @Test
+    public void testAddMemberReplicaForShard() {
+        configuration.addMemberReplicaForShard("people-1", MEMBER_2);
+        String shardName = configuration.getShardNameForModule("people");
+        assertEquals("ModuleShardName", "people-1", shardName);
+        ShardStrategy shardStrategy = configuration.getStrategyForModule("people");
+        assertEquals("ModuleStrategy", ModuleShardStrategy.class, shardStrategy.getClass());
+        Collection<MemberName> members = configuration.getMembersFromShardName("people-1");
+        assertEquals("Members", ImmutableSortedSet.of(MEMBER_1, MEMBER_2),
+            ImmutableSortedSet.copyOf(members));
+
+        configuration.addMemberReplicaForShard("non-existent", MEMBER_2);
+        Set<String> shardNames = configuration.getAllShardNames();
+        assertEquals("ShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
+            ImmutableSortedSet.copyOf(shardNames));
+    }
+
+    @Test
+    public void testRemoveMemberReplicaForShard() {
+        configuration.removeMemberReplicaForShard("default", MEMBER_2);
+        String shardName = configuration.getShardNameForModule("default");
+        assertEquals("ModuleShardName", "default", shardName);
+        ShardStrategy shardStrategy = configuration.getStrategyForModule("default");
+        assertNull("ModuleStrategy", shardStrategy);
+        Collection<MemberName> members = configuration.getMembersFromShardName("default");
+        assertEquals("Members", ImmutableSortedSet.of(MEMBER_1, MEMBER_3),
+            ImmutableSortedSet.copyOf(members));
+
+        configuration.removeMemberReplicaForShard("non-existent", MEMBER_2);
+        Set<String> shardNames = configuration.getAllShardNames();
+        assertEquals("ShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
+            ImmutableSortedSet.copyOf(shardNames));
+    }
 }