1911 create appc adapter micro service 89/100189/1
authorKuleshov, Elena <evn@att.com>
Fri, 10 Jan 2020 14:53:29 +0000 (09:53 -0500)
committerBenjamin, Max (mb388a) <mb388a@att.com>
Fri, 10 Jan 2020 14:53:30 +0000 (09:53 -0500)
Added new appc adapter micro service.
Made required code changes to use the new adapter.

Issue-ID: SO-2596
Signed-off-by: Benjamin, Max (mb388a) <mb388a@att.com>
Change-Id: I880ecace64ec85ca4094a82bc1210798fd3bb85d

78 files changed:
adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__MacroData.sql
adapters/pom.xml
adapters/so-appc-orchestrator/pom.xml [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/AppcOrchestratorApplication.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerCallback.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerClient.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerOrchestratorException.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerSupport.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/StatusCategory.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/beans/ConfigurationParameters.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/beans/Identity.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/beans/Parameters.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/beans/RequestParameters.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTask.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskImpl.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskService.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/main/resources/application.yaml [new file with mode: 0644]
adapters/so-appc-orchestrator/src/test/java/org/onap/so/TestApplication.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerCallbackTest.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerSupportTest.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/client/beans/BeansTest.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskImplITTest.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskImplTest.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskTest.java [new file with mode: 0644]
adapters/so-appc-orchestrator/src/test/resources/application-test.yaml [new file with mode: 0644]
adapters/so-appc-orchestrator/src/test/resources/logback-test.xml [new file with mode: 0644]
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/DistributeTrafficActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/DistributeTrafficCheckActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFCheckClosedLoopDisabledFlagActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFCheckInMaintFlagActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFCheckPserversLockedFlagActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFHealthCheckActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFLockActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFQuiesceTrafficActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFResumeTrafficActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFSetClosedLoopDisabledFlagActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFSetInMaintFlagActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFSnapShotActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFStartActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFStopActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFUnlockActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFUnsetClosedLoopDisabledFlagActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFUnsetInMaintFlagActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFUpgradeBackupActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFUpgradePostCheckActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFUpgradePreCheckActivity.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/Activity/VNFUpgradeSoftwareActivity.bpmn
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/DistributeTrafficActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DistributeTrafficCheckActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/PauseForManualTaskActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFHealthCheckActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFLockActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFQuiesceTrafficActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFResumeTrafficActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFSetClosedLoopDisabledFlagActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFSnapShotActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFStartActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFStopActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFUnlockActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFUpgradeBackupActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFUpgradePostCheckActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFUpgradePreCheckActivityTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VNFUpgradeSoftwareActivityTest.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIFlagTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/appc/tasks/AppcOrchestratorPreProcessor.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/appc/tasks/AppcOrchestratorPreProcessorTest.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/appcTaskRequest.json [new file with mode: 0644]
common/pom.xml
common/src/main/java/org/onap/so/appc/orchestrator/service/beans/ApplicationControllerTaskRequest.java [new file with mode: 0644]
common/src/main/java/org/onap/so/appc/orchestrator/service/beans/ApplicationControllerVm.java [new file with mode: 0644]
common/src/main/java/org/onap/so/appc/orchestrator/service/beans/ApplicationControllerVnf.java [new file with mode: 0644]
common/src/test/java/org/onap/so/BeansTest.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/SoSubsystems.java
mso-api-handlers/mso-api-handler-infra/src/test/resources/application-test.yaml
packages/docker/pom.xml

index 9527986..f5c7cd6 100644 (file)
@@ -29,7 +29,8 @@ INSERT INTO northbound_request_ref_lookup(MACRO_ACTION, ACTION, REQUEST_SCOPE, I
 ('VFModule-Replace-Retain-Assignments', 'replaceInstanceRetainAssignments', 'VfModule', true,true, '7','7', 'DEFAULT', '*'),
 ('NetworkCollection-Macro-Create', 'createInstance', 'NetworkCollection', false,true, '7','7', 'DEFAULT', '*'),
 ('NetworkCollection-Macro-Delete', 'deleteInstance', 'NetworkCollection', false,true, '7','7', 'DEFAULT', '*'),
-('VFModule-ScaleOut', 'scaleOut', 'VfModule', true, true, '7','7', 'DEFAULT', '*');
+('VFModule-ScaleOut', 'scaleOut', 'VfModule', true, true, '7','7', 'DEFAULT', '*'),
+('VNF-InPlaceUpdate', 'inPlaceSoftwareUpdate', 'Vnf', true, true, '7','7', 'DEFAULT', '*');
 
 
 INSERT INTO orchestration_flow_reference(COMPOSITE_ACTION, SEQ_NO, FLOW_NAME, FLOW_VERSION, NB_REQ_REF_LOOKUP_ID) VALUES
@@ -176,7 +177,26 @@ INSERT INTO orchestration_flow_reference(COMPOSITE_ACTION, SEQ_NO, FLOW_NAME, FL
 ('VFModule-Replace-Retain-Assignments', '10', 'CreateVfModuleBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VFModule-Replace-Retain-Assignments' and CLOUD_OWNER = 'DEFAULT')),
 ('VFModule-Replace-Retain-Assignments', '11', 'ActivateVfModuleBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VFModule-Replace-Retain-Assignments' and CLOUD_OWNER = 'DEFAULT')),
 ('VFModule-Replace-Retain-Assignments', '12', 'ChangeModelVnfBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VFModule-Replace-Retain-Assignments' and CLOUD_OWNER = 'DEFAULT')),
-('VFModule-Replace-Retain-Assignments', '13', 'ChangeModelServiceInstanceBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VFModule-Replace-Retain-Assignments' and CLOUD_OWNER = 'DEFAULT'));
+('VFModule-Replace-Retain-Assignments', '13', 'ChangeModelServiceInstanceBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VFModule-Replace-Retain-Assignments' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '1', 'VNFCheckPserversLockedFlagActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '2', 'VNFCheckInMaintFlagActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '3', 'VNFSetInMaintFlagActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '4', 'VNFCheckClosedLoopDisabledFlagActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '5', 'VNFSetClosedLoopDisabledFlagActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '6', 'VNFLockActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '7', 'VNFUpgradePreCheckActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '8', 'VNFQuiesceTrafficActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '9', 'VNFStopActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '10', 'VNFSnapShotActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '11', 'VNFStartActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '12', 'VNFUpgradeBackupActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '13', 'VNFUpgradeSoftwareActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '14', 'VNFUpgradePostCheckActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '15', 'VNFResumeTrafficActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '16', 'VNFUnlockActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '17', 'VNFUnsetInMaintFlagActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT')),
+('VNF-InPlaceUpdate', '18', 'VNFUnsetClosedLoopDisabledFlagActivity', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-InPlaceUpdate' and CLOUD_OWNER = 'DEFAULT'));
+
 
 
 INSERT INTO rainy_day_handler_macro (FLOW_NAME, SERVICE_TYPE, VNF_TYPE, ERROR_CODE, WORK_STEP, POLICY)
@@ -849,3 +869,7 @@ UPDATE rainy_day_handler_macro SET SERVICE_ROLE = '*' WHERE SERVICE_ROLE IS null
 INSERT INTO vnf_components_recipe (VNF_TYPE, VNF_COMPONENT_TYPE, ACTION, VERSION, ORCHESTRATION_URI, RECIPE_TIMEOUT)
 VALUES
 (NULL, 'vfModule', 'replaceInstanceRetainAssignments', '1', '/mso/async/services/WorkflowActionBB', 180);
+
+UPDATE vnf_recipe
+SET ORCHESTRATION_URI = '/mso/async/services/WorkflowActionBB'
+WHERE NF_ROLE = 'GR-API-DEFAULT' AND ACTION = 'inPlaceSoftwareUpdate';
index 14498c5..b96c374 100644 (file)
@@ -23,6 +23,7 @@
     <module>mso-openstack-adapters</module>
     <module>mso-vnfm-adapter</module>
     <module>mso-ve-vnfm-adapter</module>
+    <module>so-appc-orchestrator</module>
   </modules>
 
   <dependencies>
diff --git a/adapters/so-appc-orchestrator/pom.xml b/adapters/so-appc-orchestrator/pom.xml
new file mode 100644 (file)
index 0000000..717bcee
--- /dev/null
@@ -0,0 +1,221 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.onap.so</groupId>
+    <artifactId>adapters</artifactId>
+    <version>1.4.0-SNAPSHOT</version>
+  </parent>
+
+  <groupId>org.onap.so.adapters</groupId>
+  <artifactId>so-appc-orchestrator</artifactId>
+  <packaging>jar</packaging>
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    <java.version>1.8</java.version>
+    <appc.client.version>1.6.0-SNAPSHOT</appc.client.version>
+  </properties>
+  <name>so-appc-orchestrator</name>
+  <description>MSO APPC-C Orchestrator</description>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-maven-plugin</artifactId>
+        <version>${springboot.version}</version>
+        <configuration>
+          <mainClass>org.onap.so.adapters.appc.orchestrator.AppcOrchestratorApplication</mainClass>
+        </configuration>
+        <executions>
+          <execution>
+            <goals>
+              <goal>repackage</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>extract-docker-file</id>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>io.fabric8</groupId>
+        <artifactId>fabric8-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>start</id>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.3</version>
+        <configuration>
+          <source>1.8</source>
+          <target>1.8</target>
+          <fork>true</fork>
+          <compilerArgs>
+            <arg>-parameters</arg>
+          </compilerArgs>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>default-test</id>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <includes>
+                <include>**/AllTestsTestSuite.java</include>
+              </includes>
+              <parallel>suites</parallel>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+    <pluginManagement>
+      <plugins>
+        <!--This plugin's configuration is used to store Eclipse m2e settings 
+                                       only. It has no influence on the Maven build itself. -->
+        <plugin>
+          <groupId>org.eclipse.m2e</groupId>
+          <artifactId>lifecycle-mapping</artifactId>
+          <version>1.0.0</version>
+          <configuration>
+            <lifecycleMappingMetadata>
+              <pluginExecutions>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>
+                                                                                       org.jvnet.jax-ws-commons
+                                                                               </groupId>
+                    <artifactId>
+                                                                                       jaxws-maven-plugin
+                                                                               </artifactId>
+                    <versionRange>
+                                                                                       [2.3,)
+                                                                               </versionRange>
+                    <goals>
+                      <goal>wsgen</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <ignore>
+                    </ignore>
+                  </action>
+                </pluginExecution>
+              </pluginExecutions>
+            </lifecycleMappingMetadata>
+          </configuration>
+        </plugin>
+
+        <plugin>
+          <groupId>org.jacoco</groupId>
+          <artifactId>jacoco-maven-plugin</artifactId>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+    <finalName>${project.artifactId}-${project.version}</finalName>
+  </build>
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-actuator</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-web</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-test</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>io.micrometer</groupId>
+      <artifactId>micrometer-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.micrometer</groupId>
+      <artifactId>micrometer-registry-prometheus</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.so</groupId>
+      <artifactId>common</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.camunda.bpm</groupId>
+      <artifactId>camunda-external-task-client</artifactId>
+      <version>1.1.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.so</groupId>
+      <artifactId>MSOCommonBPMN</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.appc.client</groupId>
+      <artifactId>client-lib</artifactId>
+      <version>${appc.client.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.mockito</groupId>
+          <artifactId>mockito-core</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.powermock</groupId>
+          <artifactId>powermock-module-junit4</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.powermock</groupId>
+          <artifactId>powermock-api-mockito</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.so.adapters</groupId>
+      <artifactId>mso-adapter-utils</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.appc.client</groupId>
+      <artifactId>client-kit</artifactId>
+      <version>${appc.client.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.mockito</groupId>
+          <artifactId>mockito-core</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <!-- Test Dependencies -->
+    <dependency>
+      <groupId>pl.pragmatists</groupId>
+      <artifactId>JUnitParams</artifactId>
+      <version>1.0.5</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/AppcOrchestratorApplication.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/AppcOrchestratorApplication.java
new file mode 100644 (file)
index 0000000..258c95a
--- /dev/null
@@ -0,0 +1,46 @@
+/*-
+ * ============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.adapters.appc.orchestrator;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @since Version 1.0
+ *
+ */
+
+@SpringBootApplication(scanBasePackages = {"org.onap"})
+public class AppcOrchestratorApplication {
+
+    private static final String LOGS_DIR = "logs_dir";
+
+    private static void setLogsDir() {
+        if (System.getProperty(LOGS_DIR) == null) {
+            System.getProperties().setProperty(LOGS_DIR, "./logs/appcorch/");
+        }
+    }
+
+    public static void main(String... args) {
+        SpringApplication.run(AppcOrchestratorApplication.class, args);
+        setLogsDir();
+    }
+}
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerCallback.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerCallback.java
new file mode 100644 (file)
index 0000000..1f73000
--- /dev/null
@@ -0,0 +1,84 @@
+/*-
+ * ============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.adapters.appc.orchestrator.client;
+
+import org.camunda.bpm.client.task.ExternalTask;
+import org.camunda.bpm.client.task.ExternalTaskService;
+import org.onap.appc.client.lcm.api.ResponseHandler;
+import org.onap.appc.client.lcm.exceptions.AppcClientException;
+import org.onap.appc.client.lcm.model.Status;
+import org.onap.so.adapters.appc.orchestrator.client.StatusCategory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ApplicationControllerCallback<T> implements ResponseHandler<T> {
+
+    private static final Logger logger = LoggerFactory.getLogger(ApplicationControllerCallback.class);
+
+    private final ExternalTask externalTask;
+    private final ExternalTaskService externalTaskService;
+    private final ApplicationControllerSupport appCSupport;
+
+    public ApplicationControllerCallback(ExternalTask externalTask, ExternalTaskService externalTaskService,
+            ApplicationControllerSupport appCSupport) {
+        this.externalTask = externalTask;
+        this.externalTaskService = externalTaskService;
+        this.appCSupport = appCSupport;
+    }
+
+    @Override
+    public void onResponse(T response) {
+        logger.info("ON RESPONSE IN CALLBACK");
+
+        Status status = appCSupport.getStatusFromGenericResponse(response);
+
+        logger.info("Status code is: " + status.getCode());
+        logger.info("Status message is: " + status.getMessage());
+
+        if (appCSupport.getFinalityOf(status)) {
+            logger.debug("Obtained final status, complete the task");
+            completeExternalTask(externalTask, externalTaskService, status);
+        } else {
+            logger.debug("Intermediate status, continue the task");
+        }
+    }
+
+    @Override
+    public void onException(AppcClientException exception) {
+
+        logger.info("ON EXCEPTION IN CALLBACK");
+        logger.info("Exception from APPC: " + exception.getMessage());
+        Status exceptionStatus = appCSupport.buildStatusFromAppcException(exception);
+        completeExternalTask(externalTask, externalTaskService, exceptionStatus);
+    }
+
+    private void completeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService,
+            Status status) {
+
+        if (appCSupport.getCategoryOf(status).equals(StatusCategory.NORMAL)) {
+            externalTaskService.complete(externalTask);
+            logger.debug("The External Task Id: {} Successful", externalTask.getId());
+        } else {
+            logger.debug("The External Task Id: {} Failed", externalTask.getId());
+            externalTaskService.handleBpmnError(externalTask, "MSOWorkflowException", status.getMessage());
+        }
+    }
+}
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerClient.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerClient.java
new file mode 100644 (file)
index 0000000..20093be
--- /dev/null
@@ -0,0 +1,244 @@
+/*-
+ * ============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.adapters.appc.orchestrator.client;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.time.Instant;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+import org.onap.appc.client.lcm.api.AppcClientServiceFactoryProvider;
+import org.onap.appc.client.lcm.api.AppcLifeCycleManagerServiceFactory;
+import org.onap.appc.client.lcm.api.ApplicationContext;
+import org.onap.appc.client.lcm.api.LifeCycleManagerStateful;
+import org.onap.appc.client.lcm.exceptions.AppcClientException;
+import org.onap.appc.client.lcm.model.Action;
+import org.onap.appc.client.lcm.model.ActionIdentifiers;
+import org.onap.appc.client.lcm.model.CommonHeader;
+import org.onap.appc.client.lcm.model.Flags;
+import org.onap.appc.client.lcm.model.Flags.Force;
+import org.onap.appc.client.lcm.model.Flags.Mode;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerOrchestratorException;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerSupport;
+import org.onap.so.adapters.appc.orchestrator.client.StatusCategory;
+import org.onap.appc.client.lcm.model.Payload;
+import org.onap.appc.client.lcm.model.Status;
+import org.onap.appc.client.lcm.model.ZULU;
+
+@Component
+public class ApplicationControllerClient {
+
+    @Autowired
+    public Environment env;
+
+    public static final String DEFAULT_CONTROLLER_TYPE = "APPC";
+
+    private static final String CLIENT_NAME = "MSO";
+
+    private static final String API_VER = "2.00";
+    private static final String ORIGINATOR_ID = "MSO";
+    private static final int FLAGS_TTL = 65000;
+    private static Logger logger = LoggerFactory.getLogger(ApplicationControllerClient.class);
+
+    @Autowired
+    private ApplicationControllerSupport appCSupport;
+
+    // APPC gave us an API where the controllerType is configured in the
+    // client object, which is not what we asked for. We asked for an API
+    // in which the client would have additional methods that could take
+    // the controllerType as a parameter, so that we would not need to
+    // maintain multiple client objects. This map should be removed when
+    // the (hopefully short-term) controllerType becomes obsolete.
+
+    private String controllerType = DEFAULT_CONTROLLER_TYPE;
+
+    private static ConcurrentHashMap<String, LifeCycleManagerStateful> appCClients = new ConcurrentHashMap<>();
+
+    /**
+     * Creates an ApplicationControllerClient for the specified controller type.
+     *
+     * @param controllerType the controller type: "appc" or "sdnc".
+     */
+    public void setControllerType(String controllerType) {
+        if (controllerType == null) {
+            controllerType = DEFAULT_CONTROLLER_TYPE;
+        }
+        this.controllerType = controllerType.toUpperCase();
+    }
+
+    /**
+     * Gets the controller type.
+     *
+     * @return the controllertype
+     */
+    public String getControllerType() {
+        return controllerType;
+    }
+
+    /**
+     * Returns the AppC client object associated with this ApplicationControllerClient. AppC client objects are shared
+     * objects. One is created if it does not exist.
+     *
+     * @return the client object, or null if creation failed
+     */
+    public LifeCycleManagerStateful getAppCClient() {
+        return appCClients.computeIfAbsent(controllerType, k -> createAppCClient(k));
+    }
+
+    protected LifeCycleManagerStateful createAppCClient(String controllerType) {
+
+        try {
+            if (controllerType == null) {
+                controllerType = DEFAULT_CONTROLLER_TYPE;
+            }
+            controllerType = controllerType.toUpperCase();
+            return AppcClientServiceFactoryProvider.getFactory(AppcLifeCycleManagerServiceFactory.class)
+                    .createLifeCycleManagerStateful(new ApplicationContext(), getLCMProperties(controllerType));
+        } catch (AppcClientException e) {
+            logger.error("Error in getting LifeCycleManagerStateful: {}", e.getMessage(), e);
+            // This null value will cause NullPointerException when used later.
+            // Error handling could certainly be improved here.
+            return null;
+        }
+    }
+
+    public Status vnfCommand(Action action, String requestId, String vnfId, Optional<String> vserverId,
+            Optional<String> request, String controllerType, ApplicationControllerCallback listener)
+            throws ApplicationControllerOrchestratorException {
+        this.setControllerType(controllerType);
+        Status status;
+        ActionIdentifiers actionIdentifiers = new ActionIdentifiers();
+        actionIdentifiers.setVnfId(vnfId);
+        if (vserverId.isPresent()) {
+            actionIdentifiers.setVserverId(vserverId.get());
+        }
+        Payload payload = null;
+        if (request.isPresent()) {
+            payload = new Payload(request.get());
+
+        }
+        status = runCommand(action, actionIdentifiers, payload, requestId, listener);
+        if (appCSupport.getCategoryOf(status).equals(StatusCategory.ERROR)) {
+            throw new ApplicationControllerOrchestratorException(status.getMessage(), status.getCode());
+        } else {
+            return status;
+        }
+    }
+
+
+    public Status runCommand(Action action, org.onap.appc.client.lcm.model.ActionIdentifiers actionIdentifiers,
+            org.onap.appc.client.lcm.model.Payload payload, String requestID, ApplicationControllerCallback listener)
+            throws ApplicationControllerOrchestratorException {
+        Status status;
+        Object requestObject;
+        requestObject = createRequest(action, actionIdentifiers, payload, requestID);
+        appCSupport.logLCMMessage(requestObject);
+        LifeCycleManagerStateful client = getAppCClient();
+        Method lcmMethod = appCSupport.getAPIMethod(action.name(), client, true);
+        try {
+            Object response = lcmMethod.invoke(client, requestObject, listener);
+            if (response != null) {
+                return appCSupport.getStatusFromGenericResponse(response);
+            } else {
+                return new Status();
+            }
+        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+            throw new RuntimeException(String.format("%s : %s", "Unable to invoke action", action.toString()), e);
+        }
+    }
+
+    protected Properties getLCMProperties() {
+        return getLCMProperties("appc");
+    }
+
+    protected Properties getLCMProperties(String controllerType) {
+        Properties properties = new Properties();
+
+        properties.put("topic.read", this.env.getProperty("appc.client.topic.read.name"));
+        properties.put("topic.write", this.env.getProperty("appc.client.topic.write"));
+        properties.put("SDNC-topic.read", this.env.getProperty("appc.client.topic.sdnc.read"));
+        properties.put("SDNC-topic.write", this.env.getProperty("appc.client.topic.sdnc.write"));
+        properties.put("topic.read.timeout", this.env.getProperty("appc.client.topic.read.timeout"));
+        properties.put("client.response.timeout", this.env.getProperty("appc.client.response.timeout"));
+        properties.put("poolMembers", this.env.getProperty("appc.client.poolMembers"));
+        properties.put("controllerType", controllerType);
+        properties.put("client.key", this.env.getProperty("appc.client.key"));
+        properties.put("client.secret", this.env.getProperty("appc.client.secret"));
+        properties.put("client.name", CLIENT_NAME);
+        properties.put("service", this.env.getProperty("appc.client.service"));
+        return properties;
+    }
+
+    public Object createRequest(Action action, ActionIdentifiers identifier, Payload payload, String requestId) {
+        Object requestObject = appCSupport.getInput(action.name());
+
+
+        try {
+            CommonHeader commonHeader = buildCommonHeader(requestId);
+            requestObject.getClass().getDeclaredMethod("setCommonHeader", CommonHeader.class).invoke(requestObject,
+                    commonHeader);
+            requestObject.getClass().getDeclaredMethod("setAction", Action.class).invoke(requestObject, action);
+            requestObject.getClass().getDeclaredMethod("setActionIdentifiers", ActionIdentifiers.class)
+                    .invoke(requestObject, identifier);
+            if (payload != null) {
+                logger.info("payload in RunCommand: " + payload.getValue());
+                requestObject.getClass().getDeclaredMethod("setPayload", Payload.class).invoke(requestObject, payload);
+            }
+        } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
+            logger.error("Error building Appc request", e);
+        }
+        return requestObject;
+    }
+
+    private CommonHeader buildCommonHeader(String requestId) {
+        CommonHeader commonHeader = new CommonHeader();
+        commonHeader.setApiVer(API_VER);
+        commonHeader.setOriginatorId(ORIGINATOR_ID);
+        commonHeader.setRequestId(requestId == null ? UUID.randomUUID().toString() : requestId);
+        commonHeader.setSubRequestId(UUID.randomUUID().toString());
+        Flags flags = new Flags();
+        String flagsMode = "NORMAL";
+        Mode mode = Mode.valueOf(flagsMode);
+        flags.setMode(mode);
+        String flagsForce = "FALSE";
+        Force force = Force.valueOf(flagsForce);
+        flags.setForce(force);
+        flags.setTtl(FLAGS_TTL);
+        commonHeader.setFlags(flags);
+        Instant timestamp = Instant.now();
+        ZULU zulu = new ZULU(timestamp.toString());
+        commonHeader.setTimestamp(zulu);
+        return commonHeader;
+    }
+
+    public Flags createRequestFlags() {
+        Flags flags = new Flags();
+        flags.setTtl(6000);
+        return flags;
+    }
+}
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerOrchestratorException.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerOrchestratorException.java
new file mode 100644 (file)
index 0000000..cc980a4
--- /dev/null
@@ -0,0 +1,37 @@
+/*-
+ * ============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.adapters.appc.orchestrator.client;
+
+
+public class ApplicationControllerOrchestratorException extends Exception {
+
+    private static final long serialVersionUID = 2594894543585595494L;
+    private final int appcCode;
+
+    public ApplicationControllerOrchestratorException(String message, int code) {
+        super(message);
+        appcCode = code;
+    }
+
+    public int getAppcCode() {
+        return appcCode;
+    }
+}
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerSupport.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerSupport.java
new file mode 100644 (file)
index 0000000..90ab24c
--- /dev/null
@@ -0,0 +1,207 @@
+/*-
+ * ============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.adapters.appc.orchestrator.client;
+
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import org.onap.appc.client.lcm.api.LifeCycleManagerStateful;
+import org.onap.appc.client.lcm.api.ResponseHandler;
+import org.onap.appc.client.lcm.exceptions.AppcClientException;
+import org.onap.appc.client.lcm.model.Status;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+
+
+@Component
+public class ApplicationControllerSupport {
+
+    private static final int ACCEPT_SERIES = 100;
+    private static final int ERROR_SERIES = 200;
+    private static final int REJECT_SERIES = 300;
+    private static final int SUCCESS_SERIES = 400;
+    private static final int SUCCESS_STATUS = SUCCESS_SERIES;
+    private static final int PARTIAL_SERIES = 500;
+    private static final int PARTIAL_SUCCESS_STATUS = PARTIAL_SERIES;
+    private static final int PARTIAL_FAILURE_STATUS = PARTIAL_SERIES + 1;
+
+    private static Logger logger = LoggerFactory.getLogger(ApplicationControllerSupport.class);
+    private String lcmModelPackage = "org.onap.appc.client.lcm.model";
+
+    /**
+     * @param action
+     * @return
+     * @throws ClassNotFoundException
+     * @throws InstantiationException
+     * @throws IllegalAccessException
+     */
+    public Object getInput(String action) {
+        try {
+            return getInputClass(action).newInstance();
+        } catch (IllegalAccessException | InstantiationException e) {
+            throw new RuntimeException(
+                    String.format("%s : %s", "Unable to instantiate viable LCM Kit input class for action", action), e);
+        }
+    }
+
+    /**
+     * @param action
+     * @return
+     * @throws ClassNotFoundException
+     */
+    public Method getAPIMethod(String action, LifeCycleManagerStateful lcmStateful, boolean async) {
+        Method[] methods = lcmStateful.getClass().getMethods();
+        for (Method method : methods) {
+            if (method.getName().equalsIgnoreCase(action)) {
+                Class<?>[] methodParameterTypes = method.getParameterTypes();
+                if (methodParameterTypes.length > 0) {
+                    if (getInputClass(action).equals(methodParameterTypes[0])) {
+                        if (async) {
+                            if (methodParameterTypes.length == 2
+                                    && ResponseHandler.class.isAssignableFrom(methodParameterTypes[1])) {
+                                return method;
+                            }
+                        } else if (methodParameterTypes.length == 1) {
+                            return method;
+                        }
+                    }
+                }
+            }
+        }
+        throw new RuntimeException(String.format("%s : %s, async=%b",
+                "Unable to derive viable LCM Kit API method for action", action, async));
+    }
+
+    public Status getStatusFromGenericResponse(Object response) {
+        Method statusReader = getBeanPropertyMethodFor(response.getClass(), "status", false);
+        if (statusReader != null) {
+            try {
+                return (Status) statusReader.invoke(response);
+            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+                logger.error("Unable to obtain status from LCM Kit response", e);
+            }
+        }
+        return new Status();
+    }
+
+    public StatusCategory getCategoryOf(Status status) {
+        int codeSeries = status.getCode() - (status.getCode() % 100);
+        switch (codeSeries) {
+            case ACCEPT_SERIES:
+                return StatusCategory.NORMAL;
+            case ERROR_SERIES:
+            case REJECT_SERIES:
+                return StatusCategory.ERROR;
+            case SUCCESS_SERIES:
+                return status.getCode() == SUCCESS_STATUS ? StatusCategory.NORMAL : StatusCategory.ERROR;
+            case PARTIAL_SERIES:
+                switch (status.getCode()) {
+                    case PARTIAL_SUCCESS_STATUS:
+                        return StatusCategory.NORMAL;
+                    case PARTIAL_FAILURE_STATUS:
+                        return StatusCategory.ERROR;
+                    default:
+                        return StatusCategory.WARNING;
+                }
+            default:
+                return StatusCategory.WARNING;
+        }
+    }
+
+    public boolean getFinalityOf(Status status) {
+        int codeSeries = status.getCode() - (status.getCode() % 100);
+        switch (codeSeries) {
+            case ACCEPT_SERIES:
+            case PARTIAL_SERIES:
+                return false;
+            case ERROR_SERIES:
+            case REJECT_SERIES:
+            case SUCCESS_SERIES:
+                return true;
+            default:
+                return true;
+        }
+    }
+
+    private Method getBeanPropertyMethodFor(Class<?> clazz, String propertyName, boolean isWriter) {
+        BeanInfo beanInfo;
+        try {
+            beanInfo = Introspector.getBeanInfo(clazz, Object.class);
+        } catch (IntrospectionException e) {
+            throw new RuntimeException(
+                    String.format("Unable to produce bean property method for class : %s, property : %s, writer=%b",
+                            clazz.getName(), propertyName, isWriter),
+                    e);
+        }
+        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
+            if (propertyDescriptor.getName().equals(propertyName)) {
+                return isWriter ? propertyDescriptor.getWriteMethod() : propertyDescriptor.getReadMethod();
+            }
+        }
+        throw new RuntimeException(
+                String.format("Unable to produce bean property method for class : %s, property : %s, writer=%b",
+                        clazz.getName(), propertyName, isWriter));
+    }
+
+    /**
+     * @param action
+     * @return
+     * @throws ClassNotFoundException
+     */
+    private Class<?> getInputClass(String action) {
+        try {
+            return Class.forName(lcmModelPackage + '.' + action + "Input");
+        } catch (ClassNotFoundException e) {
+            throw new RuntimeException(String.format("%s : %s using package : %s",
+                    "Unable to identify viable LCM Kit input class for action", action, lcmModelPackage), e);
+        }
+    }
+
+
+    public void logLCMMessage(Object message) {
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.setSerializationInclusion(Include.NON_NULL);
+        ObjectWriter writer = objectMapper.writerWithDefaultPrettyPrinter();
+        String inputAsJSON;
+        try {
+            inputAsJSON = writer.writeValueAsString(message);
+            logger.info("LCM Kit input message follows: {}", inputAsJSON);
+        } catch (JsonProcessingException e) {
+            logger.error("Error in logging LCM Message", e);
+        }
+    }
+
+    public Status buildStatusFromAppcException(AppcClientException exception) {
+        Status exceptionStatus = new Status();
+        exceptionStatus.setCode(200);
+        exceptionStatus.setMessage("Exception on APPC request: " + exception.getMessage());
+        return exceptionStatus;
+    }
+}
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/StatusCategory.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/StatusCategory.java
new file mode 100644 (file)
index 0000000..27160ef
--- /dev/null
@@ -0,0 +1,16 @@
+package org.onap.so.adapters.appc.orchestrator.client;
+
+public enum StatusCategory {
+    NORMAL("normal"), WARNING("warning"), ERROR("error");
+
+    private final String category;
+
+    private StatusCategory(final String category) {
+        this.category = category;
+    }
+
+    @Override
+    public String toString() {
+        return category;
+    }
+}
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/beans/ConfigurationParameters.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/beans/ConfigurationParameters.java
new file mode 100644 (file)
index 0000000..b065e9a
--- /dev/null
@@ -0,0 +1,53 @@
+package org.onap.so.adapters.appc.orchestrator.client.beans;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ConfigurationParameters {
+
+    @JsonProperty("vnf_name")
+    private String vnfName;
+    @JsonProperty("book_name")
+    private String bookName;
+    @JsonProperty("node_list")
+    private String nodeList;
+    @JsonProperty("file_parameter_content")
+    private String fileParameterContent;
+
+
+    @JsonProperty("vnf_name")
+    public String getVnfName() {
+        return vnfName;
+    }
+
+    @JsonProperty("vnf_name")
+    public void setVnfName(String vnfName) {
+        this.vnfName = vnfName;
+    }
+
+    public String getBookName() {
+        return bookName;
+    }
+
+    public void setBookName(String bookName) {
+        this.bookName = bookName;
+    }
+
+    public String getNodeList() {
+        return nodeList;
+    }
+
+    public void setNodeList(String nodeList) {
+        this.nodeList = nodeList;
+    }
+
+    public String getFileParameterContent() {
+        return fileParameterContent;
+    }
+
+    public void setFileParameterContent(String fileParameterContent) {
+        this.fileParameterContent = fileParameterContent;
+    }
+
+}
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/beans/Identity.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/beans/Identity.java
new file mode 100644 (file)
index 0000000..912441a
--- /dev/null
@@ -0,0 +1,24 @@
+package org.onap.so.adapters.appc.orchestrator.client.beans;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({"identity-url"})
+public class Identity {
+
+    @JsonProperty("identity-url")
+    private String identityUrl;
+
+    @JsonProperty("identity-url")
+    public String getIdentityUrl() {
+        return identityUrl;
+    }
+
+    @JsonProperty("identity-url")
+    public void setIdentityUrl(String identityUrl) {
+        this.identityUrl = identityUrl;
+    }
+
+}
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/beans/Parameters.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/beans/Parameters.java
new file mode 100644 (file)
index 0000000..9b0385b
--- /dev/null
@@ -0,0 +1,99 @@
+package org.onap.so.adapters.appc.orchestrator.client.beans;
+
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({"vm-id", "identity-url", "old_software_version", "new_software_version", "operations_timeout",
+        "request-parameters", "configuration-parameters"})
+public class Parameters {
+
+    @JsonProperty("vm-id")
+    private String vmId;
+    @JsonProperty("identity-url")
+    private String identityUrl;
+    @JsonProperty("operations_timeout")
+    private String operationsTimeout;
+    @JsonProperty("existing_software_version")
+    private String existingSoftwareVersion;
+    @JsonProperty("new_software_version")
+    private String newSoftwareVersion;
+    @JsonProperty("request-parameters")
+    private RequestParameters requestParameters;
+    @JsonProperty("configuration-parameters")
+    private ConfigurationParameters configurationParameters;
+
+    @JsonProperty("request-parameters")
+    public RequestParameters getRequestParameters() {
+        return requestParameters;
+    }
+
+    @JsonProperty("request-parameters")
+    public void setRequestParameters(RequestParameters requestParameters) {
+        this.requestParameters = requestParameters;
+    }
+
+    @JsonProperty("configuration-parameters")
+    public ConfigurationParameters getConfigurationParameters() {
+        return configurationParameters;
+    }
+
+    @JsonProperty("configuration-parameters")
+    public void setConfigurationParameters(ConfigurationParameters configurationParameters) {
+        this.configurationParameters = configurationParameters;
+    }
+
+    @JsonProperty("vm-id")
+    public String getVmId() {
+        return vmId;
+    }
+
+    @JsonProperty("vm-id")
+    public void setVmId(String vmId) {
+        this.vmId = vmId;
+    }
+
+    @JsonProperty("identity-url")
+    public String getIdentityUrl() {
+        return identityUrl;
+    }
+
+    @JsonProperty("identity-url")
+    public void setIdentityUrl(String identityUrl) {
+        this.identityUrl = identityUrl;
+    }
+
+    @JsonProperty("operations_timeout")
+    public String getOperationsTimeout() {
+        return operationsTimeout;
+    }
+
+    @JsonProperty("operations_timeout")
+    public void setOperationsTimeout(String operationsTimeout) {
+        this.operationsTimeout = operationsTimeout;
+    }
+
+    @JsonProperty("existing_software_version")
+    public String getExistingSoftwareVersion() {
+        return existingSoftwareVersion;
+    }
+
+    @JsonProperty("existing_software_version")
+    public void setExistingSoftwareVersion(String existingSoftwareVersion) {
+        this.existingSoftwareVersion = existingSoftwareVersion;
+    }
+
+    @JsonProperty("new_software_version")
+    public String getNewSoftwareVersion() {
+        return newSoftwareVersion;
+    }
+
+    @JsonProperty("new_software_version")
+    public void setNewSoftwareVersion(String newSoftwareVersion) {
+        this.newSoftwareVersion = newSoftwareVersion;
+    }
+
+
+}
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/beans/RequestParameters.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/client/beans/RequestParameters.java
new file mode 100644 (file)
index 0000000..ddc0a0e
--- /dev/null
@@ -0,0 +1,59 @@
+package org.onap.so.adapters.appc.orchestrator.client.beans;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class RequestParameters {
+
+    @JsonProperty("vnf-host-ip-address")
+    private String vnfHostIpAddress;
+    @JsonProperty("vf-module-id")
+    private String vfModuleId;
+    @JsonProperty("vnf-name")
+    private String vnfName;
+    @JsonProperty("host-ip-address")
+    private String hostIpAddress;
+
+    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;
+    }
+
+    public String getVnfName() {
+        return vnfName;
+    }
+
+    public void setVnfName(String vnfName) {
+        this.vnfName = vnfName;
+    }
+
+    public String getHostIpAddress() {
+        return hostIpAddress;
+    }
+
+    public void setHostIpAddress(String hostIpAddress) {
+        this.hostIpAddress = hostIpAddress;
+    }
+
+    @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();
+    }
+
+}
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTask.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTask.java
new file mode 100644 (file)
index 0000000..181d114
--- /dev/null
@@ -0,0 +1,50 @@
+package org.onap.so.adapters.appc.orchestrator.service;
+
+import org.camunda.bpm.client.task.ExternalTask;
+import org.camunda.bpm.client.task.ExternalTaskService;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerCallback;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerSupport;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerTaskRequest;
+import org.onap.so.externaltasks.logging.AuditMDCSetup;
+import org.onap.so.utils.ExternalTaskUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+import org.onap.appc.client.lcm.model.Status;
+
+@Component
+public class ApplicationControllerTask extends ExternalTaskUtils {
+
+    private static final Logger logger = LoggerFactory.getLogger(ApplicationControllerTask.class);
+
+    @Autowired
+    public Environment env;
+
+    @Autowired
+    public ApplicationControllerTaskImpl applicationControllerTaskImpl;
+
+    @Autowired
+    public ApplicationControllerSupport applicationControllerSupport;
+
+    @Autowired
+    private AuditMDCSetup mdcSetup;
+
+    protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) {
+        mdcSetup.setupMDC(externalTask);
+        ApplicationControllerTaskRequest request = externalTask.getVariable("appcOrchestratorRequest");
+        String msoRequestId = externalTask.getVariable("mso-request-id");
+        logger.debug("Starting External Task for RequestId: {} ", msoRequestId);
+        Status status = null;
+        ApplicationControllerCallback listener =
+                new ApplicationControllerCallback(externalTask, externalTaskService, applicationControllerSupport);
+
+        try {
+            status = applicationControllerTaskImpl.execute(msoRequestId, request, listener);
+        } catch (Exception e) {
+            logger.error("Error while calling appc", e.getMessage());
+        }
+    }
+
+}
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskImpl.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskImpl.java
new file mode 100644 (file)
index 0000000..a174ccb
--- /dev/null
@@ -0,0 +1,112 @@
+package org.onap.so.adapters.appc.orchestrator.service;
+
+import java.util.Optional;
+import org.onap.appc.client.lcm.model.Status;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerCallback;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerClient;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerOrchestratorException;
+import org.onap.so.adapters.appc.orchestrator.client.beans.ConfigurationParameters;
+import org.onap.so.adapters.appc.orchestrator.client.beans.Identity;
+import org.onap.so.adapters.appc.orchestrator.client.beans.Parameters;
+import org.onap.so.adapters.appc.orchestrator.client.beans.RequestParameters;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerTaskRequest;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerVm;
+import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+@Component
+public class ApplicationControllerTaskImpl {
+
+    @Autowired
+    private ApplicationControllerClient appcClient;
+
+    public Status execute(String msoRequestId, ApplicationControllerTaskRequest request,
+            ApplicationControllerCallback listener)
+            throws JsonProcessingException, ApplicationControllerOrchestratorException {
+        Status status = null;
+        GraphInventoryCommonObjectMapperProvider mapper = new GraphInventoryCommonObjectMapperProvider();
+        Optional<String> payload = Optional.empty();
+        String vmId = null;
+        Optional<String> vserverId = Optional.empty();
+        Parameters parameters = new Parameters();
+        ConfigurationParameters configParams = new ConfigurationParameters();
+
+        switch (request.getAction()) {
+            case HealthCheck:
+                RequestParameters requestParams = new RequestParameters();
+                requestParams.setHostIpAddress(request.getApplicationControllerVnf().getVnfHostIpAddress());
+                parameters.setRequestParameters(requestParams);
+                payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+                break;
+            case ResumeTraffic:
+                configParams.setVnfName(request.getApplicationControllerVnf().getVnfName());
+                parameters.setConfigurationParameters(configParams);
+                payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+                break;
+            case Start:
+            case Stop:
+                Identity identity = new Identity();
+                identity.setIdentityUrl(request.getIdentityUrl());
+                payload = Optional.of((mapper.getMapper().writeValueAsString(identity)));
+                break;
+            case Unlock:
+            case Lock:
+                break;
+            case QuiesceTraffic:
+                parameters.setOperationsTimeout(request.getOperationsTimeout());
+                payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+                break;
+            case DistributeTraffic:
+                configParams.setBookName(request.getBookName());
+                configParams.setNodeList(request.getNodeList());
+                configParams.setFileParameterContent(request.getFileParameters());
+                configParams.setVnfName(request.getApplicationControllerVnf().getVnfName());
+                parameters.setConfigurationParameters(configParams);
+                payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+                break;
+            case DistributeTrafficCheck:
+                configParams.setBookName(request.getBookName());
+                configParams.setNodeList(request.getNodeList());
+                configParams.setFileParameterContent(request.getFileParameters());
+                configParams.setVnfName(request.getApplicationControllerVnf().getVnfName());
+                parameters.setConfigurationParameters(configParams);
+                payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+                break;
+            case ConfigModify:
+            case ConfigScaleOut:
+                break;
+            case UpgradePreCheck:
+            case UpgradePostCheck:
+            case UpgradeSoftware:
+            case UpgradeBackup:
+                parameters.setExistingSoftwareVersion(request.getExistingSoftwareVersion());
+                parameters.setNewSoftwareVersion(request.getNewSoftwareVersion());
+                payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+                break;
+            case ActionStatus:
+                break;
+            case Snapshot:
+                ApplicationControllerVm applicationControllerVm =
+                        request.getApplicationControllerVnf().getApplicationControllerVm();
+                if (applicationControllerVm != null) {
+                    vmId = request.getApplicationControllerVnf().getApplicationControllerVm().getVmId();
+                    parameters.setVmId(vmId);
+                    payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+                    vserverId = Optional
+                            .of(request.getApplicationControllerVnf().getApplicationControllerVm().getVserverId());
+                }
+            default:
+                // errorMessage = "Unable to idenify Action request for AppCClient";
+                break;
+        }
+
+        status = appcClient.vnfCommand(request.getAction(), msoRequestId,
+                request.getApplicationControllerVnf().getVnfId(), vserverId, payload, request.getControllerType(),
+                listener);
+
+        return status;
+    }
+
+}
diff --git a/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskService.java b/adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskService.java
new file mode 100644 (file)
index 0000000..2a33124
--- /dev/null
@@ -0,0 +1,31 @@
+package org.onap.so.adapters.appc.orchestrator.service;
+
+import javax.annotation.PostConstruct;
+import org.onap.so.utils.ExternalTaskServiceUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Profile;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+
+@Component
+@Profile("!test")
+public class ApplicationControllerTaskService {
+
+    @Autowired
+    public Environment env;
+
+    @Autowired
+    private ApplicationControllerTask appcOrchestrator;
+
+    @Autowired
+    private ExternalTaskServiceUtils externalTaskServiceUtils;
+
+    @PostConstruct
+    public void appcOrchestrator() throws Exception {
+        for (int i = 0; i < externalTaskServiceUtils.getMaxClients(); i++) {
+            externalTaskServiceUtils.createExternalTaskClient().subscribe("AppcService").lockDuration(604800000)
+                    .handler(appcOrchestrator::executeExternalTask).open();
+        }
+    }
+
+}
diff --git a/adapters/so-appc-orchestrator/src/main/resources/application.yaml b/adapters/so-appc-orchestrator/src/main/resources/application.yaml
new file mode 100644 (file)
index 0000000..c0c5962
--- /dev/null
@@ -0,0 +1,18 @@
+server:
+    port: 8080
+    tomcat:
+        max-threads: 50
+
+#Actuator
+management:
+  endpoints:
+    web:
+      base-path: /manage
+      exposure:
+        include: "*"
+  metrics:
+    se-global-registry: false
+    export:
+      prometheus:
+        enabled: true # Whether exporting of metrics to Prometheus is enabled.
+        step: 1m # Step size (i.e. reporting frequency) to use.
\ No newline at end of file
diff --git a/adapters/so-appc-orchestrator/src/test/java/org/onap/so/TestApplication.java b/adapters/so-appc-orchestrator/src/test/java/org/onap/so/TestApplication.java
new file mode 100644 (file)
index 0000000..fe965b4
--- /dev/null
@@ -0,0 +1,43 @@
+package org.onap.so;
+/*-
+ * ============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=========================================================
+ */
+
+
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.ComponentScan.Filter;
+import org.springframework.context.annotation.FilterType;
+import org.springframework.context.annotation.Profile;
+
+@SpringBootApplication
+@Profile("test")
+@ComponentScan(basePackages = {"org.onap.so"},
+        excludeFilters = {@Filter(type = FilterType.ANNOTATION, classes = SpringBootApplication.class)})
+public class TestApplication {
+    public static void main(String... args) {
+        SpringApplication.run(TestApplication.class, args);
+        System.getProperties().setProperty("mso.db", "MARIADB");
+        System.getProperties().setProperty("server.name", "Springboot");
+
+
+    }
+}
diff --git a/adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerCallbackTest.java b/adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerCallbackTest.java
new file mode 100644 (file)
index 0000000..90f5a44
--- /dev/null
@@ -0,0 +1,113 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017-2019 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.adapters.appc.orchestrator.client;
+
+import static org.hamcrest.CoreMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import org.camunda.bpm.client.task.ExternalTask;
+import org.camunda.bpm.client.task.ExternalTaskService;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerCallback;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerSupport;
+import org.onap.appc.client.lcm.model.Status;
+import org.onap.appc.client.lcm.exceptions.AppcClientException;
+import org.onap.appc.client.lcm.model.ResumeTrafficOutput;
+
+public class ApplicationControllerCallbackTest {
+
+    @InjectMocks
+    ApplicationControllerCallback appcTaskCallback;
+
+    @Mock
+    ApplicationControllerSupport applicationControllerSupport;
+
+    @Mock
+    ExternalTask mockExternalTask;
+
+    @Mock
+    ExternalTaskService mockExternalTaskService;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        appcTaskCallback = new ApplicationControllerCallback(mockExternalTask, mockExternalTaskService,
+                applicationControllerSupport);
+    }
+
+    @Test
+    public void onResponse_appcCallback_success_Test() throws Exception {
+        Status status = new Status();
+        status.setCode(400);
+        ResumeTrafficOutput response = new ResumeTrafficOutput();
+        response.setStatus(status);
+        doReturn(status).when(applicationControllerSupport).getStatusFromGenericResponse(response);
+        doReturn(true).when(applicationControllerSupport).getFinalityOf(status);
+        doReturn(StatusCategory.NORMAL).when(applicationControllerSupport).getCategoryOf(status);
+        appcTaskCallback.onResponse(response);
+        Mockito.verify(mockExternalTaskService).complete(mockExternalTask);
+    }
+
+    @Test
+    public void onResponse_appcCallback_intermediateResponse_Test() throws Exception {
+        Status status = new Status();
+        status.setCode(100);
+        ResumeTrafficOutput response = new ResumeTrafficOutput();
+        response.setStatus(status);
+        doReturn(status).when(applicationControllerSupport).getStatusFromGenericResponse(response);
+        appcTaskCallback.onResponse(response);
+        Mockito.verifyZeroInteractions(mockExternalTaskService);
+    }
+
+    @Test
+    public void onResponse_appcCallback_failure_Test() throws Exception {
+        String testFailure = "test failure";
+        Status status = new Status();
+        status.setCode(200);
+        status.setMessage(testFailure);
+        ResumeTrafficOutput response = new ResumeTrafficOutput();
+        response.setStatus(status);
+        doReturn(status).when(applicationControllerSupport).getStatusFromGenericResponse(response);
+        doReturn(true).when(applicationControllerSupport).getFinalityOf(status);
+        doReturn(StatusCategory.ERROR).when(applicationControllerSupport).getCategoryOf(status);
+        appcTaskCallback.onResponse(response);
+        Mockito.verify(mockExternalTaskService).handleBpmnError(mockExternalTask, "MSOWorkflowException", testFailure);
+    }
+
+    @Test
+    public void onException_appcCallback_failure_Test() throws Exception {
+        String testFailure = "test failure";
+        AppcClientException appcException = new AppcClientException(testFailure);
+        Status status = new Status();
+        status.setCode(200);
+        String exceptionMessage = "Exception on APPC request: " + testFailure;
+        status.setMessage(exceptionMessage);
+        doReturn(status).when(applicationControllerSupport).buildStatusFromAppcException(appcException);
+        doReturn(StatusCategory.ERROR).when(applicationControllerSupport).getCategoryOf(status);
+        appcTaskCallback.onException(appcException);
+        Mockito.verify(mockExternalTaskService).handleBpmnError(mockExternalTask, "MSOWorkflowException",
+                exceptionMessage);
+    }
+}
diff --git a/adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerSupportTest.java b/adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/client/ApplicationControllerSupportTest.java
new file mode 100644 (file)
index 0000000..2dd2fd7
--- /dev/null
@@ -0,0 +1,79 @@
+/*-
+ * ============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.adapters.appc.orchestrator.client;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.appc.client.lcm.exceptions.AppcClientException;
+import org.onap.appc.client.lcm.model.Status;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerSupport;
+import org.onap.so.adapters.appc.orchestrator.client.StatusCategory;
+import junitparams.JUnitParamsRunner;
+import junitparams.Parameters;
+
+@RunWith(JUnitParamsRunner.class)
+public class ApplicationControllerSupportTest {
+    private ApplicationControllerSupport applicationControllerSupport = new ApplicationControllerSupport();
+
+    public static Object[][] statusesAndCategories() {
+        return new Object[][] {{100, StatusCategory.NORMAL}, {200, StatusCategory.ERROR}, {300, StatusCategory.ERROR},
+                {400, StatusCategory.NORMAL}, {401, StatusCategory.ERROR}, {500, StatusCategory.NORMAL},
+                {501, StatusCategory.ERROR}, {502, StatusCategory.WARNING}, {800, StatusCategory.WARNING},};
+    }
+
+    public static Object[][] statusesAndFinalities() {
+        return new Object[][] {{100, false}, {200, true}, {300, true}, {400, true}, {500, false}, {800, true},};
+    }
+
+    @Test
+    @Parameters(method = "statusesAndCategories")
+    public void shouldReturnCategoryForCode(int code, StatusCategory category) throws Exception {
+        // when
+        StatusCategory detectedCategory = applicationControllerSupport.getCategoryOf(createStatus(code));
+        // then
+        assertThat(detectedCategory).isEqualTo(category);
+    }
+
+    @Test
+    @Parameters(method = "statusesAndFinalities")
+    public void shouldReturnFinalityForCode(int code, boolean expectedFinality) throws Exception {
+        // when
+        boolean finality = applicationControllerSupport.getFinalityOf(createStatus(code));
+        // then
+        assertThat(finality).isEqualTo(expectedFinality);
+    }
+
+    @Test
+    public void buildStatusFromAppcException_Test() {
+        String errorMessage = "errormessage";
+        AppcClientException exception = new AppcClientException(errorMessage);
+        Status status = applicationControllerSupport.buildStatusFromAppcException(exception);
+        assertThat(status.getCode() == 200);
+        assertThat((status.getMessage()).equals(("Exception on APPC request: " + errorMessage)));
+    }
+
+    private Status createStatus(int code) {
+        Status status = new Status();
+        status.setCode(code);
+        return status;
+    }
+}
diff --git a/adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/client/beans/BeansTest.java b/adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/client/beans/BeansTest.java
new file mode 100644 (file)
index 0000000..76b5efa
--- /dev/null
@@ -0,0 +1,20 @@
+package org.onap.so.adapters.appc.orchestrator.client.beans;
+
+import org.junit.Test;
+import com.openpojo.reflection.filters.FilterPackageInfo;
+import com.openpojo.validation.Validator;
+import com.openpojo.validation.ValidatorBuilder;
+import com.openpojo.validation.rule.impl.GetterMustExistRule;
+import com.openpojo.validation.rule.impl.SetterMustExistRule;
+import com.openpojo.validation.test.impl.GetterTester;
+import com.openpojo.validation.test.impl.SetterTester;
+
+public class BeansTest {
+
+    @Test
+    public void validateGettersAndSetters() {
+        Validator validator = ValidatorBuilder.create().with(new SetterMustExistRule(), new GetterMustExistRule())
+                .with(new SetterTester(), new GetterTester()).build();
+        validator.validate("org.onap.so.adapters.appc.orchestrator.client.beans", new FilterPackageInfo());
+    }
+}
diff --git a/adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskImplITTest.java b/adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskImplITTest.java
new file mode 100644 (file)
index 0000000..3eac851
--- /dev/null
@@ -0,0 +1,88 @@
+package org.onap.so.adapters.appc.orchestrator.service;
+
+import java.util.List;
+import java.util.Optional;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.appc.client.lcm.model.Status;
+import org.onap.so.TestApplication;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerCallback;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerClient;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerOrchestratorException;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerSupport;
+import org.onap.so.adapters.appc.orchestrator.client.beans.ConfigurationParameters;
+import org.onap.so.adapters.appc.orchestrator.client.beans.Identity;
+import org.onap.so.adapters.appc.orchestrator.client.beans.Parameters;
+import org.onap.so.adapters.appc.orchestrator.client.beans.RequestParameters;
+import org.onap.so.adapters.appc.orchestrator.service.ApplicationControllerTaskImpl;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerTaskRequest;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerVnf;
+import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.camunda.bpm.client.task.ExternalTask;
+import org.camunda.bpm.client.task.ExternalTaskService;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import org.onap.appc.client.lcm.model.Action;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@ActiveProfiles("test")
+@ContextConfiguration
+@AutoConfigureWireMock(port = 0)
+public class ApplicationControllerTaskImplITTest {
+
+    @Autowired
+    private ApplicationControllerTaskImpl applicationControllerTaskImpl;
+
+    @Mock
+    ExternalTask externalTask;
+
+    @Mock
+    ExternalTaskService externalTaskService;
+
+    @Mock
+    ApplicationControllerSupport appCSupport;
+
+    ApplicationControllerTaskRequest request;
+
+    ApplicationControllerCallback listener;
+
+    GraphInventoryCommonObjectMapperProvider mapper = new GraphInventoryCommonObjectMapperProvider();
+
+    @Before
+    public void setup() {
+        request = new ApplicationControllerTaskRequest();
+        request.setBookName("testBookName");
+        request.setControllerType("testControllerType");
+        request.setFileParameters("testFileParams");
+        request.setIdentityUrl("testIdentityUrl");
+        request.setNewSoftwareVersion("2.0");
+        request.setExistingSoftwareVersion("1.0");
+        request.setOperationsTimeout("30");
+        ApplicationControllerVnf applicationControllerVnf = new ApplicationControllerVnf();
+        applicationControllerVnf.setVnfHostIpAddress("100.100");
+        applicationControllerVnf.setVnfId("testVnfId");
+        applicationControllerVnf.setVnfName("testVnfName");
+        request.setApplicationControllerVnf(applicationControllerVnf);
+        listener = new ApplicationControllerCallback(null, externalTaskService, appCSupport);
+    }
+
+
+    @Test
+    public void testListener() throws Exception {
+        request.setAction(Action.QuiesceTraffic);
+        Status status = applicationControllerTaskImpl.execute("testRequestId", request, listener);
+    }
+
+}
diff --git a/adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskImplTest.java b/adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskImplTest.java
new file mode 100644 (file)
index 0000000..640e2db
--- /dev/null
@@ -0,0 +1,236 @@
+package org.onap.so.adapters.appc.orchestrator.service;
+
+import java.util.Optional;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.appc.client.lcm.model.Status;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerCallback;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerClient;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerOrchestratorException;
+import org.onap.so.adapters.appc.orchestrator.client.beans.ConfigurationParameters;
+import org.onap.so.adapters.appc.orchestrator.client.beans.Identity;
+import org.onap.so.adapters.appc.orchestrator.client.beans.Parameters;
+import org.onap.so.adapters.appc.orchestrator.client.beans.RequestParameters;
+import org.onap.so.adapters.appc.orchestrator.service.ApplicationControllerTaskImpl;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerTaskRequest;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerVnf;
+import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import org.onap.appc.client.lcm.model.Action;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ApplicationControllerTaskImplTest {
+
+    @Mock
+    ApplicationControllerClient applicationControllerClient;
+
+    @InjectMocks
+    @Spy
+    ApplicationControllerTaskImpl applicationControllerTaskImpl;
+
+    ApplicationControllerTaskRequest request;
+
+    ApplicationControllerCallback listener;
+
+    GraphInventoryCommonObjectMapperProvider mapper = new GraphInventoryCommonObjectMapperProvider();
+
+    @Before
+    public void setup() {
+        request = new ApplicationControllerTaskRequest();
+        request.setBookName("testBookName");
+        request.setControllerType("testControllerType");
+        request.setFileParameters("testFileParams");
+        request.setIdentityUrl("testIdentityUrl");
+        request.setNewSoftwareVersion("2.0");
+        request.setExistingSoftwareVersion("1.0");
+        request.setOperationsTimeout("30");
+        ApplicationControllerVnf applicationControllerVnf = new ApplicationControllerVnf();
+        applicationControllerVnf.setVnfHostIpAddress("100.100");
+        applicationControllerVnf.setVnfId("testVnfId");
+        applicationControllerVnf.setVnfName("testVnfName");
+        request.setApplicationControllerVnf(applicationControllerVnf);
+        listener = new ApplicationControllerCallback(null, null, null);
+
+    }
+
+    @Test
+    public void testExcute_healthCheck() throws JsonProcessingException, ApplicationControllerOrchestratorException {
+        request.setAction(Action.HealthCheck);
+
+        Parameters parameters = new Parameters();
+        RequestParameters requestParams = new RequestParameters();
+        requestParams.setHostIpAddress(request.getApplicationControllerVnf().getVnfHostIpAddress());
+        parameters.setRequestParameters(requestParams);
+        Optional<String> payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+
+        Mockito.when(applicationControllerClient.vnfCommand(Action.HealthCheck, "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener)).thenReturn(new Status());
+
+        Status status = applicationControllerTaskImpl.execute("testRequestId", request, listener);
+
+        Mockito.verify(applicationControllerClient).vnfCommand(Action.HealthCheck, "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener);
+
+    }
+
+    @Test
+    public void testExcute_resumeTraffic() throws JsonProcessingException, ApplicationControllerOrchestratorException {
+        request.setAction(Action.ResumeTraffic);
+
+        Parameters parameters = new Parameters();
+        ConfigurationParameters configParams = new ConfigurationParameters();
+        configParams.setVnfName(request.getApplicationControllerVnf().getVnfName());
+        parameters.setConfigurationParameters(configParams);
+        Optional<String> payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+
+        Mockito.when(applicationControllerClient.vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener)).thenReturn(new Status());
+
+        Status status = applicationControllerTaskImpl.execute("testRequestId", request, listener);
+
+        Mockito.verify(applicationControllerClient).vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener);
+    }
+
+    @Test
+    public void testExcute_stop() throws JsonProcessingException, ApplicationControllerOrchestratorException {
+        request.setAction(Action.Stop);
+
+        Identity identity = new Identity();
+        identity.setIdentityUrl(request.getIdentityUrl());
+        Optional<String> payload = Optional.of((mapper.getMapper().writeValueAsString(identity)));
+
+        Mockito.when(applicationControllerClient.vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener)).thenReturn(new Status());
+
+        Status status = applicationControllerTaskImpl.execute("testRequestId", request, listener);
+
+        Mockito.verify(applicationControllerClient).vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener);
+    }
+
+    @Test
+    public void testExcute_lock() throws JsonProcessingException, ApplicationControllerOrchestratorException {
+        request.setAction(Action.Lock);
+
+        Mockito.when(applicationControllerClient.vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), Optional.empty(),
+                "testControllerType", listener)).thenReturn(new Status());
+
+        Status status = applicationControllerTaskImpl.execute("testRequestId", request, listener);
+
+        Mockito.verify(applicationControllerClient).vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), Optional.empty(),
+                "testControllerType", listener);
+    }
+
+    @Test
+    public void testExcute_quiesceTraffic() throws JsonProcessingException, ApplicationControllerOrchestratorException {
+        request.setAction(Action.QuiesceTraffic);
+
+
+        Parameters parameters = new Parameters();
+        parameters.setOperationsTimeout(request.getOperationsTimeout());
+        Optional<String> payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+        System.out.println("PAYLOAD is: " + payload.get());
+
+        Mockito.when(applicationControllerClient.vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener)).thenReturn(new Status());
+
+        Status status = applicationControllerTaskImpl.execute("testRequestId", request, listener);
+
+        Mockito.verify(applicationControllerClient).vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener);
+    }
+
+    @Test
+    public void testExcute_distributeTraffic()
+            throws JsonProcessingException, ApplicationControllerOrchestratorException {
+        request.setAction(Action.DistributeTraffic);
+
+        Parameters parameters = new Parameters();
+        ConfigurationParameters configParams = new ConfigurationParameters();
+        configParams.setBookName(request.getBookName());
+        configParams.setNodeList(request.getNodeList());
+        configParams.setFileParameterContent(request.getFileParameters());
+        configParams.setVnfName(request.getApplicationControllerVnf().getVnfName());
+        parameters.setConfigurationParameters(configParams);
+        Optional<String> payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+
+        Mockito.when(applicationControllerClient.vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener)).thenReturn(new Status());
+
+        Status status = applicationControllerTaskImpl.execute("testRequestId", request, listener);
+
+        Mockito.verify(applicationControllerClient).vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener);
+    }
+
+    @Test
+    public void testExcute_distributeTrafficCheck()
+            throws JsonProcessingException, ApplicationControllerOrchestratorException {
+        request.setAction(Action.DistributeTrafficCheck);
+
+        Parameters parameters = new Parameters();
+        ConfigurationParameters configParams = new ConfigurationParameters();
+        configParams.setBookName(request.getBookName());
+        configParams.setNodeList(request.getNodeList());
+        configParams.setFileParameterContent(request.getFileParameters());
+        configParams.setVnfName(request.getApplicationControllerVnf().getVnfName());
+        parameters.setConfigurationParameters(configParams);
+        Optional<String> payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+
+        Mockito.when(applicationControllerClient.vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener)).thenReturn(new Status());
+
+        Status status = applicationControllerTaskImpl.execute("testRequestId", request, listener);
+
+        Mockito.verify(applicationControllerClient).vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener);
+    }
+
+    @Test
+    public void testExcute_upgradeBackup() throws JsonProcessingException, ApplicationControllerOrchestratorException {
+        request.setAction(Action.UpgradeBackup);
+
+        Parameters parameters = new Parameters();
+        parameters.setExistingSoftwareVersion(request.getExistingSoftwareVersion());
+        parameters.setNewSoftwareVersion(request.getNewSoftwareVersion());
+        Optional<String> payload = Optional.of((mapper.getMapper().writeValueAsString(parameters)));
+
+        Mockito.when(applicationControllerClient.vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener)).thenReturn(new Status());
+
+        Status status = applicationControllerTaskImpl.execute("testRequestId", request, listener);
+
+        Mockito.verify(applicationControllerClient).vnfCommand(request.getAction(), "testRequestId",
+                request.getApplicationControllerVnf().getVnfId(), Optional.empty(), payload, "testControllerType",
+                listener);
+    }
+
+    @Test
+    public void testListener() throws Exception {
+        request.setAction(Action.QuiesceTraffic);
+        Status status = applicationControllerTaskImpl.execute("testRequestId", request, listener);
+    }
+
+}
diff --git a/adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskTest.java b/adapters/so-appc-orchestrator/src/test/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskTest.java
new file mode 100644 (file)
index 0000000..228ee90
--- /dev/null
@@ -0,0 +1,76 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017-2019 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.adapters.appc.orchestrator.service;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import org.camunda.bpm.client.task.ExternalTask;
+import org.camunda.bpm.client.task.ExternalTaskService;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.onap.so.externaltasks.logging.AuditMDCSetup;
+import org.onap.so.adapters.appc.orchestrator.client.ApplicationControllerCallback;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerTaskRequest;
+import org.onap.appc.client.lcm.model.Status;
+
+public class ApplicationControllerTaskTest extends ApplicationControllerTask {
+
+    @InjectMocks
+    ApplicationControllerTask appcTaskService = new ApplicationControllerTask();
+
+    @Mock
+    ApplicationControllerTaskImpl applicationControllerTaskImpl;
+
+    @Mock
+    ExternalTask mockExternalTask;
+
+    @Mock
+    ExternalTaskService mockExternalTaskService;
+
+    @Mock
+    private AuditMDCSetup mdcSetup;
+
+    private ApplicationControllerTaskRequest request = new ApplicationControllerTaskRequest();
+    private String msoRequestId = "testRequestId";
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        doNothing().when(mdcSetup).setupMDC(mockExternalTask);
+        doReturn(request).when(mockExternalTask).getVariable("appcOrchestratorRequest");
+        doReturn(msoRequestId).when(mockExternalTask).getVariable("mso-request-id");
+    }
+
+    @Test
+    public void executeExternalTask_appc_success_Test() throws Exception {
+        Status status = new Status();
+        doReturn(status).when(applicationControllerTaskImpl).execute(any(String.class),
+                any(ApplicationControllerTaskRequest.class), any(ApplicationControllerCallback.class));
+        appcTaskService.executeExternalTask(mockExternalTask, mockExternalTaskService);
+        Mockito.verify(applicationControllerTaskImpl).execute(any(String.class),
+                any(ApplicationControllerTaskRequest.class), any(ApplicationControllerCallback.class));
+    }
+}
diff --git a/adapters/so-appc-orchestrator/src/test/resources/application-test.yaml b/adapters/so-appc-orchestrator/src/test/resources/application-test.yaml
new file mode 100644 (file)
index 0000000..eb693a2
--- /dev/null
@@ -0,0 +1,17 @@
+
+appc:
+  client:
+    key: LSl8QKolmKcC0yJR
+    response:
+      timeout: '60000'
+    secret: lgjXraD1HutKxv8jEN6tVouu
+    poolMembers: localhost:3904,localhost:3904
+    service: ueb
+    topic:
+      read:
+        name: APPC-1902-SHDEV-WRITE
+        timeout: '120000'
+      write: APPC-1902-SHDEV-READ
+      sdnc:
+        read: SDNC-LCM-READ
+        write: SDNC-LCM-WRITE
\ No newline at end of file
diff --git a/adapters/so-appc-orchestrator/src/test/resources/logback-test.xml b/adapters/so-appc-orchestrator/src/test/resources/logback-test.xml
new file mode 100644 (file)
index 0000000..8a9e705
--- /dev/null
@@ -0,0 +1,31 @@
+<configuration>
+  
+  
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - %msg%n</pattern>
+    </encoder>
+  </appender>
+
+
+  <logger name="com.att.ecomp.audit" level="info" additivity="false">
+    <appender-ref ref="STDOUT" />
+  </logger>
+  
+  <logger name="com.att.eelf.metrics" level="info" additivity="false">
+        <appender-ref ref="STDOUT" />
+  </logger>
+
+  <logger name="com.att.eelf.error" level="trace" additivity="false">
+    <appender-ref ref="STDOUT" />
+  </logger> 
+  
+       <logger name="org.onap" level="${so.log.level:-WARN}" additivity="false">
+               <appender-ref ref="STDOUT" />
+       </logger>
+
+  <root level="WARN">
+    <appender-ref ref="STDOUT" />
+  </root>
+  
+</configuration>
\ No newline at end of file
index 6b96bc3..98f1e84 100644 (file)
@@ -307,7 +307,7 @@ public class BBInputSetup implements JavaDelegate {
         }
 
         String instanceGroupId = lookupKeyMap.get(ResourceKey.INSTANCE_GROUP_ID);
-        if (instanceGroupId != null) {
+        if (instanceGroupId != null && !instanceGroupId.isEmpty()) {
             org.onap.aai.domain.yang.InstanceGroup aaiInstancegroup =
                     bbInputSetupUtils.getAAIInstanceGroup(instanceGroupId);
             InstanceGroup instanceGroup = this.mapperLayer.mapAAIInstanceGroupIntoInstanceGroup(aaiInstancegroup);
index 4ea6bb1..496fcb1 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="DistributeTrafficActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskDistributeTraffic" targetRef="DistributeTrafficActivity_End" />
-    <bpmn:serviceTask id="TaskDistributeTraffic" name="Distribute Traffic" camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionDistributeTraffic&#34;))}">
+    <bpmn:serviceTask id="TaskDistributeTraffic" name="Distribute Traffic" camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskDistributeTraffic" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;DistributeTraffic&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
index 19a4972..a5bde79 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="DistributeTrafficCheckActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskDistributeTrafficCheck" targetRef="DistributeTrafficCheckActivity_End" />
-    <bpmn:serviceTask id="TaskDistributeTrafficCheck" name="Distribute Traffic Check" camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionDistributeTrafficCheck&#34;))}">
+    <bpmn:serviceTask id="TaskDistributeTrafficCheck" name="Distribute Traffic Check" camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskDistributeTrafficCheck" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;DistributeTrafficCheck&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
index 9ac0f38..50fc40f 100644 (file)
@@ -1,6 +1,6 @@
 <?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_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.9.0">
-  <bpmn:process id="VNFCheckClosedLoopDisabledFlagActivity" name="VNFCheckClosedLoopDisabledFlagActivity&#10;" isExecutable="true">
+<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_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.4.0">
+  <bpmn:process id="VNFCheckClosedLoopDisabledFlagActivity" name="VNFCheckClosedLoopDisabledFlagActivity" isExecutable="true">
     <bpmn:startEvent id="VNFCheckClosedLoopDisabledFlagActivity_Start">
       <bpmn:outgoing>SequenceFlow_01c8z5u</bpmn:outgoing>
     </bpmn:startEvent>
@@ -47,4 +47,4 @@
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 8709f39..ed6b10f 100644 (file)
@@ -1,6 +1,6 @@
 <?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_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.9.0">
-  <bpmn:process id="VNFCheckInMaintFlagActivity" name="VNFCheckInMaintFlagActivity&#10;" isExecutable="true">
+  <bpmn:process id="VNFCheckInMaintFlagActivity" name="VNFCheckInMaintFlagActivity" isExecutable="true">
     <bpmn:startEvent id="VNFCheckInMaintFlagActivity_Start">
       <bpmn:outgoing>SequenceFlow_0h1gkvd</bpmn:outgoing>
     </bpmn:startEvent>
@@ -47,4 +47,4 @@
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 9c327a4..49777da 100644 (file)
@@ -1,6 +1,6 @@
 <?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_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.9.0">
-  <bpmn:process id="VNFCheckPserversLockedFlagActivity" name="VNFCheckInMaintFlagActivity&#10;" isExecutable="true">
+  <bpmn:process id="VNFCheckPserversLockedFlagActivity" name="VNFCheckPserversLockedFlagActivity" isExecutable="true">
     <bpmn:startEvent id="VNFCheckPserversLockedFlagActivity_Start">
       <bpmn:outgoing>SequenceFlow_0a56huh</bpmn:outgoing>
     </bpmn:startEvent>
@@ -47,4 +47,4 @@
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 2e97206..2e66f6c 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="VNFHealthCheckActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskHealthCheck" targetRef="VNFHealthCheckActivity_End" />
-    <bpmn:serviceTask id="TaskHealthCheck" name="VNF Health Check" camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionHealthCheck&#34;))}">
+    <bpmn:serviceTask id="TaskHealthCheck" name="VNF Health Check" camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskHealthCheck" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;HealthCheck&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
index 1aaa920..43f2f4d 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="VNFLockActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskLock" targetRef="VNFLockActivity_End" />
-    <bpmn:serviceTask id="TaskLock" name="VNF Lock" camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionLock&#34;))}">
+    <bpmn:serviceTask id="TaskLock" name="VNF Lock" camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskLock" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;Lock&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
@@ -59,4 +59,4 @@
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index ac09674..d007380 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="VNFQuiesceTrafficActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskQuiesceTraffic" targetRef="VNFQuiesceTrafficActivity_End" />
-    <bpmn:serviceTask id="TaskQuiesceTraffic" name="VNF Quiesce Traffic" camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionQuiesceTraffic&#34;))}">
+    <bpmn:serviceTask id="TaskQuiesceTraffic" name="VNF Quiesce Traffic" camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskQuiesceTraffic" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;QuiesceTraffic&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
@@ -59,4 +59,4 @@
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index c21072a..888ce18 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="VNFResumeTrafficActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskResumeTraffic" targetRef="VNFResumeTrafficActivity_End" />
-    <bpmn:serviceTask id="TaskResumeTraffic" name="VNF Resume Traffic" camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionResumeTraffic&#34;))}">
+    <bpmn:serviceTask id="TaskResumeTraffic" name="VNF Resume Traffic" camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskResumeTraffic" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;ResumeTraffic&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
@@ -59,4 +59,4 @@
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index f356634..c02161e 100644 (file)
@@ -1,6 +1,6 @@
 <?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_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.9.0">
-  <bpmn:process id="VNFSetClosedLoopDisabledFlagActivity" name="VNFSetClosedLoopDisabledFlagActivity&#10;" isExecutable="true">
+  <bpmn:process id="VNFSetClosedLoopDisabledFlagActivity" name="VNFSetClosedLoopDisabledFlagActivity" isExecutable="true">
     <bpmn:startEvent id="VNFSetClosedLoopDisabledFlagActivity_Start">
       <bpmn:outgoing>SequenceFlow_0pp6ze7</bpmn:outgoing>
     </bpmn:startEvent>
@@ -47,4 +47,4 @@
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 2bdb1d7..a0d0cbd 100644 (file)
@@ -1,6 +1,6 @@
 <?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_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.4.0">
-  <bpmn:process id="VNFSetInMaintFlagActivity" name="VNFSetInMaintFlagActivity&#10;" isExecutable="true">
+  <bpmn:process id="VNFSetInMaintFlagActivity" name="VNFSetInMaintFlagActivity" isExecutable="true">
     <bpmn:startEvent id="VNFSetInMaintFlagActivity_Start">
       <bpmn:outgoing>SequenceFlow_0zaz9o2</bpmn:outgoing>
     </bpmn:startEvent>
@@ -47,4 +47,4 @@
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 8115f69..f7bf835 100644 (file)
@@ -5,19 +5,44 @@
       <bpmn:outgoing>SequenceFlow_06vhbci</bpmn:outgoing>
     </bpmn:startEvent>
     <bpmn:endEvent id="VNFSnapShotActivity_End">
-      <bpmn:incoming>SequenceFlow_01312aj</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_048qlth</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_17zvrl5</bpmn:incoming>
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="VNFSnapShotActivity_Start" targetRef="TaskPreProcessActivity" />
-    <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskSnapShot" targetRef="VNFSnapShotActivity_End" />
-    <bpmn:serviceTask id="TaskSnapShot" name="VNF SnapShot" camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionSnapshot&#34;))}">
-      <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
+    <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskSnapShot" targetRef="ExclusiveGateway_0u10l8w" />
+    <bpmn:serviceTask id="TaskSnapShot" name="VM SnapShot" camunda:type="external" camunda:topic="AppcService">
+      <bpmn:incoming>SequenceFlow_041lqrr</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;Snapshot&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
-    <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskSnapShot" />
+    <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="ExclusiveGateway_0ivqnoj" />
+    <bpmn:sequenceFlow id="SequenceFlow_041lqrr" sourceRef="TaskPreProcessVM" targetRef="TaskSnapShot" />
+    <bpmn:exclusiveGateway id="ExclusiveGateway_0ivqnoj" name="Are there VMs?" default="SequenceFlow_048qlth">
+      <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0aachpx</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_048qlth</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="SequenceFlow_0aachpx" name="yes" sourceRef="ExclusiveGateway_0ivqnoj" targetRef="TaskPreProcessVM">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{execution.getVariable("vmIdListSize") > 0}]]></bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:sequenceFlow id="SequenceFlow_048qlth" name="no" sourceRef="ExclusiveGateway_0ivqnoj" targetRef="VNFSnapShotActivity_End" />
+    <bpmn:serviceTask id="TaskPreProcessVM" name="PreProcess VM" camunda:expression="${AppcOrchestratorPreProcessor.addVmInfoToAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_0aachpx</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_12eenwu</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_041lqrr</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:exclusiveGateway id="ExclusiveGateway_0u10l8w" name="Any more VMs?" default="SequenceFlow_17zvrl5">
+      <bpmn:incoming>SequenceFlow_01312aj</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_17zvrl5</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_12eenwu</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="SequenceFlow_17zvrl5" name="no" sourceRef="ExclusiveGateway_0u10l8w" targetRef="VNFSnapShotActivity_End" />
+    <bpmn:sequenceFlow id="SequenceFlow_12eenwu" name="yes" sourceRef="ExclusiveGateway_0u10l8w" targetRef="TaskPreProcessVM">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{execution.getVariable("vmIndex") < execution.getVariable("vmIdListSize")}]]></bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
   </bpmn:process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="VNFSnapShotActivity">
@@ -25,9 +50,9 @@
         <dc:Bounds x="173" y="102" width="36" height="36" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_102xlzi_di" bpmnElement="VNFSnapShotActivity_End">
-        <dc:Bounds x="561" y="102" width="36" height="36" />
+        <dc:Bounds x="1047" y="102" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="579" y="138" width="0" height="0" />
+          <dc:Bounds x="1065" y="138" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_06vhbci_di" bpmnElement="SequenceFlow_06vhbci">
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_01312aj_di" bpmnElement="SequenceFlow_01312aj">
-        <di:waypoint xsi:type="dc:Point" x="497" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="561" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="850" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="911" y="120" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="529" y="105" width="0" height="0" />
+          <dc:Bounds x="881" y="105" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_066idx4_di" bpmnElement="TaskSnapShot">
-        <dc:Bounds x="397" y="80" width="100" height="80" />
+        <dc:Bounds x="750" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_0fti66x_di" bpmnElement="TaskPreProcessActivity">
         <dc:Bounds x="255" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0cf0riu_di" bpmnElement="SequenceFlow_0cf0riu">
         <di:waypoint xsi:type="dc:Point" x="355" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="397" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="430" y="120" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="393" y="105" width="0" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_041lqrr_di" bpmnElement="SequenceFlow_041lqrr">
+        <di:waypoint xsi:type="dc:Point" x="667" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="750" y="120" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="709" y="105" width="0" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ExclusiveGateway_0ivqnoj_di" bpmnElement="ExclusiveGateway_0ivqnoj" isMarkerVisible="true">
+        <dc:Bounds x="430" y="95" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="417" y="59" width="76" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0aachpx_di" bpmnElement="SequenceFlow_0aachpx">
+        <di:waypoint xsi:type="dc:Point" x="480" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="567" y="120" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="515" y="105" width="18" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_048qlth_di" bpmnElement="SequenceFlow_048qlth">
+        <di:waypoint xsi:type="dc:Point" x="455" y="145" />
+        <di:waypoint xsi:type="dc:Point" x="455" y="243" />
+        <di:waypoint xsi:type="dc:Point" x="1065" y="243" />
+        <di:waypoint xsi:type="dc:Point" x="1065" y="138" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="754" y="228" width="12" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_12efz54_di" bpmnElement="TaskPreProcessVM">
+        <dc:Bounds x="567" y="80" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ExclusiveGateway_0u10l8w_di" bpmnElement="ExclusiveGateway_0u10l8w" isMarkerVisible="true">
+        <dc:Bounds x="911" y="95" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="897" y="145" width="78" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_17zvrl5_di" bpmnElement="SequenceFlow_17zvrl5">
+        <di:waypoint xsi:type="dc:Point" x="961" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="1047" y="120" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="998" y="95" width="12" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_12eenwu_di" bpmnElement="SequenceFlow_12eenwu">
+        <di:waypoint xsi:type="dc:Point" x="936" y="95" />
+        <di:waypoint xsi:type="dc:Point" x="936" y="-10" />
+        <di:waypoint xsi:type="dc:Point" x="617" y="-10" />
+        <di:waypoint xsi:type="dc:Point" x="617" y="80" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="376" y="105" width="0" height="0" />
+          <dc:Bounds x="768" y="-25" width="18" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index f0490a9..da1e4a3 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="VNFStartActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskStart" targetRef="VNFStartActivity_End" />
-    <bpmn:serviceTask id="TaskStart" name="VNF Start" camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionStart&#34;))}">
+    <bpmn:serviceTask id="TaskStart" name="VNF Start" camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskStart" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;Start&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
@@ -59,4 +59,4 @@
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 0e02295..93d442e 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="VNFStopActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskStop" targetRef="VNFStopActivity_End" />
-    <bpmn:serviceTask id="TaskStop" name="VNF Stop" camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionStop&#34;))}">
+    <bpmn:serviceTask id="TaskStop" name="VNF Stop" camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskStop" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;Stop&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
@@ -59,4 +59,4 @@
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 6d1b68c..ef4162c 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="VNFUnlockActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskUnlock" targetRef="VNFUnlockActivity_End" />
-    <bpmn:serviceTask id="TaskUnlock" name="VNF Unlock" camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionUnlock&#34;))}">
+    <bpmn:serviceTask id="TaskUnlock" name="VNF Unlock" camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskUnlock" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;Unlock&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
@@ -59,4 +59,4 @@
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 05d3fcf..59eb80c 100644 (file)
@@ -1,6 +1,6 @@
 <?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_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.4.0">
-  <bpmn:process id="VNFUnsetInMaintFlagActivity" name="VNFUnsetInMaintFlagActivity&#10;" isExecutable="true">
+  <bpmn:process id="VNFUnsetInMaintFlagActivity" name="VNFUnsetInMaintFlagActivity" isExecutable="true">
     <bpmn:startEvent id="VNFUnsetInMaintFlagActivity_Start">
       <bpmn:outgoing>SequenceFlow_0zaz9o2</bpmn:outgoing>
     </bpmn:startEvent>
@@ -47,4 +47,4 @@
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index dfcf997..1b37867 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="VNFUpgradeBackupActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskUpgradeBackup" targetRef="VNFUpgradeBackupActivity_End" />
-    <bpmn:serviceTask id="TaskUpgradeBackup" name="VNF UpgradeBackup" camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionUpgradeBackup&#34;))}">
+    <bpmn:serviceTask id="TaskUpgradeBackup" name="VNF UpgradeBackup" camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskUpgradeBackup" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;UpgradeBackup&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
@@ -59,4 +59,4 @@
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 56c24da..b9c4d89 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="VNFUpgradePostCheckActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskUpgradePostCheck" targetRef="VNFUpgradePostCheckActivity_End" />
-    <bpmn:serviceTask id="TaskUpgradePostCheck" name="VNF Upgrade PostCheck " camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionUpgradePostCheck&#34;))}">
+    <bpmn:serviceTask id="TaskUpgradePostCheck" name="VNF Upgrade PostCheck " camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskUpgradePostCheck" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;UpgradePostCheck&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
@@ -59,4 +59,4 @@
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 1ec0a18..33886e3 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="VNFUpgradePreCheckActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskUpgradePreCheck" targetRef="VNFUpgradePreCheckActivity_End" />
-    <bpmn:serviceTask id="TaskUpgradePreCheck" name="VNF Upgrade PreCheck " camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionUpgradePreCheck&#34;))}">
+    <bpmn:serviceTask id="TaskUpgradePreCheck" name="VNF Upgrade PreCheck " camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskUpgradePreCheck" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;UpgradePreCheck&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
@@ -59,4 +59,4 @@
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 89481a5..16df667 100644 (file)
@@ -9,12 +9,12 @@
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_06vhbci" sourceRef="VNFUpgradeSoftwareActivity_Start" targetRef="TaskPreProcessActivity" />
     <bpmn:sequenceFlow id="SequenceFlow_01312aj" sourceRef="TaskUpgradeSoftware" targetRef="VNFUpgradeSoftwareActivity_End" />
-    <bpmn:serviceTask id="TaskUpgradeSoftware" name="VNF Upgrade Software" camunda:expression="${AppcRunTasks.runAppcCommand(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),execution.getVariable(&#34;actionUpgradeSoftware&#34;))}">
+    <bpmn:serviceTask id="TaskUpgradeSoftware" name="VNF Upgrade Software" camunda:type="external" camunda:topic="AppcService">
       <bpmn:incoming>SequenceFlow_0cf0riu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01312aj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cf0riu" sourceRef="TaskPreProcessActivity" targetRef="TaskUpgradeSoftware" />
-    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcRunTasks.preProcessActivity(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+    <bpmn:serviceTask id="TaskPreProcessActivity" name="PreProcess Activity" camunda:expression="${AppcOrchestratorPreProcessor.buildAppcTaskRequest(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)),&#34;UpgradeSoftware&#34;)}">
       <bpmn:incoming>SequenceFlow_06vhbci</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cf0riu</bpmn:outgoing>
     </bpmn:serviceTask>
@@ -59,4 +59,4 @@
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index ff987b7..5b7fe66 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.onap.so.bpmn;
 
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -26,6 +27,8 @@ import java.util.Map;
 import org.camunda.bpm.engine.ExternalTaskService;
 import org.camunda.bpm.engine.RepositoryService;
 import org.camunda.bpm.engine.RuntimeService;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.camunda.bpm.extension.mockito.mock.FluentJavaDelegateMock;
 import org.camunda.bpm.model.bpmn.Bpmn;
 import org.camunda.bpm.model.bpmn.BpmnModelInstance;
@@ -49,6 +52,7 @@ import org.onap.so.bpmn.infrastructure.adapter.network.tasks.NetworkAdapterUpdat
 import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterCreateTasks;
 import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterDeleteTasks;
 import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterImpl;
+import org.onap.so.bpmn.infrastructure.appc.tasks.AppcOrchestratorPreProcessor;
 import org.onap.so.bpmn.infrastructure.appc.tasks.AppcRunTasks;
 import org.onap.so.bpmn.infrastructure.audit.AuditTasks;
 import org.onap.so.bpmn.infrastructure.flowspecific.tasks.ActivateVfModule;
@@ -130,6 +134,9 @@ public abstract class BaseBPMNTest {
     @MockBean
     protected AppcRunTasks appcRunTasks;
 
+    @MockBean
+    protected AppcOrchestratorPreProcessor appcOrchestratorPreProcessor;
+
     @MockBean
     protected SDNCActivateTasks sdncActivateTasks;
 
@@ -299,4 +306,17 @@ public abstract class BaseBPMNTest {
         mockedSubprocessList.add(repositoryService.createDeployment()
                 .addModelInstance(fileName + ".bpmn", modelInstance).deploy().getId());
     }
+
+    protected void processExternalTasks(ProcessInstance pi, String taskName) {
+        assertThat(pi).isWaitingAt(taskName);
+        List<LockedExternalTask> tasks =
+                externalTaskService.fetchAndLock(100, "externalWorkerId").topic("AppcService", 60L * 1000L).execute();
+        while (!tasks.isEmpty()) {
+            for (LockedExternalTask task : tasks) {
+                externalTaskService.complete(task.getId(), "externalWorkerId");
+            }
+            tasks = externalTaskService.fetchAndLock(100, "externalWorkerId").topic("AppcService", 60L * 1000L)
+                    .execute();
+        }
+    }
 }
index 8306de4..dae430e 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class DistributeTrafficActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayDistributeTrafficActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("DistributeTrafficActivity", variables);
         assertThat(pi).isNotNull();
+        processExternalTasks(pi, "TaskDistributeTraffic");
         assertThat(pi).isStarted().hasPassedInOrder("DistributeTrafficActivity_Start", "TaskPreProcessActivity",
                 "TaskDistributeTraffic", "DistributeTrafficActivity_End");
         assertThat(pi).isEnded();
@@ -42,13 +44,12 @@ public class DistributeTrafficActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayDistributeTrafficActivity_Test() throws Exception {
-        variables.put("actionDistributeTraffic", Action.DistributeTraffic);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("DistributeTrafficActivity", variables);
         assertThat(pi).isNotNull().isStarted()
-                .hasPassedInOrder("DistributeTrafficActivity_Start", "TaskPreProcessActivity", "TaskDistributeTraffic")
-                .hasNotPassed("DistributeTrafficActivity_End");
+                .hasPassedInOrder("DistributeTrafficActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskDistributeTraffic", "DistributeTrafficActivity_End");
     }
 
 }
index 195a1ed..7c18a20 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class DistributeTrafficCheckActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayDistributeTrafficCheckActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("DistributeTrafficCheckActivity", variables);
         assertThat(pi).isNotNull();
+        processExternalTasks(pi, "TaskDistributeTrafficCheck");
         assertThat(pi).isStarted().hasPassedInOrder("DistributeTrafficCheckActivity_Start", "TaskPreProcessActivity",
                 "TaskDistributeTrafficCheck", "DistributeTrafficCheckActivity_End");
         assertThat(pi).isEnded();
@@ -42,14 +44,12 @@ public class DistributeTrafficCheckActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayDistributeTrafficActivity_Test() throws Exception {
-        variables.put("actionDistributeTrafficCheck", Action.DistributeTrafficCheck);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("DistributeTrafficCheckActivity", variables);
-        assertThat(pi)
-                .isNotNull().isStarted().hasPassedInOrder("DistributeTrafficCheckActivity_Start",
-                        "TaskPreProcessActivity", "TaskDistributeTrafficCheck")
-                .hasNotPassed("DistributeTrafficCheckActivity_End");
+        assertThat(pi).isNotNull().isStarted()
+                .hasPassedInOrder("DistributeTrafficCheckActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskDistributeTrafficCheck", "DistributeTrafficCheckActivity_End");
     }
 
 }
index c0b0094..4810401 100644 (file)
@@ -29,7 +29,6 @@ import org.camunda.bpm.engine.TaskService;
 import org.camunda.bpm.engine.delegate.BpmnError;
 import org.camunda.bpm.engine.runtime.Job;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
-import org.camunda.bpm.engine.delegate.DelegateExecution;
 import org.camunda.bpm.engine.task.Task;
 import org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions;
 import org.junit.Test;
index 0b17e3e..10040b8 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class VNFHealthCheckActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayVNFHealthCheckActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFHealthCheckActivity", variables);
         assertThat(pi).isNotNull();
+        processExternalTasks(pi, "TaskHealthCheck");
         assertThat(pi).isStarted().hasPassedInOrder("VNFHealthCheckActivity_Start", "TaskPreProcessActivity",
                 "TaskHealthCheck", "VNFHealthCheckActivity_End");
         assertThat(pi).isEnded();
@@ -42,13 +44,12 @@ public class VNFHealthCheckActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayVNFHealthCheckActivity_Test() throws Exception {
-        variables.put("actionHealthCheck", Action.HealthCheck);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFHealthCheckActivity", variables);
         assertThat(pi).isNotNull().isStarted()
-                .hasPassedInOrder("VNFHealthCheckActivity_Start", "TaskPreProcessActivity", "TaskHealthCheck")
-                .hasNotPassed("VNFHealthCheckActivity_End");
+                .hasPassedInOrder("VNFHealthCheckActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskHealthCheck", "VNFHealthCheckActivity_End");
     }
 
 }
index 45cf448..a174bbb 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class VNFLockActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayVNFLockActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFLockActivity", variables);
         assertThat(pi).isNotNull();
+        processExternalTasks(pi, "TaskLock");
         assertThat(pi).isStarted().hasPassedInOrder("VNFLockActivity_Start", "TaskPreProcessActivity", "TaskLock",
                 "VNFLockActivity_End");
         assertThat(pi).isEnded();
@@ -42,13 +44,11 @@ public class VNFLockActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayVNFLockActivity_Test() throws Exception {
-        variables.put("actionLock", Action.Lock);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFLockActivity", variables);
-        assertThat(pi).isNotNull().isStarted()
-                .hasPassedInOrder("VNFLockActivity_Start", "TaskPreProcessActivity", "TaskLock")
-                .hasNotPassed("VNFLockActivity_End");
+        assertThat(pi).isNotNull().isStarted().hasPassedInOrder("VNFLockActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskLock", "VNFLockActivity_End");
     }
 
 }
index fb462bc..b1229cd 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class VNFQuiesceTrafficActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayVNFQuiesceTrafficActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFQuiesceTrafficActivity", variables);
         assertThat(pi).isNotNull();
+        processExternalTasks(pi, "TaskQuiesceTraffic");
         assertThat(pi).isStarted().hasPassedInOrder("VNFQuiesceTrafficActivity_Start", "TaskPreProcessActivity",
                 "TaskQuiesceTraffic", "VNFQuiesceTrafficActivity_End");
         assertThat(pi).isEnded();
@@ -42,13 +44,12 @@ public class VNFQuiesceTrafficActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayVNFQuiesceTrafficActivity_Test() throws Exception {
-        variables.put("actionQuiesceTraffic", Action.QuiesceTraffic);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFQuiesceTrafficActivity", variables);
         assertThat(pi).isNotNull().isStarted()
-                .hasPassedInOrder("VNFQuiesceTrafficActivity_Start", "TaskPreProcessActivity", "TaskQuiesceTraffic")
-                .hasNotPassed("VNFQuiesceTrafficActivity_End");
+                .hasPassedInOrder("VNFQuiesceTrafficActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskQuiesceTraffic", "VNFQuiesceTrafficActivity_End");
     }
 
 }
index 61d88a5..ae61f3c 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class VNFResumeTrafficActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayVNFResumeTrafficActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFResumeTrafficActivity", variables);
         assertThat(pi).isNotNull();
+        processExternalTasks(pi, "TaskResumeTraffic");
         assertThat(pi).isStarted().hasPassedInOrder("VNFResumeTrafficActivity_Start", "TaskPreProcessActivity",
                 "TaskResumeTraffic", "VNFResumeTrafficActivity_End");
         assertThat(pi).isEnded();
@@ -42,13 +44,12 @@ public class VNFResumeTrafficActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayVNFResumeTrafficActivity_Test() throws Exception {
-        variables.put("actionResumeTraffic", Action.ResumeTraffic);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFResumeTrafficActivity", variables);
         assertThat(pi).isNotNull().isStarted()
-                .hasPassedInOrder("VNFResumeTrafficActivity_Start", "TaskPreProcessActivity", "TaskResumeTraffic")
-                .hasNotPassed("VNFResumeTrafficActivity_End");
+                .hasPassedInOrder("VNFResumeTrafficActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskResumeTraffic", "VNFResumeTrafficActivity_End");
 
     }
 
index 001dc70..513afd3 100644 (file)
@@ -21,7 +21,6 @@
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
 import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
-import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doThrow;
 import org.camunda.bpm.engine.delegate.BpmnError;
index 6f1e076..b883f1c 100644 (file)
@@ -28,27 +28,27 @@ import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class VNFSnapShotActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayVNFSnapShotActivity_Test() throws InterruptedException {
+        variables.put("vmIdListSize", 0);
+        variables.put("vmIdList", null);
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFSnapShotActivity", variables);
         assertThat(pi).isNotNull();
-        assertThat(pi).isStarted().hasPassedInOrder("VNFSnapShotActivity_Start", "TaskPreProcessActivity",
-                "TaskSnapShot", "VNFSnapShotActivity_End");
+        assertThat(pi).isStarted()
+                .hasPassedInOrder("VNFSnapShotActivity_Start", "TaskPreProcessActivity", "VNFSnapShotActivity_End")
+                .hasNotPassed("TaskSnapShot");
         assertThat(pi).isEnded();
     }
 
     @Test
     public void rainyDayVNFSnapShotActivity_Test() throws Exception {
-        variables.put("actionSnapshot", Action.Snapshot);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFSnapShotActivity", variables);
-        assertThat(pi).isNotNull().isStarted()
-                .hasPassedInOrder("VNFSnapShotActivity_Start", "TaskPreProcessActivity", "TaskSnapShot")
-                .hasNotPassed("VNFSnapShotActivity_End");
+        assertThat(pi).isNotNull().isStarted().hasPassedInOrder("VNFSnapShotActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskSnapShot", "VNFSnapShotActivity_End");
     }
 
 }
index 2163e0b..0a700c5 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class VNFStartActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayVNFStartActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFStartActivity", variables);
         assertThat(pi).isNotNull();
+        processExternalTasks(pi, "TaskStart");
         assertThat(pi).isStarted().hasPassedInOrder("VNFStartActivity_Start", "TaskPreProcessActivity", "TaskStart",
                 "VNFStartActivity_End");
         assertThat(pi).isEnded();
@@ -42,13 +44,11 @@ public class VNFStartActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayVNFStartActivity_Test() throws Exception {
-        variables.put("actionStart", Action.Start);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFStartActivity", variables);
-        assertThat(pi).isNotNull().isStarted()
-                .hasPassedInOrder("VNFStartActivity_Start", "TaskPreProcessActivity", "TaskStart")
-                .hasNotPassed("VNFStartActivity_End");
+        assertThat(pi).isNotNull().isStarted().hasPassedInOrder("VNFStartActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskStart", "VNFStartActivity_End");
     }
 
 }
index 58dfff8..89cc13f 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class VNFStopActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayVNFStopActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFStopActivity", variables);
         assertThat(pi).isNotNull();
+        processExternalTasks(pi, "TaskStop");
         assertThat(pi).isStarted().hasPassedInOrder("VNFStopActivity_Start", "TaskPreProcessActivity", "TaskStop",
                 "VNFStopActivity_End");
         assertThat(pi).isEnded();
@@ -42,13 +44,11 @@ public class VNFStopActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayVNFStopActivity_Test() throws Exception {
-        variables.put("actionStop", Action.Stop);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFStopActivity", variables);
-        assertThat(pi).isNotNull().isStarted()
-                .hasPassedInOrder("VNFStopActivity_Start", "TaskPreProcessActivity", "TaskStop")
-                .hasNotPassed("VNFStopActivity_End");
+        assertThat(pi).isNotNull().isStarted().hasPassedInOrder("VNFStopActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskStop", "VNFStopActivity_End");
     }
 
 }
index c5ddd56..0dbde4b 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class VNFUnlockActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayVNFUnlockActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFUnlockActivity", variables);
         assertThat(pi).isNotNull();
+        processExternalTasks(pi, "TaskUnlock");
         assertThat(pi).isStarted().hasPassedInOrder("VNFUnlockActivity_Start", "TaskPreProcessActivity", "TaskUnlock",
                 "VNFUnlockActivity_End");
         assertThat(pi).isEnded();
@@ -42,13 +44,11 @@ public class VNFUnlockActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayVNFUnlockActivity_Test() throws Exception {
-        variables.put("actionUnlock", Action.Unlock);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFUnlockActivity", variables);
-        assertThat(pi).isNotNull().isStarted()
-                .hasPassedInOrder("VNFUnlockActivity_Start", "TaskPreProcessActivity", "TaskUnlock")
-                .hasNotPassed("VNFUnlockActivity_End");
+        assertThat(pi).isNotNull().isStarted().hasPassedInOrder("VNFUnlockActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskUnlock", "VNFUnlockActivity_End");
     }
 
 }
index 4d99147..2d4a11c 100644 (file)
@@ -23,18 +23,20 @@ package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class VNFUpgradeBackupActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayVNFUpgradeBackupActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFUpgradeBackupActivity", variables);
         assertThat(pi).isNotNull();
+        processExternalTasks(pi, "TaskUpgradeBackup");
         assertThat(pi).isStarted().hasPassedInOrder("VNFUpgradeBackupActivity_Start", "TaskPreProcessActivity",
                 "TaskUpgradeBackup", "VNFUpgradeBackupActivity_End");
         assertThat(pi).isEnded();
@@ -42,14 +44,12 @@ public class VNFUpgradeBackupActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayVNFUpgradeBackupActivity_Test() throws Exception {
-        variables.put("actionUpgradeBackup", Action.UpgradeBackup);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFUpgradeBackupActivity", variables);
         assertThat(pi).isNotNull();
-        assertThat(pi).isStarted()
-                .hasPassedInOrder("VNFUpgradeBackupActivity_Start", "TaskPreProcessActivity", "TaskUpgradeBackup")
-                .hasNotPassed("VNFUpgradeBackupActivity_End");
+        assertThat(pi).isStarted().hasPassedInOrder("VNFUpgradeBackupActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskUpgradeBackup", "VNFUpgradeBackupActivity_End");
         assertThat(pi).isEnded();
     }
 
index c87cc44..dfb6bc1 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class VNFUpgradePostCheckActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayVNFUpgradePostCheckActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFUpgradePostCheckActivity", variables);
+        processExternalTasks(pi, "TaskUpgradePostCheck");
         assertThat(pi).isNotNull().isStarted().hasPassedInOrder("VNFUpgradePostCheckActivity_Start",
                 "TaskPreProcessActivity", "TaskUpgradePostCheck", "VNFUpgradePostCheckActivity_End");
 
@@ -41,14 +43,12 @@ public class VNFUpgradePostCheckActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayVNFUpgradePostCheckActivity_Test() throws Exception {
-        variables.put("actionUpgradePostCheck", Action.UpgradePostCheck);
-
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFUpgradePostCheckActivity", variables);
         assertThat(pi).isNotNull().isStarted()
-                .hasPassedInOrder("VNFUpgradePostCheckActivity_Start", "TaskPreProcessActivity", "TaskUpgradePostCheck")
-                .hasNotPassed("VNFUpgradePostCheckActivity_End");
+                .hasPassedInOrder("VNFUpgradePostCheckActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskUpgradePostCheck", "VNFUpgradePostCheckActivity_End");
     }
 
 }
index 79fc433..9854bd8 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class VNFUpgradePreCheckActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayVNFUpgradePreCheckActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFUpgradePreCheckActivity", variables);
         assertThat(pi).isNotNull();
+        processExternalTasks(pi, "TaskUpgradePreCheck");
         assertThat(pi).isStarted().hasPassedInOrder("VNFUpgradePreCheckActivity_Start", "TaskPreProcessActivity",
                 "TaskUpgradePreCheck", "VNFUpgradePreCheckActivity_End");
         assertThat(pi).isEnded();
@@ -42,13 +44,12 @@ public class VNFUpgradePreCheckActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayVNFUpgradePreCheckActivity_Test() throws Exception {
-        variables.put("actionUpgradePreCheck", Action.UpgradePreCheck);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFUpgradePreCheckActivity", variables);
         assertThat(pi).isNotNull().isStarted()
-                .hasPassedInOrder("VNFUpgradePreCheckActivity_Start", "TaskPreProcessActivity", "TaskUpgradePreCheck")
-                .hasNotPassed("VNFUpgradePreCheckActivity_End");
+                .hasPassedInOrder("VNFUpgradePreCheckActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskUpgradePreCheck", "VNFUpgradePreCheckActivity_End");
     }
 
 }
index b550185..de999e1 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
+import java.util.List;
 import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.externaltask.LockedExternalTask;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.appc.client.lcm.model.Action;
 
 public class VNFUpgradeSoftwareActivityTest extends BaseBPMNTest {
     @Test
     public void sunnyDayVNFUpgradeSoftwareActivity_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFUpgradeSoftwareActivity", variables);
         assertThat(pi).isNotNull();
+        processExternalTasks(pi, "TaskUpgradeSoftware");
         assertThat(pi).isStarted().hasPassedInOrder("VNFUpgradeSoftwareActivity_Start", "TaskPreProcessActivity",
                 "TaskUpgradeSoftware", "VNFUpgradeSoftwareActivity_End");
         assertThat(pi).isEnded();
@@ -42,13 +44,12 @@ public class VNFUpgradeSoftwareActivityTest extends BaseBPMNTest {
 
     @Test
     public void rainyDayVNFUpgradeSoftwareActivity_Test() throws Exception {
-        variables.put("actionUpgradeSoftware", Action.UpgradeSoftware);
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcRunTasks)
-                .runAppcCommand(any(BuildingBlockExecution.class), any(Action.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(appcOrchestratorPreProcessor)
+                .buildAppcTaskRequest(any(BuildingBlockExecution.class), any(String.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("VNFUpgradeSoftwareActivity", variables);
         assertThat(pi).isNotNull().isStarted()
-                .hasPassedInOrder("VNFUpgradeSoftwareActivity_Start", "TaskPreProcessActivity", "TaskUpgradeSoftware")
-                .hasNotPassed("VNFUpgradeSoftwareActivity_End");
+                .hasPassedInOrder("VNFUpgradeSoftwareActivity_Start", "TaskPreProcessActivity")
+                .hasNotPassed("TaskUpgradeSoftware", "VNFUpgradeSoftwareActivity_End");
     }
 
 }
index 1add5e6..997d200 100644 (file)
@@ -35,6 +35,8 @@ import org.springframework.stereotype.Component;
 
 @Component
 public class AAIFlagTasks {
+    private static final Logger logger = LoggerFactory.getLogger(AAIFlagTasks.class);
+
 
     @Autowired
     private AAIVnfResources aaiVnfResources;
@@ -107,7 +109,7 @@ public class AAIFlagTasks {
             String vnfId = vnf.getVnfId();
             inPserversLocked = aaiVnfResources.checkVnfPserversLockedFlag(vnfId);
         } catch (Exception ex) {
-            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+            logger.warn("Exception on checking pservers: " + ex.getMessage());
         }
         if (inPserversLocked) {
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "VNF PServers in Locked in A&AI");
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/appc/tasks/AppcOrchestratorPreProcessor.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/appc/tasks/AppcOrchestratorPreProcessor.java
new file mode 100644 (file)
index 0000000..4b967c7
--- /dev/null
@@ -0,0 +1,189 @@
+package org.onap.so.bpmn.infrastructure.appc.tasks;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import org.onap.aai.domain.yang.Vserver;
+import org.onap.appc.client.lcm.model.Action;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerTaskRequest;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerVm;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerVnf;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.core.json.JsonUtils;
+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.aai.AAIObjectType;
+import org.onap.so.client.aai.entities.AAIResultWrapper;
+import org.onap.so.client.aai.entities.Relationships;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
+import org.onap.so.client.exception.BBObjectNotFoundException;
+import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.client.orchestration.AAIVnfResources;
+import org.onap.so.db.catalog.beans.ControllerSelectionReference;
+import org.onap.so.db.catalog.client.CatalogDbClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class AppcOrchestratorPreProcessor {
+    private static final Logger logger = LoggerFactory.getLogger(AppcOrchestratorPreProcessor.class);
+    public static final String CONTROLLER_TYPE_DEFAULT = "APPC";
+
+    @Autowired
+    private ExceptionBuilder exceptionUtil;
+    @Autowired
+    private ExtractPojosForBB extractPojosForBB;
+    @Autowired
+    private CatalogDbClient catalogDbClient;
+    @Autowired
+    private AAIVnfResources aaiVnfResources;
+
+    public void buildAppcTaskRequest(BuildingBlockExecution execution, String actionName) {
+        try {
+            Action action = Action.valueOf(actionName);
+            ApplicationControllerTaskRequest appcTaskRequest = new ApplicationControllerTaskRequest();
+            appcTaskRequest.setAction(action);
+            GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
+            GenericVnf vnf = null;
+            try {
+                vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
+            } catch (BBObjectNotFoundException e) {
+                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "No valid VNF exists");
+            }
+            String vnfId = null;
+            String vnfName = null;
+            String vnfType = null;
+            String vnfHostIpAddress = null;
+
+            if (vnf != null) {
+                vnfId = vnf.getVnfId();
+                vnfName = vnf.getVnfName();
+                vnfType = vnf.getVnfType();
+                vnfHostIpAddress = vnf.getIpv4OamAddress();
+            }
+            String msoRequestId = gBBInput.getRequestContext().getMsoRequestId();
+
+            String aicIdentity = execution.getVariable("aicIdentity");
+            String identityUrl = execution.getVariable("identityUrl");
+            appcTaskRequest.setIdentityUrl(identityUrl);
+
+            if (gBBInput.getRequestContext().getRequestParameters() != null) {
+                String payload = gBBInput.getRequestContext().getRequestParameters().getPayload();
+                if (payload == null) {
+                    payload = "";
+                }
+                String existingSoftwareVersion = JsonUtils.getJsonValue(payload, "existing-software-version");
+                appcTaskRequest.setExistingSoftwareVersion(existingSoftwareVersion);
+                String newSoftwareVersion = JsonUtils.getJsonValue(payload, "new-software-version");
+                appcTaskRequest.setNewSoftwareVersion(newSoftwareVersion);
+                String operationsTimeout = JsonUtils.getJsonValue(payload, "operations-timeout");
+                appcTaskRequest.setOperationsTimeout(operationsTimeout);
+            }
+
+            ControllerSelectionReference controllerSelectionReference = catalogDbClient
+                    .getControllerSelectionReferenceByVnfTypeAndActionCategory(vnfType, action.toString());
+            String controllerType = null;
+            if (controllerSelectionReference != null) {
+                controllerType = controllerSelectionReference.getControllerName();
+            } else {
+                controllerType = CONTROLLER_TYPE_DEFAULT;
+            }
+            appcTaskRequest.setControllerType(controllerType);
+
+            execution.setVariable("vmIdList", null);
+            execution.setVariable("vserverIdList", null);
+            execution.setVariable("vmIndex", 0);
+            execution.setVariable("vmIdListSize", 0);
+
+            String vfModuleId = null;
+            VfModule vfModule = null;
+            try {
+                vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
+            } catch (BBObjectNotFoundException e) {
+            }
+            if (vfModule != null) {
+                vfModuleId = vfModule.getVfModuleId();
+            }
+            if (action.equals(Action.Snapshot)) {
+                try {
+                    getVserversForAppc(execution, vnf);
+                } catch (Exception e) {
+                    logger.warn("Unable to retrieve vservers for vnf: " + vnfId);
+                }
+            }
+
+            ApplicationControllerVnf applicationControllerVnf = new ApplicationControllerVnf();
+            applicationControllerVnf.setVnfHostIpAddress(vnfHostIpAddress);
+            applicationControllerVnf.setVnfId(vnfId);
+            applicationControllerVnf.setVnfName(vnfName);
+            appcTaskRequest.setApplicationControllerVnf(applicationControllerVnf);
+
+            execution.setVariable("appcOrchestratorRequest", appcTaskRequest);
+        } catch (Exception e) {
+            logger.error("Error building ApplicationControllerTaskRequest Object", e);
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, e);
+        }
+    }
+
+    public void addVmInfoToAppcTaskRequest(BuildingBlockExecution execution) {
+        try {
+            ApplicationControllerTaskRequest appcTaskRequest =
+                    (ApplicationControllerTaskRequest) execution.getVariable("appcOrchestratorRequest");
+            ArrayList<String> vmIdList = execution.getVariable("vmIdList");
+            ArrayList<String> vserverIdList = execution.getVariable("vserverIdList");
+            Integer vmIndex = (Integer) execution.getVariable("vmIndex");
+
+            if (vmIdList != null && !vmIdList.isEmpty() && vserverIdList != null && !vserverIdList.isEmpty()) {
+                execution.setVariable("vmIdListSize", vmIdList.size());
+                if (vmIndex < vmIdList.size()) {
+                    ApplicationControllerVm applicationControllerVm = new ApplicationControllerVm();
+                    applicationControllerVm.setVmId(vmIdList.get(vmIndex));
+                    applicationControllerVm.setVserverId(vserverIdList.get(vmIndex));
+                    if (appcTaskRequest.getApplicationControllerVnf() == null) {
+                        ApplicationControllerVnf applicationControllerVnf = new ApplicationControllerVnf();
+                        appcTaskRequest.setApplicationControllerVnf(applicationControllerVnf);
+                    }
+                    appcTaskRequest.getApplicationControllerVnf().setApplicationControllerVm(applicationControllerVm);
+                    execution.setVariable("appcOrchestratorRequest", appcTaskRequest);
+                    vmIndex++;
+                    execution.setVariable("vmIndex", vmIndex);
+                }
+            }
+        } catch (Exception e) {
+            logger.error("Error adding VM info to ApplicationControllerTaskRequest Object", e);
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, e);
+        }
+    }
+
+    protected void getVserversForAppc(BuildingBlockExecution execution, GenericVnf vnf) throws Exception {
+        AAIResultWrapper aaiRW = aaiVnfResources.queryVnfWrapperById(vnf);
+
+        if (aaiRW != null && aaiRW.getRelationships().isPresent()) {
+            Relationships relationships = aaiRW.getRelationships().get();
+            if (relationships != null) {
+                List<AAIResourceUri> vserverUris = relationships.getRelatedAAIUris(AAIObjectType.VSERVER);
+                ArrayList<String> vserverIds = new ArrayList<String>();
+                ArrayList<String> vserverSelfLinks = new ArrayList<String>();
+                for (AAIResourceUri j : vserverUris) {
+                    String vserverId = j.getURIKeys().get("vserver-id");
+                    vserverIds.add(vserverId);
+                    Optional<Vserver> oVserver = aaiVnfResources.getVserver(j);
+                    if (oVserver.isPresent()) {
+                        Vserver vserver = oVserver.get();
+                        String vserverSelfLink = vserver.getVserverSelflink();
+                        vserverSelfLinks.add(vserverSelfLink);
+                    }
+                }
+                logger.debug("vmIdsArray is: {}", vserverSelfLinks);
+                logger.debug("vserverIdsArray is: {}", vserverIds);
+                execution.setVariable("vmIdList", vserverSelfLinks);
+                execution.setVariable("vserverIdList", vserverIds);
+            }
+        }
+    }
+}
index 99ba352..356fe8d 100644 (file)
@@ -1555,7 +1555,7 @@ public class WorkflowAction {
             if (flows == null)
                 flows = new ArrayList<>();
             for (OrchestrationFlow flow : flows) {
-                if (!flow.getFlowName().contains("BB")) {
+                if (!flow.getFlowName().contains("BB") && !flow.getFlowName().contains("Activity")) {
                     List<OrchestrationFlow> macroQueryFlows =
                             catalogDbClient.getOrchestrationFlowByAction(flow.getFlowName());
                     for (OrchestrationFlow macroFlow : macroQueryFlows) {
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/appc/tasks/AppcOrchestratorPreProcessorTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/appc/tasks/AppcOrchestratorPreProcessorTest.java
new file mode 100644 (file)
index 0000000..c78b652
--- /dev/null
@@ -0,0 +1,166 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
+ * 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.appc.tasks;
+
+import static com.shazam.shazamcrest.MatcherAssert.assertThat;
+import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Optional;
+import org.junit.Test;
+import org.mockito.ArgumentMatchers;
+import org.mockito.InjectMocks;
+import org.onap.aai.domain.yang.Vserver;
+import org.onap.appc.client.lcm.model.Action;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerTaskRequest;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerVnf;
+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.entities.ResourceKey;
+import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
+import org.onap.so.client.aai.entities.AAIResultWrapper;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
+import org.onap.so.client.policy.JettisonStyleMapperProvider;
+import org.onap.so.db.catalog.beans.ControllerSelectionReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class AppcOrchestratorPreProcessorTest extends BaseTaskTest {
+
+    private final static String JSON_FILE_LOCATION = "src/test/resources/__files/BuildingBlocks/";
+
+    @InjectMocks
+    private AppcOrchestratorPreProcessor appcOrchestratorPreProcessor = new AppcOrchestratorPreProcessor();
+
+    private ObjectMapper mapper = new JettisonStyleMapperProvider().getMapper();
+
+    @Test
+    public void buildAppcTaskRequestTest() throws Exception {
+        final String expectedRequestJson =
+                new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "appcTaskRequest.json")));
+        ApplicationControllerTaskRequest expectedTaskRequest =
+                mapper.readValue(expectedRequestJson, ApplicationControllerTaskRequest.class);
+        execution.getLookupMap().put(ResourceKey.GENERIC_VNF_ID, "-TEST");
+        fillRequiredAppcExecutionFields();
+        GenericVnf genericVnf = getTestGenericVnf();
+        when(extractPojosForBB.extractByKey(eq(execution), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(genericVnf);
+        mockReferenceResponse();
+        execution.getLookupMap().put(ResourceKey.VF_MODULE_ID, "VF-MODULE-ID-TEST");
+        VfModule vfModule = new VfModule();
+        vfModule.setVfModuleId("VF-MODULE-ID");
+        when(extractPojosForBB.extractByKey(eq(execution), eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
+        appcOrchestratorPreProcessor.buildAppcTaskRequest(execution, "Lock");
+        ApplicationControllerTaskRequest actualTaskRequest = execution.getVariable("appcOrchestratorRequest");
+        assertThat(actualTaskRequest, sameBeanAs(expectedTaskRequest));
+    }
+
+    @Test
+    public void getVserversForAppcTest() throws Exception {
+
+        GenericVnf genericVnf = getTestGenericVnf();
+
+        final String aaiVnfJson =
+                new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "aaiGenericVnfWithVservers.json")));
+        final String aaiVserverJson =
+                new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "aaiVserverQueryResponse.json")));
+        AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(aaiVnfJson);
+        ObjectMapper mapper = new ObjectMapper();
+        Vserver vserver = mapper.readValue(aaiVserverJson, Vserver.class);
+        doReturn(aaiResultWrapper).when(aaiVnfResources).queryVnfWrapperById(genericVnf);
+        doReturn(Optional.of(vserver)).when(aaiVnfResources).getVserver(ArgumentMatchers.any(AAIResourceUri.class));
+        appcOrchestratorPreProcessor.getVserversForAppc(execution, genericVnf);
+        ArrayList<String> vserverIdList = execution.getVariable("vserverIdList");
+        ArrayList<String> expectedVserverIdList = new ArrayList<String>();
+        expectedVserverIdList.add("1b3f44e5-d96d-4aac-bd9a-310e8cfb0af5");
+        expectedVserverIdList.add("14551849-1e70-45cd-bc5d-a256d49548a2");
+        expectedVserverIdList.add("48bd7f11-408f-417c-b834-b41c1b98f7d7");
+        ArrayList<String> vmIdList = execution.getVariable("vmIdList");
+        ArrayList<String> expectedVmIdList = new ArrayList<String>();
+        expectedVmIdList.add("http://VSERVER-link.com");
+        expectedVmIdList.add("http://VSERVER-link.com");
+        expectedVmIdList.add("http://VSERVER-link.com");
+        assertEquals(vserverIdList, expectedVserverIdList);
+        assertEquals(vmIdList, expectedVmIdList);
+    }
+
+    @Test
+    public void addVmInfoToAppcTaskRequestTest() throws Exception {
+        ApplicationControllerTaskRequest appcTaskRequest = new ApplicationControllerTaskRequest();
+        ApplicationControllerVnf applicationControllerVnf = new ApplicationControllerVnf();
+        appcTaskRequest.setApplicationControllerVnf(applicationControllerVnf);
+        execution.setVariable("appcOrchestratorRequest", appcTaskRequest);
+        ArrayList<String> vmIdList = new ArrayList<String>();
+        vmIdList.add("http://VSERVER-link.com");
+        vmIdList.add("http://VSERVER-link.com");
+        vmIdList.add("http://VSERVER-link.com");
+        execution.setVariable("vmIdList", vmIdList);
+        ArrayList<String> vserverIdList = new ArrayList<String>();
+        vserverIdList.add("1b3f44e5-d96d-4aac-bd9a-310e8cfb0af5");
+        vserverIdList.add("14551849-1e70-45cd-bc5d-a256d49548a2");
+        vserverIdList.add("48bd7f11-408f-417c-b834-b41c1b98f7d7");
+        execution.setVariable("vserverIdList", vserverIdList);
+        execution.setVariable("vmIndex", 1);
+        appcOrchestratorPreProcessor.addVmInfoToAppcTaskRequest(execution);
+        Integer nextVmIndex = execution.getVariable("vmIndex");
+        assertThat(nextVmIndex == 2);
+        Integer vmIdListSize = execution.getVariable("vmIdListSize");
+        assertThat(vmIdListSize == 3);
+        appcTaskRequest = execution.getVariable("appcOrchestratorRequest");
+        assertEquals(appcTaskRequest.getApplicationControllerVnf().getApplicationControllerVm().getVserverId(),
+                "14551849-1e70-45cd-bc5d-a256d49548a2");
+        assertEquals(appcTaskRequest.getApplicationControllerVnf().getApplicationControllerVm().getVmId(),
+                "http://VSERVER-link.com");
+    }
+
+    private void mockReferenceResponse() {
+        ControllerSelectionReference reference = new ControllerSelectionReference();
+        reference.setControllerName("TEST-CONTROLLER-NAME");
+        when(catalogDbClient.getControllerSelectionReferenceByVnfTypeAndActionCategory(eq("TEST-VNF-TYPE"),
+                eq(Action.Lock.toString()))).thenReturn(reference);
+    }
+
+    private void fillRequiredAppcExecutionFields() {
+        RequestContext context = new RequestContext();
+        context.setMsoRequestId("TEST-MSO-ID");
+        execution.setVariable("aicIdentity", "AIC-TEST");
+        execution.setVariable("vmIdList", "VM-ID-LIST-TEST");
+        execution.setVariable("vserverIdList", "VSERVER-ID-LIST");
+        execution.setVariable("identityUrl", "IDENTITY-URL-TEST");
+        execution.getGeneralBuildingBlock().setRequestContext(context);
+    }
+
+    private GenericVnf getTestGenericVnf() {
+        GenericVnf genericVnf = new GenericVnf();
+        genericVnf.setVnfId("TEST-VNF-ID");
+        genericVnf.setVnfType("TEST-VNF-TYPE");
+        genericVnf.setVnfName("TEST-VNF-NAME");
+        genericVnf.setIpv4OamAddress("127.0.0.1");
+        return genericVnf;
+    }
+}
diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/appcTaskRequest.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/appcTaskRequest.json
new file mode 100644 (file)
index 0000000..957c603
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "ApplicationControllerTaskRequest": {
+    "controllerType": "TEST-CONTROLLER-NAME",
+    "action": "Lock",
+    "identityUrl": "IDENTITY-URL-TEST",
+    "applicationControllerVnf": {
+      "vnfId": "TEST-VNF-ID",
+      "vnfName": "TEST-VNF-NAME",
+      "vnfHostIpAddress": "127.0.0.1"
+    }
+  }
+}
\ No newline at end of file
index 94b28e9..cdd5df9 100644 (file)
@@ -16,6 +16,7 @@
     <protobuf.version>3.6.1</protobuf.version>
     <grpc.netty.version>4.1.30.Final</grpc.netty.version>
     <ccsdk.version>0.4.2</ccsdk.version>
+    <appc.client.version>1.6.0-SNAPSHOT</appc.client.version>
   </properties>
 
   <dependencies>
       <artifactId>camunda-external-task-client</artifactId>
       <version>1.1.1</version>
     </dependency>
+    <dependency>
+      <groupId>org.onap.appc.client</groupId>
+      <artifactId>client-lib</artifactId>
+      <version>${appc.client.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.mockito</groupId>
+          <artifactId>mockito-core</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.powermock</groupId>
+          <artifactId>powermock-module-junit4</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.powermock</groupId>
+          <artifactId>powermock-api-mockito</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.appc.client</groupId>
+      <artifactId>client-kit</artifactId>
+      <version>${appc.client.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.mockito</groupId>
+          <artifactId>mockito-core</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.appc.client</groupId>
+      <artifactId>client-lib</artifactId>
+      <version>${appc.client.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.mockito</groupId>
+          <artifactId>mockito-core</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.powermock</groupId>
+          <artifactId>powermock-module-junit4</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.powermock</groupId>
+          <artifactId>powermock-api-mockito</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.appc.client</groupId>
+      <artifactId>client-kit</artifactId>
+      <version>${appc.client.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.mockito</groupId>
+          <artifactId>mockito-core</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
   </dependencies>
   <dependencyManagement>
     <dependencies>
diff --git a/common/src/main/java/org/onap/so/appc/orchestrator/service/beans/ApplicationControllerTaskRequest.java b/common/src/main/java/org/onap/so/appc/orchestrator/service/beans/ApplicationControllerTaskRequest.java
new file mode 100644 (file)
index 0000000..3811b52
--- /dev/null
@@ -0,0 +1,104 @@
+package org.onap.so.appc.orchestrator.service.beans;
+
+import java.io.Serializable;
+import org.onap.appc.client.lcm.model.Action;
+import org.onap.so.appc.orchestrator.service.beans.ApplicationControllerVnf;
+
+public class ApplicationControllerTaskRequest implements Serializable {
+
+    private static final long serialVersionUID = -3150320542857627682L;
+
+    private Action action;
+    private String controllerType;
+    private String identityUrl;
+    private String operationsTimeout;
+    private String bookName;
+    private String nodeList;
+    private String fileParameters;
+    private String existingSoftwareVersion;
+    private String newSoftwareVersion;
+    private ApplicationControllerVnf applicationControllerVnf;
+
+    public Action getAction() {
+        return action;
+    }
+
+    public void setAction(Action action) {
+        this.action = action;
+    }
+
+    public String getControllerType() {
+        return controllerType;
+    }
+
+    public void setControllerType(String controllerType) {
+        this.controllerType = controllerType;
+    }
+
+    public ApplicationControllerVnf getApplicationControllerVnf() {
+        return applicationControllerVnf;
+    }
+
+    public void setApplicationControllerVnf(ApplicationControllerVnf applicationControllerVnf) {
+        this.applicationControllerVnf = applicationControllerVnf;
+    }
+
+    public String getIdentityUrl() {
+        return identityUrl;
+    }
+
+    public void setIdentityUrl(String identityUrl) {
+        this.identityUrl = identityUrl;
+    }
+
+    public String getOperationsTimeout() {
+        return operationsTimeout;
+    }
+
+    public void setOperationsTimeout(String operationsTimeout) {
+        this.operationsTimeout = operationsTimeout;
+    }
+
+    public String getBookName() {
+        return bookName;
+    }
+
+    public void setBookName(String bookName) {
+        this.bookName = bookName;
+    }
+
+    public String getNodeList() {
+        return nodeList;
+    }
+
+    public void setNodeList(String nodeList) {
+        this.nodeList = nodeList;
+    }
+
+    public String getFileParameters() {
+        return fileParameters;
+    }
+
+    public void setFileParameters(String fileParameters) {
+        this.fileParameters = fileParameters;
+    }
+
+    public String getExistingSoftwareVersion() {
+        return existingSoftwareVersion;
+    }
+
+    public void setExistingSoftwareVersion(String existingSoftwareVersion) {
+        this.existingSoftwareVersion = existingSoftwareVersion;
+    }
+
+    public String getNewSoftwareVersion() {
+        return newSoftwareVersion;
+    }
+
+    public void setNewSoftwareVersion(String newSoftwareVersion) {
+        this.newSoftwareVersion = newSoftwareVersion;
+    }
+
+
+
+}
diff --git a/common/src/main/java/org/onap/so/appc/orchestrator/service/beans/ApplicationControllerVm.java b/common/src/main/java/org/onap/so/appc/orchestrator/service/beans/ApplicationControllerVm.java
new file mode 100644 (file)
index 0000000..75e2053
--- /dev/null
@@ -0,0 +1,30 @@
+package org.onap.so.appc.orchestrator.service.beans;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class ApplicationControllerVm implements Serializable {
+
+    private static final long serialVersionUID = 2786675508024214638L;
+
+    private String vserverId;
+    private String vmId;
+
+    public String getVserverId() {
+        return vserverId;
+    }
+
+    public void setVserverId(String vserverId) {
+        this.vserverId = vserverId;
+    }
+
+    public String getVmId() {
+        return vmId;
+    }
+
+    public void setVmId(String vmId) {
+        this.vmId = vmId;
+    }
+
+
+}
diff --git a/common/src/main/java/org/onap/so/appc/orchestrator/service/beans/ApplicationControllerVnf.java b/common/src/main/java/org/onap/so/appc/orchestrator/service/beans/ApplicationControllerVnf.java
new file mode 100644 (file)
index 0000000..526941d
--- /dev/null
@@ -0,0 +1,49 @@
+package org.onap.so.appc.orchestrator.service.beans;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class ApplicationControllerVnf implements Serializable {
+
+    private static final long serialVersionUID = 2786675508024214637L;
+
+    private String vnfId;
+    private String vnfName;
+    private String vnfHostIpAddress;
+    private ApplicationControllerVm applicationControllerVm;
+
+    public String getVnfId() {
+        return vnfId;
+    }
+
+    public void setVnfId(String vnfId) {
+        this.vnfId = vnfId;
+    }
+
+    public String getVnfName() {
+        return vnfName;
+    }
+
+    public void setVnfName(String vnfName) {
+        this.vnfName = vnfName;
+    }
+
+    public String getVnfHostIpAddress() {
+        return vnfHostIpAddress;
+    }
+
+    public void setVnfHostIpAddress(String vnfHostIpAddress) {
+        this.vnfHostIpAddress = vnfHostIpAddress;
+    }
+
+    public ApplicationControllerVm getApplicationControllerVm() {
+        return applicationControllerVm;
+    }
+
+    public void setApplicationControllerVm(ApplicationControllerVm applicationControllerVm) {
+        this.applicationControllerVm = applicationControllerVm;
+    }
+
+
+
+}
index 8bde3c4..9e8a018 100644 (file)
@@ -60,6 +60,7 @@ public class BeansTest {
 
     @Test
     public void pojoStructure() {
+        test("org.onap.so.appc.orchestrator.service.beans");
         test("org.onap.so.client.policy.entities");
         test("org.onap.so.client.grm.beans");
         test("org.onap.so.client.ruby.beans");
index 5842531..b76cd42 100644 (file)
@@ -26,7 +26,8 @@ public enum SoSubsystems implements Subsystem {
     CATALOGDB("CatalogDb Adapter"),
     OPENSTACK("Openstack Adapter"),
     REQUESTDB("RequestDB Adapter"),
-    SDNC("SDNC Adapter");
+    SDNC("SDNC Adapter"),
+    SOAPPCORCHESTRATOR("SO APPC Orchestrator");
 
     private String subsystem;
 
index 27e1ae9..1d67222 100644 (file)
@@ -23,6 +23,8 @@ mso:
         uri: http://localhost:${wiremock.server.port}
       - subsystem: sdnc
         uri: http://localhost:${wiremock.server.port}
+      - subsystem: soappcorchestrator
+        uri: http://localhost:${wiremock.server.port}
   infra-requests:
     archived:
       period: 180
index f1d5b53..5d09ffb 100644 (file)
                                                                        </inline>
                                                                </assembly>
                                                        </build>
+                                               </image>
+                                                                                               <image>
+                                                       <name>${docker.image.prefix}/so-appc-orchestrator</name>
+                                                       <build>
+                                                               <cleanup>try</cleanup>
+                                                               <dockerFileDir>docker-files</dockerFileDir>
+                                                               <dockerFile>Dockerfile.so-app</dockerFile>
+                                                               <tags>
+                                                                       <tag>${project.version}</tag>
+                                                                       <tag>${project.version}-${maven.build.timestamp}</tag>
+                                                                       <tag>${project.docker.latesttag.version}</tag>
+                                                               </tags>
+                                                               <assembly>
+                                                                       <inline>
+                                                                               <dependencySets>
+                                                                                       <dependencySet>
+                                                                                               <includes>
+                                                                                                       <include>org.onap.so.adapters:so-appc-orchestrator</include>
+                                                                                               </includes>
+                                                                                               <outputFileNameMapping>app.jar</outputFileNameMapping>
+                                                                                       </dependencySet>
+                                                                               </dependencySets>
+                                                                       </inline>
+                                                               </assembly>
+                                                       </build>
                                                </image>
                                                <image>
                                                        <name>${docker.image.prefix}/sdc-controller</name>