summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2019-06-07 11:33:59 -0400
committerJim Hahn <jrh3@att.com>2019-06-07 11:52:37 -0400
commitde6a7d44138a968b798eab678f20885e7d48ebc9 (patch)
tree778941f47eb01cabeb200eeff02fb79a340fcd2d
parent9f41ede37c78dd5dcea1851e114b7bdf9a5df7a5 (diff)
Undeploy all versions of a policy
Modified the code to undeploy all versions of a policy if the version is not specified. Change-Id: Ic3815733b918e1cff8f381d54bceb710a35319b7 Issue-ID: POLICY-1782 Signed-off-by: Jim Hahn <jrh3@att.com>
-rw-r--r--main/src/main/java/org/onap/policy/pap/main/rest/depundep/PdpGroupDeleteProvider.java40
-rw-r--r--main/src/main/java/org/onap/policy/pap/main/rest/depundep/PdpGroupDeployProvider.java4
-rw-r--r--main/src/main/java/org/onap/policy/pap/main/rest/depundep/ProviderBase.java6
-rw-r--r--main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteProvider.java34
-rw-r--r--main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestProviderBase.java4
5 files changed, 69 insertions, 19 deletions
diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/depundep/PdpGroupDeleteProvider.java b/main/src/main/java/org/onap/policy/pap/main/rest/depundep/PdpGroupDeleteProvider.java
index 7a3190be..0ca32451 100644
--- a/main/src/main/java/org/onap/policy/pap/main/rest/depundep/PdpGroupDeleteProvider.java
+++ b/main/src/main/java/org/onap/policy/pap/main/rest/depundep/PdpGroupDeleteProvider.java
@@ -20,7 +20,9 @@
package org.onap.policy.pap.main.rest.depundep;
+import java.util.Iterator;
import java.util.function.BiFunction;
+import java.util.function.Predicate;
import javax.ws.rs.core.Response.Status;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.pdp.concepts.PdpGroup;
@@ -117,20 +119,42 @@ public class PdpGroupDeleteProvider extends ProviderBase {
}
/**
- * Returns a function that will remove the specified policy from a subgroup.
+ * Returns a function that will remove the desired policy from a subgroup.
*/
@Override
- protected BiFunction<PdpGroup, PdpSubGroup, Boolean> makeUpdater(ToscaPolicy policy) {
- ToscaPolicyIdentifier desiredIdent = policy.getIdentifier();
+ protected BiFunction<PdpGroup, PdpSubGroup, Boolean> makeUpdater(ToscaPolicy policy,
+ ToscaPolicyIdentifierOptVersion desiredIdent) {
- // remove the policy from the subgroup
+ // construct a matcher based on whether or not the version was specified
+ Predicate<ToscaPolicyIdentifier> matcher;
+
+ if (desiredIdent.getVersion() != null) {
+ // version was specified - match the whole identifier
+ matcher = policy.getIdentifier()::equals;
+
+ } else {
+ // version was not specified - match the name only
+ String desnm = desiredIdent.getName();
+ matcher = ident -> ident.getName().equals(desnm);
+ }
+
+
+ // return a function that will remove the policy from the subgroup
return (group, subgroup) -> {
- boolean result = subgroup.getPolicies().remove(desiredIdent);
+ boolean result = false;
+
+ Iterator<ToscaPolicyIdentifier> iter = subgroup.getPolicies().iterator();
+ while (iter.hasNext()) {
+ ToscaPolicyIdentifier ident = iter.next();
- logger.info("remove policy {} {} from subgroup {} {} count={}", desiredIdent.getName(),
- desiredIdent.getVersion(), group.getName(), subgroup.getPdpType(),
- subgroup.getPolicies().size());
+ if (matcher.test(ident)) {
+ result = true;
+ iter.remove();
+ logger.info("remove policy {} {} from subgroup {} {} count={}", ident.getName(), ident.getVersion(),
+ group.getName(), subgroup.getPdpType(), subgroup.getPolicies().size());
+ }
+ }
return result;
};
diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/depundep/PdpGroupDeployProvider.java b/main/src/main/java/org/onap/policy/pap/main/rest/depundep/PdpGroupDeployProvider.java
index e30bf63d..e861375e 100644
--- a/main/src/main/java/org/onap/policy/pap/main/rest/depundep/PdpGroupDeployProvider.java
+++ b/main/src/main/java/org/onap/policy/pap/main/rest/depundep/PdpGroupDeployProvider.java
@@ -523,7 +523,9 @@ public class PdpGroupDeployProvider extends ProviderBase {
* Adds a policy to a subgroup, if it isn't there already.
*/
@Override
- protected BiFunction<PdpGroup, PdpSubGroup, Boolean> makeUpdater(ToscaPolicy policy) {
+ protected BiFunction<PdpGroup, PdpSubGroup, Boolean> makeUpdater(ToscaPolicy policy,
+ ToscaPolicyIdentifierOptVersion requestedIdent) {
+
ToscaPolicyIdentifier desiredIdent = policy.getIdentifier();
ToscaPolicyTypeIdentifier desiredType = policy.getTypeIdentifier();
diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/depundep/ProviderBase.java b/main/src/main/java/org/onap/policy/pap/main/rest/depundep/ProviderBase.java
index d3f0d13e..70ccd7ab 100644
--- a/main/src/main/java/org/onap/policy/pap/main/rest/depundep/ProviderBase.java
+++ b/main/src/main/java/org/onap/policy/pap/main/rest/depundep/ProviderBase.java
@@ -140,7 +140,7 @@ public abstract class ProviderBase {
+ desiredPolicy.getName() + " " + desiredPolicy.getVersion());
}
- BiFunction<PdpGroup, PdpSubGroup, Boolean> updater = makeUpdater(policy);
+ BiFunction<PdpGroup, PdpSubGroup, Boolean> updater = makeUpdater(policy, desiredPolicy);
for (PdpGroup group : groups) {
upgradeGroup(data, group, updater);
@@ -153,9 +153,11 @@ public abstract class ProviderBase {
* necessary/appropriate.
*
* @param policy policy to be added to or removed from each subgroup
+ * @param desiredPolicy request policy
* @return a function to update a subgroup
*/
- protected abstract BiFunction<PdpGroup, PdpSubGroup, Boolean> makeUpdater(ToscaPolicy policy);
+ protected abstract BiFunction<PdpGroup, PdpSubGroup, Boolean> makeUpdater(ToscaPolicy policy,
+ ToscaPolicyIdentifierOptVersion desiredPolicy);
/**
* Finds the active PDP group(s) that supports the given policy type.
diff --git a/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteProvider.java b/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteProvider.java
index 8ef9b653..a577e07b 100644
--- a/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteProvider.java
+++ b/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteProvider.java
@@ -56,6 +56,7 @@ public class TestPdpGroupDeleteProvider extends ProviderSuper {
private MyProvider prov;
private SessionData session;
private ToscaPolicyIdentifierOptVersion optIdent;
+ private ToscaPolicyIdentifierOptVersion fullIdent;
private ToscaPolicyIdentifier ident;
private BiFunction<PdpGroup, PdpSubGroup, Boolean> updater;
@@ -78,10 +79,11 @@ public class TestPdpGroupDeleteProvider extends ProviderSuper {
session = mock(SessionData.class);
ident = policy1.getIdentifier();
optIdent = new ToscaPolicyIdentifierOptVersion(ident.getName(), null);
+ fullIdent = new ToscaPolicyIdentifierOptVersion(ident.getName(), ident.getVersion());
prov = new MyProvider();
- updater = prov.makeUpdater(policy1);
+ updater = prov.makeUpdater(policy1, fullIdent);
}
@Test
@@ -163,7 +165,7 @@ public class TestPdpGroupDeleteProvider extends ProviderSuper {
when(dao.getFilteredPdpGroups(any())).thenReturn(Arrays.asList(group));
when(dao.getFilteredPolicyList(any())).thenReturn(Arrays.asList(policy1));
- new PdpGroupDeleteProvider().undeploy(optIdent);
+ new PdpGroupDeleteProvider().undeploy(fullIdent);
// should have updated the old group
List<PdpGroup> updates = getGroupUpdates();
@@ -171,7 +173,7 @@ public class TestPdpGroupDeleteProvider extends ProviderSuper {
assertSame(group, updates.get(0));
assertEquals(PdpState.ACTIVE, group.getPdpGroupState());
- // should be one less item in the new group
+ // should be one less item in the new subgroup
assertEquals(2, group.getPdpSubgroups().get(0).getPolicies().size());
// should have updated the PDPs
@@ -213,17 +215,16 @@ public class TestPdpGroupDeleteProvider extends ProviderSuper {
}
@Test
- public void testMakeUpdater() {
+ public void testMakeUpdater_WithVersion() {
/*
- * this group has one policy with a different name, one matching policy, and one
- * with a different version.
+ * this group has two matching policies and one policy with a different name.
*/
PdpGroup group = loadGroup("undeploy.json");
PdpSubGroup subgroup = group.getPdpSubgroups().get(0);
int origSize = subgroup.getPolicies().size();
- // invoke updater
+ // invoke updater - matching both name and version
assertTrue(updater.apply(group, subgroup));
// identified policy should have been removed
@@ -232,6 +233,25 @@ public class TestPdpGroupDeleteProvider extends ProviderSuper {
}
@Test
+ public void testMakeUpdater_NullVersion() {
+ /*
+ * this group has two matching policies and one policy with a different name.
+ */
+ PdpGroup group = loadGroup("undeploy.json");
+
+ PdpSubGroup subgroup = group.getPdpSubgroups().get(0);
+ int origSize = subgroup.getPolicies().size();
+
+ // invoke updater - matching the name, but with a null (i.e., wild-card) version
+ updater = prov.makeUpdater(policy1, optIdent);
+ assertTrue(updater.apply(group, subgroup));
+
+ // identified policy should have been removed
+ assertEquals(origSize - 2, subgroup.getPolicies().size());
+ assertFalse(subgroup.getPolicies().contains(ident));
+ }
+
+ @Test
public void testMakeUpdater_NotFound() {
/*
* this group has one policy with a different name and one with a different
diff --git a/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestProviderBase.java b/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestProviderBase.java
index c171e946..3a91363f 100644
--- a/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestProviderBase.java
+++ b/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestProviderBase.java
@@ -345,7 +345,9 @@ public class TestProviderBase extends ProviderSuper {
}
@Override
- protected BiFunction<PdpGroup, PdpSubGroup, Boolean> makeUpdater(ToscaPolicy policy) {
+ protected BiFunction<PdpGroup, PdpSubGroup, Boolean> makeUpdater(ToscaPolicy policy,
+ ToscaPolicyIdentifierOptVersion desiredPolicy) {
+
return (group, subgroup) -> {
if (shouldUpdate.remove()) {
// queue indicated that the update should succeed