BUG-8618: eliminate SimpleShardDataTreeCohort subclasses
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / config / ConfigurationImplTest.java
1 /*
2  * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.controller.cluster.datastore.config;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14
15 import com.google.common.collect.ImmutableSortedSet;
16 import com.google.common.collect.Sets;
17 import java.net.URI;
18 import java.util.Collection;
19 import java.util.Set;
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;
26
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");
34
35     private ConfigurationImpl configuration;
36
37     @Before
38     public void setup() {
39         configuration = new ConfigurationImpl("module-shards.conf", "modules.conf");
40     }
41
42     @Test
43     public void testConstructor() {
44         Assert.assertNotNull(configuration);
45     }
46
47     @Test
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));
52
53         memberShardNames = configuration.getMemberShardNames(MEMBER_2);
54         assertEquals("getMemberShardNames", ImmutableSortedSet.of("default"),
55                 ImmutableSortedSet.copyOf(memberShardNames));
56
57         memberShardNames = configuration.getMemberShardNames(MEMBER_100);
58         assertEquals("getMemberShardNames size", 0, memberShardNames.size());
59     }
60
61     @Test
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));
66
67         members = configuration.getMembersFromShardName("cars-1");
68         assertEquals("getMembersFromShardName", ImmutableSortedSet.of(MEMBER_1),
69                 ImmutableSortedSet.copyOf(members));
70
71         // Try to find a shard which is not present
72
73         members = configuration.getMembersFromShardName("foobar");
74         assertEquals("getMembersFromShardName size", 0, members.size());
75     }
76
77     @Test
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));
82     }
83
84     @Test
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);
89
90         moduleName = configuration.getModuleNameFromNameSpace(
91                 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test");
92         assertEquals("getModuleNameFromNameSpace", "test", moduleName);
93
94         moduleName = configuration.getModuleNameFromNameSpace("non-existent");
95         assertNull("getModuleNameFromNameSpace - expected null", moduleName);
96     }
97
98     @Test
99     public void testGetStrategyForModule() {
100         ShardStrategy strategy = configuration.getStrategyForModule("cars");
101         assertNotNull("getStrategyForModule null", strategy);
102         assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
103
104         strategy = configuration.getStrategyForModule("people");
105         assertNotNull("getStrategyForModule null", strategy);
106         assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
107
108         strategy = configuration.getStrategyForModule("default");
109         assertNull("getStrategyForModule - expected null", strategy);
110
111         strategy = configuration.getStrategyForModule("non-existent");
112         assertNull("getStrategyForModule - expected null", strategy);
113     }
114
115     @Test
116     public void testGetShardNameForModule() {
117         String shardName = configuration.getShardNameForModule("cars");
118         assertEquals("getShardNameForModule", "cars-1", shardName);
119
120         shardName = configuration.getShardNameForModule("people");
121         assertEquals("getShardNameForModule", "people-1", shardName);
122
123         shardName = configuration.getShardNameForModule("non-existent");
124         assertNull("getShardNameForModule - expected null", shardName);
125     }
126
127     @Test
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);
134
135         configuration.addModuleShardConfiguration(new ModuleShardConfiguration(namespace, moduleName, shardName,
136                 shardStrategyName, shardMemberNames));
137
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()));
151
152         ShardStrategy strategy = configuration.getStrategyForModule("cars");
153         assertNotNull("getStrategyForModule null", strategy);
154         assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
155     }
156
157     @Test
158     public void testGetUniqueMemberNamesForAllShards() {
159         assertEquals("getUniqueMemberNamesForAllShards", Sets.newHashSet(MEMBER_1, MEMBER_2, MEMBER_3),
160                 configuration.getUniqueMemberNamesForAllShards());
161     }
162
163     @Test
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));
173
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));
178     }
179
180     @Test
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));
190
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));
195     }
196 }