From fb601b21a0b0c530c333b3e270285c804a99f3bb Mon Sep 17 00:00:00 2001 From: Daniel Cruz Date: Wed, 23 Oct 2019 17:33:28 -0500 Subject: Refactor Appc LCM Model Added model classes for APPC LCM Input and APPC LCM Output and removed adding the input/output tag to the JSON via the APPC LCM custom serializer. Issue-ID: POLICY-2043 Signed-off-by: Daniel Cruz Change-Id: I54e1b5f589a4b29357cf1a45dbdf2173610870ce --- .../actor/appclcm/AppcLcmActorServiceProvider.java | 54 +++++--- .../appclcm/AppcLcmActorServiceProviderTest.java | 139 ++++++++++++--------- 2 files changed, 116 insertions(+), 77 deletions(-) (limited to 'models-interactions/model-actors/actor.appclcm') diff --git a/models-interactions/model-actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmActorServiceProvider.java b/models-interactions/model-actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmActorServiceProvider.java index 21cce2fd6..447a2720d 100644 --- a/models-interactions/model-actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmActorServiceProvider.java +++ b/models-interactions/model-actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmActorServiceProvider.java @@ -39,12 +39,12 @@ import org.onap.policy.aai.AaiNqQueryParameters; import org.onap.policy.aai.AaiNqRequest; import org.onap.policy.aai.AaiNqResponse; import org.onap.policy.aai.util.AaiException; -import org.onap.policy.appclcm.LcmCommonHeader; -import org.onap.policy.appclcm.LcmRequest; -import org.onap.policy.appclcm.LcmRequestWrapper; -import org.onap.policy.appclcm.LcmResponse; -import org.onap.policy.appclcm.LcmResponseCode; -import org.onap.policy.appclcm.LcmResponseWrapper; +import org.onap.policy.appclcm.AppcLcmBody; +import org.onap.policy.appclcm.AppcLcmCommonHeader; +import org.onap.policy.appclcm.AppcLcmDmaapWrapper; +import org.onap.policy.appclcm.AppcLcmInput; +import org.onap.policy.appclcm.AppcLcmOutput; +import org.onap.policy.appclcm.AppcLcmResponseCode; import org.onap.policy.controlloop.ControlLoopOperation; import org.onap.policy.controlloop.VirtualControlLoopEvent; import org.onap.policy.controlloop.actorserviceprovider.spi.Actor; @@ -186,7 +186,7 @@ public class AppcLcmActorServiceProvider implements Actor { * Policy GUI/API * @return an APPC request conforming to the lcm API using the DMAAP wrapper */ - public static LcmRequestWrapper constructRequest(VirtualControlLoopEvent onset, ControlLoopOperation operation, + public static AppcLcmDmaapWrapper constructRequest(VirtualControlLoopEvent onset, ControlLoopOperation operation, Policy policy, String targetVnf) { /* Construct an APPC request using LCM Model */ @@ -197,17 +197,17 @@ public class AppcLcmActorServiceProvider implements Actor { */ AppcLcmRecipeFormatter lcmRecipeFormatter = new AppcLcmRecipeFormatter(policy.getRecipe()); - LcmRequestWrapper dmaapRequest = new LcmRequestWrapper(); + AppcLcmDmaapWrapper dmaapRequest = new AppcLcmDmaapWrapper(); dmaapRequest.setVersion("2.0"); dmaapRequest.setCorrelationId(onset.getRequestId() + "-" + operation.getSubRequestId()); dmaapRequest.setRpcName(lcmRecipeFormatter.getUrlRecipe()); dmaapRequest.setType("request"); /* This is the actual request that is placed in the dmaap wrapper. */ - final LcmRequest appcRequest = new LcmRequest(); + final AppcLcmInput appcRequest = new AppcLcmInput(); /* The common header is a required field for all APPC requests. */ - LcmCommonHeader requestCommonHeader = new LcmCommonHeader(); + AppcLcmCommonHeader requestCommonHeader = new AppcLcmCommonHeader(); requestCommonHeader.setOriginatorId(onset.getRequestId().toString()); requestCommonHeader.setRequestId(onset.getRequestId()); requestCommonHeader.setSubRequestId(operation.getSubRequestId()); @@ -240,10 +240,16 @@ public class AppcLcmActorServiceProvider implements Actor { appcRequest.setPayload(null); } + /* + * The APPC request must be wrapped in an input object. + */ + AppcLcmBody body = new AppcLcmBody(); + body.setInput(appcRequest); + /* * Once the LCM request is constructed, add it into the body of the dmaap wrapper. */ - dmaapRequest.setBody(appcRequest); + dmaapRequest.setBody(body); /* Return the request to be sent through dmaap. */ return dmaapRequest; @@ -293,9 +299,17 @@ public class AppcLcmActorServiceProvider implements Actor { * * @return an key-value pair that contains the Policy result and APPC response message */ - public static SimpleEntry processResponse(LcmResponseWrapper dmaapResponse) { - /* The actual APPC response is inside the wrapper's body field. */ - LcmResponse appcResponse = dmaapResponse.getBody(); + public static SimpleEntry processResponse(AppcLcmDmaapWrapper dmaapResponse) { + AppcLcmBody appcBody = dmaapResponse.getBody(); + if (appcBody == null) { + throw new NullPointerException("APPC Body is null"); + } + + /* The actual APPC response is inside the dmaap wrapper's body.input field. */ + AppcLcmOutput appcResponse = appcBody.getOutput(); + if (appcResponse == null) { + throw new NullPointerException("APPC Response is null"); + } /* The message returned in the APPC response. */ String message; @@ -310,7 +324,7 @@ public class AppcLcmActorServiceProvider implements Actor { } /* If there is no code, Policy cannot determine if the request was successful. */ - String responseValue = LcmResponseCode.toResponseValue(appcResponse.getStatus().getCode()); + String responseValue = AppcLcmResponseCode.toResponseValue(appcResponse.getStatus().getCode()); if (responseValue == null) { message = "Policy was unable to parse APP-C response status code field."; return new AbstractMap.SimpleEntry<>(PolicyResult.FAILURE_EXCEPTION, message); @@ -321,18 +335,18 @@ public class AppcLcmActorServiceProvider implements Actor { /* Maps the APPC response result to a Policy result. */ switch (responseValue) { - case LcmResponseCode.ACCEPTED: + case AppcLcmResponseCode.ACCEPTED: /* Nothing to do if code is accept, continue processing */ result = null; break; - case LcmResponseCode.SUCCESS: + case AppcLcmResponseCode.SUCCESS: result = PolicyResult.SUCCESS; break; - case LcmResponseCode.FAILURE: + case AppcLcmResponseCode.FAILURE: result = PolicyResult.FAILURE; break; - case LcmResponseCode.REJECT: - case LcmResponseCode.ERROR: + case AppcLcmResponseCode.REJECT: + case AppcLcmResponseCode.ERROR: default: result = PolicyResult.FAILURE_EXCEPTION; } diff --git a/models-interactions/model-actors/actor.appclcm/src/test/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmActorServiceProviderTest.java b/models-interactions/model-actors/actor.appclcm/src/test/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmActorServiceProviderTest.java index a709f3fa0..45057f008 100644 --- a/models-interactions/model-actors/actor.appclcm/src/test/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmActorServiceProviderTest.java +++ b/models-interactions/model-actors/actor.appclcm/src/test/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmActorServiceProviderTest.java @@ -32,11 +32,11 @@ import java.util.UUID; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -import org.onap.policy.appclcm.LcmCommonHeader; -import org.onap.policy.appclcm.LcmRequest; -import org.onap.policy.appclcm.LcmRequestWrapper; -import org.onap.policy.appclcm.LcmResponse; -import org.onap.policy.appclcm.LcmResponseWrapper; +import org.onap.policy.appclcm.AppcLcmBody; +import org.onap.policy.appclcm.AppcLcmCommonHeader; +import org.onap.policy.appclcm.AppcLcmDmaapWrapper; +import org.onap.policy.appclcm.AppcLcmInput; +import org.onap.policy.appclcm.AppcLcmOutput; import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance; import org.onap.policy.controlloop.ControlLoopEventStatus; import org.onap.policy.controlloop.ControlLoopOperation; @@ -68,7 +68,7 @@ public class AppcLcmActorServiceProviderTest { private static final VirtualControlLoopEvent onsetEvent; private static final ControlLoopOperation operation; private static final Policy policy; - private static final LcmResponseWrapper dmaapResponse; + private static final AppcLcmDmaapWrapper dmaapResponse; private static final String RECIPE_RESTART = "Restart"; private static final String RECIPE_REBUILD = "Rebuild"; @@ -111,19 +111,19 @@ public class AppcLcmActorServiceProviderTest { policy.setTimeout(300); /* A sample DMAAP request wrapper. */ - LcmRequestWrapper dmaapRequest = new LcmRequestWrapper(); + AppcLcmDmaapWrapper dmaapRequest = new AppcLcmDmaapWrapper(); dmaapRequest.setCorrelationId(onsetEvent.getRequestId().toString() + "-" + "1"); dmaapRequest.setRpcName(policy.getRecipe().toLowerCase()); dmaapRequest.setType("request"); /* A sample DMAAP response wrapper */ - dmaapResponse = new LcmResponseWrapper(); + dmaapResponse = new AppcLcmDmaapWrapper(); dmaapResponse.setCorrelationId(onsetEvent.getRequestId().toString() + "-" + "1"); dmaapResponse.setRpcName(policy.getRecipe().toLowerCase()); dmaapResponse.setType("response"); /* A sample APPC LCM request. */ - LcmRequest appcRequest = new LcmRequest(); + AppcLcmInput appcRequest = new AppcLcmInput(); /* The following code constructs a sample APPC LCM Request */ appcRequest.setAction("restart"); @@ -133,7 +133,7 @@ public class AppcLcmActorServiceProviderTest { appcRequest.setActionIdentifiers(actionIdentifiers); - LcmCommonHeader commonHeader = new LcmCommonHeader(); + AppcLcmCommonHeader commonHeader = new AppcLcmCommonHeader(); commonHeader.setRequestId(onsetEvent.getRequestId()); commonHeader.setSubRequestId("1"); commonHeader.setOriginatorId(onsetEvent.getRequestId().toString()); @@ -142,14 +142,19 @@ public class AppcLcmActorServiceProviderTest { appcRequest.setPayload(null); - dmaapRequest.setBody(appcRequest); + AppcLcmBody appcBody = new AppcLcmBody(); + appcBody.setInput(appcRequest); + + dmaapRequest.setBody(appcBody); /* The following code constructs a sample APPC LCM Response */ - LcmResponse appcResponse = new LcmResponse(appcRequest); + AppcLcmOutput appcResponse = new AppcLcmOutput(appcRequest); appcResponse.getStatus().setCode(400); appcResponse.getStatus().setMessage("Restart Successful"); - dmaapResponse.setBody(appcResponse); + appcBody.setOutput(appcResponse); + + dmaapResponse.setBody(appcBody); } /** @@ -175,7 +180,7 @@ public class AppcLcmActorServiceProviderTest { @Test public void constructRestartRequestTest() { - LcmRequestWrapper dmaapRequest = + AppcLcmDmaapWrapper dmaapRequest = AppcLcmActorServiceProvider.constructRequest(onsetEvent, operation, policy, VNF01); /* The service provider must return a non null DMAAP request wrapper */ @@ -187,7 +192,7 @@ public class AppcLcmActorServiceProviderTest { /* The DMAAP wrapper's body field cannot be null */ assertNotNull(dmaapRequest.getBody()); - LcmRequest appcRequest = dmaapRequest.getBody(); + AppcLcmInput appcRequest = dmaapRequest.getBody().getInput(); /* A common header is required and cannot be null */ assertNotNull(appcRequest.getCommonHeader()); @@ -216,6 +221,26 @@ public class AppcLcmActorServiceProviderTest { assertEquals("Restart Successful", result.getValue()); } + /** + * A test to assert that a null pointer exception is thrown if + * the APPC response body is null. + */ + @Test(expected = NullPointerException.class) + public void processNullBodyResponseTest() { + AppcLcmActorServiceProvider.processResponse(new AppcLcmDmaapWrapper()); + } + + /** + * A test to assert that a null pointer exception is thrown if + * the APPC response output is null. + */ + @Test(expected = NullPointerException.class) + public void processNullOutputResponseTest() { + AppcLcmDmaapWrapper dmaapWrapper = new AppcLcmDmaapWrapper(); + dmaapWrapper.setBody(new AppcLcmBody()); + AppcLcmActorServiceProvider.processResponse(dmaapWrapper); + } + /** * A test to map APPC response results to corresponding Policy results. */ @@ -225,83 +250,83 @@ public class AppcLcmActorServiceProviderTest { AbstractMap.SimpleEntry result; /* If APPC accepts, PolicyResult is null */ - dmaapResponse.getBody().getStatus().setCode(100); - dmaapResponse.getBody().getStatus().setMessage("ACCEPTED"); + dmaapResponse.getBody().getOutput().getStatus().setCode(100); + dmaapResponse.getBody().getOutput().getStatus().setMessage("ACCEPTED"); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertNull(result.getKey()); /* If APPC is successful, PolicyResult is success */ - dmaapResponse.getBody().getStatus().setCode(400); - dmaapResponse.getBody().getStatus().setMessage("SUCCESS"); + dmaapResponse.getBody().getOutput().getStatus().setCode(400); + dmaapResponse.getBody().getOutput().getStatus().setMessage("SUCCESS"); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.SUCCESS, result.getKey()); /* If APPC returns an error, PolicyResult is failure exception */ - dmaapResponse.getBody().getStatus().setCode(200); - dmaapResponse.getBody().getStatus().setMessage("ERROR"); + dmaapResponse.getBody().getOutput().getStatus().setCode(200); + dmaapResponse.getBody().getOutput().getStatus().setMessage("ERROR"); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.FAILURE_EXCEPTION, result.getKey()); /* If APPC rejects, PolicyResult is failure exception */ - dmaapResponse.getBody().getStatus().setCode(300); - dmaapResponse.getBody().getStatus().setMessage(REJECT); + dmaapResponse.getBody().getOutput().getStatus().setCode(300); + dmaapResponse.getBody().getOutput().getStatus().setMessage(REJECT); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.FAILURE_EXCEPTION, result.getKey()); /* Test multiple reject codes */ - dmaapResponse.getBody().getStatus().setCode(306); - dmaapResponse.getBody().getStatus().setMessage(REJECT); + dmaapResponse.getBody().getOutput().getStatus().setCode(306); + dmaapResponse.getBody().getOutput().getStatus().setMessage(REJECT); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.FAILURE_EXCEPTION, result.getKey()); - dmaapResponse.getBody().getStatus().setCode(313); - dmaapResponse.getBody().getStatus().setMessage(REJECT); + dmaapResponse.getBody().getOutput().getStatus().setCode(313); + dmaapResponse.getBody().getOutput().getStatus().setMessage(REJECT); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.FAILURE_EXCEPTION, result.getKey()); /* If APPC returns failure, PolicyResult is failure */ - dmaapResponse.getBody().getStatus().setCode(401); - dmaapResponse.getBody().getStatus().setMessage(FAILURE); + dmaapResponse.getBody().getOutput().getStatus().setCode(401); + dmaapResponse.getBody().getOutput().getStatus().setMessage(FAILURE); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.FAILURE, result.getKey()); /* Test multiple failure codes */ - dmaapResponse.getBody().getStatus().setCode(406); - dmaapResponse.getBody().getStatus().setMessage(FAILURE); + dmaapResponse.getBody().getOutput().getStatus().setCode(406); + dmaapResponse.getBody().getOutput().getStatus().setMessage(FAILURE); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.FAILURE, result.getKey()); - dmaapResponse.getBody().getStatus().setCode(450); - dmaapResponse.getBody().getStatus().setMessage(FAILURE); + dmaapResponse.getBody().getOutput().getStatus().setCode(450); + dmaapResponse.getBody().getOutput().getStatus().setMessage(FAILURE); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.FAILURE, result.getKey()); /* If APPC returns partial success, PolicyResult is failure exception */ - dmaapResponse.getBody().getStatus().setCode(500); - dmaapResponse.getBody().getStatus().setMessage("PARTIAL SUCCESS"); + dmaapResponse.getBody().getOutput().getStatus().setCode(500); + dmaapResponse.getBody().getOutput().getStatus().setMessage("PARTIAL SUCCESS"); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.FAILURE_EXCEPTION, result.getKey()); /* If APPC returns partial failure, PolicyResult is failure exception */ - dmaapResponse.getBody().getStatus().setCode(501); - dmaapResponse.getBody().getStatus().setMessage(PARTIAL_FAILURE); + dmaapResponse.getBody().getOutput().getStatus().setCode(501); + dmaapResponse.getBody().getOutput().getStatus().setMessage(PARTIAL_FAILURE); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.FAILURE_EXCEPTION, result.getKey()); /* Test multiple partial failure codes */ - dmaapResponse.getBody().getStatus().setCode(599); - dmaapResponse.getBody().getStatus().setMessage(PARTIAL_FAILURE); + dmaapResponse.getBody().getOutput().getStatus().setCode(599); + dmaapResponse.getBody().getOutput().getStatus().setMessage(PARTIAL_FAILURE); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.FAILURE_EXCEPTION, result.getKey()); - dmaapResponse.getBody().getStatus().setCode(550); - dmaapResponse.getBody().getStatus().setMessage(PARTIAL_FAILURE); + dmaapResponse.getBody().getOutput().getStatus().setCode(550); + dmaapResponse.getBody().getOutput().getStatus().setMessage(PARTIAL_FAILURE); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.FAILURE_EXCEPTION, result.getKey()); /* If APPC code is unknown to Policy, PolicyResult is failure exception */ - dmaapResponse.getBody().getStatus().setCode(700); - dmaapResponse.getBody().getStatus().setMessage("UNKNOWN"); + dmaapResponse.getBody().getOutput().getStatus().setCode(700); + dmaapResponse.getBody().getOutput().getStatus().setMessage("UNKNOWN"); result = AppcLcmActorServiceProvider.processResponse(dmaapResponse); assertEquals(PolicyResult.FAILURE_EXCEPTION, result.getKey()); } @@ -340,17 +365,17 @@ public class AppcLcmActorServiceProviderTest { Policy restartPolicy = constructPolicyWithRecipe(RECIPE_RESTART); // when - LcmRequestWrapper migrateRequest = + AppcLcmDmaapWrapper migrateRequest = AppcLcmActorServiceProvider.constructRequest(onsetEvent, operation, migratePolicy, VNF01); - LcmRequestWrapper rebuildRequest = + AppcLcmDmaapWrapper rebuildRequest = AppcLcmActorServiceProvider.constructRequest(onsetEvent, operation, rebuildPolicy, VNF01); - LcmRequestWrapper restartRequest = + AppcLcmDmaapWrapper restartRequest = AppcLcmActorServiceProvider.constructRequest(onsetEvent, operation, restartPolicy, VNF01); // then - assertNull(migrateRequest.getBody().getPayload()); - assertNull(rebuildRequest.getBody().getPayload()); - assertNull(restartRequest.getBody().getPayload()); + assertNull(migrateRequest.getBody().getInput().getPayload()); + assertNull(rebuildRequest.getBody().getInput().getPayload()); + assertNull(restartRequest.getBody().getInput().getPayload()); } @Test @@ -360,15 +385,15 @@ public class AppcLcmActorServiceProviderTest { Policy emptyPayloadPolicy = constructHealthCheckPolicyWithPayload(new HashMap<>()); // when - LcmRequestWrapper noPayloadRequest = + AppcLcmDmaapWrapper noPayloadRequest = AppcLcmActorServiceProvider.constructRequest(onsetEvent, operation, noPayloadPolicy, VNF01); - LcmRequestWrapper emptyPayloadRequest = + AppcLcmDmaapWrapper emptyPayloadRequest = AppcLcmActorServiceProvider.constructRequest(onsetEvent, operation, emptyPayloadPolicy, VNF01); // then - assertNull(noPayloadRequest.getBody().getPayload()); - assertNull(emptyPayloadRequest.getBody().getPayload()); + assertNull(noPayloadRequest.getBody().getInput().getPayload()); + assertNull(emptyPayloadRequest.getBody().getInput().getPayload()); } @Test @@ -379,11 +404,11 @@ public class AppcLcmActorServiceProviderTest { Policy otherPolicy = constructHealthCheckPolicyWithPayload(payload); // when - LcmRequestWrapper dmaapRequest = + AppcLcmDmaapWrapper dmaapRequest = AppcLcmActorServiceProvider.constructRequest(onsetEvent, operation, otherPolicy, VNF01); // then - assertEquals(dmaapRequest.getBody().getPayload(), + assertEquals(dmaapRequest.getBody().getInput().getPayload(), "{\"requestParameters\": {\"host-ip-address\":\"10.183.37.25\"}}"); } @@ -399,11 +424,11 @@ public class AppcLcmActorServiceProviderTest { Policy otherPolicy = constructHealthCheckPolicyWithPayload(payload); // when - LcmRequestWrapper dmaapRequest = + AppcLcmDmaapWrapper dmaapRequest = AppcLcmActorServiceProvider.constructRequest(onsetEvent, operation, otherPolicy, VNF01); // then - assertEquals(dmaapRequest.getBody().getPayload(), + assertEquals(dmaapRequest.getBody().getInput().getPayload(), "{\"requestParameters\": " + "{\"host-ip-address\":\"10.183.37.25\"}," + "\"configurationParameters\": " -- cgit 1.2.3-korg