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 abstract class ConfigurationImplBaseTest {
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 this.configuration = createConfiguration();
41 public abstract ConfigurationImpl createConfiguration();
44 public void testConstructor() {
45 Assert.assertNotNull(configuration);
49 public void testGetMemberShardNames() {
50 Collection<String> memberShardNames = configuration.getMemberShardNames(MEMBER_1);
51 assertEquals("getMemberShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
52 ImmutableSortedSet.copyOf(memberShardNames));
54 memberShardNames = configuration.getMemberShardNames(MEMBER_2);
55 assertEquals("getMemberShardNames", ImmutableSortedSet.of("default"),
56 ImmutableSortedSet.copyOf(memberShardNames));
58 memberShardNames = configuration.getMemberShardNames(MEMBER_100);
59 assertEquals("getMemberShardNames size", 0, memberShardNames.size());
63 public void testGetMembersFromShardName() {
64 Collection<MemberName> members = configuration.getMembersFromShardName("default");
65 assertEquals("getMembersFromShardName", ImmutableSortedSet.of(MEMBER_1, MEMBER_2, MEMBER_3),
66 ImmutableSortedSet.copyOf(members));
68 members = configuration.getMembersFromShardName("cars-1");
69 assertEquals("getMembersFromShardName", ImmutableSortedSet.of(MEMBER_1),
70 ImmutableSortedSet.copyOf(members));
72 // Try to find a shard which is not present
74 members = configuration.getMembersFromShardName("foobar");
75 assertEquals("getMembersFromShardName size", 0, members.size());
79 public void testGetAllShardNames() {
80 Set<String> allShardNames = configuration.getAllShardNames();
81 assertEquals("getAllShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
82 ImmutableSortedSet.copyOf(allShardNames));
86 public void testGetModuleNameFromNameSpace() {
87 String moduleName = configuration.getModuleNameFromNameSpace(
88 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test:cars");
89 assertEquals("getModuleNameFromNameSpace", "cars", moduleName);
91 moduleName = configuration.getModuleNameFromNameSpace(
92 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test");
93 assertEquals("getModuleNameFromNameSpace", "test", moduleName);
95 moduleName = configuration.getModuleNameFromNameSpace("non-existent");
96 assertNull("getModuleNameFromNameSpace - expected null", moduleName);
100 public void testGetStrategyForModule() {
101 ShardStrategy strategy = configuration.getStrategyForModule("cars");
102 assertNotNull("getStrategyForModule null", strategy);
103 assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
105 strategy = configuration.getStrategyForModule("people");
106 assertNotNull("getStrategyForModule null", strategy);
107 assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
109 strategy = configuration.getStrategyForModule("default");
110 assertNull("getStrategyForModule - expected null", strategy);
112 strategy = configuration.getStrategyForModule("non-existent");
113 assertNull("getStrategyForModule - expected null", strategy);
117 public void testGetShardNameForModule() {
118 String shardName = configuration.getShardNameForModule("cars");
119 assertEquals("getShardNameForModule", "cars-1", shardName);
121 shardName = configuration.getShardNameForModule("people");
122 assertEquals("getShardNameForModule", "people-1", shardName);
124 shardName = configuration.getShardNameForModule("non-existent");
125 assertNull("getShardNameForModule - expected null", shardName);
129 public void testAddModuleShardConfiguration() throws Exception {
130 XMLNamespace namespace = XMLNamespace.of("urn:opendaylight:test:oven");
131 String moduleName = "oven";
132 String shardName = "oven-shard";
133 String shardStrategyName = ModuleShardStrategy.NAME;
134 Collection<MemberName> shardMemberNames = ImmutableSortedSet.of(MEMBER_1, MEMBER_4, MEMBER_5);
136 configuration.addModuleShardConfiguration(new ModuleShardConfiguration(namespace, moduleName, shardName,
137 shardStrategyName, shardMemberNames));
139 assertEquals("getMemberShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default", shardName),
140 ImmutableSortedSet.copyOf(configuration.getMemberShardNames(MEMBER_1)));
141 assertEquals("getMemberShardNames", ImmutableSortedSet.of(shardName),
142 ImmutableSortedSet.copyOf(configuration.getMemberShardNames(MEMBER_4)));
143 assertEquals("getMemberShardNames", ImmutableSortedSet.of(shardName),
144 ImmutableSortedSet.copyOf(configuration.getMemberShardNames(MEMBER_5)));
145 assertEquals("getMembersFromShardName", shardMemberNames,
146 ImmutableSortedSet.copyOf(configuration.getMembersFromShardName(shardName)));
147 assertEquals("getShardNameForModule", shardName, configuration.getShardNameForModule(moduleName));
148 assertEquals("getModuleNameFromNameSpace", moduleName,
149 configuration.getModuleNameFromNameSpace(namespace.toString()));
150 assertEquals("getAllShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default", shardName),
151 ImmutableSortedSet.copyOf(configuration.getAllShardNames()));
153 ShardStrategy strategy = configuration.getStrategyForModule("cars");
154 assertNotNull("getStrategyForModule null", strategy);
155 assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
159 public void testGetUniqueMemberNamesForAllShards() {
160 assertEquals("getUniqueMemberNamesForAllShards", Sets.newHashSet(MEMBER_1, MEMBER_2, MEMBER_3),
161 configuration.getUniqueMemberNamesForAllShards());
165 public void testAddMemberReplicaForShard() {
166 configuration.addMemberReplicaForShard("people-1", MEMBER_2);
167 String shardName = configuration.getShardNameForModule("people");
168 assertEquals("ModuleShardName", "people-1", shardName);
169 ShardStrategy shardStrategy = configuration.getStrategyForModule("people");
170 assertEquals("ModuleStrategy", ModuleShardStrategy.class, shardStrategy.getClass());
171 Collection<MemberName> members = configuration.getMembersFromShardName("people-1");
172 assertEquals("Members", ImmutableSortedSet.of(MEMBER_1, MEMBER_2),
173 ImmutableSortedSet.copyOf(members));
175 configuration.addMemberReplicaForShard("non-existent", MEMBER_2);
176 Set<String> shardNames = configuration.getAllShardNames();
177 assertEquals("ShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
178 ImmutableSortedSet.copyOf(shardNames));
182 public void testRemoveMemberReplicaForShard() {
183 configuration.removeMemberReplicaForShard("default", MEMBER_2);
184 String shardName = configuration.getShardNameForModule("default");
185 assertEquals("ModuleShardName", "default", shardName);
186 ShardStrategy shardStrategy = configuration.getStrategyForModule("default");
187 assertNull("ModuleStrategy", shardStrategy);
188 Collection<MemberName> members = configuration.getMembersFromShardName("default");
189 assertEquals("Members", ImmutableSortedSet.of(MEMBER_1, MEMBER_3),
190 ImmutableSortedSet.copyOf(members));
192 configuration.removeMemberReplicaForShard("non-existent", MEMBER_2);
193 Set<String> shardNames = configuration.getAllShardNames();
194 assertEquals("ShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
195 ImmutableSortedSet.copyOf(shardNames));