Merge "Added ConfigurationScaleOutBB, tasks, and tests"
authorSeshu Kumar M <seshu.kumar.m@huawei.com>
Wed, 5 Sep 2018 09:35:10 +0000 (09:35 +0000)
committerGerrit Code Review <gerrit@onap.org>
Wed, 5 Sep 2018 09:35:10 +0000 (09:35 +0000)
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/appc/payload/beans/ConfigScaleOutPayload.java [new file with mode: 0644]
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/appc/payload/beans/RequestParametersConfigScaleOut.java [new file with mode: 0644]
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/generalobjects/RequestContext.java
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ConfigurationScaleOutBB.bpmn [new file with mode: 0644]
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/BaseBPMNTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ConfigurationScaleOutBBTest.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ConfigurationScaleOut.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/data/TestDataSetup.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ConfigurationScaleOutTest.java [new file with mode: 0644]

diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/appc/payload/beans/ConfigScaleOutPayload.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/appc/payload/beans/ConfigScaleOutPayload.java
new file mode 100644 (file)
index 0000000..9035f4d
--- /dev/null
@@ -0,0 +1,58 @@
+/* ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 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.so.bpmn.appc.payload.beans;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class ConfigScaleOutPayload {
+
+       @JsonProperty("request-parameters")
+       private RequestParametersConfigScaleOut requestParameters;
+       @JsonProperty("configuration-parameters")
+       private Map<String, String> configurationParameters = new HashMap<>();
+
+       public RequestParametersConfigScaleOut getRequestParameters() {
+               return requestParameters;
+       }
+       
+       public void setRequestParameters(RequestParametersConfigScaleOut requestParameters) {
+               this.requestParameters = requestParameters;
+       }
+       
+       public Map<String, String> getConfigurationParameters() {
+               return configurationParameters;
+       }
+
+       public void setConfigurationParameters(Map<String, String> configurationParameters) {
+               this.configurationParameters = configurationParameters;
+       }
+
+       @Override
+       public String toString() {
+               final StringBuilder sb = new StringBuilder("ConfigScaleOutPayload{");
+               sb.append("requestParameters=").append(requestParameters);
+               sb.append(", configurationParameters='").append(configurationParameters);
+               sb.append('}');
+               return sb.toString();
+       }
+}
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/appc/payload/beans/RequestParametersConfigScaleOut.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/appc/payload/beans/RequestParametersConfigScaleOut.java
new file mode 100644 (file)
index 0000000..0333fd7
--- /dev/null
@@ -0,0 +1,55 @@
+/* ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 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.so.bpmn.appc.payload.beans;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class RequestParametersConfigScaleOut {
+
+       @JsonProperty("vnf-host-ip-address")
+       private String vnfHostIpAddress;
+       @JsonProperty("vf-module-id")
+       private String vfModuleId;
+
+       public String getVnfHostIpAddress() {
+               return vnfHostIpAddress;
+       }
+
+       public void setVnfHostIpAddress(String vnfHostIpAddress) {
+               this.vnfHostIpAddress = vnfHostIpAddress;
+       }
+
+       public String getVfModuleId() {
+               return vfModuleId;
+       }
+
+       public void setVfModuleId(String vfModuleId) {
+               this.vfModuleId = vfModuleId;
+       }
+
+       @Override
+       public String toString() {
+               final StringBuilder sb = new StringBuilder("RequestParametersConfigScaleOut{");
+               sb.append("vnf-host-ip-address=").append(vnfHostIpAddress);
+               sb.append(", vf-module-id='").append(vfModuleId);
+               sb.append('}');
+               return sb.toString();
+       }
+}
index 7715651..d37c8d1 100644 (file)
 package org.onap.so.bpmn.servicedecomposition.generalobjects;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonRootName;
@@ -51,6 +54,8 @@ public class RequestContext implements Serializable{
        private String msoRequestId;
        @JsonProperty("requestParameters")
        private RequestParameters requestParameters;
+       @JsonProperty("configurationParameters")
+       private List<Map<String, String>> configurationParameters = new ArrayList<>();
        
        public String getServiceURI() {
                return serviceURI;
@@ -112,4 +117,10 @@ public class RequestContext implements Serializable{
        public void setRequestParameters(RequestParameters requestParameters) {
                this.requestParameters = requestParameters;
        }
+       public List<Map<String, String>> getConfigurationParameters() {
+               return configurationParameters;
+       }
+       public void setConfigurationParameters(List<Map<String, String>> configurationParameters) {
+               this.configurationParameters = configurationParameters;
+       }
 }
diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ConfigurationScaleOutBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ConfigurationScaleOutBB.bpmn
new file mode 100644 (file)
index 0000000..98a6049
--- /dev/null
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_0ky0lyw" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0">
+  <bpmn:process id="ConfigurationScaleOutBB" name="ConfigurationScaleOutBB" isExecutable="true">
+    <bpmn:startEvent id="Start_ConfigScaleOutBB" name="Start">
+      <bpmn:outgoing>SequenceFlow_06ab7wm</bpmn:outgoing>
+    </bpmn:startEvent>
+    <bpmn:serviceTask id="QueryVfModule" name="Query VF Module (SDNC)" camunda:expression="${SDNCQueryTasks.queryVfModule(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_06ab7wm</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_149xlbu</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_06ab7wm" sourceRef="Start_ConfigScaleOutBB" targetRef="QueryVfModule" />
+    <bpmn:endEvent id="End_ConfigScaleOutBB" name="End">
+      <bpmn:incoming>SequenceFlow_12srn62</bpmn:incoming>
+    </bpmn:endEvent>
+    <bpmn:sequenceFlow id="SequenceFlow_12srn62" sourceRef="Call-AppC-ConfigScaleOut" targetRef="End_ConfigScaleOutBB" />
+    <bpmn:sequenceFlow id="SequenceFlow_149xlbu" sourceRef="QueryVfModule" targetRef="GetConfigScaleOutParams" />
+    <bpmn:sequenceFlow id="SequenceFlow_1juznaa" sourceRef="GetConfigScaleOutParams" targetRef="Call-AppC-ConfigScaleOut" />
+    <bpmn:serviceTask id="GetConfigScaleOutParams" name="Get Config Scale Out Params" camunda:expression="${ConfigurationScaleOut.setParamsForConfigurationScaleOut(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_149xlbu</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1juznaa</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:serviceTask id="Call-AppC-ConfigScaleOut" name="Call APP-C For&#10;Configuration Scale Out&#10;" camunda:expression="${ConfigurationScaleOut.callAppcClient(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_1juznaa</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_12srn62</bpmn:outgoing>
+    </bpmn:serviceTask>
+  </bpmn:process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="ConfigurationScaleOutBB">
+      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="Start_ConfigScaleOutBB">
+        <dc:Bounds x="173" y="102" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="179" y="145" width="25" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1juzqvs_di" bpmnElement="QueryVfModule">
+        <dc:Bounds x="261" y="80" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_06ab7wm_di" bpmnElement="SequenceFlow_06ab7wm">
+        <di:waypoint xsi:type="dc:Point" x="209" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="261" y="120" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="EndEvent_07e01q3_di" bpmnElement="End_ConfigScaleOutBB">
+        <dc:Bounds x="694" y="102" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="702" y="145" width="20" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_12srn62_di" bpmnElement="SequenceFlow_12srn62">
+        <di:waypoint xsi:type="dc:Point" x="653" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="694" y="120" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_149xlbu_di" bpmnElement="SequenceFlow_149xlbu">
+        <di:waypoint xsi:type="dc:Point" x="361" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="406" y="120" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1juznaa_di" bpmnElement="SequenceFlow_1juznaa">
+        <di:waypoint xsi:type="dc:Point" x="506" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="553" y="120" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_1jq0gvz_di" bpmnElement="GetConfigScaleOutParams">
+        <dc:Bounds x="406" y="80" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1778mx4_di" bpmnElement="Call-AppC-ConfigScaleOut">
+        <dc:Bounds x="553" y="80" width="100" height="80" />
+      </bpmndi:BPMNShape>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</bpmn:definitions>
index 21b6dd4..e8891ee 100644 (file)
@@ -49,6 +49,7 @@ import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterImpl;
 import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignNetwork;
 import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignNetworkBBUtils;
 import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignVnf;
+import org.onap.so.bpmn.infrastructure.flowspecific.tasks.ConfigurationScaleOut;
 import org.onap.so.bpmn.infrastructure.flowspecific.tasks.CreateNetwork;
 import org.onap.so.bpmn.infrastructure.flowspecific.tasks.CreateNetworkCollection;
 import org.onap.so.bpmn.infrastructure.flowspecific.tasks.GenericVnfHealthCheck;
@@ -186,6 +187,9 @@ public abstract class BaseBPMNTest {
        @MockBean
        protected GenericVnfHealthCheck genericVnfHealthCheck;
        
+       @MockBean
+       protected ConfigurationScaleOut configurationScaleOut;
+       
        @LocalServerPort
        private int port;
 
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ConfigurationScaleOutBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ConfigurationScaleOutBBTest.java
new file mode 100644 (file)
index 0000000..edf131d
--- /dev/null
@@ -0,0 +1,39 @@
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+
+
+public class ConfigurationScaleOutBBTest extends BaseBPMNTest {
+
+       @Test
+       public void sunnyDayConfigurationScaleOutBBTest() throws InterruptedException, IOException {
+               ProcessInstance pi = runtimeService.startProcessInstanceByKey("ConfigurationScaleOutBB", variables);
+               assertThat(pi).isNotNull();
+               assertThat(pi).isStarted().hasPassedInOrder("Start_ConfigScaleOutBB", "QueryVfModule", "GetConfigScaleOutParams",
+                                       "Call-AppC-ConfigScaleOut", "End_ConfigScaleOutBB");
+               assertThat(pi).isEnded();
+       }
+
+       @Test
+       public void configurationScaleOutBBExceptionTest() throws Exception {
+               doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdncQueryTasks).queryVfModule(any(BuildingBlockExecution.class));
+               ProcessInstance pi = runtimeService.startProcessInstanceByKey("ConfigurationScaleOutBB", variables);
+               assertThat(pi).isNotNull();
+               assertThat(pi).isStarted()
+                               .hasPassedInOrder("Start_ConfigScaleOutBB", "QueryVfModule")
+                               .hasNotPassed("GetConfigScaleOutParams", "Call-AppC-ConfigScaleOut", "End_ConfigScaleOutBB");
+               assertThat(pi).isEnded();
+       }
+}
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ConfigurationScaleOut.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ConfigurationScaleOut.java
new file mode 100644 (file)
index 0000000..d13c5db
--- /dev/null
@@ -0,0 +1,144 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 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.so.bpmn.infrastructure.flowspecific.tasks;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import org.onap.appc.client.lcm.model.Action;
+import org.onap.so.bpmn.appc.payload.beans.ConfigScaleOutPayload;
+import org.onap.so.bpmn.appc.payload.beans.RequestParametersConfigScaleOut;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
+import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
+import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
+import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
+import org.onap.so.client.appc.ApplicationControllerAction;
+import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.db.catalog.beans.ControllerSelectionReference;
+import org.onap.so.db.catalog.client.CatalogDbClient;
+import org.onap.so.logger.MsoLogger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.jayway.jsonpath.JsonPath;
+
+@Component
+public class ConfigurationScaleOut {
+
+       private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, ConfigurationScaleOut.class);
+       @Autowired
+       private ExceptionBuilder exceptionUtil;
+       @Autowired
+       private ExtractPojosForBB extractPojosForBB;
+       @Autowired
+       private CatalogDbClient catalogDbClient;
+       @Autowired
+       private ApplicationControllerAction appCClient;
+       private static final String ACTION = "action";
+       private static final String MSO_REQUEST_ID = "msoRequestId";
+       private static final String VNF_ID = "vnfId";
+       private static final String VNF_NAME = "vnfName";
+       private static final String VFMODULE_ID = "vfModuleId";
+       private static final String CONTROLLER_TYPE = "controllerType";
+       private static final String PAYLOAD = "payload";
+       
+       public void setParamsForConfigurationScaleOut(BuildingBlockExecution execution) {
+               
+               GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
+               
+               try {
+                       List<Map<String, String>> jsonPathForCfgParams = gBBInput.getRequestContext().getConfigurationParameters();
+                       String key = null;
+                       String paramValue = null;
+                       ObjectMapper mapper = new ObjectMapper();
+                       String configScaleOutPayloadString = null;
+                       ControllerSelectionReference controllerSelectionReference;
+                       ConfigScaleOutPayload configPayload = new ConfigScaleOutPayload();
+                       GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
+                       String vnfId = vnf.getVnfId();
+                       String vnfName = vnf.getVnfName();      
+                       String vnfType = vnf.getVnfType();
+                       String actionCategory = Action.ConfigScaleOut.toString();
+                       controllerSelectionReference = catalogDbClient.getControllerSelectionReferenceByVnfTypeAndActionCategory(vnfType, actionCategory);
+                       String controllerName = controllerSelectionReference.getControllerName();
+                       
+                       VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
+                       String sdncVfModuleQueryResponse = execution.getVariable("SDNCQueryResponse_" + vfModule.getVfModuleId());
+                       
+                       Map<String, String> paramsMap = new HashMap<>();
+                       RequestParametersConfigScaleOut requestParameters = new RequestParametersConfigScaleOut();
+                       String configScaleOutParam = null;
+                       if (jsonPathForCfgParams != null) {
+                               for (Map<String, String> param : jsonPathForCfgParams) {
+                                       for (Map.Entry<String,String> entry : param.entrySet()) {
+                                               key = entry.getKey();
+                                               paramValue = entry.getValue();
+                                               configScaleOutParam = JsonPath.parse(sdncVfModuleQueryResponse).read(paramValue);
+                                               if(configScaleOutParam != null){
+                                                       paramsMap.put(key, configScaleOutParam);
+                                               }
+                                       }
+                               }
+                       }
+                       requestParameters.setVfModuleId(vfModule.getVfModuleId());
+                       requestParameters.setVnfHostIpAddress(vnf.getIpv4OamAddress());
+                       configPayload.setConfigurationParameters(paramsMap);
+                       configPayload.setRequestParameters(requestParameters);
+                       configScaleOutPayloadString = mapper.writeValueAsString(configPayload);
+                       configScaleOutPayloadString = configScaleOutPayloadString.replaceAll("\"", "\\\\\"");
+                       
+                       execution.setVariable(ACTION, actionCategory);
+                       execution.setVariable(MSO_REQUEST_ID, gBBInput.getRequestContext().getMsoRequestId());
+                       execution.setVariable(VNF_ID, vnfId);
+                       execution.setVariable(VNF_NAME, vnfName);
+                       execution.setVariable(VFMODULE_ID, vfModule.getVfModuleId());
+                       execution.setVariable(CONTROLLER_TYPE, controllerName);
+                       execution.setVariable(PAYLOAD, configScaleOutPayloadString);
+               } catch (Exception ex) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+               }
+       }
+       
+       public void callAppcClient(BuildingBlockExecution execution) {
+               try{
+                       Action commandAction = Action.valueOf(execution.getVariable(ACTION));
+                       String msoRequestId = execution.getVariable(MSO_REQUEST_ID);
+                       String vnfId = execution.getVariable(VNF_ID);
+                       Optional<String> payloadString = null;
+                       if(execution.getVariable(PAYLOAD) != null){
+                               String pay = execution.getVariable(PAYLOAD);
+                               payloadString =  Optional.of(pay);
+                       }
+                       String controllerType = execution.getVariable(CONTROLLER_TYPE);
+                       HashMap<String, String> payloadInfo = new HashMap<>();
+                       payloadInfo.put(VNF_NAME, execution.getVariable(VNF_NAME));
+                       payloadInfo.put(VFMODULE_ID,execution.getVariable(VFMODULE_ID));
+                       //PayloadInfo contains extra information that adds on to payload before making request to appc
+                       appCClient.runAppCCommand(commandAction, msoRequestId, vnfId, payloadString, payloadInfo, controllerType);
+               }catch(Exception ex){
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+               }
+       }
+}
index a20b68b..675e8a1 100644 (file)
@@ -459,6 +459,7 @@ public class TestDataSetup{
                genericVnf.setVnfId("testVnfId" + genericVnfCounter);
                genericVnf.setVnfName("testVnfName" + genericVnfCounter);
                genericVnf.setVnfType("testVnfType" + genericVnfCounter);
+               genericVnf.setIpv4OamAddress("10.222.22.2");
                
                Platform platform = new Platform();
                platform.setPlatformName("testPlatformName");
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ConfigurationScaleOutTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ConfigurationScaleOutTest.java
new file mode 100644 (file)
index 0000000..dabdc68
--- /dev/null
@@ -0,0 +1,125 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 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.so.bpmn.infrastructure.flowspecific.tasks;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.UUID;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.appc.client.lcm.model.Action;
+import org.onap.so.bpmn.BaseTaskTest;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
+import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
+import org.onap.so.db.catalog.beans.ControllerSelectionReference;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class ConfigurationScaleOutTest extends BaseTaskTest {
+       
+       @Autowired
+       private ConfigurationScaleOut configurationScaleOut;    
+       
+       private GenericVnf genericVnf;
+       private VfModule vfModule;
+       private RequestContext requestContext;
+       private String msoRequestId;
+       private List<Map<String, String>> configurationParameters = new ArrayList<>();
+       private Map<String, String> configParamsMap = new HashMap<>();
+       
+
+
+       @Before
+       public void before() {
+               genericVnf = setGenericVnf();
+               vfModule = setVfModule();
+               msoRequestId = UUID.randomUUID().toString();
+               requestContext = setRequestContext();
+               requestContext.setMsoRequestId(msoRequestId);
+               configParamsMap.put("availability-zone", "$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]");
+               configParamsMap.put("vnf-id", "$.vnf-topology.vnf-topology-identifier-structure.vnf-id");
+               configurationParameters.add(configParamsMap);
+               requestContext.setConfigurationParameters(configurationParameters);
+               gBBInput.setRequestContext(requestContext);
+       }
+       
+       @Test
+       public void setParamsForConfigurationScaleOutTest() throws Exception {
+               ControllerSelectionReference controllerSelectionReference = new ControllerSelectionReference();
+               controllerSelectionReference.setControllerName("testName");
+               controllerSelectionReference.setActionCategory("testAction");
+               controllerSelectionReference.setVnfType("testVnfType");
+               String sdncResponse =  new String(Files.readAllBytes(Paths.get("src/test/resources/__files/SDNCClientGetResponse.json")));
+               String expectedPayload = "{\\\"request-parameters\\\":{\\\"vnf-host-ip-address\\\":\\\"10.222.22.2\\\","
+                               + "\\\"vf-module-id\\\":\\\"testVfModuleId1\\\"},\\\"configuration-parameters\\\""
+                               + ":{\\\"vnf-id\\\":\\\"66dac89b-2a5b-4cb9-b22e-a7e4488fb3db\\\",\\\"availability-zone\\\":\\\"AZ-MN02\\\"}}";
+               execution.setVariable("SDNCQueryResponse_" + vfModule.getVfModuleId(), sdncResponse);
+               
+               doReturn(controllerSelectionReference).when(catalogDbClient).getControllerSelectionReferenceByVnfTypeAndActionCategory(genericVnf.getVnfType(), Action.ConfigScaleOut.toString());
+               
+               configurationScaleOut.setParamsForConfigurationScaleOut(execution);
+               
+               assertEquals(genericVnf.getVnfId(), execution.getVariable("vnfId"));
+               assertEquals(genericVnf.getVnfName(), execution.getVariable("vnfName"));
+               assertEquals("ConfigScaleOut", execution.getVariable("action"));
+               assertEquals(requestContext.getMsoRequestId(), execution.getVariable("msoRequestId"));
+               assertEquals(controllerSelectionReference.getControllerName(), execution.getVariable("controllerType"));
+               assertEquals(vfModule.getVfModuleId(), execution.getVariable("vfModuleId"));
+               assertEquals(expectedPayload, execution.getVariable("payload"));
+       }
+       @Test
+       public void callAppcClientTest() throws Exception { 
+               Action action = Action.ConfigScaleOut;
+               String vnfId = genericVnf.getVnfId();
+               String controllerType = "testType";
+               String payload = "{\\\"request-parameters\\\":{\\\"vnf-host-ip-address\\\":\\\"10.222.22.2\\\","
+                               + "\\\"vf-module-id\\\":\\\"testVfModuleId1\\\"},\\\"configuration-parameters\\\""
+                               + ":{\\\"vnf-id\\\":\\\"66dac89b-2a5b-4cb9-b22e-a7e4488fb3db\\\",\\\"availability-zone\\\":\\\"AZ-MN02\\\"}}";
+               HashMap<String, String> payloadInfo = new HashMap<String, String>();
+               payloadInfo.put("vnfName", "testVnfName");
+               payloadInfo.put("vfModuleId", "testVfModuleId");
+       
+               execution.setVariable("action", Action.ConfigScaleOut.toString());
+               execution.setVariable("msoRequestId", msoRequestId);
+               execution.setVariable("controllerType", controllerType);
+               execution.setVariable("vnfId", "testVnfId1");
+               execution.setVariable("vnfName", "testVnfName");
+               execution.setVariable("vfModuleId", "testVfModuleId");
+               execution.setVariable("payload", payload);
+               
+               doNothing().when(appCClient).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType);
+               
+               configurationScaleOut.callAppcClient(execution);
+               verify(appCClient, times(1)).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType);
+       }
+
+}