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.comm.msgdata;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertNull;
26 import static org.junit.Assert.assertSame;
27 import static org.junit.Assert.assertTrue;
28 import static org.mockito.ArgumentMatchers.any;
29 import static org.mockito.Mockito.never;
30 import static org.mockito.Mockito.verify;
32 import java.util.ArrayList;
33 import java.util.Arrays;
34 import java.util.Collections;
36 import java.util.TreeSet;
37 import java.util.stream.Collectors;
38 import org.junit.Before;
39 import org.junit.Test;
40 import org.onap.policy.models.pdp.concepts.PdpStateChange;
41 import org.onap.policy.models.pdp.concepts.PdpStatus;
42 import org.onap.policy.models.pdp.concepts.PdpUpdate;
43 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
44 import org.onap.policy.pap.main.comm.CommonRequestBase;
46 public class UpdateReqTest extends CommonRequestBase {
48 private UpdateReq data;
49 private PdpUpdate update;
50 private PdpStatus response;
55 * @throws Exception if an error occurs
58 public void setUp() throws Exception {
61 response = new PdpStatus();
63 update = makeUpdate();
65 response.setName(MY_NAME);
66 response.setPdpGroup(update.getPdpGroup());
67 response.setPdpSubgroup(update.getPdpSubgroup());
69 update.getPolicies().stream().map(ToscaPolicy::getIdentifier).collect(Collectors.toList()));
71 data = new UpdateReq(reqParams, MY_REQ_NAME, update);
72 data.setNotifier(notifier);
76 public void testGetMessage() {
77 assertEquals(MY_REQ_NAME, data.getName());
78 assertSame(update, data.getMessage());
82 public void testCheckResponse() {
83 assertNull(data.checkResponse(response));
84 assertTrue(data.getUndeployPolicies().isEmpty());
87 // both policy lists null
88 update.setPolicies(null);
89 response.setPolicies(null);
90 assertNull(data.checkResponse(response));
91 assertTrue(data.getUndeployPolicies().isEmpty());
95 public void testCheckResponse_NullName() {
96 response.setName(null);
98 assertEquals("null PDP name", data.checkResponse(response));
99 assertTrue(data.getUndeployPolicies().isEmpty());
104 public void testCheckResponse_NullMsgName() {
105 update.setName(null);
107 assertEquals(null, data.checkResponse(response));
108 assertTrue(data.getUndeployPolicies().isEmpty());
113 public void testUpdateReqCheckResponse_MismatchedGroup() {
114 response.setPdpGroup(DIFFERENT);
116 assertEquals("group does not match", data.checkResponse(response));
117 assertTrue(data.getUndeployPolicies().isEmpty());
122 public void testUpdateReqCheckResponse_MismatchedSubGroup() {
123 response.setPdpSubgroup(DIFFERENT);
125 assertEquals("subgroup does not match", data.checkResponse(response));
126 assertTrue(data.getUndeployPolicies().isEmpty());
131 public void testCheckResponse_NullSubGroup() {
132 update.setPdpSubgroup(null);
133 response.setPdpSubgroup(null);
135 // different policy list - should have no impact
136 response.setPolicies(Collections.emptyList());
138 assertEquals(null, data.checkResponse(response));
139 assertTrue(data.getUndeployPolicies().isEmpty());
144 public void testUpdateReqCheckResponse_MismatchedPolicies() {
145 ArrayList<ToscaPolicy> policies = new ArrayList<>(update.getPolicies());
146 policies.set(0, makePolicy(DIFFERENT, "10.0.0"));
148 response.setPolicies(policies.stream().map(ToscaPolicy::getIdentifier).collect(Collectors.toList()));
150 assertEquals("policies do not match", data.checkResponse(response));
153 // the first policy from the original update is all that should be undeployed
154 assertEquals(Collections.singleton(update.getPolicies().get(0).getIdentifier()).toString(),
155 data.getUndeployPolicies().toString());
159 public void testUpdateReqCheckResponse_MismatchedPolicies_Null_NotNull() {
160 update.setPolicies(null);
162 assertEquals("policies do not match", data.checkResponse(response));
163 assertTrue(data.getUndeployPolicies().isEmpty());
168 public void testUpdateReqCheckResponse_MismatchedPolicies_NotNull_Null() {
169 response.setPolicies(null);
171 assertEquals("policies do not match", data.checkResponse(response));
174 // all policies in the update should be undeployed
175 assertEquals(update.getPolicies().stream().map(ToscaPolicy::getIdentifier).collect(Collectors.toList())
176 .toString(), new TreeSet<>(data.getUndeployPolicies()).toString());
180 public void testReconfigure() {
181 // different message type should fail and leave message unchanged
182 assertFalse(data.reconfigure(new PdpStateChange()));
183 assertSame(update, data.getMessage());
185 // same content - should succeed, but leave message unchanged
186 PdpUpdate msg2 = new PdpUpdate(update);
187 assertTrue(data.reconfigure(msg2));
188 assertSame(update, data.getMessage());
190 // different content - should succeed and install NEW message
191 msg2.setPdpGroup(DIFFERENT);
192 assertTrue(data.reconfigure(msg2));
193 assertSame(msg2, data.getMessage());
197 public void testIsSameContent() {
198 PdpUpdate msg2 = new PdpUpdate(update);
199 msg2.setName("world");
200 assertTrue(data.isSameContent(msg2));
202 // both policy lists null
203 update.setPolicies(null);
204 msg2.setPolicies(null);
205 assertTrue(data.isSameContent(msg2));
209 public void testIsSameContent_BothGroupNamesNull() {
210 PdpUpdate msg2 = new PdpUpdate(update);
211 msg2.setPdpGroup(null);
212 update.setPdpGroup(null);
213 assertTrue(data.isSameContent(msg2));
217 public void testIsSameContent_BothSubGroupNamesNull() {
218 PdpUpdate msg2 = new PdpUpdate(update);
219 msg2.setPdpSubgroup(null);
220 update.setPdpSubgroup(null);
221 assertTrue(data.isSameContent(msg2));
225 public void testIsSameContent_DiffGroup() {
226 PdpUpdate msg2 = new PdpUpdate(update);
227 msg2.setPdpGroup(null);
228 assertFalse(data.isSameContent(msg2));
230 msg2.setPdpGroup(DIFFERENT);
231 assertFalse(data.isSameContent(msg2));
233 update.setPdpGroup(null);
234 assertFalse(data.isSameContent(msg2));
238 public void testIsSameContent_DiffSubGroup() {
239 PdpUpdate msg2 = new PdpUpdate(update);
240 msg2.setPdpSubgroup(null);
241 assertFalse(data.isSameContent(msg2));
243 msg2.setPdpSubgroup(DIFFERENT);
244 assertFalse(data.isSameContent(msg2));
246 update.setPdpSubgroup(null);
247 assertFalse(data.isSameContent(msg2));
251 public void testIsSameContent_DiffPolicies() {
252 PdpUpdate msg2 = new PdpUpdate(update);
254 ArrayList<ToscaPolicy> policies = new ArrayList<>(update.getPolicies());
255 policies.set(0, makePolicy(DIFFERENT, "10.0.0"));
256 msg2.setPolicies(policies);
258 assertFalse(data.isSameContent(msg2));
262 public void testIsSameContent_DiffPolicies_NotNull_Null() {
263 PdpUpdate msg2 = new PdpUpdate(update);
264 msg2.setPolicies(null);
266 assertFalse(data.isSameContent(msg2));
270 public void testIsSameContent_DiffPolicies_Null_NotNull() {
271 PdpUpdate msg2 = new PdpUpdate(update);
273 update.setPolicies(null);
275 assertFalse(data.isSameContent(msg2));
278 @SuppressWarnings("unchecked")
279 private void verifyResponse() {
280 verify(notifier).processResponse(any(), any(Set.class));
283 @SuppressWarnings("unchecked")
284 private void verifyNoResponse() {
285 verify(notifier, never()).processResponse(any(), any(Set.class));
289 * Makes an update message.
291 * @return a new update message
293 private PdpUpdate makeUpdate() {
294 PdpUpdate upd = new PdpUpdate();
296 upd.setDescription("update-description");
297 upd.setName(MY_NAME);
298 upd.setPdpGroup(MY_GROUP);
299 upd.setPdpSubgroup(MY_SUBGROUP);
301 ToscaPolicy policy1 = makePolicy("policy-1-a", "1.0.0");
302 ToscaPolicy policy2 = makePolicy("policy-2-a", "1.1.0");
304 upd.setPolicies(Arrays.asList(policy1, policy2));