2  * ============LICENSE_START=======================================================
 
   3  * AppcServiceProviderTest
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 
   6  * ================================================================================
 
   7  * Licensed under the Apache License, Version 2.0 (the "License");
 
   8  * you may not use this file except in compliance with the License.
 
   9  * You may obtain a copy of the License at
 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
 
  13  * Unless required by applicable law or agreed to in writing, software
 
  14  * distributed under the License is distributed on an "AS IS" BASIS,
 
  15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  16  * See the License for the specific language governing permissions and
 
  17  * limitations under the License.
 
  18  * ============LICENSE_END=========================================================
 
  21 package org.onap.policy.controlloop.actor.appclcm;
 
  23 import static org.junit.Assert.*;
 
  25 import java.time.Instant;
 
  26 import java.util.AbstractMap;
 
  27 import java.util.HashMap;
 
  28 import java.util.UUID;
 
  30 import org.junit.Test;
 
  31 import org.onap.policy.appclcm.LCMCommonHeader;
 
  32 import org.onap.policy.appclcm.LCMRequest;
 
  33 import org.onap.policy.appclcm.LCMRequestWrapper;
 
  34 import org.onap.policy.appclcm.LCMResponse;
 
  35 import org.onap.policy.appclcm.LCMResponseWrapper;
 
  36 import org.onap.policy.controlloop.ControlLoopEventStatus;
 
  37 import org.onap.policy.controlloop.ControlLoopOperation;
 
  38 import org.onap.policy.controlloop.ControlLoopTargetType;
 
  39 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 
  40 import org.onap.policy.controlloop.policy.Policy;
 
  41 import org.onap.policy.controlloop.policy.PolicyResult;
 
  42 import org.onap.policy.controlloop.policy.Target;
 
  43 import org.onap.policy.controlloop.policy.TargetType;
 
  44 import org.slf4j.Logger;
 
  45 import org.slf4j.LoggerFactory;
 
  47 public class AppcLcmServiceProviderTest {
 
  49     private static final Logger logger = LoggerFactory.getLogger(AppcLcmServiceProviderTest.class);
 
  51     private static VirtualControlLoopEvent onsetEvent;
 
  52     private static ControlLoopOperation operation;
 
  53     private static Policy policy;
 
  54     private static LCMRequestWrapper dmaapRequest;
 
  55     private static LCMResponseWrapper dmaapResponse;
 
  59          * Construct an onset with an AAI subtag containing
 
  60          * generic-vnf.vnf-id and a target type of VM.
 
  62         onsetEvent = new VirtualControlLoopEvent();
 
  63         onsetEvent.closedLoopControlName = "closedLoopControlName-Test";
 
  64         onsetEvent.requestID = UUID.randomUUID();
 
  65         onsetEvent.closedLoopEventClient = "tca.instance00001";
 
  66         onsetEvent.target_type = ControlLoopTargetType.VM;
 
  67         onsetEvent.target = "generic-vnf.vnf-id";
 
  68         onsetEvent.from = "DCAE";
 
  69         onsetEvent.closedLoopAlarmStart = Instant.now();
 
  70         onsetEvent.AAI = new HashMap<>();
 
  71         onsetEvent.AAI.put("generic-vnf.vnf-id", "fw0001vm001fw001");
 
  72         onsetEvent.closedLoopEventStatus = ControlLoopEventStatus.ONSET;
 
  74         /* Construct an operation with an APPC actor and restart operation. */
 
  75         operation = new ControlLoopOperation();
 
  76         operation.actor = "APPC";
 
  77         operation.operation = "Restart";
 
  78         operation.target = "VM";
 
  79         operation.end = Instant.now();
 
  80         operation.subRequestId = "1";
 
  82         /* Construct a policy specifying to restart vm. */
 
  83         policy = new Policy();
 
  84         policy.setName("Restart the VM");
 
  85         policy.setDescription("Upon getting the trigger event, restart the VM");
 
  86         policy.setActor("APPC");
 
  87         policy.setTarget(new Target(TargetType.VM));
 
  88         policy.setRecipe("Restart");
 
  89         policy.setPayload(null);
 
  91         policy.setTimeout(300);
 
  93         /* A sample DMAAP request wrapper. */
 
  94         dmaapRequest = new LCMRequestWrapper();
 
  95         dmaapRequest.setCorrelationId(onsetEvent.requestID.toString() + "-" + "1");
 
  96         dmaapRequest.setRpcName(policy.getRecipe().toLowerCase());
 
  97         dmaapRequest.setType("request");
 
  99         /* A sample DMAAP response wrapper */
 
 100         dmaapResponse = new LCMResponseWrapper();
 
 101         dmaapResponse.setCorrelationId(onsetEvent.requestID.toString() + "-" + "1");
 
 102         dmaapResponse.setRpcName(policy.getRecipe().toLowerCase());
 
 103         dmaapResponse.setType("response");
 
 105         /* A sample APPC LCM request. */
 
 106         LCMRequest appcRequest = new LCMRequest();
 
 108         /* The following code constructs a sample APPC LCM Request */
 
 109         appcRequest.setAction("restart");
 
 111         HashMap<String, String> actionIdentifiers = new HashMap<>();
 
 112         actionIdentifiers.put("vnf-id", "trial-vnf-003");
 
 114         appcRequest.setActionIdentifiers(actionIdentifiers);
 
 116         LCMCommonHeader commonHeader = new LCMCommonHeader();
 
 117         commonHeader.setRequestId(onsetEvent.requestID);
 
 118         commonHeader.setSubRequestId("1");
 
 119         commonHeader.setOriginatorId(onsetEvent.requestID.toString());
 
 121         appcRequest.setCommonHeader(commonHeader);
 
 123         appcRequest.setPayload(null);
 
 125         dmaapRequest.setBody(appcRequest);
 
 127         /* The following code constructs a sample APPC LCM Response */
 
 128         LCMResponse appcResponse = new LCMResponse(appcRequest);
 
 129         appcResponse.getStatus().setCode(400);
 
 130         appcResponse.getStatus().setMessage("Restart Successful");
 
 132         dmaapResponse.setBody(appcResponse);
 
 136      * A test to construct an APPC LCM restart request.
 
 139     public void constructRestartRequestTest() {
 
 141         LCMRequestWrapper dmaapRequest = AppcLcmActorServiceProvider.constructRequest(onsetEvent, operation, policy);
 
 143         /* The service provider must return a non null DMAAP request wrapper */
 
 144         assertNotNull(dmaapRequest);
 
 146         /* The DMAAP wrapper's type field must be request */
 
 147         assertEquals(dmaapRequest.getType(), "request");
 
 149         /* The DMAAP wrapper's body field cannot be null */
 
 150         assertNotNull(dmaapRequest.getBody());
 
 152         LCMRequest appcRequest = dmaapRequest.getBody();
 
 154         /* A common header is required and cannot be null */
 
 155         assertNotNull(appcRequest.getCommonHeader());
 
 156         assertEquals(appcRequest.getCommonHeader().getRequestId(), onsetEvent.requestID);
 
 158         /* An action is required and cannot be null */
 
 159         assertNotNull(appcRequest.getAction());
 
 160         assertEquals(appcRequest.getAction(), "Restart");
 
 162         /* Action Identifiers are required and cannot be null */
 
 163         assertNotNull(appcRequest.getActionIdentifiers());
 
 164         assertNotNull(appcRequest.getActionIdentifiers().get("vnf-id"));
 
 166         logger.debug("APPC Request: \n" + appcRequest.toString());
 
 170      * A test to process a successful APPC restart response.
 
 173     public void processRestartResponseSuccessTest() {
 
 174         AbstractMap.SimpleEntry<PolicyResult, String> result = AppcLcmActorServiceProvider
 
 175                 .processResponse(dmaapResponse);
 
 176         assertEquals(result.getKey(), PolicyResult.SUCCESS);
 
 177         assertEquals(result.getValue(), "Restart Successful");
 
 181      * A test to map APPC response results to corresponding Policy results
 
 184     public void appcToPolicyResultTest() {
 
 186         AbstractMap.SimpleEntry<PolicyResult, String> result;
 
 188         /* If APPC accepts, PolicyResult is null */
 
 189         dmaapResponse.getBody().getStatus().setCode(100);
 
 190         dmaapResponse.getBody().getStatus().setMessage("ACCEPTED");
 
 191         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 192         assertEquals(result.getKey(), null);
 
 194         /* If APPC is successful, PolicyResult is success */
 
 195         dmaapResponse.getBody().getStatus().setCode(400);
 
 196         dmaapResponse.getBody().getStatus().setMessage("SUCCESS");
 
 197         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 198         assertEquals(result.getKey(), PolicyResult.SUCCESS);
 
 200         /* If APPC returns an error, PolicyResult is failure exception */
 
 201         dmaapResponse.getBody().getStatus().setCode(200);
 
 202         dmaapResponse.getBody().getStatus().setMessage("ERROR");
 
 203         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 204         assertEquals(result.getKey(), PolicyResult.FAILURE_EXCEPTION);
 
 206         /* If APPC rejects, PolicyResult is failure exception */
 
 207         dmaapResponse.getBody().getStatus().setCode(300);
 
 208         dmaapResponse.getBody().getStatus().setMessage("REJECT");
 
 209         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 210         assertEquals(result.getKey(), PolicyResult.FAILURE_EXCEPTION);
 
 212         /* Test multiple reject codes */
 
 213         dmaapResponse.getBody().getStatus().setCode(306);
 
 214         dmaapResponse.getBody().getStatus().setMessage("REJECT");
 
 215         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 216         assertEquals(result.getKey(), PolicyResult.FAILURE_EXCEPTION);
 
 218         dmaapResponse.getBody().getStatus().setCode(313);
 
 219         dmaapResponse.getBody().getStatus().setMessage("REJECT");
 
 220         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 221         assertEquals(result.getKey(), PolicyResult.FAILURE_EXCEPTION);
 
 223         /* If APPC returns failure, PolicyResult is failure */
 
 224         dmaapResponse.getBody().getStatus().setCode(401);
 
 225         dmaapResponse.getBody().getStatus().setMessage("FAILURE");
 
 226         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 227         assertEquals(result.getKey(), PolicyResult.FAILURE);
 
 229         /* Test multiple failure codes */
 
 230         dmaapResponse.getBody().getStatus().setCode(406);
 
 231         dmaapResponse.getBody().getStatus().setMessage("FAILURE");
 
 232         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 233         assertEquals(result.getKey(), PolicyResult.FAILURE);
 
 235         dmaapResponse.getBody().getStatus().setCode(450);
 
 236         dmaapResponse.getBody().getStatus().setMessage("FAILURE");
 
 237         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 238         assertEquals(result.getKey(), PolicyResult.FAILURE);
 
 240         /* If APPC returns partial success, PolicyResult is failure exception */
 
 241         dmaapResponse.getBody().getStatus().setCode(500);
 
 242         dmaapResponse.getBody().getStatus().setMessage("PARTIAL SUCCESS");
 
 243         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 244         assertEquals(result.getKey(), PolicyResult.FAILURE_EXCEPTION);
 
 246         /* If APPC returns partial failure, PolicyResult is failure exception */
 
 247         dmaapResponse.getBody().getStatus().setCode(501);
 
 248         dmaapResponse.getBody().getStatus().setMessage("PARTIAL FAILURE");
 
 249         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 250         assertEquals(result.getKey(), PolicyResult.FAILURE_EXCEPTION);
 
 252         /* Test multiple partial failure codes */
 
 253         dmaapResponse.getBody().getStatus().setCode(599);
 
 254         dmaapResponse.getBody().getStatus().setMessage("PARTIAL FAILURE");
 
 255         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 256         assertEquals(result.getKey(), PolicyResult.FAILURE_EXCEPTION);
 
 258         dmaapResponse.getBody().getStatus().setCode(550);
 
 259         dmaapResponse.getBody().getStatus().setMessage("PARTIAL FAILURE");
 
 260         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 261         assertEquals(result.getKey(), PolicyResult.FAILURE_EXCEPTION);
 
 263         /* If APPC code is unknown to Policy, PolicyResult is failure exception */
 
 264         dmaapResponse.getBody().getStatus().setCode(700);
 
 265         dmaapResponse.getBody().getStatus().setMessage("UNKNOWN");
 
 266         result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
 
 267         assertEquals(result.getKey(), PolicyResult.FAILURE_EXCEPTION);