Bump odlparent/yangtools/mdsal
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / config / ConfigurationImplBaseTest.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 package org.opendaylight.controller.cluster.datastore.config;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertNull;
13
14 import com.google.common.collect.ImmutableSortedSet;
15 import com.google.common.collect.Sets;
16 import java.util.Collection;
17 import java.util.Set;
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;
25
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");
33
34     private ConfigurationImpl configuration;
35
36     @Before
37     public void setup() {
38         this.configuration = createConfiguration();
39     }
40
41     public abstract ConfigurationImpl createConfiguration();
42
43     @Test
44     public void testConstructor() {
45         Assert.assertNotNull(configuration);
46     }
47
48     @Test
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));
53
54         memberShardNames = configuration.getMemberShardNames(MEMBER_2);
55         assertEquals("getMemberShardNames", ImmutableSortedSet.of("default"),
56                 ImmutableSortedSet.copyOf(memberShardNames));
57
58         memberShardNames = configuration.getMemberShardNames(MEMBER_100);
59         assertEquals("getMemberShardNames size", 0, memberShardNames.size());
60     }
61
62     @Test
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));
67
68         members = configuration.getMembersFromShardName("cars-1");
69         assertEquals("getMembersFromShardName", ImmutableSortedSet.of(MEMBER_1),
70                 ImmutableSortedSet.copyOf(members));
71
72         // Try to find a shard which is not present
73
74         members = configuration.getMembersFromShardName("foobar");
75         assertEquals("getMembersFromShardName size", 0, members.size());
76     }
77
78     @Test
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));
83     }
84
85     @Test
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);
90
91         moduleName = configuration.getModuleNameFromNameSpace(
92                 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test");
93         assertEquals("getModuleNameFromNameSpace", "test", moduleName);
94
95         moduleName = configuration.getModuleNameFromNameSpace("non-existent");
96         assertNull("getModuleNameFromNameSpace - expected null", moduleName);
97     }
98
99     @Test
100     public void testGetStrategyForModule() {
101         ShardStrategy strategy = configuration.getStrategyForModule("cars");
102         assertNotNull("getStrategyForModule null", strategy);
103         assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
104
105         strategy = configuration.getStrategyForModule("people");
106         assertNotNull("getStrategyForModule null", strategy);
107         assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
108
109         strategy = configuration.getStrategyForModule("default");
110         assertNull("getStrategyForModule - expected null", strategy);
111
112         strategy = configuration.getStrategyForModule("non-existent");
113         assertNull("getStrategyForModule - expected null", strategy);
114     }
115
116     @Test
117     public void testGetShardNameForModule() {
118         String shardName = configuration.getShardNameForModule("cars");
119         assertEquals("getShardNameForModule", "cars-1", shardName);
120
121         shardName = configuration.getShardNameForModule("people");
122         assertEquals("getShardNameForModule", "people-1", shardName);
123
124         shardName = configuration.getShardNameForModule("non-existent");
125         assertNull("getShardNameForModule - expected null", shardName);
126     }
127
128     @Test
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);
135
136         configuration.addModuleShardConfiguration(new ModuleShardConfiguration(namespace, moduleName, shardName,
137                 shardStrategyName, shardMemberNames));
138
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()));
152
153         ShardStrategy strategy = configuration.getStrategyForModule("cars");
154         assertNotNull("getStrategyForModule null", strategy);
155         assertEquals("getStrategyForModule type", ModuleShardStrategy.class, strategy.getClass());
156     }
157
158     @Test
159     public void testGetUniqueMemberNamesForAllShards() {
160         assertEquals("getUniqueMemberNamesForAllShards", Sets.newHashSet(MEMBER_1, MEMBER_2, MEMBER_3),
161                 configuration.getUniqueMemberNamesForAllShards());
162     }
163
164     @Test
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));
174
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));
179     }
180
181     @Test
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));
191
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));
196     }
197 }