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;
29 import java.util.Arrays;
30 import java.util.SortedSet;
31 import java.util.TreeSet;
32 import org.junit.Test;
33 import org.onap.policy.drools.pooling.PoolingFeatureException;
35 public class BucketAssignmentsTest {
38 public void testBucketAssignments() {
39 new BucketAssignments();
43 public void testBucketAssignmentsStringArray() {
44 String arr[] = {"abc", "def"};
45 BucketAssignments asgn = new BucketAssignments(arr);
47 assertNotNull(asgn.getHostArray());
48 assertEquals(arr.toString(), asgn.getHostArray().toString());
52 public void testGetHostArray_testSetHostArray() {
54 String arr[] = {"abc", "def"};
55 BucketAssignments asgn = new BucketAssignments(arr);
57 assertNotNull(asgn.getHostArray());
58 assertEquals(arr.toString(), asgn.getHostArray().toString());
60 String arr2[] = {"xyz"};
61 asgn.setHostArray(arr2);
63 assertNotNull(asgn.getHostArray());
64 assertEquals(arr2.toString(), asgn.getHostArray().toString());
68 public void testGetLeader() {
70 BucketAssignments asgn = new BucketAssignments();
71 assertNull(asgn.getLeader());
73 // array is non-null, but empty
74 asgn.setHostArray(new String[0]);
75 assertNull(asgn.getLeader());
77 // all entries are null
78 asgn.setHostArray(new String[5]);
79 assertNull(asgn.getLeader());
81 // some entries are null
82 asgn.setHostArray(new String[] {null, "abc", null});
83 assertEquals("abc", asgn.getLeader());
86 asgn.setHostArray(new String[] {"abc"});
87 assertEquals("abc", asgn.getLeader());
90 asgn.setHostArray(new String[] {"Ahost", "Bhost", "Chost"});
91 assertEquals("Ahost", asgn.getLeader());
94 asgn.setHostArray(new String[] {"Xhost", "Bhost", "Chost"});
95 assertEquals("Bhost", asgn.getLeader());
98 asgn.setHostArray(new String[] {"Xhost", "Yhost", "Chost"});
99 assertEquals("Chost", asgn.getLeader());
102 asgn.setHostArray(new String[] {"Xhost", "Bhost", "Chost", "Bhost", "Xhost", "Chost"});
103 assertEquals("Bhost", asgn.getLeader());
107 public void testHasAssignment() {
108 // host array is null
109 BucketAssignments asgn = new BucketAssignments();
110 assertFalse(asgn.hasAssignment("abc"));
112 // array is non-null, but empty
113 asgn.setHostArray(new String[0]);
114 assertFalse(asgn.hasAssignment("abc"));
116 // all entries are null
117 asgn.setHostArray(new String[5]);
118 assertFalse(asgn.hasAssignment("abc"));
120 // some entries are null
121 asgn.setHostArray(new String[] {null, "abc", null});
122 assertTrue(asgn.hasAssignment("abc"));
125 asgn.setHostArray(new String[] {"abc"});
126 assertTrue(asgn.hasAssignment("abc"));
128 // appears as first entry
129 asgn.setHostArray(new String[] {"abc", "Bhost", "Chost"});
130 assertTrue(asgn.hasAssignment("abc"));
133 asgn.setHostArray(new String[] {"Xhost", "abc", "Chost"});
134 assertTrue(asgn.hasAssignment("abc"));
137 asgn.setHostArray(new String[] {"Xhost", "Yhost", "abc"});
138 assertTrue(asgn.hasAssignment("abc"));
140 // appears repeatedly
141 asgn.setHostArray(new String[] {"Xhost", "Bhost", "Chost", "Bhost", "Xhost", "Chost"});
142 assertTrue(asgn.hasAssignment("Bhost"));
146 public void testGetAllHosts() {
147 // host array is null
148 BucketAssignments asgn = new BucketAssignments();
149 assertEquals("[]", getSortedHosts(asgn).toString());
151 // array is non-null, but empty
152 asgn.setHostArray(new String[0]);
153 assertEquals("[]", getSortedHosts(asgn).toString());
155 // all entries are null
156 asgn.setHostArray(new String[5]);
157 assertEquals("[]", getSortedHosts(asgn).toString());
159 // some entries are null
160 asgn.setHostArray(new String[] {null, "abc", null});
161 assertEquals("[abc]", getSortedHosts(asgn).toString());
164 asgn.setHostArray(new String[] {"abc"});
165 assertEquals("[abc]", getSortedHosts(asgn).toString());
167 // multiple, repeated entries
168 asgn.setHostArray(new String[] {"def", "abc", "def", "ghi", "def", "def", "xyz"});
169 assertEquals("[abc, def, ghi, xyz]", getSortedHosts(asgn).toString());
173 * Gets the hosts, sorted, so that the order is predictable.
175 * @param asgn assignment whose hosts are to be retrieved
176 * @return a new, sorted set of hosts
178 private SortedSet<String> getSortedHosts(BucketAssignments asgn) {
179 return new TreeSet<>(asgn.getAllHosts());
183 public void testGetAssignedHost() {
184 // host array is null
185 BucketAssignments asgn = new BucketAssignments();
186 assertNull(asgn.getAssignedHost(3));
188 // array is non-null, but empty
189 asgn.setHostArray(new String[0]);
190 assertNull(asgn.getAssignedHost(3));
192 // all entries are null
193 asgn.setHostArray(new String[5]);
194 assertNull(asgn.getAssignedHost(3));
196 // multiple, repeated entries
197 String[] arr = {"def", "abc", "def", "ghi", "def", "def", "xyz"};
198 asgn.setHostArray(arr);
201 * get assignments for consecutive integers, including negative numbers and
202 * numbers extending past the length of the array.
205 TreeSet<String> seen = new TreeSet<>();
206 for (int x = -1; x < arr.length + 2; ++x) {
207 seen.add(asgn.getAssignedHost(x));
210 TreeSet<String> expected = new TreeSet<>(Arrays.asList(arr));
211 assertEquals(expected, seen);
213 // try a much bigger number
214 assertNotNull(asgn.getAssignedHost(arr.length * 1000));
218 public void testSize() {
219 // host array is null
220 BucketAssignments asgn = new BucketAssignments();
221 assertEquals(0, asgn.size());
223 // array is non-null, but empty
224 asgn.setHostArray(new String[0]);
225 assertEquals(0, asgn.size());
227 // all entries are null
228 asgn.setHostArray(new String[5]);
229 assertEquals(5, asgn.size());
231 // multiple, repeated entries
232 String[] arr = {"def", "abc", "def", "ghi", "def", "def", "xyz"};
233 asgn.setHostArray(arr);
234 assertEquals(arr.length, asgn.size());
238 public void testCheckValidity() throws Exception {
239 // host array is null
240 BucketAssignments asgn = new BucketAssignments();
241 expectException(asgn);
243 // array is non-null, but empty
244 asgn.setHostArray(new String[0]);
245 expectException(asgn);
248 asgn.setHostArray(new String[BucketAssignments.MAX_BUCKETS + 1]);
249 expectException(asgn);
251 // all entries are null
252 asgn.setHostArray(new String[5]);
253 expectException(asgn);
255 // null at the beginning
256 asgn.setHostArray(new String[] {null, "Bhost", "Chost"});
257 expectException(asgn);
259 // null in the middle
260 asgn.setHostArray(new String[] {"Ahost", null, "Chost"});
261 expectException(asgn);
264 asgn.setHostArray(new String[] {"Ahost", "Bhost", null});
265 expectException(asgn);
268 asgn.setHostArray(new String[] {"abc"});
269 asgn.checkValidity();
272 asgn.setHostArray(new String[] {"Ahost", "Bhost", "Chost"});
273 asgn.checkValidity();
277 public void testHashCode() {
278 // with null assignments
279 BucketAssignments asgn = new BucketAssignments();
283 asgn = new BucketAssignments(new String[0]);
287 asgn = new BucketAssignments(new String[] {"abc", null, "def"});
291 asgn = new BucketAssignments(new String[] {"abc", null, "def"});
292 int code = asgn.hashCode();
294 asgn = new BucketAssignments(new String[] {"abc", null, "def"});
295 assertEquals(code, asgn.hashCode());
297 // slightly different values (i.e., changed "def" to "eef")
298 asgn = new BucketAssignments(new String[] {"abc", null, "eef"});
299 assertTrue(code != asgn.hashCode());
303 public void testEquals() {
305 BucketAssignments asgn = new BucketAssignments();
306 assertFalse(asgn.equals(null));
309 asgn = new BucketAssignments();
310 assertTrue(asgn.equals(asgn));
312 // different class of object
313 asgn = new BucketAssignments();
314 assertFalse(asgn.equals("not an assignment object"));
316 // with null assignments
317 asgn = new BucketAssignments();
318 assertTrue(asgn.equals(new BucketAssignments()));
320 assertFalse(asgn.equals(new BucketAssignments(new String[] {"abc"})));
323 asgn = new BucketAssignments(new String[0]);
324 assertTrue(asgn.equals(asgn));
326 assertFalse(asgn.equals(new BucketAssignments()));
327 assertFalse(asgn.equals(new BucketAssignments(new String[] {"abc"})));
330 String[] arr = {"abc", null, "def"};
331 asgn = new BucketAssignments(arr);
332 assertTrue(asgn.equals(asgn));
333 assertTrue(asgn.equals(new BucketAssignments(arr)));
334 assertTrue(asgn.equals(new BucketAssignments(new String[] {"abc", null, "def"})));
336 assertFalse(asgn.equals(new BucketAssignments()));
337 assertFalse(asgn.equals(new BucketAssignments(new String[] {"abc", null, "XYZ"})));
339 assertFalse(asgn.equals(new BucketAssignments()));
343 * Expects an exception when checkValidity() is called.
345 * @param asgn assignments to be checked
347 private void expectException(BucketAssignments asgn) {
349 asgn.checkValidity();
350 fail("missing exception");
352 } catch (PoolingFeatureException expected) {