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
8 package org.opendaylight.controller.cluster.datastore.config;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertNull;
14 import com.google.common.collect.ImmutableSortedSet;
15 import com.google.common.collect.Sets;
16 import java.util.Collection;
18 import org.junit.Assert;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.opendaylight.controller.cluster.access.concepts.MemberName;
22 import org.opendaylight.controller.cluster.datastore.shardstrategy.ModuleShardStrategy;
23 import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategy;
24 import org.opendaylight.yangtools.yang.common.XMLNamespace;
26 public class ConfigurationImplTest {
27 private static final MemberName MEMBER_1 = MemberName.forName("member-1");
28 private static final MemberName MEMBER_2 = MemberName.forName("member-2");
29 private static final MemberName MEMBER_3 = MemberName.forName("member-3");
30 private static final MemberName MEMBER_4 = MemberName.forName("member-4");
31 private static final MemberName MEMBER_5 = MemberName.forName("member-5");
32 private static final MemberName MEMBER_100 = MemberName.forName("member-100");
34 private ConfigurationImpl configuration;
38 configuration = new ConfigurationImpl("module-shards.conf", "modules.conf");
42 public void testConstructor() {
43 Assert.assertNotNull(configuration);
47 public void testGetMemberShardNames() {
48 Collection<String> memberShardNames = configuration.getMemberShardNames(MEMBER_1);
49 assertEquals("getMemberShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
50 ImmutableSortedSet.copyOf(memberShardNames));
52 memberShardNames = configuration.getMemberShardNames(MEMBER_2);
53 assertEquals("getMemberShardNames", ImmutableSortedSet.of("default"),
54 ImmutableSortedSet.copyOf(memberShardNames));
56 memberShardNames = configuration.getMemberShardNames(MEMBER_100);
57 assertEquals("getMemberShardNames size", 0, memberShardNames.size());
61 public void testGetMembersFromShardName() {
62 Collection<MemberName> members = configuration.getMembersFromShardName("default");
63 assertEquals("getMembersFromShardName", ImmutableSortedSet.of(MEMBER_1, MEMBER_2, MEMBER_3),
64 ImmutableSortedSet.copyOf(members));
66 members = configuration.getMembersFromShardName("cars-1");
67 assertEquals("getMembersFromShardName", ImmutableSortedSet.of(MEMBER_1),
68 ImmutableSortedSet.copyOf(members));
70 // Try to find a shard which is not present
72 members = configuration.getMembersFromShardName("foobar");
73 assertEquals("getMembersFromShardName size", 0, members.size());
77 public void testGetAllShardNames() {
78 Set<String> allShardNames = configuration.getAllShardNames();
79 assertEquals("getAllShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
80 ImmutableSortedSet.copyOf(allShardNames));
84 public void testGetModuleNameFromNameSpace() {
85 String moduleName = configuration.getModuleNameFromNameSpace(
86 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test:cars");
87 assertEquals("getModuleNameFromNameSpace", "cars", moduleName);
89 moduleName = configuration.getModuleNameFromNameSpace(
90 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test");
91 assertEquals("getModuleNameFromNameSpace", "test", moduleName);
93 moduleName = configuration.getModuleNameFromNameSpace("non-existent");
94 assertNull("getModuleNameFromNameSpace - expected null", moduleName);
98 public void testGetStrategyForModule() {
99 ShardStrategy strategy = configuration.getStrategyForModule("cars");
100 assertNotNull("getStrategyForModule null", strategy);
101 assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
103 strategy = configuration.getStrategyForModule("people");
104 assertNotNull("getStrategyForModule null", strategy);
105 assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
107 strategy = configuration.getStrategyForModule("default");
108 assertNull("getStrategyForModule - expected null", strategy);
110 strategy = configuration.getStrategyForModule("non-existent");
111 assertNull("getStrategyForModule - expected null", strategy);
115 public void testGetShardNameForModule() {
116 String shardName = configuration.getShardNameForModule("cars");
117 assertEquals("getShardNameForModule", "cars-1", shardName);
119 shardName = configuration.getShardNameForModule("people");
120 assertEquals("getShardNameForModule", "people-1", shardName);
122 shardName = configuration.getShardNameForModule("non-existent");
123 assertNull("getShardNameForModule - expected null", shardName);
127 public void testAddModuleShardConfiguration() throws Exception {
128 XMLNamespace namespace = XMLNamespace.of("urn:opendaylight:test:oven");
129 String moduleName = "oven";
130 String shardName = "oven-shard";
131 String shardStrategyName = ModuleShardStrategy.NAME;
132 Collection<MemberName> shardMemberNames = ImmutableSortedSet.of(MEMBER_1, MEMBER_4, MEMBER_5);
134 configuration.addModuleShardConfiguration(new ModuleShardConfiguration(namespace, moduleName, shardName,
135 shardStrategyName, shardMemberNames));
137 assertEquals("getMemberShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default", shardName),
138 ImmutableSortedSet.copyOf(configuration.getMemberShardNames(MEMBER_1)));
139 assertEquals("getMemberShardNames", ImmutableSortedSet.of(shardName),
140 ImmutableSortedSet.copyOf(configuration.getMemberShardNames(MEMBER_4)));
141 assertEquals("getMemberShardNames", ImmutableSortedSet.of(shardName),
142 ImmutableSortedSet.copyOf(configuration.getMemberShardNames(MEMBER_5)));
143 assertEquals("getMembersFromShardName", shardMemberNames,
144 ImmutableSortedSet.copyOf(configuration.getMembersFromShardName(shardName)));
145 assertEquals("getShardNameForModule", shardName, configuration.getShardNameForModule(moduleName));
146 assertEquals("getModuleNameFromNameSpace", moduleName,
147 configuration.getModuleNameFromNameSpace(namespace.toString()));
148 assertEquals("getAllShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default", shardName),
149 ImmutableSortedSet.copyOf(configuration.getAllShardNames()));
151 ShardStrategy strategy = configuration.getStrategyForModule("cars");
152 assertNotNull("getStrategyForModule null", strategy);
153 assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
157 public void testGetUniqueMemberNamesForAllShards() {
158 assertEquals("getUniqueMemberNamesForAllShards", Sets.newHashSet(MEMBER_1, MEMBER_2, MEMBER_3),
159 configuration.getUniqueMemberNamesForAllShards());
163 public void testAddMemberReplicaForShard() {
164 configuration.addMemberReplicaForShard("people-1", MEMBER_2);
165 String shardName = configuration.getShardNameForModule("people");
166 assertEquals("ModuleShardName", "people-1", shardName);
167 ShardStrategy shardStrategy = configuration.getStrategyForModule("people");
168 assertEquals("ModuleStrategy", ModuleShardStrategy.class, shardStrategy.getClass());
169 Collection<MemberName> members = configuration.getMembersFromShardName("people-1");
170 assertEquals("Members", ImmutableSortedSet.of(MEMBER_1, MEMBER_2),
171 ImmutableSortedSet.copyOf(members));
173 configuration.addMemberReplicaForShard("non-existent", MEMBER_2);
174 Set<String> shardNames = configuration.getAllShardNames();
175 assertEquals("ShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
176 ImmutableSortedSet.copyOf(shardNames));
180 public void testRemoveMemberReplicaForShard() {
181 configuration.removeMemberReplicaForShard("default", MEMBER_2);
182 String shardName = configuration.getShardNameForModule("default");
183 assertEquals("ModuleShardName", "default", shardName);
184 ShardStrategy shardStrategy = configuration.getStrategyForModule("default");
185 assertNull("ModuleStrategy", shardStrategy);
186 Collection<MemberName> members = configuration.getMembersFromShardName("default");
187 assertEquals("Members", ImmutableSortedSet.of(MEMBER_1, MEMBER_3),
188 ImmutableSortedSet.copyOf(members));
190 configuration.removeMemberReplicaForShard("non-existent", MEMBER_2);
191 Set<String> shardNames = configuration.getAllShardNames();
192 assertEquals("ShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
193 ImmutableSortedSet.copyOf(shardNames));