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.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");
}
@Test
- public void testConstructor(){
+ public void testConstructor() {
Assert.assertNotNull(configuration);
}
@Test
- public void testGetMemberShardNames(){
- List<String> memberShardNames =
- configuration.getMemberShardNames("member-1");
+ public void testGetMemberShardNames() {
+ 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);
+ assertEquals("getMemberShardNames", ImmutableSortedSet.of("default"),
+ ImmutableSortedSet.copyOf(memberShardNames));
- assertTrue(memberShardNames.contains("people-1"));
- assertTrue(memberShardNames.contains("cars-1"));
+ memberShardNames = configuration.getMemberShardNames(MEMBER_100);
+ assertEquals("getMemberShardNames size", 0, memberShardNames.size());
+ }
- // Retrieve once again to hit cache
+ @Test
+ public void testGetMembersFromShardName() {
+ Collection<MemberName> members = configuration.getMembersFromShardName("default");
+ assertEquals("getMembersFromShardName", ImmutableSortedSet.of(MEMBER_1, MEMBER_2, MEMBER_3),
+ ImmutableSortedSet.copyOf(members));
- memberShardNames =
- configuration.getMemberShardNames("member-1");
+ members = configuration.getMembersFromShardName("cars-1");
+ assertEquals("getMembersFromShardName", ImmutableSortedSet.of(MEMBER_1),
+ ImmutableSortedSet.copyOf(members));
- assertTrue(memberShardNames.contains("people-1"));
- assertTrue(memberShardNames.contains("cars-1"));
+ // Try to find a shard which is not present
+ members = configuration.getMembersFromShardName("foobar");
+ assertEquals("getMembersFromShardName size", 0, members.size());
}
@Test
- public void testGetMembersFromShardName(){
- List<String> members =
- configuration.getMembersFromShardName("default");
-
- assertEquals(3, members.size());
+ public void testGetAllShardNames() {
+ Set<String> allShardNames = configuration.getAllShardNames();
+ assertEquals("getAllShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
+ ImmutableSortedSet.copyOf(allShardNames));
+ }
- assertTrue(members.contains("member-1"));
- assertTrue(members.contains("member-2"));
- assertTrue(members.contains("member-3"));
+ @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);
- assertFalse(members.contains("member-26"));
+ moduleName = configuration.getModuleNameFromNameSpace(
+ "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test");
+ assertEquals("getModuleNameFromNameSpace", "test", moduleName);
- // Retrieve once again to hit cache
- members =
- configuration.getMembersFromShardName("default");
+ moduleName = configuration.getModuleNameFromNameSpace("non-existent");
+ assertNull("getModuleNameFromNameSpace - expected null", moduleName);
+ }
- assertEquals(3, members.size());
+ @Test
+ public void testGetStrategyForModule() {
+ ShardStrategy strategy = configuration.getStrategyForModule("cars");
+ assertNotNull("getStrategyForModule null", strategy);
+ assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
- assertTrue(members.contains("member-1"));
- assertTrue(members.contains("member-2"));
- assertTrue(members.contains("member-3"));
+ strategy = configuration.getStrategyForModule("people");
+ assertNotNull("getStrategyForModule null", strategy);
+ assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
- assertFalse(members.contains("member-26"));
+ strategy = configuration.getStrategyForModule("default");
+ assertNull("getStrategyForModule - expected null", strategy);
+ strategy = configuration.getStrategyForModule("non-existent");
+ assertNull("getStrategyForModule - expected null", strategy);
+ }
- // Try to find a shard which is not present
+ @Test
+ public void testGetShardNameForModule() {
+ String shardName = configuration.getShardNameForModule("cars");
+ assertEquals("getShardNameForModule", "cars-1", shardName);
- members =
- configuration.getMembersFromShardName("foobar");
+ shardName = configuration.getShardNameForModule("people");
+ assertEquals("getShardNameForModule", "people-1", shardName);
- assertEquals(0, members.size());
+ shardName = configuration.getShardNameForModule("non-existent");
+ assertNull("getShardNameForModule - expected null", shardName);
}
@Test
- public void testReadConfigurationFromFile(){
- File f = new File("./module-shards.conf");
- ConfigFactory.parseFile(f);
+ 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<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)));
+ 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
- public void testGetAllShardNames(){
- Set<String> allShardNames = configuration.getAllShardNames();
+ public void testGetUniqueMemberNamesForAllShards() {
+ assertEquals("getUniqueMemberNamesForAllShards", Sets.newHashSet(MEMBER_1, MEMBER_2, MEMBER_3),
+ configuration.getUniqueMemberNamesForAllShards());
+ }
- assertEquals(4, allShardNames.size());
- assertTrue(allShardNames.contains("default"));
- assertTrue(allShardNames.contains("people-1"));
- assertTrue(allShardNames.contains("cars-1"));
- assertTrue(allShardNames.contains("test-1"));
+ @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 testGetUniqueMemberNamesForAllShards() {
- assertEquals("getUniqueMemberNamesForAllShards", Sets.newHashSet("member-1", "member-2", "member-3"),
- configuration.getUniqueMemberNamesForAllShards());
+ 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));
}
}