2 * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.cluster.datastore.config;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
15 import com.google.common.collect.ImmutableSortedSet;
16 import com.google.common.collect.Sets;
18 import java.util.Collection;
20 import org.junit.Assert;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.opendaylight.controller.cluster.access.concepts.MemberName;
24 import org.opendaylight.controller.cluster.datastore.shardstrategy.ModuleShardStrategy;
25 import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategy;
27 public class ConfigurationImplTest {
28 private static final MemberName MEMBER_1 = MemberName.forName("member-1");
29 private static final MemberName MEMBER_2 = MemberName.forName("member-2");
30 private static final MemberName MEMBER_3 = MemberName.forName("member-3");
31 private static final MemberName MEMBER_4 = MemberName.forName("member-4");
32 private static final MemberName MEMBER_5 = MemberName.forName("member-5");
33 private static final MemberName MEMBER_100 = MemberName.forName("member-100");
35 private ConfigurationImpl configuration;
39 configuration = new ConfigurationImpl("module-shards.conf", "modules.conf");
43 public void testConstructor() {
44 Assert.assertNotNull(configuration);
48 public void testGetMemberShardNames() {
49 Collection<String> memberShardNames = configuration.getMemberShardNames(MEMBER_1);
50 assertEquals("getMemberShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
51 ImmutableSortedSet.copyOf(memberShardNames));
53 memberShardNames = configuration.getMemberShardNames(MEMBER_2);
54 assertEquals("getMemberShardNames", ImmutableSortedSet.of("default"),
55 ImmutableSortedSet.copyOf(memberShardNames));
57 memberShardNames = configuration.getMemberShardNames(MEMBER_100);
58 assertEquals("getMemberShardNames size", 0, memberShardNames.size());
62 public void testGetMembersFromShardName() {
63 Collection<MemberName> members = configuration.getMembersFromShardName("default");
64 assertEquals("getMembersFromShardName", ImmutableSortedSet.of(MEMBER_1, MEMBER_2, MEMBER_3),
65 ImmutableSortedSet.copyOf(members));
67 members = configuration.getMembersFromShardName("cars-1");
68 assertEquals("getMembersFromShardName", ImmutableSortedSet.of(MEMBER_1),
69 ImmutableSortedSet.copyOf(members));
71 // Try to find a shard which is not present
73 members = configuration.getMembersFromShardName("foobar");
74 assertEquals("getMembersFromShardName size", 0, members.size());
78 public void testGetAllShardNames() {
79 Set<String> allShardNames = configuration.getAllShardNames();
80 assertEquals("getAllShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
81 ImmutableSortedSet.copyOf(allShardNames));
85 public void testGetModuleNameFromNameSpace() {
86 String moduleName = configuration.getModuleNameFromNameSpace(
87 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test:cars");
88 assertEquals("getModuleNameFromNameSpace", "cars", moduleName);
90 moduleName = configuration.getModuleNameFromNameSpace(
91 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test");
92 assertEquals("getModuleNameFromNameSpace", "test", moduleName);
94 moduleName = configuration.getModuleNameFromNameSpace("non-existent");
95 assertNull("getModuleNameFromNameSpace - expected null", moduleName);
99 public void testGetStrategyForModule() {
100 ShardStrategy strategy = configuration.getStrategyForModule("cars");
101 assertNotNull("getStrategyForModule null", strategy);
102 assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
104 strategy = configuration.getStrategyForModule("people");
105 assertNotNull("getStrategyForModule null", strategy);
106 assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
108 strategy = configuration.getStrategyForModule("default");
109 assertNull("getStrategyForModule - expected null", strategy);
111 strategy = configuration.getStrategyForModule("non-existent");
112 assertNull("getStrategyForModule - expected null", strategy);
116 public void testGetShardNameForModule() {
117 String shardName = configuration.getShardNameForModule("cars");
118 assertEquals("getShardNameForModule", "cars-1", shardName);
120 shardName = configuration.getShardNameForModule("people");
121 assertEquals("getShardNameForModule", "people-1", shardName);
123 shardName = configuration.getShardNameForModule("non-existent");
124 assertNull("getShardNameForModule - expected null", shardName);
128 public void testAddModuleShardConfiguration() throws Exception {
129 URI namespace = new URI("urn:opendaylight:test:oven");
130 String moduleName = "oven";
131 String shardName = "oven-shard";
132 String shardStrategyName = ModuleShardStrategy.NAME;
133 Collection<MemberName> shardMemberNames = ImmutableSortedSet.of(MEMBER_1, MEMBER_4, MEMBER_5);
135 configuration.addModuleShardConfiguration(new ModuleShardConfiguration(namespace, moduleName, shardName,
136 shardStrategyName, shardMemberNames));
138 assertEquals("getMemberShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default", shardName),
139 ImmutableSortedSet.copyOf(configuration.getMemberShardNames(MEMBER_1)));
140 assertEquals("getMemberShardNames", ImmutableSortedSet.of(shardName),
141 ImmutableSortedSet.copyOf(configuration.getMemberShardNames(MEMBER_4)));
142 assertEquals("getMemberShardNames", ImmutableSortedSet.of(shardName),
143 ImmutableSortedSet.copyOf(configuration.getMemberShardNames(MEMBER_5)));
144 assertEquals("getMembersFromShardName", shardMemberNames,
145 ImmutableSortedSet.copyOf(configuration.getMembersFromShardName(shardName)));
146 assertEquals("getShardNameForModule", shardName, configuration.getShardNameForModule(moduleName));
147 assertEquals("getModuleNameFromNameSpace", moduleName,
148 configuration.getModuleNameFromNameSpace(namespace.toASCIIString()));
149 assertEquals("getAllShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default", shardName),
150 ImmutableSortedSet.copyOf(configuration.getAllShardNames()));
152 ShardStrategy strategy = configuration.getStrategyForModule("cars");
153 assertNotNull("getStrategyForModule null", strategy);
154 assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
158 public void testGetUniqueMemberNamesForAllShards() {
159 assertEquals("getUniqueMemberNamesForAllShards", Sets.newHashSet(MEMBER_1, MEMBER_2, MEMBER_3),
160 configuration.getUniqueMemberNamesForAllShards());
164 public void testAddMemberReplicaForShard() {
165 configuration.addMemberReplicaForShard("people-1", MEMBER_2);
166 String shardName = configuration.getShardNameForModule("people");
167 assertEquals("ModuleShardName", "people-1", shardName);
168 ShardStrategy shardStrategy = configuration.getStrategyForModule("people");
169 assertEquals("ModuleStrategy", ModuleShardStrategy.class, shardStrategy.getClass());
170 Collection<MemberName> members = configuration.getMembersFromShardName("people-1");
171 assertEquals("Members", ImmutableSortedSet.of(MEMBER_1, MEMBER_2),
172 ImmutableSortedSet.copyOf(members));
174 configuration.addMemberReplicaForShard("non-existent", MEMBER_2);
175 Set<String> shardNames = configuration.getAllShardNames();
176 assertEquals("ShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
177 ImmutableSortedSet.copyOf(shardNames));
181 public void testRemoveMemberReplicaForShard() {
182 configuration.removeMemberReplicaForShard("default", MEMBER_2);
183 String shardName = configuration.getShardNameForModule("default");
184 assertEquals("ModuleShardName", "default", shardName);
185 ShardStrategy shardStrategy = configuration.getStrategyForModule("default");
186 assertNull("ModuleStrategy", shardStrategy);
187 Collection<MemberName> members = configuration.getMembersFromShardName("default");
188 assertEquals("Members", ImmutableSortedSet.of(MEMBER_1, MEMBER_3),
189 ImmutableSortedSet.copyOf(members));
191 configuration.removeMemberReplicaForShard("non-existent", MEMBER_2);
192 Set<String> shardNames = configuration.getAllShardNames();
193 assertEquals("ShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
194 ImmutableSortedSet.copyOf(shardNames));