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.SortedSet;
30 import java.util.TreeSet;
31 import org.junit.Test;
32 import org.onap.policy.drools.pooling.PoolingFeatureException;
34 public class BucketAssignmentsTest {
37 public void testBucketAssignments() {
38 new BucketAssignments();
42 public void testBucketAssignmentsStringArray() {
43 String arr[] = {"abc", "def"};
44 BucketAssignments asgn = new BucketAssignments(arr);
46 assertNotNull(asgn.getHostArray());
47 assertEquals(arr.toString(), asgn.getHostArray().toString());
51 public void testGetHostArray_testSetHostArray() {
53 String arr[] = {"abc", "def"};
54 BucketAssignments asgn = new BucketAssignments(arr);
56 assertNotNull(asgn.getHostArray());
57 assertEquals(arr.toString(), asgn.getHostArray().toString());
59 String arr2[] = {"xyz"};
60 asgn.setHostArray(arr2);
62 assertNotNull(asgn.getHostArray());
63 assertEquals(arr2.toString(), asgn.getHostArray().toString());
67 public void testGetLeader() {
69 BucketAssignments asgn = new BucketAssignments();
70 assertNull(asgn.getLeader());
72 // array is non-null, but empty
73 asgn.setHostArray(new String[0]);
74 assertNull(asgn.getLeader());
76 // all entries are null
77 asgn.setHostArray(new String[5]);
78 assertNull(asgn.getLeader());
80 // some entries are null
81 asgn.setHostArray(new String[] {null, "abc", null});
82 assertEquals("abc", asgn.getLeader());
85 asgn.setHostArray(new String[] {"abc"});
86 assertEquals("abc", asgn.getLeader());
89 asgn.setHostArray(new String[] {"Ahost", "Bhost", "Chost"});
90 assertEquals("Ahost", asgn.getLeader());
93 asgn.setHostArray(new String[] {"Xhost", "Bhost", "Chost"});
94 assertEquals("Bhost", asgn.getLeader());
97 asgn.setHostArray(new String[] {"Xhost", "Yhost", "Chost"});
98 assertEquals("Chost", asgn.getLeader());
101 asgn.setHostArray(new String[] {"Xhost", "Bhost", "Chost", "Bhost", "Xhost", "Chost"});
102 assertEquals("Bhost", asgn.getLeader());
106 public void testHasAssignment() {
107 // host array is null
108 BucketAssignments asgn = new BucketAssignments();
109 assertFalse(asgn.hasAssignment("abc"));
111 // array is non-null, but empty
112 asgn.setHostArray(new String[0]);
113 assertFalse(asgn.hasAssignment("abc"));
115 // all entries are null
116 asgn.setHostArray(new String[5]);
117 assertFalse(asgn.hasAssignment("abc"));
119 // some entries are null
120 asgn.setHostArray(new String[] {null, "abc", null});
121 assertTrue(asgn.hasAssignment("abc"));
124 asgn.setHostArray(new String[] {"abc"});
125 assertTrue(asgn.hasAssignment("abc"));
127 // appears as first entry
128 asgn.setHostArray(new String[] {"abc", "Bhost", "Chost"});
129 assertTrue(asgn.hasAssignment("abc"));
132 asgn.setHostArray(new String[] {"Xhost", "abc", "Chost"});
133 assertTrue(asgn.hasAssignment("abc"));
136 asgn.setHostArray(new String[] {"Xhost", "Yhost", "abc"});
137 assertTrue(asgn.hasAssignment("abc"));
139 // appears repeatedly
140 asgn.setHostArray(new String[] {"Xhost", "Bhost", "Chost", "Bhost", "Xhost", "Chost"});
141 assertTrue(asgn.hasAssignment("Bhost"));
145 public void testGetAllHosts() {
146 // host array is null
147 BucketAssignments asgn = new BucketAssignments();
148 assertEquals("[]", getSortedHosts(asgn).toString());
150 // array is non-null, but empty
151 asgn.setHostArray(new String[0]);
152 assertEquals("[]", getSortedHosts(asgn).toString());
154 // all entries are null
155 asgn.setHostArray(new String[5]);
156 assertEquals("[]", getSortedHosts(asgn).toString());
158 // some entries are null
159 asgn.setHostArray(new String[] {null, "abc", null});
160 assertEquals("[abc]", getSortedHosts(asgn).toString());
163 asgn.setHostArray(new String[] {"abc"});
164 assertEquals("[abc]", getSortedHosts(asgn).toString());
166 // multiple, repeated entries
167 asgn.setHostArray(new String[] {"def", "abc", "def", "ghi", "def", "def", "xyz"});
168 assertEquals("[abc, def, ghi, xyz]", getSortedHosts(asgn).toString());
172 * Gets the hosts, sorted, so that the order is predictable.
174 * @param asgn assignment whose hosts are to be retrieved
175 * @return a new, sorted set of hosts
177 private SortedSet<String> getSortedHosts(BucketAssignments asgn) {
178 return new TreeSet<>(asgn.getAllHosts());
182 public void testGetAssignedHost() {
183 // host array is null
184 BucketAssignments asgn = new BucketAssignments();
185 assertNull(asgn.getAssignedHost(3));
187 // array is non-null, but empty
188 asgn.setHostArray(new String[0]);
189 assertNull(asgn.getAssignedHost(3));
191 // all entries are null
192 asgn.setHostArray(new String[5]);
193 assertNull(asgn.getAssignedHost(3));
195 // multiple, repeated entries
196 String[] arr = {"def", "abc", "def", "ghi", "def", "def", "xyz"};
197 asgn.setHostArray(arr);
199 for (int x = 0; x < arr.length; ++x) {
200 assertEquals("x=" + x, arr[x], asgn.getAssignedHost(x));
204 assertNull(asgn.getAssignedHost(-1));
207 assertNull(asgn.getAssignedHost(arr.length));
208 assertNull(asgn.getAssignedHost(arr.length + 1));
212 public void testSize() {
213 // host array is null
214 BucketAssignments asgn = new BucketAssignments();
215 assertEquals(0, asgn.size());
217 // array is non-null, but empty
218 asgn.setHostArray(new String[0]);
219 assertEquals(0, asgn.size());
221 // all entries are null
222 asgn.setHostArray(new String[5]);
223 assertEquals(5, asgn.size());
225 // multiple, repeated entries
226 String[] arr = {"def", "abc", "def", "ghi", "def", "def", "xyz"};
227 asgn.setHostArray(arr);
228 assertEquals(arr.length, asgn.size());
232 public void testCheckValidity() throws Exception {
233 // host array is null
234 BucketAssignments asgn = new BucketAssignments();
235 expectException(asgn);
237 // array is non-null, but empty
238 asgn.setHostArray(new String[0]);
239 expectException(asgn);
242 asgn.setHostArray(new String[BucketAssignments.MAX_BUCKETS + 1]);
243 expectException(asgn);
245 // all entries are null
246 asgn.setHostArray(new String[5]);
247 expectException(asgn);
249 // null at the beginning
250 asgn.setHostArray(new String[] {null, "Bhost", "Chost"});
251 expectException(asgn);
253 // null in the middle
254 asgn.setHostArray(new String[] {"Ahost", null, "Chost"});
255 expectException(asgn);
258 asgn.setHostArray(new String[] {"Ahost", "Bhost", null});
259 expectException(asgn);
262 asgn.setHostArray(new String[] {"abc"});
263 asgn.checkValidity();
266 asgn.setHostArray(new String[] {"Ahost", "Bhost", "Chost"});
267 asgn.checkValidity();
271 public void testHashCode() {
272 // with null assignments
273 BucketAssignments asgn = new BucketAssignments();
277 asgn = new BucketAssignments(new String[0]);
281 asgn = new BucketAssignments(new String[] {"abc", null, "def"});
285 asgn = new BucketAssignments(new String[] {"abc", null, "def"});
286 int code = asgn.hashCode();
288 asgn = new BucketAssignments(new String[] {"abc", null, "def"});
289 assertEquals(code, asgn.hashCode());
291 // slightly different values (i.e., changed "def" to "eef")
292 asgn = new BucketAssignments(new String[] {"abc", null, "eef"});
293 assertTrue(code != asgn.hashCode());
297 public void testEquals() {
299 BucketAssignments asgn = new BucketAssignments();
300 assertFalse(asgn.equals(null));
303 asgn = new BucketAssignments();
304 assertTrue(asgn.equals(asgn));
306 // different class of object
307 asgn = new BucketAssignments();
308 assertFalse(asgn.equals("not an assignment object"));
310 // with null assignments
311 asgn = new BucketAssignments();
312 assertTrue(asgn.equals(new BucketAssignments()));
314 assertFalse(asgn.equals(new BucketAssignments(new String[] {"abc"})));
317 asgn = new BucketAssignments(new String[0]);
318 assertTrue(asgn.equals(asgn));
320 assertFalse(asgn.equals(new BucketAssignments()));
321 assertFalse(asgn.equals(new BucketAssignments(new String[] {"abc"})));
324 String[] arr = {"abc", null, "def"};
325 asgn = new BucketAssignments(arr);
326 assertTrue(asgn.equals(asgn));
327 assertTrue(asgn.equals(new BucketAssignments(arr)));
328 assertTrue(asgn.equals(new BucketAssignments(new String[] {"abc", null, "def"})));
330 assertFalse(asgn.equals(new BucketAssignments()));
331 assertFalse(asgn.equals(new BucketAssignments(new String[] {"abc", null, "XYZ"})));
333 assertFalse(asgn.equals(new BucketAssignments()));
337 * Expects an exception when checkValidity() is called.
339 * @param asgn assignments to be checked
341 private void expectException(BucketAssignments asgn) {
343 asgn.checkValidity();
344 fail("missing exception");
346 } catch (PoolingFeatureException expected) {