2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 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.rest.depundep;
23 import static org.assertj.core.api.Assertions.assertThatThrownBy;
24 import static org.junit.Assert.assertEquals;
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.Matchers.any;
29 import static org.mockito.Mockito.never;
30 import static org.mockito.Mockito.verify;
31 import static org.mockito.Mockito.when;
33 import java.util.ArrayList;
34 import java.util.Arrays;
35 import java.util.Collections;
36 import java.util.List;
37 import java.util.TreeMap;
38 import java.util.stream.Collectors;
39 import javax.ws.rs.core.Response.Status;
40 import org.junit.AfterClass;
41 import org.junit.Before;
42 import org.junit.Test;
43 import org.onap.policy.common.utils.services.Registry;
44 import org.onap.policy.models.base.PfModelException;
45 import org.onap.policy.models.base.PfModelRuntimeException;
46 import org.onap.policy.models.pap.concepts.PdpDeployPolicies;
47 import org.onap.policy.models.pdp.concepts.PdpGroup;
48 import org.onap.policy.models.pdp.concepts.PdpGroups;
49 import org.onap.policy.models.pdp.concepts.PdpStateChange;
50 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
51 import org.onap.policy.models.pdp.concepts.PdpUpdate;
52 import org.onap.policy.models.pdp.enums.PdpState;
53 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
54 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
55 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
57 public class TestPdpGroupDeployProvider extends ProviderSuper {
58 private static final String EXPECTED_EXCEPTION = "expected exception";
60 private static final String POLICY2_NAME = "policyB";
61 private static final String POLICY1_VERSION = "1.2.3";
62 private static final String GROUP1_NAME = "groupA";
63 private static final String PDP1_TYPE = "pdpTypeA";
64 private static final String PDP2_TYPE = "pdpTypeB";
65 private static final String PDP4_TYPE = "pdpTypeD";
66 private static final String PDP2 = "pdpB";
67 private static final String PDP4 = "pdpD";
69 private PdpGroupDeployProvider prov;
73 public static void tearDownAfterClass() {
74 Registry.newRegistry();
78 * Configures mocks and objects.
80 * @throws Exception if an error occurs
83 public void setUp() throws Exception {
87 when(dao.getFilteredPolicyList(any())).thenReturn(loadPolicies("daoPolicyList.json"));
88 when(dao.getPolicyTypeList("typeA", "100.2.3")).thenReturn(Arrays.asList(loadPolicyType("daoPolicyType.json")));
90 prov = new PdpGroupDeployProvider();
94 public void testCreateOrUpdateGroups() throws Exception {
95 prov.createOrUpdateGroups(loadPdpGroups("emptyGroups.json"));
97 // no groups, so no action should have been taken
98 assertNoGroupAction();
102 public void testCreateOrUpdateGroups_InvalidRequest() throws Exception {
103 assertThatThrownBy(() -> prov.createOrUpdateGroups(new PdpGroups())).isInstanceOf(PfModelException.class)
104 .hasMessageContaining("is null");
106 assertNoGroupAction();
110 public void testCreateOrUpdate_Invalid() throws Exception {
111 PdpGroups groups = loadPdpGroups("createGroups.json");
112 groups.getGroups().get(0).setPdpGroupState(PdpState.TERMINATED);
114 assertThatThrownBy(() -> prov.createOrUpdateGroups(groups)).isInstanceOf(PfModelException.class)
115 .hasMessageContaining("pdpGroupState");
117 assertNoGroupAction();
121 public void testAddGroup() throws Exception {
122 PdpGroups groups = loadPdpGroups("createGroups.json");
123 PdpGroup group = groups.getGroups().get(0);
124 group.setPdpGroupState(PdpState.PASSIVE);
126 prov.createOrUpdateGroups(groups);
128 // should not have updated the state
129 assertEquals(PdpState.PASSIVE, group.getPdpGroupState());
131 assertSame(group, getGroupCreates().get(0));
135 public void testAddGroup_Invalid() throws Exception {
136 PdpGroups groups = loadPdpGroups("createGroups.json");
137 groups.getGroups().get(0).setPdpGroupState(PdpState.TERMINATED);
139 assertThatThrownBy(() -> prov.createOrUpdateGroups(groups)).isInstanceOf(PfModelException.class)
140 .hasMessageContaining("pdpGroupState");
142 assertNoGroupAction();
146 public void testAddGroup_InvalidSubGroup() throws Exception {
147 PdpGroups groups = loadPdpGroups("createGroups.json");
149 // policy won't match supported type
150 groups.getGroups().get(0).getPdpSubgroups().get(0).getSupportedPolicyTypes().get(0).setVersion("99.99.99");
152 assertThatThrownBy(() -> prov.createOrUpdateGroups(groups)).isInstanceOf(PfModelException.class)
153 .hasMessageContaining("supported policy");
155 assertNoGroupAction();
159 public void testValidateGroupOnly_NullState() throws PfModelException {
160 PdpGroups groups = loadPdpGroups("createGroups.json");
161 groups.getGroups().get(0).setPdpGroupState(null);
162 prov.createOrUpdateGroups(groups);
166 public void testValidateGroupOnly_Active() throws PfModelException {
167 PdpGroups groups = loadPdpGroups("createGroups.json");
168 groups.getGroups().get(0).setPdpGroupState(PdpState.ACTIVE);
169 prov.createOrUpdateGroups(groups);
173 public void testValidateGroupOnly_Passive() throws PfModelException {
174 PdpGroups groups = loadPdpGroups("createGroups.json");
175 groups.getGroups().get(0).setPdpGroupState(PdpState.PASSIVE);
176 prov.createOrUpdateGroups(groups);
180 public void testValidateGroupOnly_Invalid() {
181 PdpGroups groups = loadPdpGroups("createGroups.json");
182 groups.getGroups().get(0).setPdpGroupState(PdpState.TERMINATED);
184 assertThatThrownBy(() -> prov.createOrUpdateGroups(groups)).isInstanceOf(PfModelException.class)
185 .hasMessageContaining("pdpGroupState");
189 public void testUpdateGroup() throws Exception {
190 PdpGroups groups = loadPdpGroups("createGroups.json");
192 // DB group = new group
193 PdpGroup group = new PdpGroup(groups.getGroups().get(0));
194 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
196 prov.createOrUpdateGroups(groups);
198 assertNoGroupAction();
202 public void testUpdateGroup_PropertiesChanged() throws Exception {
203 PdpGroups groups = loadPdpGroups("createGroups.json");
205 PdpGroup group = new PdpGroup(groups.getGroups().get(0));
206 group.setProperties(new TreeMap<>());
208 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
210 assertThatThrownBy(() -> prov.createOrUpdateGroups(groups)).isInstanceOf(PfModelException.class)
211 .hasMessageContaining("properties");
213 assertNoGroupAction();
217 public void testUpdateGroup_NewDescription() throws Exception {
218 PdpGroups groups = loadPdpGroups("createGroups.json");
219 PdpGroup newgrp = groups.getGroups().get(0);
220 PdpGroup group = new PdpGroup(newgrp);
221 group.setDescription("old description");
222 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
224 prov.createOrUpdateGroups(groups);
226 assertGroupUpdateOnly(group);
228 assertEquals(group.getDescription(), "my description");
229 assertEquals(newgrp.toString(), group.toString());
233 public void testUpdateGroup_NewSubGroup() throws Exception {
234 PdpGroups groups = loadPdpGroups("createGroupsNewSub.json");
235 PdpGroup group = loadPdpGroups("createGroups.json").getGroups().get(0);
236 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
238 prov.createOrUpdateGroups(groups);
240 PdpGroup newgrp = groups.getGroups().get(0);
241 assertEquals(newgrp.toString(), group.toString());
242 assertGroupUpdateOnly(group);
246 public void testUpdateGroup_UpdatedSubGroup() throws Exception {
247 PdpGroups groups = loadPdpGroups("createGroups.json");
248 PdpGroup newgrp = groups.getGroups().get(0);
249 PdpGroup group = new PdpGroup(newgrp);
250 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
252 // something different in this subgroup
253 group.getPdpSubgroups().get(0).setDesiredInstanceCount(10);
255 prov.createOrUpdateGroups(groups);
257 assertEquals(newgrp.toString(), group.toString());
258 assertGroupUpdateOnly(group);
262 public void testUpdateGroup_notifyPdpsDelSubGroups() throws Exception {
263 PdpGroup dbgroup = new PdpGroup(loadPdpGroups("createGroupsDelSub.json").getGroups().get(0));
264 when(dao.getPdpGroups(dbgroup.getName())).thenReturn(Arrays.asList(dbgroup));
266 PdpGroups groups = loadPdpGroups("createGroups.json");
268 prov.createOrUpdateGroups(groups);
270 // verify that DB group was updated
271 List<PdpGroup> updates = getGroupUpdates();
272 assertEquals(1, updates.size());
273 dbgroup = updates.get(0);
275 PdpGroup newgrp = groups.getGroups().get(0);
277 Collections.sort(newgrp.getPdpSubgroups().get(0).getPolicies());
278 Collections.sort(dbgroup.getPdpSubgroups().get(0).getPolicies());
280 assertEquals(newgrp.toString(), dbgroup.toString());
282 // this requires a PDP UPDATE message
283 List<PdpUpdate> pdpUpdates = getUpdateRequests(2);
284 assertEquals(2, pdpUpdates.size());
286 PdpUpdate pdpUpdate = pdpUpdates.get(0);
287 assertEquals(PDP2, pdpUpdate.getName());
288 assertNull(pdpUpdate.getPdpGroup());
290 pdpUpdate = pdpUpdates.get(1);
291 assertEquals(PDP4, pdpUpdate.getName());
292 assertNull(pdpUpdate.getPdpGroup());
294 // it also requires a PDP STATE-CHANGE message
295 List<PdpStateChange> changes = getStateChangeRequests(2);
296 assertEquals(2, changes.size());
298 PdpStateChange change = changes.get(0);
299 assertEquals(PDP2, change.getName());
300 assertEquals(PdpState.PASSIVE, change.getState());
302 change = changes.get(1);
303 assertEquals(PDP4, change.getName());
304 assertEquals(PdpState.PASSIVE, change.getState());
308 public void testUpdateGroup_MultipleChanges() throws Exception {
309 PdpGroups groups = loadPdpGroups("createGroups.json");
310 PdpGroup newgrp = groups.getGroups().get(0);
311 PdpGroup group = new PdpGroup(newgrp);
312 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
314 PdpSubGroup subgrp = newgrp.getPdpSubgroups().get(0);
315 subgrp.setDesiredInstanceCount(30);
316 subgrp.getPolicies().add(new ToscaPolicyIdentifier(POLICY2_NAME, POLICY1_VERSION));
317 subgrp.getSupportedPolicyTypes().add(new ToscaPolicyTypeIdentifier("typeX", "9.8.7"));
319 when(dao.getFilteredPolicyList(any())).thenReturn(loadPolicies("daoPolicyList.json"))
320 .thenReturn(loadPolicies("createGroupNewPolicy.json"));
322 prov.createOrUpdateGroups(groups);
324 Collections.sort(newgrp.getPdpSubgroups().get(0).getPolicies());
325 Collections.sort(group.getPdpSubgroups().get(0).getPolicies());
327 assertEquals(newgrp.toString(), group.toString());
329 // this requires a PDP UPDATE message
330 assertGroupUpdate(group, subgrp);
334 public void testUpdateField_Unchanged() throws Exception {
335 PdpGroups groups = loadPdpGroups("createGroups.json");
336 PdpGroup newgrp = groups.getGroups().get(0);
337 PdpGroup group = new PdpGroup(newgrp);
338 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
340 prov.createOrUpdateGroups(groups);
342 assertNoGroupAction();
346 public void testUpdateField_WasNull() throws Exception {
347 PdpGroups groups = loadPdpGroups("createGroups.json");
348 PdpGroup newgrp = groups.getGroups().get(0);
349 PdpGroup group = new PdpGroup(newgrp);
350 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
352 group.setDescription(null);
354 prov.createOrUpdateGroups(groups);
356 assertEquals(newgrp.toString(), group.toString());
357 assertGroupUpdateOnly(group);
361 public void testUpdateField_NowNull() throws Exception {
362 PdpGroups groups = loadPdpGroups("createGroups.json");
363 PdpGroup newgrp = groups.getGroups().get(0);
364 PdpGroup group = new PdpGroup(newgrp);
365 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
367 newgrp.setDescription(null);
369 prov.createOrUpdateGroups(groups);
371 assertEquals(newgrp.toString(), group.toString());
372 assertGroupUpdateOnly(group);
376 public void testUpdateField_Changed() throws Exception {
377 PdpGroups groups = loadPdpGroups("createGroups.json");
378 PdpGroup newgrp = groups.getGroups().get(0);
379 PdpGroup group = new PdpGroup(newgrp);
380 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
382 newgrp.setDescription(group.getDescription() + "-changed");
384 prov.createOrUpdateGroups(groups);
386 assertEquals(newgrp.toString(), group.toString());
387 assertGroupUpdateOnly(group);
391 public void testAddSubGroup() throws Exception {
392 PdpGroups groups = loadPdpGroups("createGroupsNewSub.json");
393 PdpGroup group = loadPdpGroups("createGroups.json").getGroups().get(0);
394 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
396 prov.createOrUpdateGroups(groups);
398 PdpGroup newgrp = groups.getGroups().get(0);
400 PdpSubGroup newsub = newgrp.getPdpSubgroups().get(1);
401 newsub.setCurrentInstanceCount(0);
402 newsub.setPdpInstances(new ArrayList<>(0));
404 assertEquals(newgrp.toString(), group.toString());
405 assertGroupUpdateOnly(group);
409 public void testAddSubGroup_ValidationPolicyTypeNotFound() throws Exception {
410 PdpGroups groups = loadPdpGroups("createGroupsNewSub.json");
411 PdpGroup group = loadPdpGroups("createGroups.json").getGroups().get(0);
412 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
414 when(dao.getPolicyTypeList(any(), any())).thenReturn(Collections.emptyList());
416 assertThatThrownBy(() -> prov.createOrUpdateGroups(groups)).hasMessageContaining("unknown policy type");
420 public void testAddSubGroup_ValidationPolicyTypeDaoEx() throws Exception {
421 PdpGroups groups = loadPdpGroups("createGroupsNewSub.json");
422 PdpGroup group = loadPdpGroups("createGroups.json").getGroups().get(0);
423 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
425 PfModelException exc = new PfModelException(Status.CONFLICT, EXPECTED_EXCEPTION);
426 when(dao.getPolicyTypeList(any(), any())).thenThrow(exc);
428 assertThatThrownBy(() -> prov.createOrUpdateGroups(groups)).isSameAs(exc);
432 public void testAddSubGroup_ValidationPolicyNotFound() throws Exception {
433 PdpGroups groups = loadPdpGroups("createGroupsNewSub.json");
434 PdpGroup group = loadPdpGroups("createGroups.json").getGroups().get(0);
435 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
437 when(dao.getFilteredPolicyList(any())).thenReturn(Collections.emptyList());
439 assertThatThrownBy(() -> prov.createOrUpdateGroups(groups)).hasMessageContaining("unknown policy");
443 public void testAddSubGroup_ValidationPolicyDaoEx() throws Exception {
444 PdpGroups groups = loadPdpGroups("createGroupsNewSub.json");
445 PdpGroup group = loadPdpGroups("createGroups.json").getGroups().get(0);
446 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
448 PfModelException exc = new PfModelException(Status.CONFLICT, EXPECTED_EXCEPTION);
449 when(dao.getFilteredPolicyList(any())).thenThrow(exc);
451 assertThatThrownBy(() -> prov.createOrUpdateGroups(groups)).isSameAs(exc);
455 public void testUpdateSubGroup_Invalid() throws Exception {
456 PdpGroups groups = loadPdpGroups("createGroups.json");
457 PdpGroup newgrp = groups.getGroups().get(0);
458 PdpGroup group = new PdpGroup(newgrp);
459 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
462 newgrp.getPdpSubgroups().get(0).setProperties(new TreeMap<>());
464 assertThatThrownBy(() -> prov.createOrUpdateGroups(groups)).isInstanceOf(PfModelException.class)
465 .hasMessageContaining("properties");
467 assertNoGroupAction();
471 public void testUpdateSubGroup_SupportedPolicies() throws Exception {
472 PdpGroups groups = loadPdpGroups("createGroups.json");
473 PdpGroup newgrp = groups.getGroups().get(0);
474 PdpGroup group = new PdpGroup(newgrp);
475 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
477 newgrp.getPdpSubgroups().get(0).getSupportedPolicyTypes().add(new ToscaPolicyTypeIdentifier("typeX", "9.8.7"));
479 prov.createOrUpdateGroups(groups);
481 assertEquals(newgrp.toString(), group.toString());
482 assertGroupUpdateOnly(group);
486 public void testUpdateSubGroup_DesiredCount() throws Exception {
487 PdpGroups groups = loadPdpGroups("createGroups.json");
488 PdpGroup newgrp = groups.getGroups().get(0);
489 PdpGroup group = new PdpGroup(newgrp);
490 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
492 newgrp.getPdpSubgroups().get(0).setDesiredInstanceCount(20);
494 prov.createOrUpdateGroups(groups);
496 assertEquals(newgrp.toString(), group.toString());
497 assertGroupUpdateOnly(group);
501 public void testUpdateSubGroup_Policies() throws Exception {
502 PdpGroups groups = loadPdpGroups("createGroups.json");
503 PdpGroup newgrp = groups.getGroups().get(0);
504 PdpGroup group = new PdpGroup(newgrp);
505 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
507 PdpSubGroup subgrp = newgrp.getPdpSubgroups().get(0);
508 subgrp.getPolicies().add(new ToscaPolicyIdentifier(POLICY2_NAME, POLICY1_VERSION));
510 when(dao.getFilteredPolicyList(any())).thenReturn(loadPolicies("daoPolicyList.json"))
511 .thenReturn(loadPolicies("createGroupNewPolicy.json"));
513 prov.createOrUpdateGroups(groups);
515 Collections.sort(newgrp.getPdpSubgroups().get(0).getPolicies());
516 Collections.sort(group.getPdpSubgroups().get(0).getPolicies());
518 assertEquals(newgrp.toString(), group.toString());
520 // this requires a PDP UPDATE message
521 assertGroupUpdate(group, subgrp);
525 public void testUpdateSubGroup_PolicyVersionMismatch() throws Exception {
526 PdpGroups groups = loadPdpGroups("createGroups.json");
527 PdpGroup newgrp = groups.getGroups().get(0);
528 PdpGroup dbgroup = new PdpGroup(newgrp);
529 when(dao.getPdpGroups(dbgroup.getName())).thenReturn(Arrays.asList(dbgroup));
531 // arrange for DB policy version to be different
532 PdpSubGroup dbsubgrp = dbgroup.getPdpSubgroups().get(0);
533 dbsubgrp.getPolicies().get(0).setVersion("9.9.9");
535 when(dao.getFilteredPolicyList(any())).thenReturn(loadPolicies("daoPolicyList.json"));
537 assertThatThrownBy(() -> prov.createOrUpdateGroups(groups)).isInstanceOf(PfModelException.class)
538 .hasMessageContaining("different version already deployed");
540 assertNoGroupAction();
544 public void testValidateSubGroup_PropertiesMismatch() throws Exception {
545 PdpGroups groups = loadPdpGroups("createGroups.json");
546 PdpGroup newgrp = groups.getGroups().get(0);
547 PdpGroup group = new PdpGroup(newgrp);
548 when(dao.getPdpGroups(group.getName())).thenReturn(Arrays.asList(group));
550 newgrp.setProperties(new TreeMap<>());
552 assertThatThrownBy(() -> prov.createOrUpdateGroups(groups)).isInstanceOf(PfModelException.class)
553 .hasMessageContaining("properties");
555 assertNoGroupAction();
559 public void testDeployPolicies() throws PfModelException {
560 prov.deployPolicies(loadEmptyRequest());
564 public void testDeploySimplePolicies() throws Exception {
565 prov.deployPolicies(loadEmptyRequest());
569 public void testDeploySimplePolicies_DaoEx() throws Exception {
570 PfModelException exc = new PfModelException(Status.BAD_REQUEST, EXPECTED_EXCEPTION);
571 when(dao.getFilteredPdpGroups(any())).thenThrow(exc);
573 assertThatThrownBy(() -> prov.deployPolicies(loadRequest())).isSameAs(exc);
577 public void testDeploySimplePolicies_DaoPfRtEx() throws Exception {
578 PfModelRuntimeException exc = new PfModelRuntimeException(Status.BAD_REQUEST, EXPECTED_EXCEPTION);
579 when(dao.getFilteredPdpGroups(any())).thenThrow(exc);
581 assertThatThrownBy(() -> prov.deployPolicies(loadRequest())).isSameAs(exc);
585 public void testDeploySimplePolicies_RuntimeEx() throws Exception {
586 RuntimeException exc = new RuntimeException(EXPECTED_EXCEPTION);
587 when(dao.getFilteredPolicyList(any())).thenThrow(exc);
589 assertThatThrownBy(() -> prov.deployPolicies(loadRequest())).isInstanceOf(PfModelException.class).hasCause(exc);
593 public void testDeploySimplePolicies_NoGroups() throws Exception {
594 when(dao.getFilteredPdpGroups(any())).thenReturn(loadGroups("emptyGroups.json"));
596 assertThatThrownBy(() -> prov.deployPolicies(loadRequest())).isInstanceOf(PfModelException.class)
597 .hasMessage("policy not supported by any PDP group: policyA 1.2.3");
601 public void testMakeUpdater() throws Exception {
603 * Each subgroup has a different PDP type and name.
605 * Type is not supported by the first subgroup.
607 * Second subgroup matches.
609 * Third subgroup already contains the policy.
611 * Last subgroup matches.
614 when(dao.getFilteredPdpGroups(any())).thenReturn(loadGroups("upgradeGroupDao.json"));
616 prov.deployPolicies(loadRequest());
618 assertGroup(getGroupUpdates(), GROUP1_NAME);
620 List<PdpUpdate> requests = getUpdateRequests(2);
621 assertUpdate(requests, GROUP1_NAME, PDP2_TYPE, PDP2);
622 assertUpdate(requests, GROUP1_NAME, PDP4_TYPE, PDP4);
626 public void testMakeUpdater_PolicyVersionMismatch() throws Exception {
628 // subgroup has a different version of the Policy
629 when(dao.getFilteredPdpGroups(any())).thenReturn(loadGroups("upgradeGroupDao_DiffVers.json"));
631 assertThatThrownBy(() -> prov.deployPolicies(loadRequest())).isInstanceOf(PfModelRuntimeException.class)
632 .hasMessageContaining("pdpTypeC").hasMessageContaining("different version already deployed");
634 verify(dao, never()).createPdpGroups(any());
635 verify(dao, never()).updatePdpGroups(any());
636 verify(reqmap, never()).addRequest(any(PdpUpdate.class));
640 public void testMakeUpdater_NoPdps() throws Exception {
642 // subgroup has no PDPs
643 when(dao.getFilteredPdpGroups(any())).thenReturn(loadGroups("upgradeGroup_NoPdpsDao.json"));
645 assertThatThrownBy(() -> prov.deployPolicies(loadRequest())).isInstanceOf(PfModelRuntimeException.class)
646 .hasMessage("group " + GROUP1_NAME + " subgroup " + PDP1_TYPE + " has no active PDPs");
648 verify(dao, never()).createPdpGroups(any());
649 verify(dao, never()).updatePdpGroups(any());
650 verify(reqmap, never()).addRequest(any(PdpUpdate.class));
654 protected void assertUpdate(List<PdpUpdate> updates, String groupName, String pdpType, String pdpName) {
656 PdpUpdate update = updates.remove(0);
658 assertEquals(groupName, update.getPdpGroup());
659 assertEquals(pdpType, update.getPdpSubgroup());
660 assertEquals(pdpName, update.getName());
661 assertTrue(update.getPolicies().contains(policy1));
664 private void assertNoGroupAction() throws Exception {
665 verify(dao, never()).createPdpGroups(any());
666 verify(dao, never()).updatePdpGroups(any());
667 verify(reqmap, never()).addRequest(any(), any());
670 private void assertGroupUpdate(PdpGroup group, PdpSubGroup subgrp) throws Exception {
671 verify(dao, never()).createPdpGroups(any());
673 assertEquals(0, getStateChangeRequests(1).size());
675 List<PdpUpdate> pdpUpdates = getUpdateRequests(1);
676 assertEquals(1, pdpUpdates.size());
678 PdpUpdate pdpUpdate = pdpUpdates.get(0);
679 assertEquals("pdpA", pdpUpdate.getName());
680 assertEquals(group.getName(), pdpUpdate.getPdpGroup());
682 assertEquals(subgrp.getPdpType(), pdpUpdate.getPdpSubgroup());
684 List<ToscaPolicyIdentifier> pdpPolicies =
685 pdpUpdate.getPolicies().stream().map(ToscaPolicy::getIdentifier).collect(Collectors.toList());
686 Collections.sort(pdpPolicies);
688 assertEquals(subgrp.getPolicies().toString(), pdpPolicies.toString());
690 List<PdpGroup> updates = getGroupUpdates();
691 assertEquals(Arrays.asList(group), updates);
694 private void assertGroupUpdateOnly(PdpGroup group) throws Exception {
695 verify(dao, never()).createPdpGroups(any());
696 verify(reqmap, never()).addRequest(any(), any());
698 List<PdpGroup> updates = getGroupUpdates();
699 assertEquals(Arrays.asList(group), updates);
703 * Loads a standard request.
705 * @return a standard request
707 protected PdpDeployPolicies loadRequest() {
708 return loadRequest("request.json");
712 * Loads a request from a JSON file.
714 * @param fileName name of the file from which to load
715 * @return the request that was loaded
717 protected PdpDeployPolicies loadRequest(String fileName) {
718 return loadFile(fileName, PdpDeployPolicies.class);
722 * Loads an empty request.
724 * @return an empty request
726 protected PdpDeployPolicies loadEmptyRequest() {
727 return loadRequest("emptyRequest.json");