a2f01c377e9a48f3dd4a19092f0d241aefede959
[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 import com.google.common.collect.ImmutableSortedSet;
15 import com.google.common.collect.Sets;
16 import java.net.URI;
17 import java.util.Collection;
18 import java.util.Set;
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;
24
25 public class ConfigurationImplTest {
26
27     private ConfigurationImpl configuration;
28
29     @Before
30     public void setup(){
31         configuration = new ConfigurationImpl("module-shards.conf", "modules.conf");
32     }
33
34     @Test
35     public void testConstructor(){
36         Assert.assertNotNull(configuration);
37     }
38
39     @Test
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));
44
45         memberShardNames = configuration.getMemberShardNames("member-2");
46         assertEquals("getMemberShardNames", ImmutableSortedSet.of("default"),
47                 ImmutableSortedSet.copyOf(memberShardNames));
48
49         memberShardNames = configuration.getMemberShardNames("member-100");
50         assertEquals("getMemberShardNames size", 0, memberShardNames.size());
51     }
52
53     @Test
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));
58
59         members = configuration.getMembersFromShardName("cars-1");
60         assertEquals("getMembersFromShardName", ImmutableSortedSet.of("member-1"),
61                 ImmutableSortedSet.copyOf(members));
62
63         // Try to find a shard which is not present
64
65         members = configuration.getMembersFromShardName("foobar");
66         assertEquals("getMembersFromShardName size", 0, members.size());
67     }
68
69     @Test
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));
74     }
75
76     @Test
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);
81
82         moduleName = configuration.getModuleNameFromNameSpace(
83                 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test");
84         assertEquals("getModuleNameFromNameSpace", "test", moduleName);
85
86         moduleName = configuration.getModuleNameFromNameSpace("non-existent");
87         assertNull("getModuleNameFromNameSpace - expected null", moduleName);
88     }
89
90     @Test
91     public void testGetStrategyForModule() {
92         ShardStrategy strategy = configuration.getStrategyForModule("cars");
93         assertNotNull("getStrategyForModule null", strategy);
94         assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
95
96         strategy = configuration.getStrategyForModule("people");
97         assertNotNull("getStrategyForModule null", strategy);
98         assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
99
100         strategy = configuration.getStrategyForModule("default");
101         assertNull("getStrategyForModule - expected null", strategy);
102
103         strategy = configuration.getStrategyForModule("non-existent");
104         assertNull("getStrategyForModule - expected null", strategy);
105     }
106
107     @Test
108     public void testGetShardNameForModule() {
109         String shardName = configuration.getShardNameForModule("cars");
110         assertEquals("getShardNameForModule", "cars-1", shardName);
111
112         shardName = configuration.getShardNameForModule("people");
113         assertEquals("getShardNameForModule", "people-1", shardName);
114
115         shardName = configuration.getShardNameForModule("non-existent");
116         assertNull("getShardNameForModule - expected null", shardName);
117     }
118
119     @Test
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");
126
127         configuration.addModuleShardConfiguration(new ModuleShardConfiguration(namespace, moduleName, shardName,
128                 shardStrategyName, shardMemberNames));
129
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()));
143
144         ShardStrategy strategy = configuration.getStrategyForModule("cars");
145         assertNotNull("getStrategyForModule null", strategy);
146         assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
147     }
148
149     @Test
150     public void testGetUniqueMemberNamesForAllShards() {
151         assertEquals("getUniqueMemberNamesForAllShards", Sets.newHashSet("member-1", "member-2", "member-3"),
152                 configuration.getUniqueMemberNamesForAllShards());
153     }
154
155     @Test
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));
165
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));
170     }
171
172     @Test
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));
182
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));
187     }
188 }