Merge "Add APPC-LCM actor"
[policy/models.git] / models-interactions / model-actors / actor.appc / src / test / java / org / onap / policy / controlloop / actor / appc / AppcServiceProviderTest.java
index fc57d50..068f0b5 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * AppcServiceProviderTest
  * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
  * Modifications Copyright (C) 2019 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
 package org.onap.policy.controlloop.actor.appc;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
 
 import java.time.Instant;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.UUID;
-
+import java.util.stream.Collectors;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -37,11 +38,12 @@ import org.onap.policy.appc.Request;
 import org.onap.policy.appc.Response;
 import org.onap.policy.appc.ResponseCode;
 import org.onap.policy.appc.util.Serialization;
-import org.onap.policy.common.endpoints.http.server.HttpServletServer;
+import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
 import org.onap.policy.controlloop.ControlLoopEventStatus;
 import org.onap.policy.controlloop.ControlLoopOperation;
 import org.onap.policy.controlloop.ControlLoopTargetType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
+import org.onap.policy.controlloop.actor.test.BasicActor;
 import org.onap.policy.controlloop.policy.Policy;
 import org.onap.policy.controlloop.policy.Target;
 import org.onap.policy.controlloop.policy.TargetType;
@@ -49,7 +51,13 @@ import org.onap.policy.simulators.Util;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class AppcServiceProviderTest {
+public class AppcServiceProviderTest extends BasicActor {
+
+    private static final String GENERIC_VNF_ID = "generic-vnf.vnf-id";
+
+    private static final String MODIFY_CONFIG = "ModifyConfig";
+
+    private static final String JSON_OUTPUT = "JSON Output: \n";
 
     private static final Logger logger = LoggerFactory.getLogger(AppcServiceProviderTest.class);
 
@@ -57,10 +65,18 @@ public class AppcServiceProviderTest {
     private static final ControlLoopOperation operation;
     private static final Policy policy;
 
+    private static final String KEY1 = "my-keyA";
+    private static final String KEY2 = "my-keyB";
+    private static final String SUBKEY = "sub-key";
+
+    private static final String VALUE1 = "'my-value'".replace('\'', '"');
+    private static final String VALUE2 = "{'sub-key':20}".replace('\'', '"');
+    private static final String SUBVALUE = "20";
+
     static {
         /*
-         * Construct an onset with an AAI subtag containing generic-vnf.vnf-id and a target type of
-         * VM.
+         * Construct an onset with an AAI subtag containing generic-vnf.vnf-id and a
+         * target type of VM.
          */
         onsetEvent = new VirtualControlLoopEvent();
         onsetEvent.setClosedLoopControlName("closedLoopControlName-Test");
@@ -77,7 +93,7 @@ public class AppcServiceProviderTest {
         /* Construct an operation with an APPC actor and ModifyConfig operation. */
         operation = new ControlLoopOperation();
         operation.setActor("APPC");
-        operation.setOperation("ModifyConfig");
+        operation.setOperation(MODIFY_CONFIG);
         operation.setTarget("VNF");
         operation.setEnd(Instant.now());
         operation.setSubRequestId("1");
@@ -89,7 +105,7 @@ public class AppcServiceProviderTest {
         policy.setActor("APPC");
         policy.setTarget(new Target(TargetType.VNF));
         policy.getTarget().setResourceID("Eace933104d443b496b8.nodes.heat.vpg");
-        policy.setRecipe("ModifyConfig");
+        policy.setRecipe(MODIFY_CONFIG);
         policy.setPayload(null);
         policy.setRetry(2);
         policy.setTimeout(300);
@@ -98,14 +114,12 @@ public class AppcServiceProviderTest {
 
     /**
      * Set up before test class.
+     *
+     * @throws Exception if the A&AI simulator cannot be started
      */
     @BeforeClass
-    public static void setUpSimulator() {
-        try {
-            Util.buildAaiSim();
-        } catch (Exception e) {
-            fail(e.getMessage());
-        }
+    public static void setUpSimulator() throws Exception {
+        Util.buildAaiSim();
     }
 
     /**
@@ -113,11 +127,82 @@ public class AppcServiceProviderTest {
      */
     @AfterClass
     public static void tearDownSimulator() {
-        HttpServletServer.factory.destroy();
+        HttpServletServerFactoryInstance.getServerFactory().destroy();
+    }
+
+    @Test
+    public void testConstructor() {
+        AppcActorServiceProvider prov = new AppcActorServiceProvider();
+        assertEquals(0, prov.getSequenceNumber());
+
+        // verify that it has the operators we expect
+        var expected = Arrays.asList(ModifyConfigOperation.NAME).stream().sorted().collect(Collectors.toList());
+        var actual = prov.getOperationNames().stream().sorted().collect(Collectors.toList());
+
+        assertEquals(expected.toString(), actual.toString());
+    }
+
+    @Test
+    public void testActorService() {
+        // verify that it all plugs into the ActorService
+        verifyActorService(AppcActorServiceProvider.NAME, "service.yaml");
+    }
+
+    @Test
+    public void testConstructModifyConfigRequest() {
+        policy.setPayload(new HashMap<>());
+        policy.getPayload().put(KEY1, VALUE1);
+        policy.getPayload().put(KEY2, VALUE2);
+
+        Request appcRequest;
+        appcRequest = AppcActorServiceProvider.constructRequest(onsetEvent, operation, policy, "vnf01");
+
+        /* The service provider must return a non null APPC request */
+        assertNotNull(appcRequest);
+
+        /* A common header is required and cannot be null */
+        assertNotNull(appcRequest.getCommonHeader());
+        assertEquals(appcRequest.getCommonHeader().getRequestId(), onsetEvent.getRequestId());
+
+        /* An action is required and cannot be null */
+        assertNotNull(appcRequest.getAction());
+        assertEquals(MODIFY_CONFIG, appcRequest.getAction());
+
+        /* A payload is required and cannot be null */
+        assertNotNull(appcRequest.getPayload());
+        assertTrue(appcRequest.getPayload().containsKey(GENERIC_VNF_ID));
+        assertNotNull(appcRequest.getPayload().get(GENERIC_VNF_ID));
+        assertTrue(appcRequest.getPayload().containsKey(KEY1));
+        assertTrue(appcRequest.getPayload().containsKey(KEY2));
+
+        logger.debug("APPC Request: \n" + appcRequest.toString());
+
+        /* Print out request as json to make sure serialization works */
+        String jsonRequest = Serialization.gsonPretty.toJson(appcRequest);
+        logger.debug(JSON_OUTPUT + jsonRequest);
+
+        /* The JSON string must contain the following fields */
+        assertTrue(jsonRequest.contains("CommonHeader"));
+        assertTrue(jsonRequest.contains("Action"));
+        assertTrue(jsonRequest.contains(MODIFY_CONFIG));
+        assertTrue(jsonRequest.contains("Payload"));
+        assertTrue(jsonRequest.contains(GENERIC_VNF_ID));
+        assertTrue(jsonRequest.contains(KEY1));
+        assertTrue(jsonRequest.contains(KEY2));
+        assertTrue(jsonRequest.contains(SUBKEY));
+        assertTrue(jsonRequest.contains(SUBVALUE));
+        assertFalse(jsonRequest.contains(SUBVALUE + ".0"));
+
+        Response appcResponse = new Response(appcRequest);
+        appcResponse.getStatus().setCode(ResponseCode.SUCCESS.getValue());
+        appcResponse.getStatus().setDescription("AppC success");
+        /* Print out request as json to make sure serialization works */
+        String jsonResponse = Serialization.gsonPretty.toJson(appcResponse);
+        logger.debug(JSON_OUTPUT + jsonResponse);
     }
 
     @Test
-    public void constructModifyConfigRequestTest() {
+    public void testConstructModifyConfigRequest_NullPayload() {
 
         Request appcRequest;
         appcRequest = AppcActorServiceProvider.constructRequest(onsetEvent, operation, policy, "vnf01");
@@ -131,34 +216,32 @@ public class AppcServiceProviderTest {
 
         /* An action is required and cannot be null */
         assertNotNull(appcRequest.getAction());
-        assertEquals("ModifyConfig", appcRequest.getAction());
+        assertEquals(MODIFY_CONFIG, appcRequest.getAction());
 
         /* A payload is required and cannot be null */
         assertNotNull(appcRequest.getPayload());
-        assertTrue(appcRequest.getPayload().containsKey("generic-vnf.vnf-id"));
-        assertNotNull(appcRequest.getPayload().get("generic-vnf.vnf-id"));
-        assertTrue(appcRequest.getPayload().containsKey("pg-streams"));
+        assertTrue(appcRequest.getPayload().containsKey(GENERIC_VNF_ID));
+        assertNotNull(appcRequest.getPayload().get(GENERIC_VNF_ID));
 
         logger.debug("APPC Request: \n" + appcRequest.toString());
 
         /* Print out request as json to make sure serialization works */
         String jsonRequest = Serialization.gsonPretty.toJson(appcRequest);
-        logger.debug("JSON Output: \n" + jsonRequest);
+        logger.debug(JSON_OUTPUT + jsonRequest);
 
         /* The JSON string must contain the following fields */
         assertTrue(jsonRequest.contains("CommonHeader"));
         assertTrue(jsonRequest.contains("Action"));
-        assertTrue(jsonRequest.contains("ModifyConfig"));
+        assertTrue(jsonRequest.contains(MODIFY_CONFIG));
         assertTrue(jsonRequest.contains("Payload"));
-        assertTrue(jsonRequest.contains("generic-vnf.vnf-id"));
-        assertTrue(jsonRequest.contains("pg-streams"));
+        assertTrue(jsonRequest.contains(GENERIC_VNF_ID));
 
         Response appcResponse = new Response(appcRequest);
         appcResponse.getStatus().setCode(ResponseCode.SUCCESS.getValue());
         appcResponse.getStatus().setDescription("AppC success");
         /* Print out request as json to make sure serialization works */
         String jsonResponse = Serialization.gsonPretty.toJson(appcResponse);
-        logger.debug("JSON Output: \n" + jsonResponse);
+        logger.debug(JSON_OUTPUT + jsonResponse);
     }
 
     @Test