diff options
Diffstat (limited to 'main/src/test')
5 files changed, 334 insertions, 11 deletions
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" + } + ] + } + ] +} |