Bug 4105: Add dynamic module/shard config for entity-owners shard
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / config / ConfigurationImplTest.java
index 443f017734cc9478ce3f6b1cf458756a00ff8939..bcfbeb4b584c84ba266c0d84c7dc729c1b0a5ccb 100644 (file)
@@ -9,16 +9,18 @@
 package org.opendaylight.controller.cluster.datastore.config;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import com.google.common.collect.ImmutableSortedSet;
 import com.google.common.collect.Sets;
-import com.typesafe.config.ConfigFactory;
-import java.io.File;
-import java.util.List;
+import java.net.URI;
+import java.util.Collection;
 import java.util.Set;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.opendaylight.controller.cluster.datastore.shardstrategy.ModuleShardStrategy;
+import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategy;
 
 public class ConfigurationImplTest {
 
@@ -36,71 +38,112 @@ public class ConfigurationImplTest {
 
     @Test
     public void testGetMemberShardNames(){
-        List<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));
 
-        assertTrue(memberShardNames.contains("people-1"));
-        assertTrue(memberShardNames.contains("cars-1"));
-
-        // Retrieve once again to hit cache
-
-        memberShardNames =
-            configuration.getMemberShardNames("member-1");
-
-        assertTrue(memberShardNames.contains("people-1"));
-        assertTrue(memberShardNames.contains("cars-1"));
+        memberShardNames = configuration.getMemberShardNames("member-2");
+        assertEquals("getMemberShardNames", ImmutableSortedSet.of("default"),
+                ImmutableSortedSet.copyOf(memberShardNames));
 
+        memberShardNames = configuration.getMemberShardNames("member-100");
+        assertEquals("getMemberShardNames size", 0, memberShardNames.size());
     }
 
     @Test
     public void testGetMembersFromShardName(){
-        List<String> members =
-            configuration.getMembersFromShardName("default");
+        Collection<String> members = configuration.getMembersFromShardName("default");
+        assertEquals("getMembersFromShardName", ImmutableSortedSet.of("member-1", "member-2", "member-3"),
+                ImmutableSortedSet.copyOf(members));
 
-        assertEquals(3, members.size());
+        members = configuration.getMembersFromShardName("cars-1");
+        assertEquals("getMembersFromShardName", ImmutableSortedSet.of("member-1"),
+                ImmutableSortedSet.copyOf(members));
 
-        assertTrue(members.contains("member-1"));
-        assertTrue(members.contains("member-2"));
-        assertTrue(members.contains("member-3"));
+        // Try to find a shard which is not present
 
-        assertFalse(members.contains("member-26"));
+        members = configuration.getMembersFromShardName("foobar");
+        assertEquals("getMembersFromShardName size", 0, members.size());
+    }
 
-        // Retrieve once again to hit cache
-        members =
-            configuration.getMembersFromShardName("default");
+    @Test
+    public void testGetAllShardNames(){
+        Set<String> allShardNames = configuration.getAllShardNames();
+        assertEquals("getAllShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
+                ImmutableSortedSet.copyOf(allShardNames));
+    }
 
-        assertEquals(3, members.size());
+    @Test
+    public void testGetModuleNameFromNameSpace() {
+        String moduleName = configuration.getModuleNameFromNameSpace(
+                "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test:cars");
+        assertEquals("getModuleNameFromNameSpace", "cars", moduleName);
 
-        assertTrue(members.contains("member-1"));
-        assertTrue(members.contains("member-2"));
-        assertTrue(members.contains("member-3"));
+        moduleName = configuration.getModuleNameFromNameSpace(
+                "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test");
+        assertEquals("getModuleNameFromNameSpace", "test", moduleName);
 
-        assertFalse(members.contains("member-26"));
+        moduleName = configuration.getModuleNameFromNameSpace("non-existent");
+        assertNull("getModuleNameFromNameSpace - expected null", moduleName);
+    }
 
+    @Test
+    public void testGetStrategyForModule() {
+        ShardStrategy strategy = configuration.getStrategyForModule("cars");
+        assertNotNull("getStrategyForModule null", strategy);
+        assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
 
-        // Try to find a shard which is not present
+        strategy = configuration.getStrategyForModule("people");
+        assertNotNull("getStrategyForModule null", strategy);
+        assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
 
-        members =
-            configuration.getMembersFromShardName("foobar");
+        strategy = configuration.getStrategyForModule("default");
+        assertNull("getStrategyForModule - expected null", strategy);
 
-        assertEquals(0, members.size());
+        strategy = configuration.getStrategyForModule("non-existent");
+        assertNull("getStrategyForModule - expected null", strategy);
     }
 
     @Test
-    public void testReadConfigurationFromFile(){
-        File f = new File("./module-shards.conf");
-        ConfigFactory.parseFile(f);
+    public void testGetShardNameForModule() {
+        String shardName = configuration.getShardNameForModule("cars");
+        assertEquals("getShardNameForModule", "cars-1", shardName);
+
+        shardName = configuration.getShardNameForModule("people");
+        assertEquals("getShardNameForModule", "people-1", shardName);
+
+        shardName = configuration.getShardNameForModule("non-existent");
+        assertNull("getShardNameForModule - expected null", shardName);
     }
 
     @Test
-    public void testGetAllShardNames(){
-        Set<String> allShardNames = configuration.getAllShardNames();
-
-        assertEquals(4, allShardNames.size());
-        assertTrue(allShardNames.contains("default"));
-        assertTrue(allShardNames.contains("people-1"));
-        assertTrue(allShardNames.contains("cars-1"));
-        assertTrue(allShardNames.contains("test-1"));
+    public void testAddModuleShardConfiguration() throws Exception {
+        URI namespace = new URI("urn:opendaylight:test:oven");
+        String moduleName = "oven";
+        String shardName = "oven-shard";
+        String shardStrategyName = ModuleShardStrategy.NAME;
+        Collection<String> 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")));
+        assertEquals("getMemberShardNames", ImmutableSortedSet.of(shardName),
+                ImmutableSortedSet.copyOf(configuration.getMemberShardNames("member-4")));
+        assertEquals("getMemberShardNames", ImmutableSortedSet.of(shardName),
+                ImmutableSortedSet.copyOf(configuration.getMemberShardNames("member-5")));
+        assertEquals("getMembersFromShardName", shardMemberNames,
+                ImmutableSortedSet.copyOf(configuration.getMembersFromShardName(shardName)));
+        assertEquals("getShardNameForModule", shardName, configuration.getShardNameForModule(moduleName));
+        assertEquals("getModuleNameFromNameSpace", moduleName,
+                configuration.getModuleNameFromNameSpace(namespace.toASCIIString()));
+        assertEquals("getAllShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default", shardName),
+                ImmutableSortedSet.copyOf(configuration.getAllShardNames()));
+
+        ShardStrategy strategy = configuration.getStrategyForModule("cars");
+        assertNotNull("getStrategyForModule null", strategy);
+        assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
     }
 
     @Test