Added instatntiation job monitoring 61/83961/2
authorLathish <lathishbabu.ganesan@est.tech>
Tue, 2 Apr 2019 12:24:11 +0000 (12:24 +0000)
committerLathish <lathishbabu.ganesan@est.tech>
Tue, 2 Apr 2019 12:24:11 +0000 (12:24 +0000)
Issue-ID: SO-1630
Change-Id: I2e921f0f86553b804ea119cd640b8c4e1b1195b9
Signed-off-by: Lathish <lathishbabu.ganesan@est.tech>
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/EtsiVnfInstantiateBB.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/MonitorVnfmCreateJob.bpmn [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/Constants.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/MonitorVnfmCreateJobTask.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/VnfmAdapterServiceProvider.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/VnfmAdapterServiceProviderImpl.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/VnfmAdapterUrlProvider.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/MonitorVnfmCreateJobTaskTest.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/TestConstants.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/VnfmAdapterServiceProviderImplTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/VnfmAdapterUrlProviderTest.java

index 9437d02..b248ea1 100644 (file)
@@ -10,7 +10,7 @@
     </bpmn:startEvent>
     <bpmn:sequenceFlow id="SequenceFlow_016sgof" sourceRef="StartEvent_0ru3x55" targetRef="ServiceTask_1jf7hlc" />
     <bpmn:endEvent id="EndEvent_001k15i">
-      <bpmn:incoming>SequenceFlow_0hp0ka1</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_1owx4yu</bpmn:incoming>
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_0f0vsnv" sourceRef="ServiceTask_02e82t2" targetRef="ServiceTask_06ao4xu" />
     <bpmn:serviceTask id="ServiceTask_06ao4xu" name="&#10;Invoke VNFM Adaptor&#10;" camunda:asyncAfter="true" camunda:expression="${VnfmAdapterCreateVnfTask.invokeVnfmAdapter(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
       <bpmn:outgoing>SequenceFlow_18fsqzd</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_18fsqzd" sourceRef="ServiceTask_1jf7hlc" targetRef="ServiceTask_02e82t2" />
-    <bpmn:sequenceFlow id="SequenceFlow_0hp0ka1" sourceRef="ServiceTask_06ao4xu" targetRef="EndEvent_001k15i" />
+    <bpmn:sequenceFlow id="SequenceFlow_0hp0ka1" sourceRef="ServiceTask_06ao4xu" targetRef="CallActivity_0fuqfru" />
+    <bpmn:callActivity id="CallActivity_0fuqfru" name="Monitor Instantiation Job" calledElement="MonitorVnfmCreateJob">
+      <bpmn:extensionElements>
+        <camunda:in source="SDNCRequest" target="SDNCRequest" />
+        <camunda:out source="SDNCResponse" target="SDNCResponse" />
+        <camunda:out source="WorkflowException" target="WorkflowException" />
+        <camunda:in source="mso-request-id" target="mso-request-id" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>SequenceFlow_0hp0ka1</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1owx4yu</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:sequenceFlow id="SequenceFlow_1owx4yu" sourceRef="CallActivity_0fuqfru" targetRef="EndEvent_001k15i" />
   </bpmn:process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="EtsiVnfInstantiateBB">
@@ -37,7 +48,7 @@
         <di:waypoint x="332" y="267" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_001k15i_di" bpmnElement="EndEvent_001k15i">
-        <dc:Bounds x="783" y="249" width="36" height="36" />
+        <dc:Bounds x="913" y="249" width="36" height="36" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0f0vsnv_di" bpmnElement="SequenceFlow_0f0vsnv">
         <di:waypoint x="580" y="267" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0hp0ka1_di" bpmnElement="SequenceFlow_0hp0ka1">
         <di:waypoint x="729" y="267" />
-        <di:waypoint x="783" y="267" />
+        <di:waypoint x="770" y="267" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="CallActivity_0fuqfru_di" bpmnElement="CallActivity_0fuqfru">
+        <dc:Bounds x="770" y="227" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1owx4yu_di" bpmnElement="SequenceFlow_1owx4yu">
+        <di:waypoint x="870" y="267" />
+        <di:waypoint x="913" y="267" />
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/MonitorVnfmCreateJob.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/MonitorVnfmCreateJob.bpmn
new file mode 100644 (file)
index 0000000..fa9bf7e
--- /dev/null
@@ -0,0 +1,160 @@
+<?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_12gnsyw" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="2.0.3">
+  <bpmn:process id="MonitorVnfmCreateJob" name="MonitorVnfmCreateJob" isExecutable="true">
+    <bpmn:startEvent id="StartEvent_1">
+      <bpmn:outgoing>SequenceFlow_1x3tbl0</bpmn:outgoing>
+    </bpmn:startEvent>
+    <bpmn:endEvent id="EndEvent_0rf1gde">
+      <bpmn:incoming>SequenceFlow_1543qy7</bpmn:incoming>
+    </bpmn:endEvent>
+    <bpmn:subProcess id="SubProcess_19j0v63">
+      <bpmn:incoming>SequenceFlow_1x3tbl0</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1v4yr3f</bpmn:outgoing>
+      <bpmn:startEvent id="StartEvent_01r97z2">
+        <bpmn:outgoing>SequenceFlow_0s1plu9</bpmn:outgoing>
+      </bpmn:startEvent>
+      <bpmn:exclusiveGateway id="ExclusiveGateway_1hkl6yy" default="SequenceFlow_1vmxw9g">
+        <bpmn:incoming>SequenceFlow_153a3kp</bpmn:incoming>
+        <bpmn:outgoing>SequenceFlow_1vmxw9g</bpmn:outgoing>
+        <bpmn:outgoing>SequenceFlow_0is7myf</bpmn:outgoing>
+      </bpmn:exclusiveGateway>
+      <bpmn:intermediateCatchEvent id="IntermediateCatchEvent_1besn3n" name="Wait between checks" camunda:asyncAfter="true">
+        <bpmn:incoming>SequenceFlow_1vmxw9g</bpmn:incoming>
+        <bpmn:outgoing>SequenceFlow_0etw572</bpmn:outgoing>
+        <bpmn:timerEventDefinition id="TimerEventDefinition_0qgh11t">
+          <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">PT15S</bpmn:timeDuration>
+        </bpmn:timerEventDefinition>
+      </bpmn:intermediateCatchEvent>
+      <bpmn:endEvent id="EndEvent_1ohsce9">
+        <bpmn:incoming>SequenceFlow_0is7myf</bpmn:incoming>
+      </bpmn:endEvent>
+      <bpmn:sequenceFlow id="SequenceFlow_0s1plu9" sourceRef="StartEvent_01r97z2" targetRef="ServiceTask_17jlnng" />
+      <bpmn:sequenceFlow id="SequenceFlow_0etw572" sourceRef="IntermediateCatchEvent_1besn3n" targetRef="ServiceTask_17jlnng" />
+      <bpmn:serviceTask id="ServiceTask_17jlnng" name="&#10;Get Current Operation Status&#10;" camunda:asyncAfter="true" camunda:expression="${MonitorVnfmCreateJobTask.getCurrentOperationStatus(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+        <bpmn:incoming>SequenceFlow_0etw572</bpmn:incoming>
+        <bpmn:incoming>SequenceFlow_0s1plu9</bpmn:incoming>
+        <bpmn:outgoing>SequenceFlow_153a3kp</bpmn:outgoing>
+      </bpmn:serviceTask>
+      <bpmn:sequenceFlow id="SequenceFlow_1vmxw9g" sourceRef="ExclusiveGateway_1hkl6yy" targetRef="IntermediateCatchEvent_1besn3n" />
+      <bpmn:sequenceFlow id="SequenceFlow_0is7myf" sourceRef="ExclusiveGateway_1hkl6yy" targetRef="EndEvent_1ohsce9">
+        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${MonitorVnfmCreateJobTask.hasOperationFinished(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}</bpmn:conditionExpression>
+      </bpmn:sequenceFlow>
+      <bpmn:sequenceFlow id="SequenceFlow_153a3kp" sourceRef="ServiceTask_17jlnng" targetRef="ExclusiveGateway_1hkl6yy" />
+    </bpmn:subProcess>
+    <bpmn:endEvent id="EndEvent_1w3t3t0" name="Timeout Exception">
+      <bpmn:incoming>SequenceFlow_0bcgtzj</bpmn:incoming>
+      <bpmn:terminateEventDefinition id="TerminateEventDefinition_0fjecl3" />
+    </bpmn:endEvent>
+    <bpmn:boundaryEvent id="BoundaryEvent_0xiabzp" name="Overall Wait" attachedToRef="SubProcess_19j0v63">
+      <bpmn:outgoing>SequenceFlow_1i1o9sh</bpmn:outgoing>
+      <bpmn:timerEventDefinition id="TimerEventDefinition_10kqw61">
+        <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">PT3H</bpmn:timeDuration>
+      </bpmn:timerEventDefinition>
+    </bpmn:boundaryEvent>
+    <bpmn:sequenceFlow id="SequenceFlow_1v4yr3f" sourceRef="SubProcess_19j0v63" targetRef="ServiceTask_1gms128" />
+    <bpmn:sequenceFlow id="SequenceFlow_1i1o9sh" sourceRef="BoundaryEvent_0xiabzp" targetRef="ServiceTask_1s87b92" />
+    <bpmn:sequenceFlow id="SequenceFlow_1x3tbl0" sourceRef="StartEvent_1" targetRef="SubProcess_19j0v63" />
+    <bpmn:serviceTask id="ServiceTask_1s87b92" name="&#10;Time Out Log Failure&#10;" camunda:asyncAfter="true" camunda:expression="${MonitorVnfmCreateJobTask.timeOutLogFailue(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_1i1o9sh</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0bcgtzj</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_0bcgtzj" sourceRef="ServiceTask_1s87b92" targetRef="EndEvent_1w3t3t0" />
+    <bpmn:serviceTask id="ServiceTask_1gms128" name="&#10;Check if operation was successful&#10;" camunda:asyncAfter="true" camunda:expression="${MonitorVnfmCreateJobTask.checkIfOperationWasSuccessful(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_1v4yr3f</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1543qy7</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_1543qy7" sourceRef="ServiceTask_1gms128" targetRef="EndEvent_0rf1gde" />
+  </bpmn:process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="MonitorVnfmCreateJob">
+      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
+        <dc:Bounds x="211" y="430" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_0rf1gde_di" bpmnElement="EndEvent_0rf1gde">
+        <dc:Bounds x="1152" y="200" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="SubProcess_19j0v63_di" bpmnElement="SubProcess_19j0v63" isExpanded="true">
+        <dc:Bounds x="351" y="348" width="523" height="200" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_1w3t3t0_di" bpmnElement="EndEvent_1w3t3t0">
+        <dc:Bounds x="1152" y="422" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1145" y="382" width="49" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="BoundaryEvent_0xiabzp_di" bpmnElement="BoundaryEvent_0xiabzp">
+        <dc:Bounds x="856" y="422" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="844" y="461" width="60" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1v4yr3f_di" bpmnElement="SequenceFlow_1v4yr3f">
+        <di:waypoint x="613" y="348" />
+        <di:waypoint x="613" y="218" />
+        <di:waypoint x="973" y="218" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1i1o9sh_di" bpmnElement="SequenceFlow_1i1o9sh">
+        <di:waypoint x="892" y="440" />
+        <di:waypoint x="973" y="440" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="StartEvent_01r97z2_di" bpmnElement="StartEvent_01r97z2">
+        <dc:Bounds x="380" y="406" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ExclusiveGateway_1hkl6yy_di" bpmnElement="ExclusiveGateway_1hkl6yy" isMarkerVisible="true">
+        <dc:Bounds x="659" y="399" width="50" height="50" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateCatchEvent_1besn3n_di" bpmnElement="IntermediateCatchEvent_1besn3n">
+        <dc:Bounds x="600" y="478" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="587" y="521" width="66" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_1ohsce9_di" bpmnElement="EndEvent_1ohsce9">
+        <dc:Bounds x="772" y="406" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1x3tbl0_di" bpmnElement="SequenceFlow_1x3tbl0">
+        <di:waypoint x="247" y="448" />
+        <di:waypoint x="351" y="448" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_17jlnng_di" bpmnElement="ServiceTask_17jlnng">
+        <dc:Bounds x="475" y="384" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0s1plu9_di" bpmnElement="SequenceFlow_0s1plu9">
+        <di:waypoint x="416" y="424" />
+        <di:waypoint x="475" y="424" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0etw572_di" bpmnElement="SequenceFlow_0etw572">
+        <di:waypoint x="600" y="496" />
+        <di:waypoint x="536" y="496" />
+        <di:waypoint x="536" y="467" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1vmxw9g_di" bpmnElement="SequenceFlow_1vmxw9g">
+        <di:waypoint x="684" y="449" />
+        <di:waypoint x="684" y="496" />
+        <di:waypoint x="636" y="496" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0is7myf_di" bpmnElement="SequenceFlow_0is7myf">
+        <di:waypoint x="709" y="424" />
+        <di:waypoint x="772" y="424" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_153a3kp_di" bpmnElement="SequenceFlow_153a3kp">
+        <di:waypoint x="575" y="424" />
+        <di:waypoint x="659" y="424" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_1s87b92_di" bpmnElement="ServiceTask_1s87b92">
+        <dc:Bounds x="973" y="400" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0bcgtzj_di" bpmnElement="SequenceFlow_0bcgtzj">
+        <di:waypoint x="1073" y="440" />
+        <di:waypoint x="1152" y="440" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_1gms128_di" bpmnElement="ServiceTask_1gms128">
+        <dc:Bounds x="973" y="178" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1543qy7_di" bpmnElement="SequenceFlow_1543qy7">
+        <di:waypoint x="1073" y="218" />
+        <di:waypoint x="1152" y="218" />
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</bpmn:definitions>
index 0153b4b..59f8be5 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
 
+import static com.google.common.collect.Sets.newHashSet;
+import java.util.Set;
+import org.onap.vnfmadapter.v1.model.OperationStateEnum;
+import org.onap.vnfmadapter.v1.model.OperationStatusRetrievalStatusEnum;
+
 /**
  * @author waqas.ikram@est.tech
  */
@@ -30,6 +35,7 @@ public class Constants {
   public static final String INPUT_PARAMETER = "inputParameter";
   public static final String DELETE_VNF_RESPONSE_PARAM_NAME = "deleteVnfResponse";
 
+
   public static final String DOT = ".";
   public static final String UNDERSCORE = "_";
   public static final String SPACE = "\\s+";
@@ -40,5 +46,14 @@ public class Constants {
   public static final String FORWARD_SLASH = "/";
   public static final String PRELOAD_VNFS_URL = "/restconf/config/VNF-API:preload-vnfs/vnf-preload-list/";
 
+
+  public static final Set<OperationStateEnum> OPERATION_FINISHED_STATES =
+      newHashSet(OperationStateEnum.COMPLETED, OperationStateEnum.FAILED, OperationStateEnum.ROLLED_BACK);
+
+  public static final Set<OperationStatusRetrievalStatusEnum> OPERATION_RETRIEVAL_STATES = newHashSet(
+      OperationStatusRetrievalStatusEnum.STATUS_FOUND, OperationStatusRetrievalStatusEnum.WAITING_FOR_STATUS);
+
+  public static final String OPERATION_STATUS_PARAM_NAME = "operationStatus";
+
   private Constants() {}
 }
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/MonitorVnfmCreateJobTask.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/MonitorVnfmCreateJobTask.java
new file mode 100644 (file)
index 0000000..f899310
--- /dev/null
@@ -0,0 +1,154 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Ericsson. 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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
+
+import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.Constants.CREATE_VNF_RESPONSE_PARAM_NAME;
+import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.Constants.OPERATION_FINISHED_STATES;
+import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.Constants.OPERATION_RETRIEVAL_STATES;
+import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.Constants.OPERATION_STATUS_PARAM_NAME;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
+import org.onap.vnfmadapter.v1.model.OperationStateEnum;
+import org.onap.vnfmadapter.v1.model.QueryJobResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import com.google.common.base.Optional;
+
+
+/**
+ * @author waqas.ikram@est.tech
+ *
+ */
+@Component
+public class MonitorVnfmCreateJobTask {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(MonitorVnfmCreateJobTask.class);
+  private final ExceptionBuilder exceptionUtil;
+  private final VnfmAdapterServiceProvider vnfmAdapterServiceProvider;
+
+  @Autowired
+  public MonitorVnfmCreateJobTask(final VnfmAdapterServiceProvider vnfmAdapterServiceProvider,
+      final ExceptionBuilder exceptionUtil) {
+    this.vnfmAdapterServiceProvider = vnfmAdapterServiceProvider;
+    this.exceptionUtil = exceptionUtil;
+  }
+
+  /**
+   * Get the current operation status of instantiation job
+   * 
+   * @param execution {@link org.onap.so.bpmn.common.DelegateExecutionImpl}
+   */
+  public void getCurrentOperationStatus(final BuildingBlockExecution execution) {
+    LOGGER.debug("Executing getCurrentOperationStatus  ...");
+    final CreateVnfResponse vnfInstantiateResponse = execution.getVariable(CREATE_VNF_RESPONSE_PARAM_NAME);
+    execution.setVariable(OPERATION_STATUS_PARAM_NAME, getOperationStatus(execution, vnfInstantiateResponse));
+    LOGGER.debug("Finished executing getCurrentOperationStatus ...");
+  }
+
+  /**
+   * @param execution {@link org.onap.so.bpmn.common.DelegateExecutionImpl}
+   * @return boolean to indicate whether job has competed or not
+   */
+  public boolean hasOperationFinished(final BuildingBlockExecution execution) {
+    LOGGER.debug("Executing hasOperationFinished  ...");
+
+    final Optional<OperationStateEnum> operationStatusOption = execution.getVariable(OPERATION_STATUS_PARAM_NAME);
+    if (operationStatusOption != null && operationStatusOption.isPresent()) {
+      return OPERATION_FINISHED_STATES.contains(operationStatusOption.get());
+    }
+    LOGGER.debug("OperationStatus is not present yet... ");
+    LOGGER.debug("Finished executing hasOperationFinished ...");
+    return false;
+
+  }
+
+  /**
+   * Log and throw exception on timeout for job status
+   * 
+   * @param execution {@link org.onap.so.bpmn.common.DelegateExecutionImpl}
+   */
+  public void timeOutLogFailue(final BuildingBlockExecution execution) {
+    final String message = "Instantiation operation time out";
+    LOGGER.error(message);
+    exceptionUtil.buildAndThrowWorkflowException(execution, 1205, message);
+  }
+
+  /**
+   * Check the final status of instantiation throw exception if not completed successfully
+   * 
+   * @param execution {@link org.onap.so.bpmn.common.DelegateExecutionImpl}
+   */
+  public void checkIfOperationWasSuccessful(final BuildingBlockExecution execution) {
+    LOGGER.debug("Executing checkIfOperationWasSuccessful  ...");
+    final Optional<OperationStateEnum> operationStatusOption = execution.getVariable(OPERATION_STATUS_PARAM_NAME);
+    final CreateVnfResponse vnfInstantiateResponse = execution.getVariable(CREATE_VNF_RESPONSE_PARAM_NAME);
+    if (operationStatusOption == null || !operationStatusOption.isPresent()) {
+      final String message = "Unable to instantiate jobId: "
+          + (vnfInstantiateResponse != null ? vnfInstantiateResponse.getJobId() : "null")
+          + "Unable to retrieve OperationStatus";
+      LOGGER.error(message);
+      exceptionUtil.buildAndThrowWorkflowException(execution, 1206, message);
+    }
+    if (operationStatusOption.isPresent()) {
+      final OperationStateEnum operationStatus = operationStatusOption.get();
+      if (operationStatus != OperationStateEnum.COMPLETED) {
+        final String message = "Unable to instantiate jobId: "
+            + (vnfInstantiateResponse != null ? vnfInstantiateResponse.getJobId() : "null") + " OperationStatus: "
+            + operationStatus;
+        LOGGER.error(message);
+        exceptionUtil.buildAndThrowWorkflowException(execution, 1207, message);
+      }
+      LOGGER.debug("Successfully completed instatiation of job {}", vnfInstantiateResponse);
+    }
+  }
+
+  private Optional<OperationStateEnum> getOperationStatus(final BuildingBlockExecution execution,
+      final CreateVnfResponse vnfInstantiateResponse) {
+
+    final Optional<QueryJobResponse> instantiateOperationJobStatus =
+        vnfmAdapterServiceProvider.getInstantiateOperationJobStatus(vnfInstantiateResponse.getJobId());
+
+    if (instantiateOperationJobStatus.isPresent()) {
+      final QueryJobResponse queryJobResponse = instantiateOperationJobStatus.get();
+
+      if (!OPERATION_RETRIEVAL_STATES.contains(queryJobResponse.getOperationStatusRetrievalStatus())) {
+        final String message =
+            "Recevied invalid operation reterivel state: " + queryJobResponse.getOperationStatusRetrievalStatus();
+        LOGGER.error(message);
+        exceptionUtil.buildAndThrowWorkflowException(execution, 1203, message);
+      }
+
+      if (queryJobResponse.getOperationState() != null) {
+        final OperationStateEnum operationStatus = queryJobResponse.getOperationState();
+        LOGGER.debug("Operation {} with {} and operation retrieval status : {}", queryJobResponse.getId(),
+            operationStatus, queryJobResponse.getOperationStatusRetrievalStatus());
+        return Optional.of(queryJobResponse.getOperationState());
+      }
+
+      LOGGER.debug("Operation {} without operationStatus and operation retrieval status :{}", queryJobResponse.getId(),
+          queryJobResponse.getOperationStatusRetrievalStatus());
+
+    }
+    return Optional.absent();
+  }
+}
index a76a4bf..1e78507 100644 (file)
@@ -23,6 +23,7 @@ package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
 import org.onap.vnfmadapter.v1.model.CreateVnfRequest;
 import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
 import org.onap.vnfmadapter.v1.model.DeleteVnfResponse;
+import org.onap.vnfmadapter.v1.model.QueryJobResponse;
 import com.google.common.base.Optional;
 
 
@@ -37,4 +38,6 @@ public interface VnfmAdapterServiceProvider {
 
   Optional<DeleteVnfResponse> invokeDeleteRequest(final String vnfId);
 
+  Optional<QueryJobResponse> getInstantiateOperationJobStatus(final String jobId);
+
 }
index f727423..e8f4c08 100644 (file)
@@ -26,6 +26,7 @@ import org.onap.so.rest.service.HttpRestServiceProvider;
 import org.onap.vnfmadapter.v1.model.CreateVnfRequest;
 import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
 import org.onap.vnfmadapter.v1.model.DeleteVnfResponse;
+import org.onap.vnfmadapter.v1.model.QueryJobResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -121,4 +122,30 @@ public class VnfmAdapterServiceProviderImpl implements VnfmAdapterServiceProvide
       return Optional.absent();
     }
   }
+
+  @Override
+  public Optional<QueryJobResponse> getInstantiateOperationJobStatus(final String jobId) {
+    try {
+      final String url = urlProvider.getJobStatusUrl(jobId);
+
+      final ResponseEntity<QueryJobResponse> response =
+          httpServiceProvider.getHttpResponse(url, QueryJobResponse.class);
+
+      final HttpStatus httpStatus = response.getStatusCode();
+
+      if (!(httpStatus.equals(HttpStatus.ACCEPTED)) && !(httpStatus.equals(HttpStatus.OK))) {
+        LOGGER.error("Unable to invoke HTTP GET using URL: {}, Response Code: ", url, httpStatus.value());
+        return Optional.absent();
+      }
+
+      if (!response.hasBody()) {
+        LOGGER.error("Received response without body: {}", response);
+        return Optional.absent();
+      }
+      return Optional.of(response.getBody());
+    } catch (final RestProcessingException | InvalidRestRequestException httpInvocationException) {
+      LOGGER.error("Unexpected error while processing job request", httpInvocationException);
+      return Optional.absent();
+    }
+  }
 }
index 61063fe..97a7197 100644 (file)
@@ -64,5 +64,14 @@ public class VnfmAdapterUrlProvider {
     return UriComponentsBuilder.fromUri(baseUri).pathSegment("vnfs").pathSegment(vnfId).build().toString();
   }
 
+    /**
+     * Get job status URL
+     * 
+     * @param jobId The instantiation job identifier
+     * @return job status URL
+     */
+    public String getJobStatusUrl(final String jobId) {
+        return UriComponentsBuilder.fromUri(baseUri).pathSegment("jobs").pathSegment(jobId).build().toString();
+    }
 
 }
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/MonitorVnfmCreateJobTaskTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/MonitorVnfmCreateJobTaskTest.java
new file mode 100644 (file)
index 0000000..ed5fa94
--- /dev/null
@@ -0,0 +1,178 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
+
+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.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import java.util.UUID;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.onap.so.bpmn.BaseTaskTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
+import org.onap.vnfmadapter.v1.model.OperationStateEnum;
+import org.onap.vnfmadapter.v1.model.OperationStatusRetrievalStatusEnum;
+import org.onap.vnfmadapter.v1.model.QueryJobResponse;
+import com.google.common.base.Optional;
+
+/**
+ * 
+ * @author Lathishbabu Ganesan (lathishbabu.ganesan@est.tech)
+ *
+ */
+public class MonitorVnfmCreateJobTaskTest extends BaseTaskTest {
+
+  private static final String JOB_ID = UUID.randomUUID().toString();
+
+  @Mock
+  private VnfmAdapterServiceProvider mockedVnfmAdapterServiceProvider;
+
+  private final BuildingBlockExecution stubbedxecution = new StubbedBuildingBlockExecution();
+
+  @Test
+  public void testGetCurrentOperationStatus() throws Exception {
+    final MonitorVnfmCreateJobTask objUnderTest = getEtsiVnfMonitorJobTask();
+    stubbedxecution.setVariable(Constants.CREATE_VNF_RESPONSE_PARAM_NAME, getCreateVnfResponse());
+    Optional<QueryJobResponse> queryJobResponse = getQueryJobResponse();
+    queryJobResponse.get().setOperationStatusRetrievalStatus(OperationStatusRetrievalStatusEnum.STATUS_FOUND);
+    queryJobResponse.get().setOperationState(OperationStateEnum.COMPLETED);
+    when(mockedVnfmAdapterServiceProvider.getInstantiateOperationJobStatus(JOB_ID)).thenReturn(queryJobResponse);
+    objUnderTest.getCurrentOperationStatus(stubbedxecution);
+    final Optional<OperationStateEnum> operationState =
+        stubbedxecution.getVariable(Constants.OPERATION_STATUS_PARAM_NAME);
+    assertNotNull(operationState);
+    assertEquals(OperationStateEnum.COMPLETED, operationState.get());
+  }
+
+  @Test
+  public void testGetCurrentOperationStatusFailed() throws Exception {
+    final MonitorVnfmCreateJobTask objUnderTest = getEtsiVnfMonitorJobTask();
+    stubbedxecution.setVariable(Constants.CREATE_VNF_RESPONSE_PARAM_NAME, getCreateVnfResponse());
+    Optional<QueryJobResponse> queryJobResponse = getQueryJobResponse();
+    queryJobResponse.get().setOperationStatusRetrievalStatus(OperationStatusRetrievalStatusEnum.CANNOT_RETRIEVE_STATUS);
+    queryJobResponse.get().setOperationState(OperationStateEnum.FAILED);
+    when(mockedVnfmAdapterServiceProvider.getInstantiateOperationJobStatus(JOB_ID)).thenReturn(queryJobResponse);
+    objUnderTest.getCurrentOperationStatus(stubbedxecution);
+    final Optional<OperationStateEnum> operationState =
+        stubbedxecution.getVariable(Constants.OPERATION_STATUS_PARAM_NAME);
+    assertNotNull(operationState);
+    assertEquals(OperationStateEnum.FAILED, operationState.get());
+  }
+
+  @Test
+  public void testGetCurrentOperationStatusEmpty() throws Exception {
+    final MonitorVnfmCreateJobTask objUnderTest = getEtsiVnfMonitorJobTask();
+    stubbedxecution.setVariable(Constants.CREATE_VNF_RESPONSE_PARAM_NAME, getCreateVnfResponse());
+    Optional<QueryJobResponse> queryJobResponse = getQueryJobResponse();
+    queryJobResponse.get().setOperationStatusRetrievalStatus(OperationStatusRetrievalStatusEnum.STATUS_FOUND);
+    when(mockedVnfmAdapterServiceProvider.getInstantiateOperationJobStatus(JOB_ID)).thenReturn(queryJobResponse);
+    objUnderTest.getCurrentOperationStatus(stubbedxecution);
+    final Optional<OperationStateEnum> operationState =
+        stubbedxecution.getVariable(Constants.OPERATION_STATUS_PARAM_NAME);
+    assertFalse(operationState.isPresent());
+  }
+
+  @Test
+  public void testGetCurrentOperationStatusException() throws Exception {
+    final MonitorVnfmCreateJobTask objUnderTest = getEtsiVnfMonitorJobTask();
+    stubbedxecution.setVariable(Constants.CREATE_VNF_RESPONSE_PARAM_NAME, getCreateVnfResponse());
+    Optional<QueryJobResponse> queryJobResponse = getQueryJobResponse();
+    queryJobResponse.get().setOperationStatusRetrievalStatus(OperationStatusRetrievalStatusEnum.STATUS_FOUND);
+    when(mockedVnfmAdapterServiceProvider.getInstantiateOperationJobStatus(JOB_ID)).thenReturn(queryJobResponse);
+    objUnderTest.getCurrentOperationStatus(stubbedxecution);
+    final Optional<OperationStateEnum> operationState =
+        stubbedxecution.getVariable(Constants.OPERATION_STATUS_PARAM_NAME);
+    assertFalse(operationState.isPresent());
+  }
+
+  @Test
+  public void testHasOperationFinished() throws Exception {
+    final MonitorVnfmCreateJobTask objUnderTest = getEtsiVnfMonitorJobTask();
+    stubbedxecution.setVariable(Constants.OPERATION_STATUS_PARAM_NAME, Optional.of(OperationStateEnum.COMPLETED));
+    assertTrue(objUnderTest.hasOperationFinished(stubbedxecution));
+  }
+
+  @Test
+  public void testHasOperationPending() throws Exception {
+    final MonitorVnfmCreateJobTask objUnderTest = getEtsiVnfMonitorJobTask();
+    stubbedxecution.setVariable(Constants.OPERATION_STATUS_PARAM_NAME, Optional.absent());
+    assertFalse(objUnderTest.hasOperationFinished(stubbedxecution));
+  }
+
+  @Test
+  public void testTimeOutLogFailue() throws Exception {
+    final MonitorVnfmCreateJobTask objUnderTest = getEtsiVnfMonitorJobTask();
+    objUnderTest.timeOutLogFailue(stubbedxecution);
+    verify(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(1205),
+        eq("Instantiation operation time out"));
+  }
+
+  @Test
+  public void testCheckIfOperationWasSuccessful() throws Exception {
+    stubbedxecution.setVariable(Constants.OPERATION_STATUS_PARAM_NAME, Optional.of(OperationStateEnum.COMPLETED));
+    MonitorVnfmCreateJobTask objUnderTest = Mockito.spy(getEtsiVnfMonitorJobTask());
+    objUnderTest.checkIfOperationWasSuccessful(stubbedxecution);
+    verify(objUnderTest, times(1)).checkIfOperationWasSuccessful(stubbedxecution);
+  }
+
+  @Test
+  public void testCheckIfOperationWasSuccessfulWithPending() throws Exception {
+    final MonitorVnfmCreateJobTask objUnderTest = getEtsiVnfMonitorJobTask();
+    stubbedxecution.setVariable(Constants.OPERATION_STATUS_PARAM_NAME, Optional.of(OperationStateEnum.PROCESSING));
+    objUnderTest.checkIfOperationWasSuccessful(stubbedxecution);
+    verify(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(1207), anyString());
+  }
+
+  @Test
+  public void testCheckIfOperationWasSuccessfulEmpty() throws Exception {
+    MonitorVnfmCreateJobTask objUnderTest = getEtsiVnfMonitorJobTask();
+    stubbedxecution.setVariable(Constants.CREATE_VNF_RESPONSE_PARAM_NAME, getCreateVnfResponse());
+    stubbedxecution.setVariable(Constants.OPERATION_STATUS_PARAM_NAME, Optional.absent());
+    objUnderTest.checkIfOperationWasSuccessful(stubbedxecution);
+    verify(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(1206), anyString());
+  }
+
+  private CreateVnfResponse getCreateVnfResponse() {
+    final CreateVnfResponse response = new CreateVnfResponse();
+    response.setJobId(JOB_ID);
+    return response;
+  }
+
+  private Optional<QueryJobResponse> getQueryJobResponse() {
+    final QueryJobResponse queryJobResponse = new QueryJobResponse();
+    queryJobResponse.setId(JOB_ID);
+    return Optional.of(queryJobResponse);
+  }
+
+  private MonitorVnfmCreateJobTask getEtsiVnfMonitorJobTask() {
+    return new MonitorVnfmCreateJobTask(mockedVnfmAdapterServiceProvider, exceptionUtil);
+  }
+
+}
index 5451d44..c4f19d6 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
 
+import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.DUMMY_URL;
+
+import java.util.UUID;
+
 import org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.VnfmBasicHttpConfigProvider;
 
 /**
@@ -32,6 +36,9 @@ public class TestConstants {
     public static final String DUMMY_BASIC_AUTH = "Basic 123abc";
     public static final String DUMMY_URL = "http://localhost:30406/so/vnfm-adapter/v1/";
     public static final String EXPECTED_URL = DUMMY_URL + "vnfs/" + DUMMY_GENERIC_VND_ID;
+    
+    public static final String DUMMY_JOB_ID = UUID.randomUUID().toString();
+    public static final String JOB_STATUS_EXPECTED_URL = DUMMY_URL + "jobs/" + DUMMY_JOB_ID;
 
     public static VnfmBasicHttpConfigProvider getVnfmBasicHttpConfigProvider() {
         return getVnfmBasicHttpConfigProvider(DUMMY_URL, DUMMY_BASIC_AUTH);
index 79894d5..6f1b6f0 100644 (file)
@@ -22,13 +22,14 @@ package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
 
 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.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.when;
 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.DUMMY_GENERIC_VND_ID;
+import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.DUMMY_JOB_ID;
 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.getVnfmBasicHttpConfigProvider;
-import java.util.UUID;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -38,6 +39,8 @@ import org.onap.so.rest.service.HttpRestServiceProvider;
 import org.onap.vnfmadapter.v1.model.CreateVnfRequest;
 import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
 import org.onap.vnfmadapter.v1.model.DeleteVnfResponse;
+import org.onap.vnfmadapter.v1.model.OperationStateEnum;
+import org.onap.vnfmadapter.v1.model.QueryJobResponse;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import com.google.common.base.Optional;
@@ -49,74 +52,70 @@ import com.google.common.base.Optional;
 @RunWith(MockitoJUnitRunner.class)
 public class VnfmAdapterServiceProviderImplTest {
 
-    private static final String EMPTY_JOB_ID = "";
+  private static final String EMPTY_JOB_ID = "";
 
-    private static final CreateVnfRequest CREATE_VNF_REQUEST = new CreateVnfRequest();
+  private static final CreateVnfRequest CREATE_VNF_REQUEST = new CreateVnfRequest();
 
-    private static final String DUMMY_JOB_ID = UUID.randomUUID().toString();
+  @Mock
+  private HttpRestServiceProvider mockedHttpServiceProvider;
 
-    @Mock
-    private HttpRestServiceProvider mockedHttpServiceProvider;
+  @Mock
+  private ResponseEntity<CreateVnfResponse> mockedResponseEntity;
 
-    @Mock
-    private ResponseEntity<CreateVnfResponse> mockedResponseEntity;
+  @Mock
+  private ResponseEntity<DeleteVnfResponse> deleteVnfResponse;
+  @Mock
+  private ResponseEntity<QueryJobResponse> mockedQueryJobResponseResponseEntity;
 
-    @Mock
-    private ResponseEntity<DeleteVnfResponse> deleteVnfResponse;
-
-    @Test
-    public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithBody_validResponse() {
-
-        when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
-                eq(CreateVnfResponse.class))).thenReturn(mockedResponseEntity);
-        when(mockedResponseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
-        when(mockedResponseEntity.hasBody()).thenReturn(true);
-        final CreateVnfResponse response = getCreateVnfResponse(DUMMY_JOB_ID);
-        when(mockedResponseEntity.getBody()).thenReturn(response);
-
-
-        final VnfmAdapterServiceProvider objUnderTest =
-                new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
-
-        final Optional<CreateVnfResponse> actual =
-                objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
-        assertTrue(actual.isPresent());
-        assertEquals(actual.get(), response);
-
-    }
+  @Test
+  public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithBody_validResponse() {
+
+    when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(), eq(CreateVnfResponse.class)))
+        .thenReturn(mockedResponseEntity);
+    when(mockedResponseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
+    when(mockedResponseEntity.hasBody()).thenReturn(true);
+    final CreateVnfResponse response = getCreateVnfResponse(DUMMY_JOB_ID);
+    when(mockedResponseEntity.getBody()).thenReturn(response);
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
+    final Optional<CreateVnfResponse> actual =
+        objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
+    assertTrue(actual.isPresent());
+    assertEquals(actual.get(), response);
+  }
 
-    @Test
-    public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithNoBody_noResponse() {
-        assertWithStatuCode(HttpStatus.ACCEPTED);
-    }
+  @Test
+  public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithNoBody_noResponse() {
+    assertWithStatuCode(HttpStatus.ACCEPTED);
+  }
 
-    @Test
-    public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusNotOkWithNoBody_noResponse() {
-        assertWithStatuCode(HttpStatus.UNAUTHORIZED);
-    }
+  @Test
+  public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusNotOkWithNoBody_noResponse() {
+    assertWithStatuCode(HttpStatus.UNAUTHORIZED);
+  }
 
 
-    @Test
-    public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithBodyWithInvalidJobId_noResponse() {
-        assertWithJobId(null);
-        assertWithJobId(EMPTY_JOB_ID);
-    }
+  @Test
+  public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithBodyWithInvalidJobId_noResponse() {
+    assertWithJobId(null);
+    assertWithJobId(EMPTY_JOB_ID);
+  }
 
-    @Test
-    public void testInvokeCreateInstantiationRequest_httpServiceProviderThrowException_httpRestServiceProviderNotNull() {
+  @Test
+  public void testInvokeCreateInstantiationRequest_httpServiceProviderThrowException_httpRestServiceProviderNotNull() {
 
-        when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
-                eq(CreateVnfResponse.class))).thenThrow(RestProcessingException.class);
+    when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(), eq(CreateVnfResponse.class)))
+        .thenThrow(RestProcessingException.class);
 
 
-        final VnfmAdapterServiceProvider objUnderTest =
-                new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
-        final Optional<CreateVnfResponse> actual =
-                objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
-        assertFalse(actual.isPresent());
+    final Optional<CreateVnfResponse> actual =
+        objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
+    assertFalse(actual.isPresent());
 
-    }
+  }
 
   @Test
   public void testInvokeDeleteRequest() {
@@ -179,54 +178,116 @@ public class VnfmAdapterServiceProviderImplTest {
     assertFalse(actual.isPresent());
   }
 
+  @Test
+  public void testGetInstantiateOperationJobStatus_httpServiceProviderReturnsStatusOkWithBody_validResponse() {
+
+    when(mockedQueryJobResponseResponseEntity.getStatusCode()).thenReturn(HttpStatus.OK);
+    when(mockedQueryJobResponseResponseEntity.hasBody()).thenReturn(true);
+    when(mockedQueryJobResponseResponseEntity.getBody()).thenReturn(getQueryJobResponse());
+
+    when(mockedHttpServiceProvider.getHttpResponse(eq(TestConstants.JOB_STATUS_EXPECTED_URL),
+        eq(QueryJobResponse.class))).thenReturn(mockedQueryJobResponseResponseEntity);
+
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
+
+    final Optional<QueryJobResponse> actual = objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
+    assertTrue(actual.isPresent());
+    final QueryJobResponse actualQueryJobResponse = actual.get();
+    assertNotNull(actualQueryJobResponse);
+  }
+
+  @Test
+  public void testGetInstantiateOperationJobStatus_httpServiceProviderReturnsStatusOkWithOutBody_invalidResponse() {
+
+    when(mockedQueryJobResponseResponseEntity.getStatusCode()).thenReturn(HttpStatus.OK);
+    when(mockedQueryJobResponseResponseEntity.hasBody()).thenReturn(false);
+
+    when(mockedHttpServiceProvider.getHttpResponse(eq(TestConstants.JOB_STATUS_EXPECTED_URL),
+        eq(QueryJobResponse.class))).thenReturn(mockedQueryJobResponseResponseEntity);
+
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
+
+    final Optional<QueryJobResponse> actual = objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
+    assertFalse(actual.isPresent());
+  }
+
+  @Test
+  public void testGetInstantiateOperationJobStatus_httpServiceProviderReturnsStatusNotOkWithOutBody_invalidResponse() {
 
-    private void assertWithJobId(final String jobId) {
-        when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
-                eq(CreateVnfResponse.class))).thenReturn(mockedResponseEntity);
-        when(mockedResponseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
-        when(mockedResponseEntity.hasBody()).thenReturn(true);
-        final CreateVnfResponse response = getCreateVnfResponse(jobId);
-        when(mockedResponseEntity.getBody()).thenReturn(response);
+    when(mockedQueryJobResponseResponseEntity.getStatusCode()).thenReturn(HttpStatus.INTERNAL_SERVER_ERROR);
 
+    when(mockedHttpServiceProvider.getHttpResponse(eq(TestConstants.JOB_STATUS_EXPECTED_URL),
+        eq(QueryJobResponse.class))).thenReturn(mockedQueryJobResponseResponseEntity);
 
-        final VnfmAdapterServiceProvider objUnderTest =
-                new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
-        final Optional<CreateVnfResponse> actual =
-                objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
-        assertFalse(actual.isPresent());
-    }
+    final Optional<QueryJobResponse> actual = objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
+    assertFalse(actual.isPresent());
+  }
+  
+  @Test
+  public void testGetInstantiateOperationJobStatus_Exception() {
 
-    private void assertWithStatuCode(final HttpStatus status) {
-        when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
-                eq(CreateVnfResponse.class))).thenReturn(mockedResponseEntity);
-        when(mockedResponseEntity.getStatusCode()).thenReturn(status);
-        when(mockedResponseEntity.hasBody()).thenReturn(false);
+    when(mockedHttpServiceProvider.getHttpResponse(eq(TestConstants.JOB_STATUS_EXPECTED_URL),
+        eq(QueryJobResponse.class))).thenThrow(RestProcessingException.class);
 
-        final VnfmAdapterServiceProvider objUnderTest =
-                new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
-        final Optional<CreateVnfResponse> actual =
-                objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
-        assertFalse(actual.isPresent());
-    }
+    final Optional<QueryJobResponse> actual = objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
+    assertFalse(actual.isPresent());
+  }
 
+  private QueryJobResponse getQueryJobResponse() {
+    return new QueryJobResponse().id(DUMMY_JOB_ID).operationState(OperationStateEnum.COMPLETED);
+
+  }
+
+  private void assertWithJobId(final String jobId) {
+    when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(), eq(CreateVnfResponse.class)))
+        .thenReturn(mockedResponseEntity);
+    when(mockedResponseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
+    when(mockedResponseEntity.hasBody()).thenReturn(true);
+    final CreateVnfResponse response = getCreateVnfResponse(jobId);
+    when(mockedResponseEntity.getBody()).thenReturn(response);
 
 
-    private CreateVnfResponse getCreateVnfResponse(final String jobId) {
-        final CreateVnfResponse response = new CreateVnfResponse();
-        response.setJobId(jobId);
-        return response;
-    }
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
-    private DeleteVnfResponse getDeleteVnfResponse(final String jobId) {
-      final DeleteVnfResponse response = new DeleteVnfResponse();
-      response.setJobId(jobId);
-      return response;
+    final Optional<CreateVnfResponse> actual =
+        objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
+    assertFalse(actual.isPresent());
   }
 
+  private void assertWithStatuCode(final HttpStatus status) {
+    when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(), eq(CreateVnfResponse.class)))
+        .thenReturn(mockedResponseEntity);
+    when(mockedResponseEntity.getStatusCode()).thenReturn(status);
+    when(mockedResponseEntity.hasBody()).thenReturn(false);
+
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
-    private VnfmAdapterUrlProvider getVnfmAdapterUrlProvider() {
-        return new VnfmAdapterUrlProvider(getVnfmBasicHttpConfigProvider());
-    }
+    final Optional<CreateVnfResponse> actual =
+        objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
+    assertFalse(actual.isPresent());
+  }
+
+  private CreateVnfResponse getCreateVnfResponse(final String jobId) {
+    return new CreateVnfResponse().jobId(jobId);
+  }
+
+  private DeleteVnfResponse getDeleteVnfResponse(final String jobId) {
+    final DeleteVnfResponse response = new DeleteVnfResponse();
+    response.setJobId(jobId);
+    return response;
+  }
+
+  private VnfmAdapterUrlProvider getVnfmAdapterUrlProvider() {
+    return new VnfmAdapterUrlProvider(getVnfmBasicHttpConfigProvider());
+  }
 }
index cb93adc..133f24b 100644 (file)
@@ -22,11 +22,12 @@ package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
 
 import static org.junit.Assert.assertEquals;
 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.DUMMY_GENERIC_VND_ID;
+import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.DUMMY_JOB_ID;
 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.EXPECTED_URL;
+import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.JOB_STATUS_EXPECTED_URL;
 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.getVnfmBasicHttpConfigProvider;
 
 import org.junit.Test;
-import org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.VnfmAdapterUrlProvider;
 
 
 /**
@@ -41,9 +42,16 @@ public class VnfmAdapterUrlProviderTest {
         final VnfmAdapterUrlProvider objUnderTest = new VnfmAdapterUrlProvider(getVnfmBasicHttpConfigProvider());
 
         final String actual = objUnderTest.getCreateInstantiateUrl(DUMMY_GENERIC_VND_ID);
-
         assertEquals(EXPECTED_URL, actual);
     }
 
+    @Test
+    public void testGetJobStatuUrl_returnValidCreationInstantiationRequest() {
+        final VnfmAdapterUrlProvider objUnderTest = new VnfmAdapterUrlProvider(getVnfmBasicHttpConfigProvider());
+
+        final String actual = objUnderTest.getJobStatusUrl(DUMMY_JOB_ID);
+        assertEquals(JOB_STATUS_EXPECTED_URL, actual);
+
+    }
 
 }