summaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2019-04-10 12:08:53 -0400
committerJim Hahn <jrh3@att.com>2019-04-10 12:42:18 -0400
commit1da30647745a9d3dfa744cacef56400c2aaeab03 (patch)
tree6c2606d4f5ce5a4d2c6aa16d12c9df95dd63beab /main
parentb793c0cedf08d44de56073d24256567f50dcd1c3 (diff)
Add junit tests for PdpGroupDeleteProvider
Change-Id: Id744a7d49b9fb608ba3379dd43bcbd6a0297891f Issue-ID: POLICY-1541 Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'main')
-rw-r--r--main/src/main/java/org/onap/policy/pap/main/rest/depundep/PdpGroupDeleteProvider.java13
-rw-r--r--main/src/test/java/org/onap/policy/pap/main/rest/depundep/ProviderSuper.java25
-rw-r--r--main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteControllerV1.java18
-rw-r--r--main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteProvider.java237
-rw-r--r--main/src/test/resources/simpleDeploy/undeploy.json35
-rw-r--r--main/src/test/resources/simpleDeploy/undeployMakeUpdaterGroupNotFound.json30
6 files changed, 339 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 d5acc624..6457efae 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
@@ -58,7 +58,10 @@ public class PdpGroupDeleteProvider extends ProviderBase<PdpGroupDeleteResponse>
*/
public Pair<Response.Status, PdpGroupDeleteResponse> deleteGroup(String groupName, String version) {
- return Pair.of(Response.Status.OK, new PdpGroupDeleteResponse());
+ PdpGroupDeleteResponse resp = new PdpGroupDeleteResponse();
+ resp.setErrorDetails("not implemented yet");
+
+ return Pair.of(Response.Status.INTERNAL_SERVER_ERROR, resp);
}
/**
@@ -107,14 +110,8 @@ public class PdpGroupDeleteProvider extends ProviderBase<PdpGroupDeleteResponse>
return (group, subgroup) -> {
- if (!subgroup.getPolicies().contains(desiredIdent)) {
- // doesn't have the policy
- return false;
- }
-
// remove the policy from the subgroup
- subgroup.getPolicies().remove(desiredIdent);
- return true;
+ return subgroup.getPolicies().remove(desiredIdent);
};
}
}
diff --git a/main/src/test/java/org/onap/policy/pap/main/rest/depundep/ProviderSuper.java b/main/src/test/java/org/onap/policy/pap/main/rest/depundep/ProviderSuper.java
index a1e69565..4cc69176 100644
--- a/main/src/test/java/org/onap/policy/pap/main/rest/depundep/ProviderSuper.java
+++ b/main/src/test/java/org/onap/policy/pap/main/rest/depundep/ProviderSuper.java
@@ -42,6 +42,7 @@ import org.onap.policy.common.utils.coder.StandardCoder;
import org.onap.policy.common.utils.resources.ResourceUtils;
import org.onap.policy.common.utils.services.Registry;
import org.onap.policy.models.pdp.concepts.PdpGroup;
+import org.onap.policy.models.pdp.concepts.PdpGroups;
import org.onap.policy.models.pdp.concepts.PdpUpdate;
import org.onap.policy.models.provider.PolicyModelsProvider;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
@@ -91,7 +92,7 @@ public class ProviderSuper {
lockit = new Object();
daofact = mock(PolicyModelsProviderFactoryWrapper.class);
- policy1 = loadFile("policy.json", ToscaPolicy.class);
+ policy1 = loadPolicy("policy.json");
when(daofact.create()).thenReturn(dao);
@@ -180,7 +181,17 @@ public class ProviderSuper {
* @return a list of groups
*/
protected List<PdpGroup> loadGroups(String fileName) {
- return loadFile(fileName, org.onap.policy.models.pdp.concepts.PdpGroups.class).getGroups();
+ return loadFile(fileName, PdpGroups.class).getGroups();
+ }
+
+ /**
+ * Loads a group.
+ *
+ * @param fileName name of the file from which to load
+ * @return a group
+ */
+ protected PdpGroup loadGroup(String fileName) {
+ return loadFile(fileName, PdpGroup.class);
}
/**
@@ -194,6 +205,16 @@ public class ProviderSuper {
}
/**
+ * Loads a policy.
+ *
+ * @param fileName name of the file from which to load
+ * @return a policy
+ */
+ protected ToscaPolicy loadPolicy(String fileName) {
+ return loadFile(fileName, ToscaPolicy.class);
+ }
+
+ /**
* Loads an object from a JSON file.
*
* @param fileName name of the file from which to load
diff --git a/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteControllerV1.java b/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteControllerV1.java
index e1c8c519..c3928789 100644
--- a/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteControllerV1.java
+++ b/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteControllerV1.java
@@ -22,7 +22,6 @@
package org.onap.policy.pap.main.rest.depundep;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.core.Response;
@@ -32,6 +31,7 @@ import org.onap.policy.pap.main.rest.CommonPapRestServer;
public class TestPdpGroupDeleteControllerV1 extends CommonPapRestServer {
+ private static final String NOT_IMPLEMENTED_YET = "not implemented yet";
private static final String DELETE_GROUP_ENDPOINT = "pdps/groups";
private static final String DELETE_POLICIES_ENDPOINT = "pdps/policies";
@@ -51,13 +51,13 @@ public class TestPdpGroupDeleteControllerV1 extends CommonPapRestServer {
Invocation.Builder invocationBuilder = sendRequest(uri);
Response rawresp = invocationBuilder.delete();
PdpGroupDeleteResponse resp = rawresp.readEntity(PdpGroupDeleteResponse.class);
- assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
- assertNull(resp.getErrorDetails());
+ assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), rawresp.getStatus());
+ assertEquals(NOT_IMPLEMENTED_YET, resp.getErrorDetails());
rawresp = invocationBuilder.delete();
resp = rawresp.readEntity(PdpGroupDeleteResponse.class);
- assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
- assertNull(resp.getErrorDetails());
+ assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), rawresp.getStatus());
+ assertEquals(NOT_IMPLEMENTED_YET, resp.getErrorDetails());
// verify it fails when no authorization info is included
checkUnauthRequest(uri, req -> req.delete());
@@ -70,13 +70,13 @@ public class TestPdpGroupDeleteControllerV1 extends CommonPapRestServer {
Invocation.Builder invocationBuilder = sendRequest(uri);
Response rawresp = invocationBuilder.delete();
PdpGroupDeleteResponse resp = rawresp.readEntity(PdpGroupDeleteResponse.class);
- assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
- assertNull(resp.getErrorDetails());
+ assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), rawresp.getStatus());
+ assertEquals(NOT_IMPLEMENTED_YET, resp.getErrorDetails());
rawresp = invocationBuilder.delete();
resp = rawresp.readEntity(PdpGroupDeleteResponse.class);
- assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
- assertNull(resp.getErrorDetails());
+ assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), rawresp.getStatus());
+ assertEquals(NOT_IMPLEMENTED_YET, resp.getErrorDetails());
// verify it fails when no authorization info is included
checkUnauthRequest(uri, req -> req.delete());
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
new file mode 100644
index 00000000..31dfb398
--- /dev/null
+++ b/main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteProvider.java
@@ -0,0 +1,237 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP PAP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.pap.main.rest.depundep;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.function.BiConsumer;
+import java.util.function.BiFunction;
+import javax.ws.rs.core.Response.Status;
+import org.apache.commons.lang3.tuple.Pair;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.pap.concepts.PdpGroupDeleteResponse;
+import org.onap.policy.models.pdp.concepts.PdpGroup;
+import org.onap.policy.models.pdp.concepts.PdpSubGroup;
+import org.onap.policy.models.pdp.concepts.PdpUpdate;
+import org.onap.policy.models.pdp.enums.PdpState;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifierOptVersion;
+import org.onap.policy.pap.main.PolicyPapRuntimeException;
+
+public class TestPdpGroupDeleteProvider extends ProviderSuper {
+ private static final String EXPECTED_EXCEPTION = "expected exception";
+ private static final String POLICY1_NAME = "policyA";
+ private static final String POLICY1_VERSION = "1.2.3";
+ private static final String GROUP1_NAME = "groupA";
+ private static final String GROUP1_VERSION = "200.2.3";
+
+ private MyProvider prov;
+ private SessionData session;
+ private ToscaPolicyIdentifierOptVersion optIdent;
+ private ToscaPolicyIdentifier ident;
+ private BiFunction<PdpGroup, PdpSubGroup, Boolean> updater;
+
+
+ @AfterClass
+ public static void tearDownAfterClass() {
+ Registry.newRegistry();
+ }
+
+ /**
+ * Configures mocks and objects.
+ *
+ * @throws Exception if an error occurs
+ */
+ @Before
+ public void setUp() throws Exception {
+
+ super.setUp();
+
+ session = mock(SessionData.class);
+ ident = policy1.getIdentifier();
+ optIdent = new ToscaPolicyIdentifierOptVersion(ident.getName(), null);
+
+ prov = new MyProvider();
+
+ updater = prov.makeUpdater(policy1);
+ }
+
+ @Test
+ public void testDeleteGroup() {
+ Pair<Status, PdpGroupDeleteResponse> pair = prov.deleteGroup(GROUP1_NAME, GROUP1_VERSION);
+ assertEquals(Status.INTERNAL_SERVER_ERROR, pair.getLeft());
+ assertEquals("not implemented yet", pair.getRight().getErrorDetails());
+ }
+
+ @Test
+ public void testUndeploy_testDeletePolicy() {
+ Pair<Status, PdpGroupDeleteResponse> pair = prov.undeploy(optIdent);
+ assertEquals(Status.OK, pair.getLeft());
+ assertNull(pair.getRight().getErrorDetails());
+ }
+
+ /**
+ * Tests using a real provider, just to verify end-to-end functionality.
+ *
+ * @throws Exception if an error occurs
+ */
+ @Test
+ public void testUndeploy_Full() throws Exception {
+ when(dao.getFilteredPolicyList(any())).thenReturn(Arrays.asList(policy1));
+
+ PdpGroup group = loadGroup("undeploy.json");
+
+ when(dao.getFilteredPdpGroups(any())).thenReturn(Arrays.asList(group));
+
+ when(dao.getPolicyList(POLICY1_NAME, "1.2.300")).thenReturn(Arrays.asList(policy1));
+ when(dao.getPolicyList("policyB", POLICY1_VERSION)).thenReturn(Arrays.asList(policy1));
+
+ Pair<Status, PdpGroupDeleteResponse> pair = new PdpGroupDeleteProvider().undeploy(optIdent);
+ assertEquals(Status.OK, pair.getLeft());
+ assertNull(pair.getRight().getErrorDetails());
+
+ // should have updated the old group
+ List<PdpGroup> updates = getGroupUpdates();
+ assertEquals(1, updates.size());
+ assertSame(group, updates.get(0));
+ assertEquals(PdpState.PASSIVE, group.getPdpGroupState());
+
+ // should have created a new group
+ List<PdpGroup> creates = getGroupCreates();
+ assertEquals(1, creates.size());
+ PdpGroup group2 = creates.get(0);
+ assertEquals(group.getName(), group2.getName());
+ assertEquals(PdpState.ACTIVE, group2.getPdpGroupState());
+
+ // should be one less item in the new group
+ assertEquals(group.getPdpSubgroups().get(0).getPolicies().size() - 1,
+ group2.getPdpSubgroups().get(0).getPolicies().size());
+
+ // should have updated the PDPs
+ List<PdpUpdate> requests = getUpdateRequests(1);
+ assertEquals(1, requests.size());
+ PdpUpdate req = requests.get(0);
+ assertEquals("pdpA", req.getName());
+ assertEquals(GROUP1_NAME, req.getPdpGroup());
+ assertEquals("pdpTypeA", req.getPdpSubgroup());
+ assertEquals(Arrays.asList(policy1, policy1), req.getPolicies());
+ }
+
+ @Test
+ public void testDeletePolicy_DaoEx() throws Exception {
+ PfModelException exc = new PfModelException(Status.BAD_REQUEST, EXPECTED_EXCEPTION);
+
+ prov = spy(prov);
+ doThrow(exc).when(prov).processPolicy(any(), any());
+
+ assertThatThrownBy(() -> prov.undeploy(optIdent)).isInstanceOf(PolicyPapRuntimeException.class)
+ .hasMessage(PdpGroupDeleteProvider.DB_ERROR_MSG);
+ }
+
+ @Test
+ public void testDeletePolicy_RtEx() throws Exception {
+ RuntimeException exc = new RuntimeException(EXPECTED_EXCEPTION);
+
+ prov = spy(prov);
+ doThrow(exc).when(prov).processPolicy(any(), any());
+
+ assertThatThrownBy(() -> prov.undeploy(optIdent)).isSameAs(exc);
+ }
+
+ @Test
+ public void testMakeResponse() {
+ PdpGroupDeleteResponse resp = prov.makeResponse(null);
+ assertNull(resp.getErrorDetails());
+
+ resp = prov.makeResponse(EXPECTED_EXCEPTION);
+ assertEquals(EXPECTED_EXCEPTION, resp.getErrorDetails());
+ }
+
+ @Test
+ public void testMakeUpdater() {
+ /*
+ * this group has one policy with a different name, one matching policy, and one
+ * with a different version.
+ */
+ PdpGroup group = loadGroup("undeploy.json");
+
+ PdpSubGroup subgroup = group.getPdpSubgroups().get(0);
+ int origSize = subgroup.getPolicies().size();
+
+ // invoke updater
+ assertTrue(updater.apply(group, subgroup));
+
+ // identified policy should have been removed
+ assertEquals(origSize - 1, 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
+ * version, but not the policy of interest.
+ */
+ PdpGroup group = loadGroup("undeployMakeUpdaterGroupNotFound.json");
+
+ PdpSubGroup subgroup = group.getPdpSubgroups().get(0);
+ int origSize = subgroup.getPolicies().size();
+
+ // invoke updater
+ assertFalse(updater.apply(group, subgroup));
+
+ // should be unchanged
+ assertEquals(origSize, subgroup.getPolicies().size());
+ }
+
+
+ private class MyProvider extends PdpGroupDeleteProvider {
+
+ @Override
+ protected <T> Pair<Status, PdpGroupDeleteResponse> process(T request, BiConsumer<SessionData, T> processor) {
+ processor.accept(session, request);
+
+ return Pair.of(Status.OK, new PdpGroupDeleteResponse());
+ }
+
+ @Override
+ protected void processPolicy(SessionData data, ToscaPolicyIdentifierOptVersion desiredPolicy)
+ throws PfModelException {
+ // do nothing
+ }
+ }
+}
diff --git a/main/src/test/resources/simpleDeploy/undeploy.json b/main/src/test/resources/simpleDeploy/undeploy.json
new file mode 100644
index 00000000..8f89cafc
--- /dev/null
+++ b/main/src/test/resources/simpleDeploy/undeploy.json
@@ -0,0 +1,35 @@
+{
+ "name": "groupA",
+ "version": "200.2.3",
+ "pdpGroupState": "ACTIVE",
+ "pdpSubgroups": [
+ {
+ "pdpType": "pdpTypeA",
+ "supportedPolicyTypes": [
+ {
+ "name": "typeA",
+ "version": "100.2.3"
+ }
+ ],
+ "pdpInstances": [
+ {
+ "instanceId": "pdpA"
+ }
+ ],
+ "policies": [
+ {
+ "name": "policyA",
+ "version": "1.2.300"
+ },
+ {
+ "name": "policyA",
+ "version": "1.2.3"
+ },
+ {
+ "name": "policyB",
+ "version": "1.2.3"
+ }
+ ]
+ }
+ ]
+}
diff --git a/main/src/test/resources/simpleDeploy/undeployMakeUpdaterGroupNotFound.json b/main/src/test/resources/simpleDeploy/undeployMakeUpdaterGroupNotFound.json
new file mode 100644
index 00000000..b7d8d777
--- /dev/null
+++ b/main/src/test/resources/simpleDeploy/undeployMakeUpdaterGroupNotFound.json
@@ -0,0 +1,30 @@
+{
+ "name": "groupA",
+ "version": "200.2.3",
+ "pdpSubgroups": [
+ {
+ "pdpType": "pdpTypeA",
+ "supportedPolicyTypes": [
+ {
+ "name": "typeA",
+ "version": "100.2.3"
+ }
+ ],
+ "pdpInstances": [
+ {
+ "instanceId": "pdpA"
+ }
+ ],
+ "policies": [
+ {
+ "name": "policyA",
+ "version": "1.2.300"
+ },
+ {
+ "name": "policyB",
+ "version": "1.2.3"
+ }
+ ]
+ }
+ ]
+}