1710 Rebase - Second Attempt

This commit rebases changes from openecomp-mso/internal-staging-1710 up to and including this codecloud commit:
54483fc6606ddb1591a2e9da61bff8712325f924
Wed Sep 6 18:12:56 2017 -0400

Rebasing was done on a branch on top of this commit in so/master in ONAP:
93fbdfbe46104f8859d4754040f979cb7997c157
Thu Sep 7 16:42:59 2017 +0000

Change-Id: I4ad9abf40da32bf5bdca43e868b8fa2dbcd9dc59
Issue-id: SO-107
Signed-off-by: Arthur Martella <amartell@research.att.com>
diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/CompleteMsoProcessTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/CompleteMsoProcessTest.groovy
index cd70fa9..f425dc8 100644
--- a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/CompleteMsoProcessTest.groovy
+++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/CompleteMsoProcessTest.groovy
@@ -56,17 +56,13 @@
 				</sdncadapterworkflow:MsoCompletionRequest>
 		"""
 
-
-	private String completeMsoProcessResponse = """<sdncadapterworkflow:MsoCompletionResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
-  <sdncadapterworkflow:out>BPEL UCPELayer3ServiceActivateV1 completed</sdncadapterworkflow:out>
-</sdncadapterworkflow:MsoCompletionResponse>"""
-
-
 	@Test
 	public void testPreProcessRequest() {
 
 		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
 		when(mockExecution.getVariable("CompleteMsoProcessRequest")).thenReturn(completeMsoProcessRequest)
+		when(mockExecution.getVariable("URN_mso_adapters_db_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC");
+		when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7");
 
 		CompleteMsoProcess completeMsoProcess = new CompleteMsoProcess()
 		completeMsoProcess.preProcessRequest(mockExecution)
@@ -109,48 +105,6 @@
 
 	}
 
-	@Test
-	public void testpostProcessResponse(){
-
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
-		when(mockExecution.getVariable("CMSO_mso-bpel-name")).thenReturn("UCPELayer3ServiceActivateV1")
-
-		CompleteMsoProcess completeMsoProcess = new CompleteMsoProcess()
-		completeMsoProcess.postProcessResponse(mockExecution)
-
-		verify(mockExecution).setVariable("CompleteMsoProcessResponse", completeMsoProcessResponse)
-		verify(mockExecution).setVariable("CMSO_ResponseCode","200")
-	}
-
-	private String updateDBStatusToSuccessPayload = """
-			<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://org.openecomp.mso/requestsdb">
-			<soapenv:Header/>
-			<soapenv:Body>
-			   <req:updateStatus>
-				  <requestId>testReqId</requestId>
-				  <lastModifiedBy>BPEL</lastModifiedBy>
-				  <status>COMPLETED</status>
-			   </req:updateStatus>
-			</soapenv:Body>
-		 </soapenv:Envelope>
-		"""
-
-	@Test
-	public void testupdateDBStatusToSuccessPayload(){
-
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-		when(mockExecution.getVariable("CMSO_request_id")).thenReturn("testReqId")
-		when(mockExecution.getVariable("URN_mso_adapters_db_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC");
-		when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7");
-
-		CompleteMsoProcess completeMsoProcess = new CompleteMsoProcess()
-		completeMsoProcess.updateDBStatusToSuccessPayload(mockExecution)
-
-		verify(mockExecution).setVariable("CMSO_updateDBStatusToSuccessPayload",updateDBStatusToSuccessPayload)
-	}
-
 	private String setUpdateDBstatustoSuccessPayload = """
 						<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://org.openecomp.mso/requestsdb">
 						   <soapenv:Header/>
diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/FalloutHandlerTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/FalloutHandlerTest.groovy
index fcc55d0..32a4c54 100644
--- a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/FalloutHandlerTest.groovy
+++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/FalloutHandlerTest.groovy
@@ -259,6 +259,7 @@
 			when(mockExecution.getVariable("FH_request_id")).thenReturn("testReqId")

 			when(mockExecution.getVariable("FH_ErrorMessage")).thenReturn("ErrorMessage")

 			when(mockExecution.getVariable("FH_ErrorCode")).thenReturn("ErrorCode")

+			when(mockExecution.getVariable("URN_mso_default_adapter_namespace")).thenReturn("http://org.openecomp.mso");

 

 			FalloutHandler falloutHandler = new FalloutHandler()

 			falloutHandler.updateRequestGammaPayload(mockExecution)

diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/GenericPutServiceTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/GenericPutServiceTest.groovy
new file mode 100644
index 0000000..1e7342d
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/GenericPutServiceTest.groovy
@@ -0,0 +1,214 @@
+package org.openecomp.mso.bpmn.common.scripts

+

+import static org.mockito.Mockito.*

+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutServiceInstance;

+

+import org.camunda.bpm.engine.ProcessEngineServices

+import org.camunda.bpm.engine.RepositoryService

+import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity

+import org.camunda.bpm.engine.repository.ProcessDefinition

+import org.junit.Before

+import org.junit.Ignore

+import org.junit.Rule

+import org.junit.Test

+import org.junit.runner.RunWith

+import org.mockito.MockitoAnnotations

+import org.mockito.internal.debugging.MockitoDebuggerImpl

+import org.mockito.runners.MockitoJUnitRunner

+

+import com.github.tomakehurst.wiremock.client.WireMock

+import com.github.tomakehurst.wiremock.junit.WireMockRule

+import org.apache.commons.lang3.*

+

+@RunWith(MockitoJUnitRunner.class)

+class GenericPutServiceTest {

+

+	@Rule

+	public WireMockRule wireMockRule = new WireMockRule(8090);

+

+	@Before

+	public void init()

+	{

+		MockitoAnnotations.initMocks(this)

+

+	}

+

+	@Test

+	public void preProcessRequest() {

+

+

+		println "************ preProcessRequest ************* "

+

+		ExecutionEntity mockExecution = setupMock()

+

+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")

+		when(mockExecution.getVariable("GENPS_globalSubscriberId")).thenReturn("1604-MVM-26")

+		when(mockExecution.getVariable("GENPS_serviceInstanceId")).thenReturn("MIS%2F1604%2F0026%2FSW_INTERNET")

+		when(mockExecution.getVariable("GENPS_serviceType")).thenReturn("SDN-ETHERNET-INTERNET")

+		when(mockExecution.getVariable("GENPS_serviceInstanceData")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")

+		when(mockExecution.getVariable("GENPS_type")).thenReturn("service-instance")

+

+		GenericPutService  putServiceInstance= new GenericPutService()

+		putServiceInstance.preProcessRequest(mockExecution)

+

+		// check the sequence of variable invocation

+		//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()

+		//preDebugger.printInvocations(mockExecution)

+

+		verify(mockExecution, atLeast(1)).getVariable("isDebugLogEnabled")

+		verify(mockExecution).setVariable("prefix", "GENPS_")

+

+	//	execution.getVariable("isDebugLogEnabled")

+

+		verify(mockExecution).setVariable("GENPS_SuccessIndicator", false)

+	//	verify(mockExecution).setVariable("globalSubscriberId", "1604-MVM-26")

+	//	verify(mockExecution).setVariable("serviceInstanceId", "MIS%2F1604%2F0026%2FSW_INTERNET")

+	//	verify(mockExecution).setVariable("serviceType", "SDN-ETHERNET-INTERNET")

+	//	verify(mockExecution).setVariable("ServiceInstanceData", "f70e927b-6087-4974-9ef8-c5e4d5847ca4")

+

+

+	}

+

+

+	@Test

+	@Ignore

+	public void putServiceInstance() {

+		println "************ putServiceInstance ************* "

+

+		WireMock.reset();

+

+		MockPutServiceInstance("1604-MVM-26", "SDN-ETHERNET-INTERNET", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericPutServiceInstance/GenericPutServiceInstance_PutServiceInstance_AAIResponse_Success.xml");

+		ExecutionEntity mockExecution = setupMock()

+

+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")

+		when(mockExecution.getVariable("GENPS_globalSubscriberId")).thenReturn("1604-MVM-26")

+		when(mockExecution.getVariable("GENPS_serviceInstanceId")).thenReturn("MIS%2F1604%2F0026%2FSW_INTERNET")

+		when(mockExecution.getVariable("GENPS_serviceType")).thenReturn("SDN-ETHERNET-INTERNET")

+		when(mockExecution.getVariable("GENPS_serviceInstanceData")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")

+		when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")

+		when(mockExecution.getVariable("URN_mso_workflow_PutServiceInstance_aai_business_customer_uri")).thenReturn("/aai/v7/business/customers/customer")

+		when(mockExecution.getVariable("GENPS_serviceInstanceData")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")

+		when(mockExecution.getVariable("GENPS_type")).thenReturn("service-instance")

+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')

+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("7")

+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v7_customer_uri")).thenReturn("/aai/v7/business/customers/customer")

+		when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")

+		when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")

+

+		GenericPutService  serviceInstance= new GenericPutService()

+		serviceInstance.putServiceInstance(mockExecution)

+

+		// check the sequence of variable invocation

+		MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()

+		preDebugger.printInvocations(mockExecution)

+

+		verify(mockExecution, atLeast(1)).getVariable("isDebugLogEnabled")

+		verify(mockExecution).setVariable("prefix", "GENPS_")

+

+	//	execution.getVariable("isDebugLogEnabled")

+	//	verify(mockExecution).setVariable("GENPSI_serviceInstanceData","f70e927b-6087-4974-9ef8-c5e4d5847ca4")

+

+		String servicePayload = """<service-instance xmlns="http://org.openecomp.aai.inventory/v7">f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance>""" as String

+		verify(mockExecution).setVariable("GENPS_serviceInstancePayload",servicePayload)

+

+		String serviceAaiPath = "http://localhost:28090/aai/v7/business/customers/customer/1604-MVM-26/service-subscriptions/service-subscription/SDN-ETHERNET-INTERNET/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET"

+		verify(mockExecution).setVariable("GENPS_putServiceInstanceAaiPath", serviceAaiPath)

+

+		int responseCode = 200

+		verify(mockExecution).setVariable("GENPS_putServiceInstanceResponseCode", responseCode)

+

+		String aaiResponse = """<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"

+                   statusCode="200">

+   <rest:headers>

+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>

+      <rest:header name="Content-Length" value="0"/>

+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>

+      <rest:header name="X-AAI-TXID" value="mtcnjv9aaas03-20160310-00:01:18:551-132672"/>

+      <rest:header name="Server" value="Apache-Coyote/1.1"/>

+      <rest:header name="Cache-Control" value="private"/>

+   </rest:headers>

+</rest:RESTResponse>"""

+

+		verify(mockExecution).setVariable("GENPS_putServiceInstanceResponse", aaiResponse)

+

+		verify(mockExecution).setVariable("GENPS_SuccessIndicator", true)

+	}

+

+	@Test

+	@Ignore

+	public void putServiceInstance_404() {

+

+

+		println "************ putServiceInstance ************* "

+

+		WireMock.reset();

+

+		ExecutionEntity mockExecution = setupMock()

+

+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")

+		when(mockExecution.getVariable("GENPS_globalSubscriberId")).thenReturn("1604-MVM-26")

+		when(mockExecution.getVariable("GENPS_serviceInstanceId")).thenReturn("MIS%2F1604%2F0026%2FSW_INTERNET")

+		when(mockExecution.getVariable("GENPS_serviceType")).thenReturn("SDN-ETHERNET-INTERNET")

+		when(mockExecution.getVariable("GENPS_ServiceInstanceData")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")

+		when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")

+		when(mockExecution.getVariable("URN_mso_workflow_PutServiceInstance_aai_business_customer_uri")).thenReturn("/aai/v7/business/customers/customer")

+		when(mockExecution.getVariable("GENPS_ServiceInstanceData")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")

+

+		GenericPutService  serviceInstance= new GenericPutService()

+		serviceInstance.putServiceInstance(mockExecution)

+

+		// check the sequence of variable invocation

+		MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()

+		preDebugger.printInvocations(mockExecution)

+

+		verify(mockExecution, atLeast(1)).getVariable("isDebugLogEnabled")

+		verify(mockExecution).setVariable("prefix", "GENPS_")

+

+	//	execution.getVariable("isDebugLogEnabled")

+

+

+		verify(mockExecution).setVariable("GENPS_serviceInstanceData","f70e927b-6087-4974-9ef8-c5e4d5847ca4")

+

+		String serviceInstancepayload = """<service-instance xmlns="http://org.openecomp.mso.aai.inventory/v7">f70e927b-6087-4974-9ef8-c5e4d5847ca4

+			</service-instance>""" as String

+		verify(mockExecution).setVariable("GENPS_serviceInstancePayload",serviceInstancepayload)

+

+		String serviceInstanceAaiPath = "http://localhost:8090/aai/v7/business/customers/customer/1604-MVM-26/service-subscriptions/service-subscription/SDN-ETHERNET-INTERNET/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET"

+		verify(mockExecution).setVariable("GENPS_putServiceInstanceAaiPath", serviceInstanceAaiPath)

+

+		int responseCode = 404

+		verify(mockExecution).setVariable("GENPS_putServiceInstanceResponseCode", responseCode)

+

+		String aaiResponse = ""

+		verify(mockExecution).setVariable("GENPS_putServiceInstanceResponse", aaiResponse)

+

+		verify(mockExecution).setVariable("GENPS_SuccessIndicator", false)

+

+

+	}

+

+

+	private ExecutionEntity setupMock() {

+

+		ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)

+		when(mockProcessDefinition.getKey()).thenReturn("PutServiceInstance")

+		RepositoryService mockRepositoryService = mock(RepositoryService.class)

+		when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)

+		when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("PutServiceInstance")

+		when(mockRepositoryService.getProcessDefinition().getId()).thenReturn("100")

+		ProcessEngineServices mockProcessEngineServices = mock(ProcessEngineServices.class)

+		when(mockProcessEngineServices.getRepositoryService()).thenReturn(mockRepositoryService)

+

+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)

+		// Initialize prerequisite variables

+

+		when(mockExecution.getId()).thenReturn("100")

+		when(mockExecution.getProcessDefinitionId()).thenReturn("PutServiceInstance")

+		when(mockExecution.getProcessInstanceId()).thenReturn("PutServiceInstance")

+		when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)

+		when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)

+

+		return mockExecution

+	}

+

+}
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/NetworkUtilsTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/NetworkUtilsTest.groovy
new file mode 100644
index 0000000..bc1eb45
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/NetworkUtilsTest.groovy
@@ -0,0 +1,97 @@
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * 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.openecomp.mso.bpmn.common.scripts
+
+import static org.mockito.Mockito.*
+import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
+import static org.junit.Assert.*;
+import org.junit.Test;
+
+class NetworkUtilsTest {
+
+	def volumeRequestXml = """<volume-request xmlns="http://www.w3.org/2001/XMLSchema">
+   <request-info>
+      <action>CREATE_VF_MODULE_VOL</action>
+      <source>VID</source>
+      <service-instance-id/>
+   </request-info>
+   <volume-inputs>
+      <volume-group-id/>
+      <volume-group-name>MSOTESTVOL101a-vSAMP12_base_vol_module-0</volume-group-name>
+      <vnf-type>Test/vSAMP12</vnf-type>
+      <vf-module-model-name>vSAMP12::base::module-0</vf-module-model-name>
+      <asdc-service-model-version>2.0</asdc-service-model-version>
+      <aic-cloud-region>mdt1</aic-cloud-region>
+      <tenant-id>88a6ca3ee0394ade9403f075db23167e</tenant-id>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <backout-on-failure></backout-on-failure>
+   </volume-inputs>
+   <volume-params>
+      <param name="vnf_name">STMTN5MMSC20</param>
+      <param name="vnf_name2">US1117MTSNJVBR0246</param>
+    </volume-params>
+</volume-request>"""
+	
+	@Test
+	public void testIsRollbackEnabled() {
+		
+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_rollback")).thenReturn(true)
+
+		NetworkUtils networkUtils = new NetworkUtils()
+		def rollbackEnabled = networkUtils.isRollbackEnabled(mockExecution, volumeRequestXml)
+		
+		assertEquals(true, rollbackEnabled)
+
+	}
+	
+	@Test
+	public void testIsRollbackEnabled2() {
+		
+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_rollback")).thenReturn(false)
+
+		NetworkUtils networkUtils = new NetworkUtils()
+		def rollbackEnabled = networkUtils.isRollbackEnabled(mockExecution, volumeRequestXml)
+		
+		assertEquals(false, rollbackEnabled)
+
+	}
+
+	@Test
+	public void testGetIpvVersion() {
+		
+		NetworkUtils networkUtils = new NetworkUtils()
+		println "test: ipv4"
+		String version4 = networkUtils.getIpvVersion("ipv4")
+		assertEquals("4", version4)
+		println "test: ipv6"
+		String version6 = networkUtils.getIpvVersion("ipv6")
+		assertEquals("6", version6)
+		println "test: 4"
+		String versionDigit4 = networkUtils.getIpvVersion("4")
+		assertEquals("4", versionDigit4)
+
+	}
+	
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/VidUtilsTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/VidUtilsTest.groovy
index 645fbe6..c4f0e9e 100644
--- a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/VidUtilsTest.groovy
+++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/VidUtilsTest.groovy
@@ -58,11 +58,11 @@
   "requestDetails": {
     "modelInfo": {
       "modelType": "vfModule",
-      "modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+      "modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
       "modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
       "modelName": "STMTN5MMSC21-MMSC::model-1-0",
       "modelVersion": "1",
-      "modelCustomizationId": "ee6478e5-ea33-3346-ac12-ab121484a3fe"
+      "modelCustomizationUuid": "ee6478e5-ea33-3346-ac12-ab121484a3fe"
     },
     "cloudConfiguration": {
       "lcpCloudRegionId": "MDTWNJ21",
@@ -80,7 +80,7 @@
           "instanceName": "MSOTESTVOL103a-vSAMP12_base_module-0_vol",
           "modelInfo": {
             "modelType": "volumeGroup",
-            "modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+            "modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
             "modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
             "modelName": "vSAMP12..base..module-0",
             "modelVersion": "1"
@@ -92,7 +92,7 @@
           "instanceId": "123456",
           "modelInfo": {
             "modelType": "service",
-            "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+            "modelInvariantUuid": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
             "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
             "modelName": "SERVICE_MODEL_NAME",
             "modelVersion": "1.0"
@@ -105,11 +105,11 @@
           "instanceName": "skask-test",
           "modelInfo": {
             "modelType": "vnf",
-            "modelInvariantId": "skask",
+            "modelInvariantUuid": "skask",
             "modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
             "modelName": "vSAMP12",
             "modelVersion": "1.0",
-            "modelCustomizationName": "vSAMP12 1"
+            "modelInstanceName": "vSAMP12 1"
           }
         }
       }
@@ -193,7 +193,7 @@
 						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "vSAMP12",
 						"modelVersion": "1",
-						"modelCustomizationName": "vSAMP12"
+						"modelInstanceName": "vSAMP12"
 					}
 				}
 			}
@@ -262,7 +262,7 @@
 		"modelInfo": {
 			"modelType": "volumeGroup",
 			"modelId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 			"modelName": "vSAMP12::base::module-0",
 			"modelVersion": "1"
 		},
@@ -282,7 +282,7 @@
 					"modelInfo": {
 						"modelType": "service",
 						"modelId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "Test",
 						"modelVersion": "2.0"
 					}
@@ -293,10 +293,10 @@
 					"modelInfo": {
 						"modelType": "vnf",
 						"modelId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "vSAMP12",
 						"modelVersion": "1",
-						"modelCustomizationName": "vSAMP12"
+						"modelInstanceName": "vSAMP12"
 					}
 				}
 			}
@@ -311,7 +311,7 @@
 		"modelInfo": {
 			"modelType": "volumeGroup",
 			"modelId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 			"modelName": "vSAMP12::base::module-0",
 			"modelVersion": "1"
 		},
@@ -331,7 +331,7 @@
 					"modelInfo": {
 						"modelType": "service",
 						"modelId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "Test",
 						"modelVersion": "2.0"
 					}
@@ -342,10 +342,10 @@
 					"modelInfo": {
 						"modelType": "vnf",
 						"modelId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "vSAMP12",
 						"modelVersion": "1",
-						"modelCustomizationName": "vSAMP12"
+						"modelInstanceName": "vSAMP12"
 					}
 				}
 			}
@@ -360,7 +360,7 @@
 		"modelInfo": {
 			"modelType": "volumeGroup",
 			"modelId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 			"modelName": "vSAMP12::base::module-0",
 			"modelVersion": "1"
 		},
@@ -380,7 +380,7 @@
 					"modelInfo": {
 						"modelType": "service",
 						"modelId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "Test",
 						"modelVersion": "2.0"
 					}
@@ -391,10 +391,10 @@
 					"modelInfo": {
 						"modelType": "vnf",
 						"modelId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "vSAMP12",
 						"modelVersion": "1",
-						"modelCustomizationName": "vSAMP12"
+						"modelInstanceName": "vSAMP12"
 					}
 				}
 			}
@@ -409,7 +409,7 @@
 		"modelInfo": {
 			"modelType": "volumeGroup",
 			"modelId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 			"modelName": "vSAMP12::base::module-0",
 			"modelVersion": "1"
 		},
@@ -428,7 +428,7 @@
 					"modelInfo": {
 						"modelType": "service",
 						"modelId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "Test",
 						"modelVersion": "2.0"
 					}
@@ -439,10 +439,10 @@
 					"modelInfo": {
 						"modelType": "vnf",
 						"modelId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "vSAMP12",
 						"modelVersion": "1",
-						"modelCustomizationName": "vSAMP12"
+						"modelInstanceName": "vSAMP12"
 					}
 				}
 			}
@@ -456,8 +456,8 @@
 "requestDetails": {
 "modelInfo": {
 "modelType": "vfModule",
-"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 "modelName": "STMTN5MMSC21-MMSC::model-1-0",
 "modelVersion": "1"
 },
@@ -477,8 +477,8 @@
 "instanceName": "MSOTESTVOL103a-vSAMP12_base_module-0_vol",
 "modelInfo": {
 "modelType": "volumeGroup",
-"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 "modelName": "vSAMP12..base..module-0",
 "modelVersion": "1"
 }
@@ -489,8 +489,8 @@
 "instanceId": "123456",
 "modelInfo": {
 "modelType": "service",
-"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 "modelName": "SERVICE_MODEL_NAME",
 "modelVersion": "1.0"
 }
@@ -502,11 +502,11 @@
 "instanceName": "skask-test",
 "modelInfo": {
 "modelType": "vnf",
-"modelInvariantId": "skask",
-"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "skask",
+"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 "modelName": "vSAMP12",
 "modelVersion": "1.0",
-"modelCustomizationName": "vSAMP12 1"
+"modelInstanceName": "vSAMP12 1"
 }
 }
 }
@@ -523,8 +523,8 @@
 "requestDetails": {
 "modelInfo": {
 "modelType": "vfModule",
-"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 "modelName": "STMTN5MMSC21-MMSC::model-1-0",
 "modelVersion": "1"
 },
@@ -544,8 +544,8 @@
 "instanceName": "MSOTESTVOL103a-vSAMP12_base_module-0_vol",
 "modelInfo": {
 "modelType": "volumeGroup",
-"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 "modelName": "vSAMP12..base..module-0",
 "modelVersion": "1"
 }
@@ -556,8 +556,8 @@
 "instanceId": "123456",
 "modelInfo": {
 "modelType": "service",
-"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 "modelName": "SERVICE_MODEL_NAME",
 "modelVersion": "1.0"
 }
@@ -569,11 +569,11 @@
 "instanceName": "skask-test",
 "modelInfo": {
 "modelType": "vnf",
-"modelInvariantId": "skask",
-"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "skask",
+"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 "modelName": "vSAMP12",
 "modelVersion": "1.0",
-"modelCustomizationName": "vSAMP12 1"
+"modelInstanceName": "vSAMP12 1"
 }
 }
 }
@@ -590,8 +590,8 @@
 "requestDetails": {
 "modelInfo": {
 "modelType": "vfModule",
-"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 "modelName": "STMTN5MMSC21-MMSC::model-1-0",
 "modelVersion": "1"
 },
@@ -610,8 +610,8 @@
 "instanceName": "MSOTESTVOL103a-vSAMP12_base_module-0_vol",
 "modelInfo": {
 "modelType": "volumeGroup",
-"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 "modelName": "vSAMP12..base..module-0",
 "modelVersion": "1"
 }
@@ -622,8 +622,8 @@
 "instanceId": "123456",
 "modelInfo": {
 "modelType": "service",
-"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 "modelName": "SERVICE_MODEL_NAME",
 "modelVersion": "1.0"
 }
@@ -635,11 +635,11 @@
 "instanceName": "skask-test",
 "modelInfo": {
 "modelType": "vnf",
-"modelInvariantId": "skask",
-"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "skask",
+"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 "modelName": "vSAMP12",
 "modelVersion": "1.0",
-"modelCustomizationName": "vSAMP12 1"
+"modelInstanceName": "vSAMP12 1"
 }
 }
 }
@@ -762,7 +762,7 @@
       <service-id/>
       <backout-on-failure>false</backout-on-failure>
       <persona-model-id>ff5256d2-5a33-55df-13ab-12abad84e7ff</persona-model-id>
-      <persona-model-version>1</persona-model-version>
+      <persona-model-version>fe6478e5-ea33-3346-ac12-ab121484a3fe</persona-model-version>
    </vnf-inputs>
    <vnf-params/>
 </vnf-request>
@@ -792,7 +792,7 @@
       <service-id/>
       <backout-on-failure>true</backout-on-failure>
       <persona-model-id>ff5256d2-5a33-55df-13ab-12abad84e7ff</persona-model-id>
-      <persona-model-version>1</persona-model-version>
+      <persona-model-version>fe6478e5-ea33-3346-ac12-ab121484a3fe</persona-model-version>
    </vnf-inputs>
    <vnf-params/>
 </vnf-request>
@@ -822,7 +822,7 @@
       <service-id/>
       <backout-on-failure/>
       <persona-model-id>ff5256d2-5a33-55df-13ab-12abad84e7ff</persona-model-id>
-      <persona-model-version>1</persona-model-version>
+      <persona-model-version>fe6478e5-ea33-3346-ac12-ab121484a3fe</persona-model-version>
    </vnf-inputs>
    <vnf-params/>
 </vnf-request>
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/BPMNUtil.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/BPMNUtil.java
index 27f2479..c476c65 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/BPMNUtil.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/BPMNUtil.java
@@ -19,7 +19,7 @@
 import org.jboss.resteasy.spi.AsynchronousResponse;

 import org.mockito.invocation.InvocationOnMock;

 import org.mockito.stubbing.Answer;

-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowAsyncCommonResource;

+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowAsyncResource;

 import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResource;

 import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;

 

@@ -166,7 +166,7 @@
 	 * @param variables

 	 */

 	private static void executeAsyncFlow(ProcessEngineServices processEngineServices, String processKey, AsynchronousResponse asyncResponse, Map<String,String> variables) {

-		WorkflowAsyncCommonResource workflowResource = new WorkflowAsyncCommonResource();

+		WorkflowAsyncResource workflowResource = new WorkflowAsyncResource();

 		VariableMapImpl variableMap = new VariableMapImpl();

 

 		Map<String, Object> variableValueType = new HashMap<String, Object>();

diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/DecomposeServiceTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/DecomposeServiceTest.java
new file mode 100644
index 0000000..6ec9493
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/DecomposeServiceTest.java
@@ -0,0 +1,95 @@
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * 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.openecomp.mso.bpmn.common;
+
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.MockGetServiceResourcesCatalogData;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.camunda.bpm.engine.test.Deployment;
+import org.junit.Assert;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+
+/**
+ * Unit Test for the DecomposeService Flow
+ *
+ */
+public class DecomposeServiceTest extends WorkflowTest {
+
+
+	public DecomposeServiceTest() throws IOException {
+
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/BuildingBlock/DecomposeService.bpmn"})
+	public void testDecomposeService_success() throws Exception{
+		MockGetServiceResourcesCatalogData("cmw-123-456-789", "/getCatalogServiceResourcesData.json", "1.0");
+
+
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		setVariablesSuccess(variables, "testRequestId123", "ff5256d2-5a33-55df-13ab-12abad84e7ff");
+		invokeSubProcess("DecomposeService", businessKey, variables);
+
+		waitForProcessEnd(businessKey, 10000);
+
+		Assert.assertTrue(isProcessEnded(businessKey));
+
+	}
+	
+	//@Test
+	@Deployment(resources = {"subprocess/BuildingBlock/DecomposeService.bpmn"})
+	public void testDecomposeService_success_partial() throws Exception{
+		MockGetServiceResourcesCatalogData("cmw-123-456-789", "/getCatalogServiceResourcesDataNoNetwork.json");
+
+
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		setVariablesSuccess(variables, "testRequestId123", "ff5256d2-5a33-55df-13ab-12abad84e7ff");
+		invokeSubProcess("DecomposeService", businessKey, variables);
+
+		waitForProcessEnd(businessKey, 10000);
+
+		Assert.assertTrue(isProcessEnded(businessKey));
+
+	}
+
+	private void setVariablesSuccess(Map<String, Object> variables, String requestId, String siId) {
+		variables.put("isDebugLogEnabled", "true");
+		variables.put("mso-request-id", requestId);
+		variables.put("msoRequestId", requestId);
+		variables.put("serviceInstanceId",siId);
+
+		String serviceModelInfo = "{ "+ "\"modelType\": \"service\"," +
+				"\"modelInvariantUuid\": \"cmw-123-456-789\"," +
+				"\"modelVersionId\": \"ab6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"ServicevSAMP12\"," +
+				"\"modelVersion\": \"1.0\"," +
+				"}";
+		variables.put("serviceModelInfo", serviceModelInfo);
+
+	}
+
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/ManualHandlingTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/ManualHandlingTest.java
new file mode 100644
index 0000000..c68c7bb
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/ManualHandlingTest.java
@@ -0,0 +1,122 @@
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * 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.openecomp.mso.bpmn.common;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+
+import org.camunda.bpm.engine.TaskService;
+import org.camunda.bpm.ProcessEngineService;
+import org.camunda.bpm.engine.task.TaskQuery;
+import org.camunda.bpm.engine.task.Task;
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.delegate.DelegateTask;
+import org.camunda.bpm.engine.runtime.Execution;
+
+import static org.openecomp.mso.bpmn.common.BPMNUtil.executeWorkFlow;
+import static org.openecomp.mso.bpmn.common.BPMNUtil.waitForWorkflowToFinish;
+import static com.github.tomakehurst.wiremock.client.WireMock.containing;
+import static com.github.tomakehurst.wiremock.client.WireMock.put;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
+import static org.openecomp.mso.bpmn.common.BPMNUtil.executeWorkFlow;
+import static org.openecomp.mso.bpmn.common.BPMNUtil.waitForWorkflowToFinish;
+import static org.openecomp.mso.bpmn.mock.StubResponsePolicy.MockPolicyAbort;
+
+import java.io.DataOutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+import java.util.List;
+
+import org.camunda.bpm.engine.RuntimeService;
+import org.camunda.bpm.engine.test.Deployment;
+import org.junit.Assert;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.core.WorkflowException;
+
+/**
+ * Unit test for RainyDayHandler.bpmn.
+ */
+public class ManualHandlingTest extends WorkflowTest {
+	
+	@Test	
+	@Deployment(resources = {			
+			"subprocess/BuildingBlock/ManualHandling.bpmn"
+		})
+	public void  TestManualHandlingSuccess() {
+
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("msoRequestId", "testRequestId");
+		variables.put("serviceType", "X");
+		variables.put("vnfType", "Y");
+		variables.put("currentActivity", "BB1");		
+		variables.put("workStep", "1");
+		variables.put("failedActivity", "");
+		variables.put("errorCode", "123");
+		variables.put("errorText", "update failed");
+		variables.put("validResponses", "Rollback");
+		
+
+		String businessKey = UUID.randomUUID().toString();
+		invokeSubProcess("ManualHandling", businessKey, variables);
+		
+		try {
+			Thread.sleep(5);
+		} catch (Exception e) {
+			
+		}
+		
+		TaskService taskService = processEngineRule.getTaskService();
+		
+		TaskQuery q = taskService.createTaskQuery();		
+	
+		List<Task> tasks = q.orderByTaskCreateTime().asc().list();
+		  int i = 0;
+		  
+		  for (Task task : tasks) {		  
+			 
+		    
+		        System.out.println("TASK ID: " + task.getId());
+		        System.out.println("TASK NAME: " + task.getName());
+		        try {
+		        	System.out.println("Completing the task");
+		        	Map<String,Object> completeVariables = new HashMap<String,Object>();
+		        	completeVariables.put("responseValue", "skip");
+		        	taskService.complete(task.getId(), completeVariables);		        
+		        }
+		        catch(Exception e) {
+		        	System.out.println("GOT EXCEPTION: " + e.getMessage());
+		        }		        
+		 	}	
+
+		waitForProcessEnd(businessKey, 100000);
+
+		Assert.assertTrue(isProcessEnded(businessKey));
+		
+	}
+	
+	
+}
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/RainyDayHandlerTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/RainyDayHandlerTest.java
new file mode 100644
index 0000000..86b59f9
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/RainyDayHandlerTest.java
@@ -0,0 +1,85 @@
+/*- 

+ * ============LICENSE_START======================================================= 

+ * OPENECOMP - MSO 

+ * ================================================================================ 

+ * 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.openecomp.mso.bpmn.common;

+

+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;

+import static org.openecomp.mso.bpmn.common.BPMNUtil.executeWorkFlow;

+import static org.openecomp.mso.bpmn.common.BPMNUtil.waitForWorkflowToFinish;

+import static com.github.tomakehurst.wiremock.client.WireMock.containing;

+import static com.github.tomakehurst.wiremock.client.WireMock.put;

+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;

+import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;

+import static org.openecomp.mso.bpmn.common.BPMNUtil.executeWorkFlow;

+import static org.openecomp.mso.bpmn.common.BPMNUtil.waitForWorkflowToFinish;

+import static org.openecomp.mso.bpmn.mock.StubResponsePolicy.MockPolicyAbort;

+

+import java.util.HashMap;

+import java.util.Map;

+import java.util.UUID;

+

+import org.camunda.bpm.engine.RuntimeService;

+import org.camunda.bpm.engine.test.Deployment;

+import org.junit.Assert;

+import org.junit.Ignore;

+import org.junit.Test;

+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;

+import org.openecomp.mso.bpmn.core.WorkflowException;

+

+/**

+ * Unit test for RainyDayHandler.bpmn.

+ */

+public class RainyDayHandlerTest extends WorkflowTest {

+	

+	@Test	

+	@Ignore // IGNORED FOR 1710 MERGE TO ONAP

+	@Deployment(resources = {

+			"subprocess/BuildingBlock/RainyDayHandler.bpmn",

+			"subprocess/BuildingBlock/ManualHandling.bpmn"

+		})

+	public void  TestRainyDayHandlingSuccess() {

+

+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				

+		Map<String, Object> variables = new HashMap<String, Object>();		

+		variables.put("isDebugLogEnabled","true");

+		variables.put("msoRequestId", "testRequestId");

+		variables.put("serviceType", "X");

+		variables.put("vnfType", "Y");

+		variables.put("currentActivity", "BB1");		

+		variables.put("workStep", "1");

+		variables.put("failedActivity", "");

+		variables.put("errorCode", "123");

+		variables.put("errorText", "update failed");

+		

+		MockPolicyAbort();

+		

+		

+		String businessKey = UUID.randomUUID().toString();

+		invokeSubProcess("RainyDayHandler", businessKey, variables);

+

+		waitForProcessEnd(businessKey, 10000);

+

+		Assert.assertTrue(isProcessEnded(businessKey));

+		

+	}

+

+	

+	

+}
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/SDNCAdapterV1Test.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/SDNCAdapterV1Test.java
index 3eb7acd..d1ca98c 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/SDNCAdapterV1Test.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/SDNCAdapterV1Test.java
@@ -38,6 +38,7 @@
 import org.camunda.bpm.engine.test.Deployment;

 import org.camunda.bpm.engine.variable.impl.VariableMapImpl;

 import org.junit.Assert;

+import org.junit.Ignore;

 import org.junit.Test;

 import org.openecomp.mso.bpmn.common.adapter.sdnc.CallbackHeader;

 import org.openecomp.mso.bpmn.common.adapter.sdnc.SDNCAdapterCallbackRequest;

@@ -47,6 +48,7 @@
 import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResource;

 import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;

 import org.openecomp.mso.bpmn.core.PropertyConfigurationSetup;

+import org.openecomp.mso.bpmn.core.xml.XmlTool;

 import org.openecomp.mso.bpmn.mock.FileUtil;

 

 /**

@@ -173,6 +175,7 @@
 		checkForTimeout(pid);

 

 		assertEquals(true, (Boolean) (getVariable(pid, "continueListening")));

+		assertEquals(false, (Boolean) (getVariable(pid, "SDNCA_InterimNotify")));

 

 

 		//System.out.println("SDNCAdapter interim status processing flow Completed!");

@@ -215,6 +218,7 @@
 		assertFalse(sdncAdapterResponse instanceof SDNCAdapterErrorResponse);

 		assertProcessInstanceNotFinished(pid);

 		assertEquals(true, (Boolean) (getVariable(pid, "continueListening")));

+		assertEquals(false, (Boolean) (getVariable(pid, "SDNCA_InterimNotify")));

 

 		// Inject a "final" SDNC Adapter asynchronous callback message

 		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestData);

@@ -224,11 +228,74 @@
 		assertFalse(sdncAdapterResponse instanceof SDNCAdapterErrorResponse);

 		assertProcessInstanceFinished(pid);

 		assertEquals(false, (Boolean) (getVariable(pid, "continueListening")));

+		assertEquals(false, (Boolean) (getVariable(pid, "SDNCA_InterimNotify")));

 

 		//System.out.println("SDNCAdapter non-final then final processing flow Completed!");

 	}

 

-	

+

+	@Test

+	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn",

+			"subprocess/GenericNotificationService.bpmn"

+			})

+	public void nonFinalThenFinalWithNotify() throws InterruptedException {

+

+		mockSDNCAdapter(200);

+		mockUpdateRequestDB(200, "Database/DBAdapter.xml");

+

+		//System.out.println("SDNCAdapter non-final then final processing flow Started!");

+

+		String modSdncAdapterWorkflowRequestAct = sdncAdapterWorkflowRequestAct;

+		try {

+			// only service-type "uCPE-VMS" is applicable to notification, so modify the test request

+			modSdncAdapterWorkflowRequestAct = XmlTool.modifyElement(sdncAdapterWorkflowRequestAct, "tag0:service-type", "uCPE-VMS").get();

+			System.out.println("modified request: " + modSdncAdapterWorkflowRequestAct);

+		} catch (Exception e) {

+			System.out.println("request modification failed");

+			//e.printStackTrace();

+		}

+

+		// Start the flow

+		ProcessExecutionThread thread = new ProcessExecutionThread(modSdncAdapterWorkflowRequestAct);

+		thread.start();

+		waitForExecutionToStart("sdncAdapter", 3);

+		String pid = getPid();

+

+		assertProcessInstanceNotFinished(pid);

+

+		// Inject a "non-final" SDNC Adapter asynchronous callback message

+		//System.out.println("Injecting SDNC Adapter asynchronous callback message to continue processing");

+		String generatedRequestId = (String) processEngineRule.getRuntimeService().getVariable(pid, "SDNCA_requestId");

+		CallbackHeader callbackHeader = new CallbackHeader();

+		callbackHeader.setRequestId(generatedRequestId);

+		callbackHeader.setResponseCode("200");

+		callbackHeader.setResponseMessage("OK");

+		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();

+		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);

+		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestDataNonfinal);

+		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();

+		callbackService.setProcessEngineServices4junit(processEngineRule);

+		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);

+		//System.out.println("Back from executing process again");

+

+		assertFalse(sdncAdapterResponse instanceof SDNCAdapterErrorResponse);

+		assertProcessInstanceNotFinished(pid);

+		assertEquals(true, (Boolean) (getVariable(pid, "continueListening")));

+		assertEquals(true, (Boolean) (getVariable(pid, "SDNCA_InterimNotify")));

+

+		// Inject a "final" SDNC Adapter asynchronous callback message

+		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestData);

+		sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);

+		//System.out.println("Back from executing process again");

+

+		assertFalse(sdncAdapterResponse instanceof SDNCAdapterErrorResponse);

+		assertProcessInstanceFinished(pid);

+		assertEquals(false, (Boolean) (getVariable(pid, "continueListening")));

+		assertEquals(false, (Boolean) (getVariable(pid, "SDNCA_InterimNotify")));

+

+		//System.out.println("SDNCAdapter non-final then final processing flow Completed!");

+	}

+

 

 	private void waitForExecutionToStart(String processDefintion, int count) throws InterruptedException {

 		//System.out.println(processEngineRule.getRuntimeService().createExecutionQuery().processDefinitionKey(processDefintion).count());

@@ -238,6 +305,7 @@
 	}

 

 	@Test

+	@Ignore // Ignored because PropertyConfigurationSetup is timing out

 	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn",

 			"subprocess/GenericNotificationService.bpmn"

 			})

diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowAsyncResourceTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowAsyncResourceTest.java
index 4ac885f..abad6c3 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowAsyncResourceTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowAsyncResourceTest.java
@@ -31,7 +31,7 @@
 import org.camunda.bpm.engine.variable.impl.VariableMapImpl;
 import org.jboss.resteasy.spi.AsynchronousResponse;
 import org.junit.Test;
-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowAsyncCommonResource;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowAsyncResource;
 import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
 
 public class WorkflowAsyncResourceTest extends WorkflowTest {
@@ -53,7 +53,7 @@
 	}
 
 	private void executeWorkflow(String request, String requestId, AsynchronousResponse asyncResponse, String processKey) {
-		WorkflowAsyncCommonResource workflowResource = new WorkflowAsyncCommonResource();
+		WorkflowAsyncResource workflowResource = new WorkflowAsyncResource();
 		VariableMapImpl variableMap = new VariableMapImpl();
 
 		Map<String, Object> variableValueType = new HashMap<String, Object>();
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java
index 49ad6d6..4deac22 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java
@@ -1,22 +1,22 @@
-/*- 

- * ============LICENSE_START======================================================= 

- * OPENECOMP - MSO 

- * ================================================================================ 

- * 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========================================================= 

- */ 

+/*-

+ * ============LICENSE_START=======================================================

+ * OPENECOMP - MSO

+ * ================================================================================

+ * 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.openecomp.mso.bpmn.common;

 

@@ -60,6 +60,8 @@
 import org.custommonkey.xmlunit.DetailedDiff;

 import org.custommonkey.xmlunit.XMLUnit;

 import org.jboss.resteasy.spi.AsynchronousResponse;

+import org.json.JSONArray;

+import org.json.JSONObject;

 import org.junit.Before;

 import org.junit.Rule;

 import org.openecomp.mso.bpmn.common.adapter.sdnc.CallbackHeader;

@@ -73,11 +75,15 @@
 import org.openecomp.mso.bpmn.common.adapter.vnf.VnfRollback;

 import org.openecomp.mso.bpmn.common.workflow.service.SDNCAdapterCallbackServiceImpl;

 import org.openecomp.mso.bpmn.common.workflow.service.VnfAdapterNotifyServiceImpl;

-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowAsyncCommonResource;

+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowAsyncResource;

 import org.openecomp.mso.bpmn.common.workflow.service.WorkflowMessageResource;

 import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;

 import org.openecomp.mso.bpmn.core.CamundaDBSetup;

 import org.openecomp.mso.bpmn.core.PropertyConfigurationSetup;

+import org.openecomp.mso.bpmn.core.domain.Resource;

+import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition;

+

+import static org.openecomp.mso.bpmn.core.json.JsonUtils.*;

 import org.w3c.dom.Document;

 import org.w3c.dom.Element;

 import org.w3c.dom.Node;

@@ -119,6 +125,7 @@
 	 */

 	protected static final String JSON = "application/json; charset=UTF-8";

 

+

 	/**

 	 * Constructor.

 	 */

@@ -265,7 +272,7 @@
 		VariableMapImpl variableMapImpl = createVariableMapImpl(variables);

 

 		System.out.println("Sending " + request + " to " + processKey + " process");

-		WorkflowAsyncCommonResource workflowResource = new WorkflowAsyncCommonResource();

+		WorkflowAsyncResource workflowResource = new WorkflowAsyncResource();

 		workflowResource.setProcessEngineServices4junit(processEngineRule);

 

 		TestAsyncResponse asyncResponse = new TestAsyncResponse();

@@ -298,7 +305,7 @@
 		VariableMapImpl variableMapImpl = createVariableMapImpl(variables);

 

 		System.out.println("Sending " + request + " to " + processKey + " process");

-		WorkflowAsyncCommonResource workflowResource = new WorkflowAsyncCommonResource();

+		WorkflowAsyncResource workflowResource = new WorkflowAsyncResource();

 		workflowResource.setProcessEngineServices4junit(processEngineRule);

 

 		TestAsyncResponse asyncResponse = new TestAsyncResponse();

@@ -619,6 +626,18 @@
 				content = callbackData.getContent();

 				respCode = 200;

 				respMsg = "OK";

+			} else if ("CREATED".equals(modifier)) {

+				CallbackData callbackData = callbacks.get(action);

+

+				if (callbackData == null) {

+					String msg = "No callback defined for '" + action + "' SDNC request";

+					System.out.println(msg);

+					fail(msg);

+				}

+

+				content = callbackData.getContent();

+				respCode = 201;

+				respMsg = "Created";

 			} else if ("ERR".equals(modifier)) {

 				content = "<svc-request-id>((REQUEST-ID))</svc-request-id><response-code>500</response-code><response-message>SIMULATED ERROR FROM SDNC ADAPTER</response-message>";

 				respCode = 500;

@@ -1386,6 +1405,127 @@
 	}

 

 	/**

+	 * Runs a program to inject sniro workflow messages into the test environment.

+	 * A program is essentially just a list of keys that identify event data

+	 * to be injected, in sequence. For more details, see

+	 * injectSNIROCallbacks(String contentType, String messageType, String content, long timeout)

+	 *

+	 * Errors are handled with junit assertions and will cause the test to fail.

+	 * NOTE: Each callback must have a workflow message type associated with it.

+	 *

+	 * @param callbacks an object containing event data for the program

+	 * @param program the program to execute

+	 */

+	protected void injectSNIROCallbacks(CallbackSet callbacks, String program) {

+

+		String[] cmds = program.replaceAll("\\s+", "").split(",");

+

+		for (String cmd : cmds) {

+			String action = cmd;

+			String modifier = "STD";

+

+			if (cmd.contains(":")) {

+				String[] parts = cmd.split(":");

+				action = parts[0];

+				modifier = parts[1];

+			}

+

+			String messageType = null;

+			String content = null;

+			String contentType = null;

+

+			if ("STD".equals(modifier)) {

+				CallbackData callbackData = callbacks.get(action);

+

+				if (callbackData == null) {

+					String msg = "No '" + action + "' workflow message callback is defined";

+					System.out.println(msg);

+					fail(msg);

+				}

+

+				messageType = callbackData.getMessageType();

+

+				if (messageType == null || messageType.trim().equals("")) {

+					String msg = "No workflow message type is defined in the '" + action + "' callback";

+					System.out.println(msg);

+					fail(msg);

+				}

+

+				content = callbackData.getContent();

+				contentType = callbackData.getContentType();

+			} else {

+				String msg = "Invalid workflow message program modifier: '" + modifier + "'";

+				System.out.println(msg);

+				fail(msg);

+			}

+

+			if (!injectSNIROCallbacks(contentType, messageType, content, 10000)) {

+				fail("Failed to inject '" + action + "' workflow message");

+			}

+

+			try {

+				Thread.sleep(1000);

+			} catch (InterruptedException e) {

+				fail("Interrupted after injection of '" + action + "' workflow message");

+			}

+		}

+	}

+

+	/**

+	 * Injects a sniro workflow message. The specified callback response may

+	 * contain the placeholder strings ((CORRELATOR)) and ((SERVICE_RESOURCE_ID))

+	 * The ((CORRELATOR)) is replaced with the actual correlator value from the

+	 * request. The ((SERVICE_RESOURCE_ID)) is replaced with the actual serviceResourceId

+	 * value from the sniro request. Currently this only works with sniro request

+	 * that contain only 1 resource.

+	 *

+	 * @param contentType the HTTP contentType for the message (possibly null)

+	 * @param messageType the message type

+	 * @param content the message content (possibly null)

+	 * @param timeout the timeout in milliseconds

+	 * @return true if the message could be injected, false otherwise

+	 */

+	protected boolean injectSNIROCallbacks(String contentType, String messageType, String content, long timeout) {

+		String correlator = (String) getProcessVariable("ReceiveWorkflowMessage",

+			messageType + "_CORRELATOR", timeout);

+

+		if (correlator == null) {

+			return false;

+		}

+		if (content != null) {

+			content = content.replace("((CORRELATOR))", correlator);

+			if(messageType.equalsIgnoreCase("SNIROResponse")){

+				//TODO figure out a solution for when there is more than 1 resource being homed (i.e. more than 1 reason in the placement list)

+				ServiceDecomposition decomp = (ServiceDecomposition) getProcessVariable("Homing", "serviceDecomposition", timeout);

+				List<Resource> resourceList = decomp.getServiceResources();

+				if(resourceList.size() == 1){

+					String resourceId = "";

+					for(Resource resource:resourceList){

+						resourceId = resource.getResourceId();

+					}

+					String homingList = getJsonValue(content, "solutionInfo.placement");

+					JSONArray placementArr = new JSONArray(homingList);

+					if(placementArr.length() == 1){

+						content = content.replace("((SERVICE_RESOURCE_ID))", resourceId);

+					}

+					String licenseInfoList = getJsonValue(content, "solutionInfo.licenseInfo");

+					JSONArray licenseArr = new JSONArray(licenseInfoList);

+					if(licenseArr.length() == 1){

+						content = content.replace("((SERVICE_RESOURCE_ID))", resourceId);

+					}

+				}

+			}

+		}

+		System.out.println("Injecting " + messageType + " message");

+		WorkflowMessageResource workflowMessageResource = new WorkflowMessageResource();

+		workflowMessageResource.setProcessEngineServices4junit(processEngineRule);

+		Response response = workflowMessageResource.deliver(contentType, messageType, correlator, content);

+		System.out.println("Workflow response to " + messageType + " message: " + response);

+		return true;

+	}

+

+

+	/**

 	 * Wait for the process to end.

 	 * @param businessKey the process business key

 	 * @param timeout the amount of time to wait, in milliseconds

@@ -1477,8 +1617,6 @@
 	}

 

 	/**

-	 * @author cb645j

-	 *

 	 * Gets the value of a subflow variable from the specified subflow's

 	 * historical process instance.

 	 *

@@ -1517,8 +1655,6 @@
 	}

 

 	/**

-	 * @author cb645j

-	 *

 	 * Gets the value of a subflow variable from the subflow's

 	 * historical process x instance.

 	 *

diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/aai/AAIPServerTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/aai/AAIPServerTest.java
new file mode 100644
index 0000000..4011a8f
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/aai/AAIPServerTest.java
@@ -0,0 +1,45 @@
+package org.openecomp.mso.client.aai;

+

+import java.io.File;

+import java.io.IOException;

+import java.security.NoSuchAlgorithmException;

+import java.util.List;

+import java.util.UUID;

+

+import org.junit.BeforeClass;

+import org.junit.Ignore;

+import org.junit.Test;

+import org.openecomp.aai.domain.yang.Pserver;

+import static org.junit.Assert.assertEquals;

+import com.fasterxml.jackson.core.JsonParseException;

+import com.fasterxml.jackson.databind.JsonMappingException;

+public class AAIPServerTest {

+

+	@BeforeClass

+	public static void setUp() {

+		System.setProperty("mso.config.path", "src/test/resources");

+		System.setProperty("javax.net.ssl.keyStore", "C:/etc/ecomp/mso/config/msoClientKeyStore.jks");

+		System.setProperty("javax.net.ssl.keyStorePassword", "mso4you");

+		System.setProperty("javax.net.ssl.trustStore", "C:/etc/ecomp/mso/config/msoTrustStore.jks");

+		System.setProperty("javax.net.ssl.trustStorePassword", "mso_Domain2.0_4you");

+	}

+	

+	@Test

+	@Ignore // IGNORED FOR 1710 MERGE TO ONAP

+	public void pserverTest() throws JsonParseException, JsonMappingException, IOException, NoSuchAlgorithmException {

+		AAIRestClientImpl client = new AAIRestClientImpl();

+		File file = new File("src/test/resources/__files/AAI/pserver.json");

+		List<Pserver> list = client.getListOfPservers(file);

+		

+		assertEquals("", list.get(0).getHostname(), "test");

+	}

+	

+	@Test

+	@Ignore // IGNORED FOR 1710 MERGE TO ONAP

+	public void pserverActualTest() throws JsonParseException, JsonMappingException, IOException, NoSuchAlgorithmException {

+		AAIRestClientImpl client = new AAIRestClientImpl();

+		List<Pserver> list = client.getPhysicalServerByVnfId("d946afed-8ebe-4c5d-9665-54fcc043b8e7", UUID.randomUUID().toString());

+		assertEquals("", list.size(), 0);

+	}

+

+}

diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/aai/AAIValidatorTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/aai/AAIValidatorTest.java
new file mode 100644
index 0000000..bf1cb07
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/aai/AAIValidatorTest.java
@@ -0,0 +1,80 @@
+
+package org.openecomp.mso.client.aai;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.openecomp.aai.domain.yang.GenericVnf;
+import org.openecomp.aai.domain.yang.Pserver;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+
+@RunWith(MockitoJUnitRunner.class) 
+public class AAIValidatorTest {
+	
+	@Mock
+	protected AAIRestClient client;
+	String vnfName = "testVnf";
+	String uuid = "UUID";
+	AAIValidatorImpl validator;
+	
+	@Before
+	public void init(){
+		validator = new AAIValidatorImpl();
+		validator.setClient(client);
+	}
+	
+	public List<Pserver> getPservers(boolean locked){
+		Pserver pserver = new Pserver();
+		pserver.setInMaint(locked);
+		List<Pserver> pservers = new ArrayList<Pserver>();
+		pservers.add(pserver);
+		return pservers;		
+	}
+	
+	public GenericVnf createGenericVnfs(boolean locked){
+		GenericVnf genericVnf = new GenericVnf();
+		genericVnf.setInMaint(locked);
+		
+		return genericVnf;		
+	}
+
+	@Test
+	public void test_IsPhysicalServerLocked_True() throws IOException{		
+		when(client.getPhysicalServerByVnfId(vnfName,uuid)).thenReturn(getPservers(true));	
+		boolean locked = validator.isPhysicalServerLocked(vnfName, uuid);
+		assertEquals(true, locked);
+	}
+	
+	@Test
+	public void test_IsPhysicalServerLocked_False() throws JsonParseException, JsonMappingException, UnsupportedEncodingException, IOException {
+		when(client.getPhysicalServerByVnfId(vnfName,uuid)).thenReturn(getPservers(false));	
+		boolean locked = validator.isPhysicalServerLocked(vnfName, uuid);
+		assertEquals(false, locked);
+	}
+	
+	@Test
+	public void test_IsVNFLocked_False() throws Exception{
+		when(client.getVnfByName(vnfName,uuid)).thenReturn(createGenericVnfs(false));	
+		boolean locked = validator.isVNFLocked(vnfName, uuid);
+		assertEquals(false, locked);
+	}
+
+	@Test
+	public void test_IsVNFLocked_True() throws Exception{
+		when(client.getVnfByName(vnfName,uuid)).thenReturn(createGenericVnfs(true));	
+		boolean locked = validator.isVNFLocked(vnfName, uuid);
+		assertEquals(true,locked );
+	}
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/aai/EntitiesTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/aai/EntitiesTest.java
new file mode 100644
index 0000000..beb4574
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/aai/EntitiesTest.java
@@ -0,0 +1,21 @@
+package org.openecomp.mso.client.aai;
+
+import org.junit.Test;
+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 EntitiesTest {
+
+	private String packageName = "org.openecomp.mso.client.aai.entities";
+
+	@Test
+	public void validate() {
+		Validator validator = ValidatorBuilder.create().with(new SetterMustExistRule(), new GetterMustExistRule())
+				.with(new SetterTester(), new GetterTester()).build();
+		validator.validate(packageName);
+	}
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/appc/ApplicationControllerClientTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/appc/ApplicationControllerClientTest.java
new file mode 100644
index 0000000..3cc6b35
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/appc/ApplicationControllerClientTest.java
@@ -0,0 +1,78 @@
+package org.openecomp.mso.client.appc;

+

+import static org.junit.Assert.assertEquals;

+

+import java.util.Properties;

+import java.util.UUID;

+

+import org.junit.AfterClass;

+import org.junit.BeforeClass;

+import org.junit.Ignore;

+import org.junit.Test;

+

+import org.openecomp.appc.client.lcm.model.Action;

+import org.openecomp.appc.client.lcm.model.ActionIdentifiers;

+import org.openecomp.appc.client.lcm.model.CheckLockInput;

+import org.openecomp.appc.client.lcm.model.Flags;

+import org.openecomp.appc.client.lcm.model.Status;

+

+public class ApplicationControllerClientTest {

+

+	private static ApplicationControllerClient client;

+	private static ApplicationControllerSupport support;

+

+	@BeforeClass

+	public static void beforeClass() {

+		client = new ApplicationControllerClient();

+		support = new ApplicationControllerSupport();

+		client.appCSupport = support;

+		System.setProperty("mso.config.path", "src/test/resources");

+

+	}

+

+	@AfterClass

+	public static void afterClass() throws Exception {

+		client.shutdownclient();

+	}

+

+	@Test

+	@Ignore // IGNORED FOR 1710 MERGE TO ONAP

+	public void createRequest_CheckLock_RequestBuilt() throws Exception {

+

+		org.springframework.test.util.ReflectionTestUtils.setField(support, "lcmModelPackage",

+				"org.openecomp.appc.client.lcm.model");

+		Flags flags = new Flags();

+		ActionIdentifiers actionIdentifiers = new ActionIdentifiers();

+		actionIdentifiers.setVnfId("vnfId");

+		CheckLockInput checkLockInput = (CheckLockInput) client.createRequest(Action.CheckLock, actionIdentifiers,

+				flags, null, "requestId");

+		assertEquals(checkLockInput.getAction().name(), "CheckLock");

+	}

+

+	@Test

+	@Ignore // IGNORED FOR 1710 MERGE TO ONAP

+	public void runCommand_liveAppc() throws Exception {

+		org.springframework.test.util.ReflectionTestUtils.setField(support, "lcmModelPackage",

+				"org.openecomp.appc.client.lcm.model");

+		Flags flags = new Flags();

+		ActionIdentifiers actionIdentifiers = new ActionIdentifiers();

+		actionIdentifiers.setVnfId("ca522254-2ba4-4fbd-b15b-0ef0d9cfda5f");

+

+		// CheckLockInput checkLockInput = (CheckLockInput)

+		// client.createRequest(Action.CheckLock,actionIdentifiers,flags,null,"requestId");

+		Status status = client.runCommand(Action.Lock, actionIdentifiers, flags, null, UUID.randomUUID().toString());

+		assertEquals("Status of run command is correct", status.getCode(), 306);

+	}

+

+	@Test

+	@Ignore // IGNORED FOR 1710 MERGE TO ONAP

+	public void runCommand_CheckLock_RequestBuilt() throws Exception {

+		org.springframework.test.util.ReflectionTestUtils.setField(support, "lcmModelPackage",

+				"org.openecomp.appc.client.lcm.model");

+		Flags flags = new Flags();

+		ActionIdentifiers actionIdentifiers = new ActionIdentifiers();

+		actionIdentifiers.setVnfId("fusion-vpp-vnf-001");

+		Status status = client.runCommand(Action.CheckLock, actionIdentifiers, flags, null, "requestId");

+		assertEquals("Status of run command is correct", status.getCode(), 400);

+	}

+}

diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/policy/PolicyDecisionTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/policy/PolicyDecisionTest.java
new file mode 100644
index 0000000..a369423
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/client/policy/PolicyDecisionTest.java
@@ -0,0 +1,50 @@
+package org.openecomp.mso.client.policy;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class PolicyDecisionTest {
+	
+	@BeforeClass
+	public static void setUp() {
+		System.setProperty("mso.config.path", "src/test/resources");
+	}
+	@Test
+	public void successReadProperties() throws IOException, Exception {
+		PolicyRestClient client = new PolicyRestClient();
+		Map<String, String> headerMap = client.headerMap;
+		
+		assertEquals("Found expected Client Auth", headerMap.get("ClientAuth"), "Basic bTAzNzQzOnBvbGljeVIwY2sk");
+		assertEquals("Found expected Authorization", headerMap.get("Authorization"), "Basic dGVzdHBkcDphbHBoYTEyMw==");
+		assertEquals("Found expected Environment", headerMap.get("Environment"), "TEST");
+		assertEquals("Has X-ECOMP-RequestID", headerMap.containsKey("X-ECOMP-RequestID"), true);
+	}
+	
+	@Test
+	@Ignore // IGNORED FOR 1710 MERGE TO ONAP
+	public void restEndpointCall() throws IOException, Exception {
+		PolicyRestClient client = new PolicyRestClient();
+		PolicyDecision decision = client.getDecision("X", "Y", "BB1", "1", "123");
+		assertEquals("Decision is correct", decision.getDecision(), "PERMIT");
+		assertEquals("Decision details is correct", decision.getDetails(), "Abort");
+	}
+/*
+	@Test
+	public void failure() throws IOException, Exception {
+		when(dmaapConsumer.getMRConsumer()).thenReturn(mrConsumer);
+		when(mrConsumer.fetch())
+				.thenReturn(Arrays.asList(new String[] { getJson("response.json"), getJson("output-failure.json") }));
+
+		SDNOValidatorImpl validator = new SDNOValidatorImpl();
+		thrown.expect(SDNOException.class);
+		thrown.expectMessage("my message");
+		boolean result = validator.pollForResponse(dmaapConsumer, "xyz123");
+
+	}*/
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/Policy/policyAbortResponse.json b/bpmn/MSOCommonBPMN/src/test/resources/__files/Policy/policyAbortResponse.json
new file mode 100644
index 0000000..c315b1e
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/Policy/policyAbortResponse.json
@@ -0,0 +1 @@
+{"decision":"PERMIT","details":"Abort"}
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/Policy/policySkipResponse.json b/bpmn/MSOCommonBPMN/src/test/resources/__files/Policy/policySkipResponse.json
new file mode 100644
index 0000000..7cbdebb
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/Policy/policySkipResponse.json
@@ -0,0 +1 @@
+{"decision":"PERMIT","details":"Skip"}
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/aai/pserver.json b/bpmn/MSOCommonBPMN/src/test/resources/__files/aai/pserver.json
new file mode 100644
index 0000000..1a3f40a
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/aai/pserver.json
@@ -0,0 +1,14 @@
+{
+	"results": [
+		{
+			"pserver": {
+				"hostname": "test"
+			}
+		},
+		{
+			"pserver": {
+				"hostname": "test2"
+			}
+		}
+	]
+}
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/getCatalogServiceResourcesData.json b/bpmn/MSOCommonBPMN/src/test/resources/__files/getCatalogServiceResourcesData.json
new file mode 100644
index 0000000..a69d1b3
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/getCatalogServiceResourcesData.json
@@ -0,0 +1,57 @@
+{
+   "serviceResources": {
+      "modelInfo": {
+         "modelName": "MOW AVPN vMX  AV vPE  Service",
+         "modelUuid": "b73c6911-be64-448a-bb4b-7b7a7006507a",
+         "modelInvariantUuid": "d48764b1-043d-4783-89e3-8816602dc833",
+         "modelVersion": "5.0"
+      },
+      "serviceVnfs": [
+         {
+            "modelInfo": {
+               "modelName": "MOW AVPN vMX AV vPE",
+               "modelUuid": "07bc0630-11d2-4c08-9c8f-75b036db1f4d",
+               "modelInvariantUuid": "31d077f6-356f-436e-b447-1997faff4c68",
+               "modelVersion": "3.0",
+               "modelCustomizationUuid": "16e5d513-1b96-4146-a325-af661d06eafd",
+               "modelInstanceName": "MOW AVPN vMX AV vPE 1"
+            },
+            "toscaNodeType": null,
+            "nfFunction": null,
+            "nfType": null,
+            "nfRole": null,
+            "nfNamingCode": null,
+            "vfModules": [
+               {
+                  "modelInfo": {
+                     "modelName": "MowAvpnVmxAvVpe..base_vRE_AV..module-0",
+                     "modelUuid": "c91330e5-8e1a-459b-95ee-d682046cbeca",
+                     "modelInvariantUuid": "f9f41064-cbe7-4e94-ac4c-93d9c54af317",
+                     "modelVersion": "3",
+                     "modelCustomizationUuid": "778c2ed5-77a8-426e-94fe-51a4d40199c3"
+                  },
+                  "isBase": true,
+                  "vfModuleLabel": "base_vRE_AV",
+                  "initialCount": 1,
+                  "hasVolumeGroup": true
+               },
+               {
+                  "modelInfo": {
+                     "modelName": "MowAvpnVmxAvVpe..vPFE_AV..module-1",
+                     "modelUuid": "ab5af099-03cb-4e74-92bf-44569099a666",
+                     "modelInvariantUuid": "192faf79-7284-4a33-92d5-0be5b607ea43",
+                     "modelVersion": "3",
+                     "modelCustomizationUuid": "cb510af0-5b21-4bc7-86d9-323cb396ced3"
+                  },
+                  "isBase": false,
+                  "vfModuleLabel": "vPFE_AV",
+                  "initialCount": 0,
+                  "hasVolumeGroup": true
+               }
+            ]
+         }
+      ],
+      "serviceNetworks": [],
+      "serviceAllottedResources": []
+   }
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/mso.bpmn.urn.properties b/bpmn/MSOCommonBPMN/src/test/resources/mso.bpmn.urn.properties
index 1ac75e9..c764c7f 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/mso.bpmn.urn.properties
+++ b/bpmn/MSOCommonBPMN/src/test/resources/mso.bpmn.urn.properties
@@ -9,9 +9,12 @@
 mso.csi.usrname=mso

 mso.msoKey=07a7159d3bf51a0e53be7a8f89699be7

 

+mso.healthcheck.log.debug=false

+

 mso.adapters.completemsoprocess.endpoint=http://localhost:28090/CompleteMsoProcess

 

 mso.adapters.db.endpoint=http://localhost:28090/dbadapters/RequestsDbAdapter

+mso.openecomp.adapters.db.endpoint=http://localhost:28090/dbadapters/RequestsDbAdapter

 mso.adapters.db.auth=757A94191D685FD2092AC1490730A4FC

 

 mso.adapters.network.endpoint=http://localhost:28090/networks/NetworkAdapter

@@ -20,8 +23,22 @@
 mso.adapters.po.auth=757A94191D685FD2092AC1490730A4FC

 mso.adapters.po.password=3141634BF7E070AA289CF2892C986C0B

 mso.po.timeout=PT60S

+mso.default.adapter.namespace=http://org.openecomp.mso

 

-aai.auth=757A94191D685FD2092AC1490730A4FC

+aai.auth=26AFB797A6A57960D5D718491925C50F77CDC22AC394B3DBA09950D8FD1C0764

+

+policy.endpoint=https://mtanjvsgcvm02.nvp.cip.att.com:8081/pdp/api/getDecision

+policy.client.auth=Basic bTAzNzQzOnBvbGljeVIwY2sk

+policy.auth=Basic dGVzdHBkcDphbHBoYTEyMw==

+policy.environment=TEST

+

+appc.topic.read=APPC-CL-FUSION-LCM-RESPONSE

+appc.topic.read.timeout=60000

+appc.client.response.timeout=3600000

+appc.topic.write=APPC-CL-FUSION-LCM

+appc.pool.members=uebsb91bodc.it.openecomp.org:3904,uebsb92bodc.it.openecomp.org:3904,uebsb93bodc.it.openecomp.org:3904

+appc.client.key=iaEMAfjsVsZnraBP

+appc.client.secret=wcivUjsjXzmGFBfxMmyJu9dz

 

 mso.adapters.sdnc.endpoint=http://localhost:28090/SDNCAdapter

 mso.adapters.sdnc.rest.endpoint=http://localhost:28090/SDNCAdapter/v1/sdnc

@@ -90,4 +107,9 @@
 log.debug.GenericDeleteNetwork=true

 log.debug.GenericDeleteVnf=true

 log.debug.vnfAdapterCreateV1=true

-log.debug.vnfAdapterRestV1=true
+log.debug.vnfAdapterRestV1=true

+

+policyClientAuth=Basic bTAzNzQzOnBvbGljeVIwY2sk

+policyAuth=Basic dGVzdHBkcDphbHBoYTEyMw==

+policyEnvironment=TEST

+policyEndpoint=localhost:8080/pdp/api/getDecision