Add junit tests for PdpGroupDeleteProvider 05/84905/1
authorJim Hahn <jrh3@att.com>
Wed, 10 Apr 2019 16:08:53 +0000 (12:08 -0400)
committerJim Hahn <jrh3@att.com>
Wed, 10 Apr 2019 16:42:18 +0000 (12:42 -0400)
Change-Id: Id744a7d49b9fb608ba3379dd43bcbd6a0297891f
Issue-ID: POLICY-1541
Signed-off-by: Jim Hahn <jrh3@att.com>
main/src/main/java/org/onap/policy/pap/main/rest/depundep/PdpGroupDeleteProvider.java
main/src/test/java/org/onap/policy/pap/main/rest/depundep/ProviderSuper.java
main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteControllerV1.java
main/src/test/java/org/onap/policy/pap/main/rest/depundep/TestPdpGroupDeleteProvider.java [new file with mode: 0644]
main/src/test/resources/simpleDeploy/undeploy.json [new file with mode: 0644]
main/src/test/resources/simpleDeploy/undeployMakeUpdaterGroupNotFound.json [new file with mode: 0644]

index d5acc62..6457efa 100644 (file)
@@ -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);
         };
     }
 }
index a1e6956..4cc6917 100644 (file)
@@ -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);
     }
 
     /**
@@ -193,6 +204,16 @@ public class ProviderSuper {
         return loadFile(fileName, PolicyList.class).policies;
     }
 
+    /**
+     * 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.
      *
index e1c8c51..c392878 100644 (file)
@@ -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 (file)
index 0000000..31dfb39
--- /dev/null
@@ -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 (file)
index 0000000..8f89caf
--- /dev/null
@@ -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 (file)
index 0000000..b7d8d77
--- /dev/null
@@ -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"
+                }
+            ]
+        }
+    ]
+}