diff options
5 files changed, 35 insertions, 25 deletions
diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpUpdate.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpUpdate.java index 0c088b87e..19f79ee88 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpUpdate.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpUpdate.java @@ -52,14 +52,6 @@ public class PdpUpdate extends PdpMessage { private Long pdpHeartbeatIntervalMs; /** - * Policies that the PDP should deploy. This is a complete list, so PDPs should be - * prepared to deploy new policies listed and undeploy policies that are no longer - * listed. Note: this list may be empty, as a PDP may remain attached to a subgroup - * even if all of the policies are removed from the subgroup. - */ - private List<ToscaPolicy> policies = new LinkedList<>(); - - /** * Policies that the PDP should deploy. */ private List<ToscaPolicy> policiesToBeDeployed = new LinkedList<>(); @@ -87,7 +79,9 @@ public class PdpUpdate extends PdpMessage { this.description = source.description; this.pdpHeartbeatIntervalMs = source.pdpHeartbeatIntervalMs; - this.policies = (source.policies == null ? null - : source.policies.stream().map(ToscaPolicy::new).collect(Collectors.toList())); + this.policiesToBeDeployed = (source.policiesToBeDeployed == null ? null + : source.policiesToBeDeployed.stream().map(ToscaPolicy::new).collect(Collectors.toList())); + this.policiesToBeUndeployed = (source.policiesToBeUndeployed == null ? null + : source.policiesToBeUndeployed.stream().map(ToscaConceptIdentifier::new).collect(Collectors.toList())); } } diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/concepts/PdpUpdateTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/concepts/PdpUpdateTest.java index c37979f81..a24b410ae 100644 --- a/models-pdp/src/test/java/org/onap/policy/models/pdp/concepts/PdpUpdateTest.java +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/concepts/PdpUpdateTest.java @@ -3,7 +3,7 @@ * ONAP Policy Models * ================================================================================ * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. - * Modifications Copyright (C) 2019 Nordix Foundation. + * Modifications Copyright (C) 2019-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ import static org.onap.policy.models.pdp.concepts.PdpMessageUtils.removeVariable import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import org.junit.Test; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; @@ -41,7 +42,8 @@ public class PdpUpdateTest { assertThatThrownBy(() -> new PdpUpdate(null)).isInstanceOf(NullPointerException.class); PdpUpdate orig = new PdpUpdate(); - orig.setPolicies(null); + orig.setPoliciesToBeDeployed(null); + orig.setPoliciesToBeUndeployed(null); // verify with null values assertEquals(removeVariableFields(orig.toString()), removeVariableFields(new PdpUpdate(orig).toString())); @@ -62,14 +64,17 @@ public class PdpUpdateTest { policy2.setVersion("4.5.6"); List<ToscaPolicy> policies = Arrays.asList(policy1, policy2); - orig.setPolicies(policies); + orig.setPoliciesToBeDeployed(policies); + orig.setPoliciesToBeUndeployed(policies.stream().map(ToscaPolicy::getIdentifier).collect(Collectors.toList())); PdpUpdate other = new PdpUpdate(orig); assertEquals(removeVariableFields(orig.toString()), removeVariableFields(other.toString())); // ensure list and items are not the same object - assertNotSame(other.getPolicies(), policies); - assertNotSame(other.getPolicies().get(0), policies.get(0)); + assertNotSame(other.getPoliciesToBeDeployed(), policies); + assertNotSame(other.getPoliciesToBeDeployed().get(0), policies.get(0)); + assertNotSame(other.getPoliciesToBeUndeployed(), policies); + assertNotSame(other.getPoliciesToBeUndeployed().get(0), policies.get(0)); } } diff --git a/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpUpdateMessageHandler.java b/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpUpdateMessageHandler.java index 2262ee938..a90f74fba 100644 --- a/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpUpdateMessageHandler.java +++ b/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpUpdateMessageHandler.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,7 +21,9 @@ package org.onap.policy.models.sim.pdp.handler; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import org.onap.policy.common.endpoints.event.comm.TopicSink; import org.onap.policy.common.utils.services.Registry; import org.onap.policy.models.pdp.concepts.PdpResponseDetails; @@ -31,6 +33,7 @@ import org.onap.policy.models.pdp.enums.PdpResponseStatus; import org.onap.policy.models.pdp.enums.PdpState; import org.onap.policy.models.sim.pdp.PdpSimulatorConstants; import org.onap.policy.models.sim.pdp.comm.PdpStatusPublisher; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; /** * This class supports the handling of pdp update messages. @@ -62,13 +65,19 @@ public class PdpUpdateMessageHandler { } pdpStatusContext.setPdpGroup(pdpUpdateMsg.getPdpGroup()); pdpStatusContext.setPdpSubgroup(pdpUpdateMsg.getPdpSubgroup()); - pdpStatusContext - .setPolicies(new PdpMessageHandler().getToscaPolicyIdentifiers(pdpUpdateMsg.getPolicies())); - if (pdpStatusContext.getState().equals(PdpState.ACTIVE) && !pdpUpdateMsg.getPolicies().isEmpty()) { + @SuppressWarnings("unchecked") + List<ToscaPolicy> policies = Registry.getOrDefault(PdpSimulatorConstants.REG_PDP_TOSCA_POLICY_LIST, + List.class, new ArrayList<>()); + policies.addAll(pdpUpdateMsg.getPoliciesToBeDeployed()); + policies.removeIf(policy -> pdpUpdateMsg.getPoliciesToBeUndeployed().contains(policy.getIdentifier())); + pdpStatusContext.setPolicies(policies.stream().map(ToscaPolicy::getIdentifier) + .collect(Collectors.toList())); + if (pdpStatusContext.getState().equals(PdpState.ACTIVE) + && !pdpUpdateMsg.getPoliciesToBeDeployed().isEmpty()) { pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(), PdpResponseStatus.SUCCESS, "Pdp engine started and policies are running."); } - Registry.registerOrReplace(PdpSimulatorConstants.REG_PDP_TOSCA_POLICY_LIST, pdpUpdateMsg.getPolicies()); + Registry.registerOrReplace(PdpSimulatorConstants.REG_PDP_TOSCA_POLICY_LIST, policies); if (null == pdpResponseDetails) { pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(), PdpResponseStatus.SUCCESS, "Pdp update successful."); @@ -102,8 +111,10 @@ public class PdpUpdateMessageHandler { return false; } - return null != pdpStatusContext.getPolicies() && new PdpMessageHandler() - .getToscaPolicyIdentifiers(pdpUpdateMsg.getPolicies()).equals(pdpStatusContext.getPolicies()); + return null != pdpStatusContext.getPolicies() && (pdpStatusContext.getPolicies() + .containsAll(new PdpMessageHandler().getToscaPolicyIdentifiers( + pdpUpdateMsg.getPoliciesToBeDeployed()))) && pdpStatusContext.getPolicies() + .stream().noneMatch(pdpUpdateMsg.getPoliciesToBeUndeployed()::contains); } /** diff --git a/models-sim/policy-models-sim-pdp/src/test/java/org/onap/policy/models/sim/pdp/comm/TestPdpStateChangeListener.java b/models-sim/policy-models-sim-pdp/src/test/java/org/onap/policy/models/sim/pdp/comm/TestPdpStateChangeListener.java index 93015e94e..20c9cc1b0 100644 --- a/models-sim/policy-models-sim-pdp/src/test/java/org/onap/policy/models/sim/pdp/comm/TestPdpStateChangeListener.java +++ b/models-sim/policy-models-sim-pdp/src/test/java/org/onap/policy/models/sim/pdp/comm/TestPdpStateChangeListener.java @@ -133,7 +133,7 @@ public class TestPdpStateChangeListener { toscaPolicy.setProperties(propertiesMap); final List<ToscaPolicy> toscaPolicies = new ArrayList<>(); toscaPolicies.add(toscaPolicy); - pdpUpdateMsg.setPolicies(toscaPolicies); + pdpUpdateMsg.setPoliciesToBeDeployed(toscaPolicies); pdpUpdateMessageListener.onTopicEvent(INFRA, TOPIC, null, pdpUpdateMsg); return pdpUpdateMsg; } diff --git a/models-sim/policy-models-sim-pdp/src/test/java/org/onap/policy/models/sim/pdp/comm/TestPdpUpdateListener.java b/models-sim/policy-models-sim-pdp/src/test/java/org/onap/policy/models/sim/pdp/comm/TestPdpUpdateListener.java index 7bf70ddc1..0827f2619 100644 --- a/models-sim/policy-models-sim-pdp/src/test/java/org/onap/policy/models/sim/pdp/comm/TestPdpUpdateListener.java +++ b/models-sim/policy-models-sim-pdp/src/test/java/org/onap/policy/models/sim/pdp/comm/TestPdpUpdateListener.java @@ -125,11 +125,11 @@ public class TestPdpUpdateListener { toscaPolicy.setProperties(propertiesMap); final List<ToscaPolicy> toscaPolicies = new ArrayList<>(); toscaPolicies.add(toscaPolicy); - pdpUpdateMsg.setPolicies(toscaPolicies); + pdpUpdateMsg.setPoliciesToBeDeployed(toscaPolicies); pdpUpdateMessageListener.onTopicEvent(INFRA, TOPIC, null, pdpUpdateMsg); assertEquals(pdpStatus.getPdpGroup(), pdpUpdateMsg.getPdpGroup()); assertEquals(pdpStatus.getPdpSubgroup(), pdpUpdateMsg.getPdpSubgroup()); assertEquals(pdpStatus.getPolicies(), - new PdpMessageHandler().getToscaPolicyIdentifiers(pdpUpdateMsg.getPolicies())); + new PdpMessageHandler().getToscaPolicyIdentifiers(pdpUpdateMsg.getPoliciesToBeDeployed())); } } |