2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.drools.pooling.message;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.junit.Assert.fail;
30 import java.util.Arrays;
31 import java.util.SortedSet;
32 import java.util.TreeSet;
33 import org.junit.Test;
34 import org.onap.policy.drools.pooling.PoolingFeatureException;
36 public class BucketAssignmentsTest {
39 public void testBucketAssignments() {
40 new BucketAssignments();
44 public void testBucketAssignmentsStringArray() {
45 String[] arr = {"abc", "def"};
46 BucketAssignments asgn = new BucketAssignments(arr);
48 assertNotNull(asgn.getHostArray());
49 assertEquals(arr.toString(), asgn.getHostArray().toString());
53 public void testGetHostArray_testSetHostArray() {
55 String[] arr = {"abc", "def"};
56 BucketAssignments asgn = new BucketAssignments(arr);
58 assertNotNull(asgn.getHostArray());
59 assertEquals(arr.toString(), asgn.getHostArray().toString());
61 String[] arr2 = {"xyz"};
62 asgn.setHostArray(arr2);
64 assertNotNull(asgn.getHostArray());
65 assertEquals(arr2.toString(), asgn.getHostArray().toString());
69 public void testGetLeader() {
71 BucketAssignments asgn = new BucketAssignments();
72 assertNull(asgn.getLeader());
74 // array is non-null, but empty
75 asgn.setHostArray(new String[0]);
76 assertNull(asgn.getLeader());
78 // all entries are null
79 asgn.setHostArray(new String[5]);
80 assertNull(asgn.getLeader());
82 // some entries are null
83 asgn.setHostArray(new String[] {null, "abc", null});
84 assertEquals("abc", asgn.getLeader());
87 asgn.setHostArray(new String[] {"abc"});
88 assertEquals("abc", asgn.getLeader());
91 asgn.setHostArray(new String[] {"Ahost", "Bhost", "Chost"});
92 assertEquals("Ahost", asgn.getLeader());
95 asgn.setHostArray(new String[] {"Xhost", "Bhost", "Chost"});
96 assertEquals("Bhost", asgn.getLeader());
99 asgn.setHostArray(new String[] {"Xhost", "Yhost", "Chost"});
100 assertEquals("Chost", asgn.getLeader());
103 asgn.setHostArray(new String[] {"Xhost", "Bhost", "Chost", "Bhost", "Xhost", "Chost"});
104 assertEquals("Bhost", asgn.getLeader());
108 public void testHasAssignment() {
109 // host array is null
110 BucketAssignments asgn = new BucketAssignments();
111 assertFalse(asgn.hasAssignment("abc"));
113 // array is non-null, but empty
114 asgn.setHostArray(new String[0]);
115 assertFalse(asgn.hasAssignment("abc"));
117 // all entries are null
118 asgn.setHostArray(new String[5]);
119 assertFalse(asgn.hasAssignment("abc"));
121 // some entries are null
122 asgn.setHostArray(new String[] {null, "abc", null});
123 assertTrue(asgn.hasAssignment("abc"));
126 asgn.setHostArray(new String[] {"abc"});
127 assertTrue(asgn.hasAssignment("abc"));
129 // appears as first entry
130 asgn.setHostArray(new String[] {"abc", "Bhost", "Chost"});
131 assertTrue(asgn.hasAssignment("abc"));
134 asgn.setHostArray(new String[] {"Xhost", "abc", "Chost"});
135 assertTrue(asgn.hasAssignment("abc"));
138 asgn.setHostArray(new String[] {"Xhost", "Yhost", "abc"});
139 assertTrue(asgn.hasAssignment("abc"));
141 // appears repeatedly
142 asgn.setHostArray(new String[] {"Xhost", "Bhost", "Chost", "Bhost", "Xhost", "Chost"});
143 assertTrue(asgn.hasAssignment("Bhost"));
147 public void testGetAllHosts() {
148 // host array is null
149 BucketAssignments asgn = new BucketAssignments();
150 assertEquals("[]", getSortedHosts(asgn).toString());
152 // array is non-null, but empty
153 asgn.setHostArray(new String[0]);
154 assertEquals("[]", getSortedHosts(asgn).toString());
156 // all entries are null
157 asgn.setHostArray(new String[5]);
158 assertEquals("[]", getSortedHosts(asgn).toString());
160 // some entries are null
161 asgn.setHostArray(new String[] {null, "abc", null});
162 assertEquals("[abc]", getSortedHosts(asgn).toString());
165 asgn.setHostArray(new String[] {"abc"});
166 assertEquals("[abc]", getSortedHosts(asgn).toString());
168 // multiple, repeated entries
169 asgn.setHostArray(new String[] {"def", "abc", "def", "ghi", "def", "def", "xyz"});
170 assertEquals("[abc, def, ghi, xyz]", getSortedHosts(asgn).toString());
174 * Gets the hosts, sorted, so that the order is predictable.
176 * @param asgn assignment whose hosts are to be retrieved
177 * @return a new, sorted set of hosts
179 private SortedSet<String> getSortedHosts(BucketAssignments asgn) {
180 return new TreeSet<>(asgn.getAllHosts());
184 public void testGetAssignedHost() {
185 // host array is null
186 BucketAssignments asgn = new BucketAssignments();
187 assertNull(asgn.getAssignedHost(3));
189 // array is non-null, but empty
190 asgn.setHostArray(new String[0]);
191 assertNull(asgn.getAssignedHost(3));
193 // all entries are null
194 asgn.setHostArray(new String[5]);
195 assertNull(asgn.getAssignedHost(3));
197 // multiple, repeated entries
198 String[] arr = {"def", "abc", "def", "ghi", "def", "def", "xyz"};
199 asgn.setHostArray(arr);
202 * get assignments for consecutive integers, including negative numbers and
203 * numbers extending past the length of the array.
206 TreeSet<String> seen = new TreeSet<>();
207 for (int x = -1; x < arr.length + 2; ++x) {
208 seen.add(asgn.getAssignedHost(x));
211 TreeSet<String> expected = new TreeSet<>(Arrays.asList(arr));
212 assertEquals(expected, seen);
214 // try a much bigger number
215 assertNotNull(asgn.getAssignedHost(arr.length * 1000));
219 public void testSize() {
220 // host array is null
221 BucketAssignments asgn = new BucketAssignments();
222 assertEquals(0, asgn.size());
224 // array is non-null, but empty
225 asgn.setHostArray(new String[0]);
226 assertEquals(0, asgn.size());
228 // all entries are null
229 asgn.setHostArray(new String[5]);
230 assertEquals(5, asgn.size());
232 // multiple, repeated entries
233 String[] arr = {"def", "abc", "def", "ghi", "def", "def", "xyz"};
234 asgn.setHostArray(arr);
235 assertEquals(arr.length, asgn.size());
239 public void testCheckValidity() throws Exception {
240 // host array is null
241 BucketAssignments asgn = new BucketAssignments();
242 expectException(asgn);
244 // array is non-null, but empty
245 asgn.setHostArray(new String[0]);
246 expectException(asgn);
249 asgn.setHostArray(new String[BucketAssignments.MAX_BUCKETS + 1]);
250 expectException(asgn);
252 // all entries are null
253 asgn.setHostArray(new String[5]);
254 expectException(asgn);
256 // null at the beginning
257 asgn.setHostArray(new String[] {null, "Bhost", "Chost"});
258 expectException(asgn);
260 // null in the middle
261 asgn.setHostArray(new String[] {"Ahost", null, "Chost"});
262 expectException(asgn);
265 asgn.setHostArray(new String[] {"Ahost", "Bhost", null});
266 expectException(asgn);
269 asgn.setHostArray(new String[] {"abc"});
270 asgn.checkValidity();
273 asgn.setHostArray(new String[] {"Ahost", "Bhost", "Chost"});
274 asgn.checkValidity();
278 public void testHashCode() {
279 // with null assignments
280 BucketAssignments asgn = new BucketAssignments();
284 asgn = new BucketAssignments(new String[0]);
288 asgn = new BucketAssignments(new String[] {"abc", null, "def"});
292 asgn = new BucketAssignments(new String[] {"abc", null, "def"});
293 int code = asgn.hashCode();
295 asgn = new BucketAssignments(new String[] {"abc", null, "def"});
296 assertEquals(code, asgn.hashCode());
298 // slightly different values (i.e., changed "def" to "eef")
299 asgn = new BucketAssignments(new String[] {"abc", null, "eef"});
300 assertTrue(code != asgn.hashCode());
304 public void testEquals() {
306 BucketAssignments asgn = new BucketAssignments();
307 assertFalse(asgn.equals(null));
310 asgn = new BucketAssignments();
311 assertTrue(asgn.equals(asgn));
313 // different class of object
314 asgn = new BucketAssignments();
315 assertFalse(asgn.equals("not an assignment object"));
317 // with null assignments
318 asgn = new BucketAssignments();
319 assertTrue(asgn.equals(new BucketAssignments()));
321 assertFalse(asgn.equals(new BucketAssignments(new String[] {"abc"})));
324 asgn = new BucketAssignments(new String[0]);
325 assertTrue(asgn.equals(asgn));
327 assertFalse(asgn.equals(new BucketAssignments()));
328 assertFalse(asgn.equals(new BucketAssignments(new String[] {"abc"})));
331 String[] arr = {"abc", null, "def"};
332 asgn = new BucketAssignments(arr);
333 assertTrue(asgn.equals(asgn));
334 assertTrue(asgn.equals(new BucketAssignments(arr)));
335 assertTrue(asgn.equals(new BucketAssignments(new String[] {"abc", null, "def"})));
337 assertFalse(asgn.equals(new BucketAssignments()));
338 assertFalse(asgn.equals(new BucketAssignments(new String[] {"abc", null, "XYZ"})));
340 assertFalse(asgn.equals(new BucketAssignments()));
344 * Expects an exception when checkValidity() is called.
346 * @param asgn assignments to be checked
348 private void expectException(BucketAssignments asgn) {
350 asgn.checkValidity();
351 fail("missing exception");
353 } catch (PoolingFeatureException expected) {