2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019-2020 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.pap.main.notification;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertTrue;
26 import static org.mockito.Matchers.any;
27 import static org.mockito.Mockito.never;
28 import static org.mockito.Mockito.times;
29 import static org.mockito.Mockito.verify;
30 import static org.mockito.Mockito.when;
32 import java.util.ArrayList;
33 import java.util.Arrays;
34 import java.util.Collections;
35 import java.util.List;
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.mockito.Mock;
39 import org.mockito.MockitoAnnotations;
40 import org.onap.policy.models.pap.concepts.PolicyStatus;
42 public class PolicyDeployTrackerTest extends PolicyCommonSupport {
45 private PolicyTrackerData data;
47 private PolicyDeployTracker tracker;
50 * Creates various objects, including {@link #tracker}.
54 MockitoAnnotations.initMocks(this);
58 tracker = new PolicyDeployTracker();
62 * Simple test with one PDP that immediately responds with success.
65 public void testSimpleImmediateSuccess() {
66 tracker.addData(makeData(policy1, PDP1));
68 // indicate that PDP1 has succeeded
69 List<PolicyStatus> statusList = new ArrayList<>();
70 tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
72 assertEquals(1, statusList.size());
73 assertEquals(policy1, statusList.get(0).getPolicy());
74 assertEquals(type, statusList.get(0).getPolicyType());
75 assertEquals("[1, 0, 0]", getCounts(statusList.get(0)).toString());
77 // indicate that PDP1 has succeeded again - should be no output
79 tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
80 assertEquals(0, statusList.size());
84 tracker.processResponse(PDP1, Arrays.asList(), statusList);
85 assertEquals(1, statusList.size());
86 assertEquals("[0, 1, 0]", getCounts(statusList.get(0)).toString());
88 // indicate that PDP1 has failed again - should be no output
90 tracker.processResponse(PDP1, Arrays.asList(), statusList);
91 assertEquals(0, statusList.size());
93 // indicate that PDP1 has succeeded again
95 tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
96 assertEquals("[1, 0, 0]", getCounts(statusList.get(0)).toString());
100 * Simple test with one PDP that immediately responds with success.
103 public void testSimpleImmediateFail() {
104 tracker.addData(makeData(policy1, PDP1));
106 // indicate that PDP1 has failed
107 List<PolicyStatus> statusList = new ArrayList<>();
108 tracker.processResponse(PDP1, Arrays.asList(), statusList);
109 assertEquals(1, statusList.size());
110 assertEquals("[0, 1, 0]", getCounts(statusList.get(0)).toString());
112 // indicate that PDP1 has failed again - should be no output
114 tracker.processResponse(PDP1, Arrays.asList(), statusList);
115 assertEquals(0, statusList.size());
118 tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
120 assertEquals(1, statusList.size());
121 assertEquals(policy1, statusList.get(0).getPolicy());
122 assertEquals(type, statusList.get(0).getPolicyType());
123 assertEquals("[1, 0, 0]", getCounts(statusList.get(0)).toString());
125 // indicate that PDP1 has succeeded again - should be no output
127 tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
128 assertEquals(0, statusList.size());
132 * Simple test where PDP is removed and then it responds.
135 public void testSimpleRemove() {
136 tracker.addData(makeData(policy1, PDP1));
139 List<PolicyStatus> statusList = new ArrayList<>();
140 tracker.removePdp(PDP1, statusList);
141 assertEquals(1, statusList.size());
142 assertEquals(policy1, statusList.get(0).getPolicy());
143 assertEquals(type, statusList.get(0).getPolicyType());
144 assertEquals("[0, 0, 0]", getCounts(statusList.get(0)).toString());
147 * indicate that PDP1 has succeeded - should be no message since PDP was removed
151 tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
152 assertEquals(0, statusList.size());
155 * indicate that PDP1 has failed - should be no message since PDP was removed
159 tracker.processResponse(PDP1, Arrays.asList(), statusList);
160 assertEquals(0, statusList.size());
164 * Test with multiple PDPs.
167 public void testMulti() {
168 tracker.addData(makeData(policy1, PDP1, PDP2));
170 // indicate that PDP2 has succeeded
171 List<PolicyStatus> statusList = new ArrayList<>();
172 tracker.processResponse(PDP2, Arrays.asList(policy1), statusList);
173 assertEquals(0, statusList.size());
175 // indicate that PDP1 has succeeded
177 tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
179 assertEquals(1, statusList.size());
180 assertEquals(policy1, statusList.get(0).getPolicy());
181 assertEquals(type, statusList.get(0).getPolicyType());
182 assertEquals("[2, 0, 0]", getCounts(statusList.get(0)).toString());
184 // indicate that PDP1 has failed - should get a notification
186 tracker.processResponse(PDP1, Collections.emptyList(), statusList);
187 assertEquals(1, statusList.size());
188 assertEquals(policy1, statusList.get(0).getPolicy());
189 assertEquals(type, statusList.get(0).getPolicyType());
190 assertEquals("[1, 1, 0]", getCounts(statusList.get(0)).toString());
192 // indicate that PDP1 has succeeded
194 tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
195 assertEquals(1, statusList.size());
196 assertEquals("[2, 0, 0]", getCounts(statusList.get(0)).toString());
198 // remove PDP2 - expect message
200 tracker.removePdp(PDP2, statusList);
201 assertEquals(1, statusList.size());
202 assertEquals("[1, 0, 0]", getCounts(statusList.get(0)).toString());
205 tracker.addData(makeData(policy1, PDP2));
207 // indicate that PDP2 has succeeded; PDP1 should still be ok
209 tracker.processResponse(PDP2, Arrays.asList(policy1), statusList);
210 assertEquals(1, statusList.size());
211 assertEquals("[2, 0, 0]", getCounts(statusList.get(0)).toString());
215 public void testUpdateData() {
216 // when success returns false
217 assertFalse(tracker.updateData(PDP1, data, true));
218 verify(data).success(PDP1);
219 verify(data, never()).fail(any());
222 assertFalse(tracker.updateData(PDP1, data, false));
223 verify(data).success(PDP1);
224 verify(data).fail(any());
226 // when success & fail return true
227 when(data.success(PDP1)).thenReturn(true);
228 when(data.fail(PDP1)).thenReturn(true);
229 assertTrue(tracker.updateData(PDP1, data, true));
230 verify(data, times(2)).success(PDP1);
231 verify(data, times(1)).fail(PDP1);
234 assertTrue(tracker.updateData(PDP1, data, false));
235 verify(data, times(2)).success(PDP1);
236 verify(data, times(2)).fail(PDP1);
240 public void testShouldRemove() {
241 // when data is complete, but not empty
242 when(data.isComplete()).thenReturn(true);
243 when(data.isEmpty()).thenReturn(false);
244 assertFalse(tracker.shouldRemove(data));
246 // when data is empty
247 when(data.isEmpty()).thenReturn(true);
248 assertTrue(tracker.shouldRemove(data));