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;
14 import com.google.common.collect.ImmutableSortedSet;
15 import com.google.common.collect.Sets;
17 import java.util.Collection;
19 import org.junit.Assert;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.opendaylight.controller.cluster.datastore.shardstrategy.ModuleShardStrategy;
23 import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategy;
25 public class ConfigurationImplTest {
27 private ConfigurationImpl configuration;
31 configuration = new ConfigurationImpl("module-shards.conf", "modules.conf");
35 public void testConstructor(){
36 Assert.assertNotNull(configuration);
40 public void testGetMemberShardNames(){
41 Collection<String> memberShardNames = configuration.getMemberShardNames("member-1");
42 assertEquals("getMemberShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
43 ImmutableSortedSet.copyOf(memberShardNames));
45 memberShardNames = configuration.getMemberShardNames("member-2");
46 assertEquals("getMemberShardNames", ImmutableSortedSet.of("default"),
47 ImmutableSortedSet.copyOf(memberShardNames));
49 memberShardNames = configuration.getMemberShardNames("member-100");
50 assertEquals("getMemberShardNames size", 0, memberShardNames.size());
54 public void testGetMembersFromShardName(){
55 Collection<String> members = configuration.getMembersFromShardName("default");
56 assertEquals("getMembersFromShardName", ImmutableSortedSet.of("member-1", "member-2", "member-3"),
57 ImmutableSortedSet.copyOf(members));
59 members = configuration.getMembersFromShardName("cars-1");
60 assertEquals("getMembersFromShardName", ImmutableSortedSet.of("member-1"),
61 ImmutableSortedSet.copyOf(members));
63 // Try to find a shard which is not present
65 members = configuration.getMembersFromShardName("foobar");
66 assertEquals("getMembersFromShardName size", 0, members.size());
70 public void testGetAllShardNames(){
71 Set<String> allShardNames = configuration.getAllShardNames();
72 assertEquals("getAllShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
73 ImmutableSortedSet.copyOf(allShardNames));
77 public void testGetModuleNameFromNameSpace() {
78 String moduleName = configuration.getModuleNameFromNameSpace(
79 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test:cars");
80 assertEquals("getModuleNameFromNameSpace", "cars", moduleName);
82 moduleName = configuration.getModuleNameFromNameSpace(
83 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test");
84 assertEquals("getModuleNameFromNameSpace", "test", moduleName);
86 moduleName = configuration.getModuleNameFromNameSpace("non-existent");
87 assertNull("getModuleNameFromNameSpace - expected null", moduleName);
91 public void testGetStrategyForModule() {
92 ShardStrategy strategy = configuration.getStrategyForModule("cars");
93 assertNotNull("getStrategyForModule null", strategy);
94 assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
96 strategy = configuration.getStrategyForModule("people");
97 assertNotNull("getStrategyForModule null", strategy);
98 assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
100 strategy = configuration.getStrategyForModule("default");
101 assertNull("getStrategyForModule - expected null", strategy);
103 strategy = configuration.getStrategyForModule("non-existent");
104 assertNull("getStrategyForModule - expected null", strategy);
108 public void testGetShardNameForModule() {
109 String shardName = configuration.getShardNameForModule("cars");
110 assertEquals("getShardNameForModule", "cars-1", shardName);
112 shardName = configuration.getShardNameForModule("people");
113 assertEquals("getShardNameForModule", "people-1", shardName);
115 shardName = configuration.getShardNameForModule("non-existent");
116 assertNull("getShardNameForModule - expected null", shardName);
120 public void testAddModuleShardConfiguration() throws Exception {
121 URI namespace = new URI("urn:opendaylight:test:oven");
122 String moduleName = "oven";
123 String shardName = "oven-shard";
124 String shardStrategyName = ModuleShardStrategy.NAME;
125 Collection<String> shardMemberNames = ImmutableSortedSet.of("member-1", "member-4", "member-5");
127 configuration.addModuleShardConfiguration(new ModuleShardConfiguration(namespace, moduleName, shardName,
128 shardStrategyName, shardMemberNames));
130 assertEquals("getMemberShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default", shardName),
131 ImmutableSortedSet.copyOf(configuration.getMemberShardNames("member-1")));
132 assertEquals("getMemberShardNames", ImmutableSortedSet.of(shardName),
133 ImmutableSortedSet.copyOf(configuration.getMemberShardNames("member-4")));
134 assertEquals("getMemberShardNames", ImmutableSortedSet.of(shardName),
135 ImmutableSortedSet.copyOf(configuration.getMemberShardNames("member-5")));
136 assertEquals("getMembersFromShardName", shardMemberNames,
137 ImmutableSortedSet.copyOf(configuration.getMembersFromShardName(shardName)));
138 assertEquals("getShardNameForModule", shardName, configuration.getShardNameForModule(moduleName));
139 assertEquals("getModuleNameFromNameSpace", moduleName,
140 configuration.getModuleNameFromNameSpace(namespace.toASCIIString()));
141 assertEquals("getAllShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default", shardName),
142 ImmutableSortedSet.copyOf(configuration.getAllShardNames()));
144 ShardStrategy strategy = configuration.getStrategyForModule("cars");
145 assertNotNull("getStrategyForModule null", strategy);
146 assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
150 public void testGetUniqueMemberNamesForAllShards() {
151 assertEquals("getUniqueMemberNamesForAllShards", Sets.newHashSet("member-1", "member-2", "member-3"),
152 configuration.getUniqueMemberNamesForAllShards());
156 public void testAddMemberReplicaForShard() {
157 configuration.addMemberReplicaForShard("people-1", "member-2");
158 String shardName = configuration.getShardNameForModule("people");
159 assertEquals("ModuleShardName", "people-1", shardName);
160 ShardStrategy shardStrategy = configuration.getStrategyForModule("people");
161 assertEquals("ModuleStrategy", ModuleShardStrategy.class, shardStrategy.getClass());
162 Collection<String> members = configuration.getMembersFromShardName("people-1");
163 assertEquals("Members", ImmutableSortedSet.of("member-1", "member-2"),
164 ImmutableSortedSet.copyOf(members));
166 configuration.addMemberReplicaForShard("non-existent", "member-2");
167 Set<String> shardNames = configuration.getAllShardNames();
168 assertEquals("ShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
169 ImmutableSortedSet.copyOf(shardNames));
173 public void testRemoveMemberReplicaForShard() {
174 configuration.removeMemberReplicaForShard("default", "member-2");
175 String shardName = configuration.getShardNameForModule("default");
176 assertEquals("ModuleShardName", "default", shardName);
177 ShardStrategy shardStrategy = configuration.getStrategyForModule("default");
178 assertNull("ModuleStrategy", shardStrategy);
179 Collection<String> members = configuration.getMembersFromShardName("default");
180 assertEquals("Members", ImmutableSortedSet.of("member-1", "member-3"),
181 ImmutableSortedSet.copyOf(members));
183 configuration.removeMemberReplicaForShard("non-existent", "member-2");
184 Set<String> shardNames = configuration.getAllShardNames();
185 assertEquals("ShardNames", ImmutableSortedSet.of("people-1", "cars-1", "test-1", "default"),
186 ImmutableSortedSet.copyOf(shardNames));