diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVfModuleVolumeInfraV1Test.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVfModuleVolumeInfraV1Test.groovy
new file mode 100644
index 0000000..4f53757
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVfModuleVolumeInfraV1Test.groovy
@@ -0,0 +1,209 @@
+/*- 
+ * ============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.infrastructure.scripts;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*
+
+import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
+import org.mockito.ArgumentCaptor
+import org.mockito.MockitoAnnotations
+import org.mockito.runners.MockitoJUnitRunner
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.openecomp.mso.bpmn.common.scripts.MsoGroovyTest;
+
+
+@RunWith(MockitoJUnitRunner.class)
+import org.apache.commons.lang3.*
+
+
+class CreateVfModuleVolumeInfraV1Test extends MsoGroovyTest {
+
+	def jsonRequest = """
+{
+	"requestDetails": {
+		"modelInfo": {
+			"modelType": "volumeGroup",
+			"modelId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelName": "vSAMP12::base::module-0",
+			"modelVersion": "1"
+		},
+		"cloudConfiguration": {
+			"lcpCloudRegionId": "mdt1",
+			"tenantId": "88a6ca3ee0394ade9403f075db23167e"
+		},
+		"requestInfo": {
+			"instanceName": "MSOTESTVOL101a-vSAMP12_base_vol_module-0",
+			"source": "VID",
+			"suppressRollback": false
+		},
+		"relatedInstanceList": [
+			{
+				"relatedInstance": {
+					"instanceId": "{service-instance-id}",
+					"modelInfo": {
+						"modelType": "service",
+						"modelId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelName": "Test",
+						"modelVersion": "2.0"
+					}
+				}
+			}, {
+				"relatedInstance": {
+					"instanceId": "{vnf-instance-id}",
+					"modelInfo": {
+						"modelType": "vnf",
+						"modelId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelName": "vSAMP12",
+						"modelVersion": "1",
+						"modelCustomizationName": "vSAMP12"
+					}
+				}
+			}
+		],
+		"requestParameters": {
+			"serviceId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+			"userParams": [
+				{"name": "vnfName", "value": "STMTN5MMSC20" },
+				{"name": "vnfName2", "value": "US1117MTSNJVBR0246" },
+				{"name": "vnfNmInformation", "value": "" },
+				{"name": "vnfType", "value": "pcrf-capacity" },
+				{"name": "vnfId", "value": "skask" },
+				{"name": "vnfStackId", "value": "slowburn" },
+				{"name": "vnfStatus", "value": "created" },
+				{"name": "aicCloudRegion", "value": "MDTWNJ21" },
+				{"name": "availabilityZone", "value": "slcp3-esx-az01" },
+				{"name": "oamNetworkName", "value": "VLAN-OAM-1323" },
+				{"name": "vmName", "value": "slcp34246vbc246ceb" },
+				{"name": "ipagNetworkId", "value": "970cd2b9-7f09-4a12-af47-182ea38ba1f0" },
+				{"name": "vpeNetworkId", "value": "545cc2c3-1930-4100-b534-5d82d0e12bb6" }
+			]
+		}
+	}
+}
+"""
+	
+	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>true</backout-on-failure>
+      <model-customization-id/>
+   </volume-inputs>
+   <volume-params>
+      <param name="vnf_name">STMTN5MMSC20</param>
+      <param name="vnf_name2">US1117MTSNJVBR0246</param>
+      <param name="vnf_nm_information"/>
+      <param name="vnf_type">pcrf-capacity</param>
+      <param name="vnf_id">skask</param>
+      <param name="vnf_stack_id">slowburn</param>
+      <param name="vnf_status">created</param>
+      <param name="aic_cloud_region">MDTWNJ21</param>
+      <param name="availability_zone">slcp3-esx-az01</param>
+      <param name="oam_network_name">VLAN-OAM-1323</param>
+      <param name="vm_name">slcp34246vbc246ceb</param>
+      <param name="ipag_network_id">970cd2b9-7f09-4a12-af47-182ea38ba1f0</param>
+      <param name="vpe_network_id">545cc2c3-1930-4100-b534-5d82d0e12bb6</param>
+   </volume-params>
+</volume-request>"""
+	 	
+	def completeMsoRequestXml = """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                            xmlns:ns="http://org.openecomp/mso/request/types/v1"
+                            xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+   <request-info>
+      <request-id>1234</request-id>
+      <action>CREATE</action>
+      <source>VID</source>
+   </request-info>
+   <aetgt:status-message>Volume Group has been created successfully.</aetgt:status-message>
+   <aetgt:mso-bpel-name>BPMN VF Module Volume action: CREATE</aetgt:mso-bpel-name>
+</aetgt:MsoCompletionRequest>"""
+
+
+    @Before
+	public void init()
+	{
+		MockitoAnnotations.initMocks(this)
+	}
+	
+
+	@Test
+	public void testPreProcessRequest() {
+		
+		ExecutionEntity mockExecution = setupMock('CreateVfModuleVolumeInfraV1')
+
+		when(mockExecution.getVariable("prefix")).thenReturn('CVMVINFRAV1_')
+		when(mockExecution.getVariable("bpmnRequest")).thenReturn(jsonRequest)
+		when(mockExecution.getVariable("serviceInstanceId")).thenReturn('')
+		when(mockExecution.getVariable("vnfId")).thenReturn('test-vnf-id')
+		when(mockExecution.getVariable("mso-request-id")).thenReturn('1234')
+								
+		CreateVfModuleVolumeInfraV1 createVfModuleVolumeInfraV1 = new CreateVfModuleVolumeInfraV1()
+		createVfModuleVolumeInfraV1.preProcessRequest(mockExecution, 'true')
+		
+		// Capture the arguments to setVariable
+		ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
+		ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
+		
+		verify(mockExecution, times(15)).setVariable(captor1.capture(), captor2.capture())
+		
+		List<String> arg2List = captor2.getAllValues()
+		String volumeRequestActual = arg2List.get(6)
+		String isVidRequestActual = arg2List.get(8) 
+		
+		assertEquals(volumeRequestXml, volumeRequestActual.trim())
+		assertEquals('true', isVidRequestActual)
+	}
+	
+	@Test
+	public void testPostProcessResponse() {
+		
+		ExecutionEntity mockExecution = setupMock('CreateVfModuleVolumeInfraV1')
+		when(mockExecution.getVariable("dbReturnCode")).thenReturn('000')
+		when(mockExecution.getVariable("CVMVINFRAV1_createDBResponse")).thenReturn('')
+		when(mockExecution.getVariable("mso-request-id")).thenReturn('1234')
+		when(mockExecution.getVariable("CVMVINFRAV1_source")).thenReturn('VID')
+								
+		CreateVfModuleVolumeInfraV1 createVfModuleVolumeInfraV1 = new CreateVfModuleVolumeInfraV1()
+		createVfModuleVolumeInfraV1.postProcessResponse(mockExecution, 'true')
+		
+		verify(mockExecution).setVariable('CVMVINFRAV1_Success', true)
+		verify(mockExecution).setVariable('CVMVINFRAV1_CompleteMsoProcessRequest', completeMsoRequestXml)
+	}
+	
+
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteVfModuleVolumeInfraV1Test.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteVfModuleVolumeInfraV1Test.groovy
new file mode 100644
index 0000000..2e6b35e
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteVfModuleVolumeInfraV1Test.groovy
@@ -0,0 +1,166 @@
+/*- 
+ * ============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.infrastructure.scripts;
+
+import static org.junit.Assert.*
+import static org.mockito.Mockito.*
+
+import org.apache.commons.lang3.*
+import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.MockitoAnnotations
+import org.mockito.runners.MockitoJUnitRunner
+import org.openecomp.mso.bpmn.common.scripts.MsoGroovyTest
+import org.openecomp.mso.bpmn.core.WorkflowException
+
+
+@RunWith(MockitoJUnitRunner.class)
+class DeleteVfModuleVolumeInfraV1Test extends MsoGroovyTest {
+
+	def deleteVnfAdapterRequestXml = """<deleteVolumeGroupRequest>
+   <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+   <tenantId>fba1bd1e195a404cacb9ce17a9b2b421</tenantId>
+   <volumeGroupId>78987</volumeGroupId>
+   <volumeGroupStackId/>
+   <skipAAI>true</skipAAI>
+   <msoRequest>
+      <requestId>TEST-REQUEST-ID-0123</requestId>
+      <serviceInstanceId>1234</serviceInstanceId>
+   </msoRequest>
+   <messageId>ebb9ef7b-a6a5-40e6-953e-f868f1767677</messageId>
+   <notificationUrl>http://localhost:28080/mso/WorkflowMessage/VNFAResponse/ebb9ef7b-a6a5-40e6-953e-f868f1767677</notificationUrl>
+</deleteVolumeGroupRequest>"""
+	
+	def dbRequestXml = """<soapenv:Envelope xmlns:req="http://org.openecomp.mso/requestsdb"
+                  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+   <soapenv:Header/>
+   <soapenv:Body>
+      <req:updateInfraRequest>
+         <requestId>TEST-REQUEST-ID-0123</requestId>
+         <lastModifiedBy>BPMN</lastModifiedBy>
+         <statusMessage>VolumeGroup successfully deleted</statusMessage>
+         <requestStatus>COMPLETE</requestStatus>
+         <progress>100</progress>
+         <vnfOutputs/>
+      </req:updateInfraRequest>
+   </soapenv:Body>
+</soapenv:Envelope>"""
+	
+	def completionRequestXml = """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                            xmlns:ns="http://org.openecomp/mso/request/types/v1"
+                            xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+   <request-info>
+      <request-id>TEST-REQUEST-ID-0123</request-id>
+      <action>DELETE</action>
+      <source>VID</source>
+   </request-info>
+   <aetgt:status-message>Volume Group has been deleted successfully.</aetgt:status-message>
+   <aetgt:mso-bpel-name>BPMN VF Module Volume action: DELETE</aetgt:mso-bpel-name>
+</aetgt:MsoCompletionRequest>"""
+	
+	def falloutHandlerRequestXml = """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                             xmlns:ns="http://org.openecomp/mso/request/types/v1"
+                             xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+   <request-info>
+      <request-id>TEST-REQUEST-ID-0123</request-id>
+      <action>DELETE</action>
+      <source>VID</source>
+   </request-info>
+   <aetgt:WorkflowException>
+      <aetgt:ErrorMessage>Unexpected Error</aetgt:ErrorMessage>
+      <aetgt:ErrorCode>5000</aetgt:ErrorCode>
+   </aetgt:WorkflowException>
+</aetgt:FalloutHandlerRequest>"""
+	
+	@Before
+	public void init()
+	{
+		MockitoAnnotations.initMocks(this)
+	}
+	
+	
+	@Test
+	public void testPrepareVnfAdapterDeleteRequest() {
+		
+		ExecutionEntity mockExecution = setupMock('DeleteVfModuleVolumeInfraV1')
+		when(mockExecution.getVariable("DELVfModVol_cloudRegion")).thenReturn('RDM2WAGPLCP')
+		when(mockExecution.getVariable("DELVfModVol_tenantId")).thenReturn('fba1bd1e195a404cacb9ce17a9b2b421')
+		when(mockExecution.getVariable("DELVfModVol_volumeGroupId")).thenReturn('78987')
+		when(mockExecution.getVariable("DELVfModVol_volumeGroupHeatStackId")).thenReturn('')
+		when(mockExecution.getVariable("DELVfModVol_requestId")).thenReturn('TEST-REQUEST-ID-0123')
+		when(mockExecution.getVariable("DELVfModVol_serviceId")).thenReturn('1234')
+		when(mockExecution.getVariable("DELVfModVol_messageId")).thenReturn('ebb9ef7b-a6a5-40e6-953e-f868f1767677')
+		when(mockExecution.getVariable("URN_mso_workflow_message_endpoint")).thenReturn('http://localhost:28080/mso/WorkflowMessage')
+		when(mockExecution.getVariable("URN_mso_use_qualified_host")).thenReturn('')
+
+		DeleteVfModuleVolumeInfraV1 myproc = new DeleteVfModuleVolumeInfraV1()
+		myproc.prepareVnfAdapterDeleteRequest(mockExecution, 'true')
+		
+		verify(mockExecution).setVariable("DELVfModVol_deleteVnfARequest", deleteVnfAdapterRequestXml)
+
+	}
+	
+	@Test
+	public void testPrepareDbRequest() {
+		
+		ExecutionEntity mockExecution = setupMock('DeleteVfModuleVolumeInfraV1')
+		when(mockExecution.getVariable("DELVfModVol_requestId")).thenReturn('TEST-REQUEST-ID-0123')
+		when(mockExecution.getVariable("DELVfModVol_volumeOutputs")).thenReturn('')
+		
+		DeleteVfModuleVolumeInfraV1 myproc = new DeleteVfModuleVolumeInfraV1()
+		myproc.prepareDBRequest(mockExecution, 'true')
+		
+		verify(mockExecution).setVariable("DELVfModVol_updateInfraRequest", dbRequestXml)
+	}
+
+	@Test
+	public void testPrepareCompletionHandlerRequest() {
+		
+		ExecutionEntity mockExecution = setupMock('DeleteVfModuleVolumeInfraV1')
+		when(mockExecution.getVariable("mso-request-id")).thenReturn('TEST-REQUEST-ID-0123')
+		when(mockExecution.getVariable("DELVfModVol_source")).thenReturn('VID')
+		
+		DeleteVfModuleVolumeInfraV1 myproc = new DeleteVfModuleVolumeInfraV1()
+		myproc.prepareCompletionHandlerRequest(mockExecution, 'true')
+		
+		verify(mockExecution).setVariable("DELVfModVol_CompleteMsoProcessRequest", completionRequestXml)
+	}
+	
+	@Test
+	public void testPrepareFalloutHandler() {
+		
+		WorkflowException workflowException = new WorkflowException('DeleteVfModuleVolumeInfraV1', 5000, 'Unexpected Error')
+		
+		ExecutionEntity mockExecution = setupMock('DeleteVfModuleVolumeInfraV1')
+		
+		when(mockExecution.getVariable("DELVfModVol_requestId")).thenReturn('TEST-REQUEST-ID-0123')
+		when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+		when(mockExecution.getVariable("DELVfModVol_source")).thenReturn('VID')
+		
+		DeleteVfModuleVolumeInfraV1 myproc = new DeleteVfModuleVolumeInfraV1()
+		myproc.prepareFalloutHandler(mockExecution, 'true')
+		
+		verify(mockExecution).setVariable("DELVfModVol_Success", false)
+		verify(mockExecution).setVariable("DELVfModVol_FalloutHandlerRequest", falloutHandlerRequestXml)
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV1Test.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV1Test.groovy
new file mode 100644
index 0000000..cf95ed3
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV1Test.groovy
@@ -0,0 +1,218 @@
+/*- 
+ * ============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.infrastructure.scripts;
+
+import static org.junit.Assert.*
+import static org.mockito.Mockito.*
+
+import org.apache.commons.lang3.*
+import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
+import org.junit.Assert
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.MockitoAnnotations
+import org.mockito.runners.MockitoJUnitRunner
+import org.openecomp.mso.bpmn.common.scripts.MsoGroovyTest
+
+
+@RunWith(MockitoJUnitRunner.class)
+class DoCreateVfModuleVolumeV1Test extends MsoGroovyTest  {
+	
+	def volumeRequest =
+"""<volume-request xmlns="http://org.openecomp/mso/infra/vnf-request/v1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+	<request-info>
+		<test-data-only>123abc</test-data-only> <!-- don't remove this tag. Its used for junit test -->
+		<request-id>d8d4fcfa-fd7e-4413-b19d-c95aa67291b8</request-id>
+		<action>CREATE_VF_MODULE_VOL</action>
+		<source>SoapUI-bns-create-base-vol-1001-1</source>
+	</request-info>
+	<volume-inputs>
+		<vnf-type>Test/vSAMP12</vnf-type>
+		<vf-module-model-name>vSAMP12::base::module-0</vf-module-model-name>
+		<backout-on-failure>true</backout-on-failure>
+		<asdc-service-model-version>2.0</asdc-service-model-version>
+		<service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+		<aic-cloud-region>MDTWNJ21</aic-cloud-region>
+		<tenant-id>897deadc2b954a6bac6d3c197fb3525e</tenant-id>
+		<volume-group-name>MSOTESTVOL101a-vSAMP12_base_vol_module-0</volume-group-name>
+		<volume-group-id/>
+	</volume-inputs>
+	<volume-params>
+		<param name="param1">value1</param>"
+		<param name="param2">value2</param>"
+		<param name="param3">value3</param>"
+	</volume-params>	
+</volume-request>"""
+
+	def genericVnfResponseXml = """
+<generic-vnf xmlns="http://org.openecomp.aai.inventory/v8">
+	<vnf-id>TEST-VNF-ID-0123</vnf-id>
+	<vnf-name>STMTN5MMSC20</vnf-name>
+	<vnf-type>pcrf-capacity</vnf-type>
+	<service-id>SDN-MOBILITY</service-id>
+	<equipment-role>vPCRF</equipment-role>
+	<orchestration-status>pending-create</orchestration-status>
+	<in-maint>false</in-maint>
+	<is-closed-loop-disabled>false</is-closed-loop-disabled>
+	<persona-model-id>introvert</persona-model-id>
+	<persona-model-version>2.0</persona-model-version>
+	<resource-version>0000020</resource-version>
+	<vf-modules>
+		<vf-module>
+			<vf-module-id>lukewarm</vf-module-id>
+			<vf-module-name>PCRF::module-0-0</vf-module-name>
+			<persona-model-id>introvert</persona-model-id>
+			<persona-model-version>2.0</persona-model-version>
+			<is-base-vf-module>true</is-base-vf-module>
+			<heat-stack-id>fastburn</heat-stack-id>
+			<orchestration-status>pending-create</orchestration-status>
+			<resource-version>0000074</resource-version>
+		</vf-module>
+		<vf-module>
+			<vf-module-id>supercool</vf-module-id>
+			<vf-module-name>PCRF::module-1-0</vf-module-name>
+			<persona-model-id>extrovert</persona-model-id>
+			<persona-model-version>2.0</persona-model-version>
+			<is-base-vf-module>false</is-base-vf-module>
+			<heat-stack-id>slowburn</heat-stack-id>
+			<orchestration-status>pending-create</orchestration-status>
+			<resource-version>0000075</resource-version>
+		</vf-module>
+	</vf-modules>
+	<relationship-list/>
+	<l-interfaces/>
+	<lag-interfaces/>
+</generic-vnf>
+"""		
+	def String expectedCreateVnfRequestXml = """<createVolumeGroupRequest>
+   <cloudSiteId>MDTWNJ21</cloudSiteId>
+   <tenantId>897deadc2b954a6bac6d3c197fb3525e</tenantId>
+   <vnfId>TEST-VNF-ID-0123</vnfId>
+   <vnfName>STMTN5MMSC20</vnfName>
+   <volumeGroupId>test-vol-group-id-123</volumeGroupId>
+   <volumeGroupName>MSOTESTVOL101a-vSAMP12_base_vol_module-0</volumeGroupName>
+   <vnfType>Test/vSAMP12</vnfType>
+   <vnfVersion>2.0</vnfVersion>
+   <vfModuleType>vSAMP12::base::module-0</vfModuleType>
+   <modelCustomizationUuid/>
+   <volumeGroupParams>
+      <entry>
+         <key>vnf_id</key>
+         <value>TEST-VNF-ID-0123</value>
+      </entry>
+      <entry>
+         <key>vnf_name</key>
+         <value>STMTN5MMSC20</value>
+      </entry>
+      <entry>
+         <key>vf_module_id</key>
+         <value>test-vol-group-id-123</value>
+      </entry>
+      <entry>
+         <key>vf_module_name</key>
+         <value>MSOTESTVOL101a-vSAMP12_base_vol_module-0</value>
+      </entry>
+      <entry>
+         <key>param1</key>
+         <value>value1</value>
+      </entry>
+      <entry>
+         <key>param2</key>
+         <value>value2</value>
+      </entry>
+      <entry>
+         <key>param3</key>
+         <value>value3</value>
+      </entry>
+   </volumeGroupParams>
+   <skipAAI>true</skipAAI>
+   <backout>true</backout>
+   <failIfExists>true</failIfExists>
+   <msoRequest>
+      <requestId>d8d4fcfa-fd7e-4413-b19d-c95aa67291b8</requestId>
+      <serviceInstanceId>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</serviceInstanceId>
+   </msoRequest>
+   <messageId>111</messageId>
+   <notificationUrl>http://localhost:28080/mso/WorkflowMessage/12345678</notificationUrl>
+</createVolumeGroupRequest>
+"""
+
+    @Before
+	public void init()
+	{
+		MockitoAnnotations.initMocks(this)
+		
+	}
+	
+	@Test
+	public void TestPreProcessRequest() {
+		
+		ExecutionEntity mockExecution = setupMock('DoCreateVfModuleVolumeV1')
+		
+		when(mockExecution.getVariable("DoCreateVfModuleVolumeV1Request")).thenReturn(volumeRequest)
+		when(mockExecution.getVariable("vnf-id")).thenReturn('test-vnf-id-123')
+		when(mockExecution.getVariable("volume-group-id")).thenReturn('test-volume-group-id-123')
+		when(mockExecution.getVariable("mso-request-id")).thenReturn('test-request-id-123')
+								
+		DoCreateVfModuleVolumeV1 myprocess = new DoCreateVfModuleVolumeV1()
+		myprocess.preProcessRequest(mockExecution, 'true')
+		
+		verify(mockExecution).setVariable('DCVFMODVOLV1_serviceId', 'a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb')
+		verify(mockExecution).setVariable('DCVFMODVOLV1_source', 'SoapUI-bns-create-base-vol-1001-1')
+		verify(mockExecution, times(7)).setVariable(anyString(), anyString())
+	}
+	
+	@Test
+	public void TestPrepareVnfAdapterCreateRequest() {
+		
+		ExecutionEntity mockExecution = setupMock('DoCreateVfModuleVolumeV1')
+		
+		when(mockExecution.getVariable("DCVFMODVOLV1_Request")).thenReturn(volumeRequest)
+		when(mockExecution.getVariable("DCVFMODVOLV1_requestId")).thenReturn('d8d4fcfa-fd7e-4413-b19d-c95aa67291b8')
+		when(mockExecution.getVariable("DCVFMODVOLV1_serviceId")).thenReturn('a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb')
+		when(mockExecution.getVariable("DCVFMODVOLV1_AAIQueryGenericVfnResponse")).thenReturn(genericVnfResponseXml)
+		when(mockExecution.getVariable("DCVFMODVOLV1_rollbackEnabled")).thenReturn(true)
+		when(mockExecution.getVariable("volume-group-id")).thenReturn('test-vol-group-id-123')
+		when(mockExecution.getVariable("URN_mso_workflow_message_endpoint")).thenReturn('http://localhost:28080/mso/WorkflowMessage')
+		when(mockExecution.getVariable("URN_mso_use_qualified_host")).thenReturn(true)
+								
+		DoCreateVfModuleVolumeV1 myprocess = new DoCreateVfModuleVolumeV1()
+		myprocess.prepareVnfAdapterCreateRequest(mockExecution, 'true')
+		
+		// Capture the arguments to setVariable
+		ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
+		ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
+		
+		verify(mockExecution, times(2)).setVariable(captor1.capture(), captor2.capture())
+		
+		List<String> arg2List = captor2.getAllValues()
+		String createVnfRequestXml = arg2List.get(0)
+		
+		//replace messageID value because it is random generated
+		createVnfRequestXml = createVnfRequestXml.replaceAll("<messageId>(.+?)</messageId>", "<messageId>111</messageId>")
+												 .replaceAll("<notificationUrl>(.+?)</notificationUrl>", "<notificationUrl>http://localhost:28080/mso/WorkflowMessage/12345678</notificationUrl>")
+		
+		Assert.assertEquals(expectedCreateVnfRequestXml.trim(), createVnfRequestXml.trim())
+	}
+
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateNetworkInstanceInfraTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateNetworkInstanceInfraTest.groovy
new file mode 100644
index 0000000..d19081c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateNetworkInstanceInfraTest.groovy
@@ -0,0 +1,3094 @@
+/*- 
+ * ============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.infrastructure.scripts;
+
+import static org.junit.Assert.*
+import static org.mockito.Mockito.*
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetCloudRegion
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetwork
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutNetwork
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkPolicy
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkRouteTable
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkVpnBinding
+
+import org.apache.commons.lang3.*
+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.camunda.bpm.engine.runtime.Execution
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.MockitoAnnotations
+import org.mockito.runners.MockitoJUnitRunner
+import org.openecomp.mso.bpmn.common.scripts.MsoUtils
+import org.openecomp.mso.bpmn.core.WorkflowException
+
+import com.github.tomakehurst.wiremock.client.WireMock
+import com.github.tomakehurst.wiremock.junit.WireMockRule
+
+
+@RunWith(MockitoJUnitRunner.class)
+class UpdateNetworkInstanceInfraTest  {
+	
+	@Rule
+	public WireMockRule wireMockRule = new WireMockRule(28090);
+	
+		def utils = new MsoUtils()
+
+		String jsonIncomingRequest =
+		"""{ "requestDetails": {
+	      "modelInfo": {
+			"modelType": "networkTyp",
+  			"modelId": "modelId",
+  			"modelNameVersionId": "modelNameVersionId",
+  			"modelName": "CONTRAIL_EXTERNAL",
+  			"modelVersion": "1"
+		  },
+		  "cloudConfiguration": {
+  			"lcpCloudRegionId": "RDM2WAGPLCP",
+  			"tenantId": "7dd5365547234ee8937416c65507d266"
+		  },
+		  "requestInfo": {
+  			"instanceName": "MNS-25180-L-01-dmz_direct_net_1",
+  			"source": "VID",
+  			"callbackUrl": "",
+            "suppressRollback": true,
+	        "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb"
+		  },
+		  "relatedInstanceList": [ 
+		  	{  
+    	  		"relatedInstance": {
+       				"instanceId": "f70e927b-6087-4974-9ef8-c5e4d5847ca4",
+       				"modelInfo": {   
+          				"modelType": "serviceT",
+          				"modelId": "modelI",
+          				"modelNameVersionId": "modelNameVersionI",
+          				"modelName": "modleNam",
+          				"modelVersion": "1"
+       	  			}
+        		}
+     		}
+		  ],
+		  "requestParameters": {
+  			"userParams": [	
+               {
+				 "name": "someUserParam1",
+				 "value": "someValue1"
+			   }
+            ]
+		  }
+  }}"""		
+  	
+		  String jsonIncomingRequest_Missingname =
+		"""{ "requestDetails": {
+	      "modelInfo": {
+			"modelType": "networkTyp",
+  			"modelId": "modelId",
+  			"modelNameVersionId": "modelNameVersionId",
+  			"modelName": "CONTRAIL_EXTERNAL",
+  			"modelVersion": "1"
+		  },
+		  "cloudConfiguration": {
+  			"lcpCloudRegionId": "RDM2WAGPLCP",
+  			"tenantId": "7dd5365547234ee8937416c65507d266"
+		  },
+		  "requestInfo": {
+  			"source": "VID",
+  			"callbackUrl": "",
+            "suppressRollback": true,
+	        "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb"
+		  },
+		  "relatedInstanceList": [ 
+		  	{  
+    	  		"relatedInstance": {
+       				"instanceId": "f70e927b-6087-4974-9ef8-c5e4d5847ca4",
+       				"modelInfo": {   
+          				"modelType": "serviceT",
+          				"modelId": "modelI",
+          				"modelNameVersionId": "modelNameVersionI",
+          				"modelName": "modleNam",
+          				"modelVersion": "1"
+       	  			}
+        		}
+     		}
+		  ],
+		  "requestParameters": {
+  			"userParams": []
+		  }
+  }}"""		
+		  
+		  String jsonIncomingRequest_MissingCloudRegion =
+		"""{ "requestDetails": {
+	      "modelInfo": {
+			"modelType": "networkTyp",
+  			"modelId": "modelId",
+  			"modelNameVersionId": "modelNameVersionId",
+  			"modelName": "CONTRAIL_EXTERNAL",
+  			"modelVersion": "1"
+		  },
+		  "cloudConfiguration": {
+  			"tenantId": "7dd5365547234ee8937416c65507d266"
+		  },
+		  "requestInfo": {
+  			"instanceName": "MNS-25180-L-01-dmz_direct_net_1",
+  			"source": "VID",
+  			"callbackUrl": "",
+            "suppressRollback": true,
+	        "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb"
+		  },
+		  "relatedInstanceList": [ 
+		  	{  
+    	  		"relatedInstance": {
+       				"instanceId": "f70e927b-6087-4974-9ef8-c5e4d5847ca4",
+       				"modelInfo": {   
+          				"modelType": "serviceT",
+          				"modelId": "modelI",
+          				"modelNameVersionId": "modelNameVersionI",
+          				"modelName": "modleNam",
+          				"modelVersion": "1"
+       	  			}
+        		}
+     		}
+		  ],
+		  "requestParameters": {
+  			"userParams": []
+		  }
+  }}"""		
+		
+		
+
+   String expectedNetworkRequestMissingNetworkId =
+   """<network-request xmlns="http://www.w3.org/2001/XMLSchema">  
+   <request-info>             
+      <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id> 
+      <action>UPDATE</action>  
+      <source>VID</source>  
+      <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id> 
+   </request-info>  
+   <network-inputs>  
+      <network-id/>  
+      <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>  
+      <network-type>CONTRAIL_EXTERNAL</network-type> 
+      <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>  
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id> 
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>  
+      <backout-on-failure>true</backout-on-failure> 
+   </network-inputs>  
+   <network-params>
+      <param name="some_user_param1">someValue1</param> 
+   </network-params> 
+</network-request>
+"""
+
+  
+String expectedNetworkRequestMissingCloudRegion =
+"""<network-request xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+   <request-info>
+      <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+      <action>UPDATE</action>
+      <source>PORTAL</source>
+   </request-info>
+   <network-inputs>
+      <network-name>HSL_direct_net_2</network-name>
+      <network-type>CONTRAIL_EXTERNAL</network-type>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <aic-cloud-region/>
+      <tenant-id>e81d842d3e8b45c5a59f57cd76af3aaf</tenant-id>
+   </network-inputs>
+   <network-params>
+      <param name="shared">1</param>
+   </network-params>
+</network-request>"""
+
+		// vnfRESTRequest
+		String networkRESTRequest =
+"""<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+					xmlns:vnfreq="http://org.openecomp/mso/infra/vnf-request/v1"
+					statusCode="200">
+	<rest:payload contentType="text/xml">
+	   <vnfreq:network-request>
+		  <vnfreq:request-info>
+			 <vnfreq:request-id>1ef47428-cade-45bd-a103-0751e8b2deb0</vnfreq:request-id>
+			 <vnfreq:action>UPDATE</vnfreq:action>
+			 <vnfreq:source>PORTAL</vnfreq:source>
+		  </vnfreq:request-info>
+		  <vnfreq:network-inputs>
+			 <vnfreq:network-name>MNS-25180-L-01-dmz_direct_net_1</vnfreq:network-name>
+			 <vnfreq:network-type>CONTRAIL_EXTERNAL</vnfreq:network-type>
+			 <vnfreq:service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</vnfreq:service-id>
+			 <vnfreq:aic-cloud-region>RDM2WAGPLCP</vnfreq:aic-cloud-region>
+			 <vnfreq:tenant-id>7dd5365547234ee8937416c65507d266</vnfreq:tenant-id>
+			 <vnfreq:physicalNetworkName>dvs-slcp3-01</vnfreq:physicalNetworkName>
+			 <vnfreq:vlans>3008</vnfreq:vlans>
+		  </vnfreq:network-inputs>
+		  <vnfreq:network-params>
+			 <param name="shared">1</param>
+			 <param name="external">0</param>
+		  </vnfreq:network-params>
+	   </vnfreq:network-request>
+	</rest:payload>
+ </rest:RESTResponse>"""
+
+	String networkInputsMissingName =
+ """<network-inputs xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+	<network-name/>
+	<network-type>CONTRAIL_EXTERNAL</network-type>
+	<service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+	<aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+	<tenant-id>e81d842d3e8b45c5a59f57cd76af3aaf</tenant-id>
+ </network-inputs>"""
+
+String networkInputsMissingCloudRegion =
+"""<network-inputs xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+   <network-name>HSL_direct_net_2</network-name>
+   <network-type>CONTRAIL_EXTERNAL</network-type>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <aic-cloud-region/>
+   <tenant-id>e81d842d3e8b45c5a59f57cd76af3aaf</tenant-id>
+</network-inputs>"""
+   
+	String expectedUpdateNetworkInstanceInfraRequest =
+	"""<rest:payload xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+              xmlns:vnfreq="http://org.openecomp/mso/infra/vnf-request/v1"
+              contentType="text/xml">
+   <vnfreq:network-request>
+      <vnfreq:request-info>
+         <vnfreq:request-id>1ef47428-cade-45bd-a103-0751e8b2deb0</vnfreq:request-id>
+         <vnfreq:action>UPDATE</vnfreq:action>
+         <vnfreq:source>PORTAL</vnfreq:source>
+      </vnfreq:request-info>
+      <vnfreq:network-inputs>
+         <vnfreq:network-name>MNS-25180-L-01-dmz_direct_net_1</vnfreq:network-name>
+         <vnfreq:network-type>CONTRAIL_EXTERNAL</vnfreq:network-type>
+         <vnfreq:service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</vnfreq:service-id>
+         <vnfreq:aic-cloud-region>RDM2WAGPLCP</vnfreq:aic-cloud-region>
+         <vnfreq:tenant-id>7dd5365547234ee8937416c65507d266</vnfreq:tenant-id>
+         <vnfreq:physicalNetworkName>dvs-slcp3-01</vnfreq:physicalNetworkName>
+         <vnfreq:vlans>3008</vnfreq:vlans>
+      </vnfreq:network-inputs>
+      <vnfreq:network-params>
+         <param name="shared">1</param>
+         <param name="external">0</param>
+      </vnfreq:network-params>
+   </vnfreq:network-request>
+</rest:payload>"""
+  
+	  String expectedUpdateNetworkInstanceInfraRequest_Output =
+  """<rest:payload xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+              xmlns:vnfreq="http://org.openecomp/mso/infra/vnf-request/v1"
+              contentType="text/xml">
+   <vnfreq:network-request>
+      <vnfreq:request-info>
+         <vnfreq:request-id>1ef47428-cade-45bd-a103-0751e8b2deb0</vnfreq:request-id>
+         <vnfreq:action>UPDATE</vnfreq:action>
+         <vnfreq:source>PORTAL</vnfreq:source>
+      </vnfreq:request-info>
+      <vnfreq:network-inputs>
+         <vnfreq:network-name>MNS-25180-L-01-dmz_direct_net_1</vnfreq:network-name>
+         <vnfreq:network-type>CONTRAIL_EXTERNAL</vnfreq:network-type>
+         <vnfreq:service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</vnfreq:service-id>
+         <vnfreq:aic-cloud-region>RDM2WAGPLCP</vnfreq:aic-cloud-region>
+         <vnfreq:tenant-id>7dd5365547234ee8937416c65507d266</vnfreq:tenant-id>
+      </vnfreq:network-inputs>
+      <vnfreq:network-outputs>
+         <vnfreq:network-name>MNS-25180-L-01-dmz_direct_net_1</vnfreq:network-name>
+         <vnfreq:network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</vnfreq:network-id>
+      </vnfreq:network-outputs>
+      <vnfreq:network-params>
+         <param name="shared">1</param>
+         <param name="external">0</param>
+      </vnfreq:network-params>
+   </vnfreq:network-request>
+</rest:payload>"""
+	
+	  // expectedNetworkRequest
+	  String expectedNetworkRequest =
+  """<network-request xmlns="http://www.w3.org/2001/XMLSchema">  
+   <request-info>  
+      <action>UPDATE</action>  
+      <source>VID</source>  
+      <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id> 
+   </request-info>  
+   <network-inputs>  
+      <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>  
+      <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>  
+      <network-type>CONTRAIL_EXTERNAL</network-type> 
+      <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>  
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id> 
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>  
+      <backout-on-failure>true</backout-on-failure> 
+   </network-inputs>
+   <network-params>
+      <param name="dhcp-enabled">true</param>
+      <param name="serviceId">a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</param>
+      <param name="cidr-mask">true</param>
+  	  <param name="backoutOnFailure">true</param>
+  	  <param name="gateway-address">10.10.125.1</param>
+   </network-params>   
+</network-request>"""
+  
+String expectedNetworkInputs =
+"""<network-inputs xmlns="http://www.w3.org/2001/XMLSchema">
+   <network-id/>
+   <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+   <network-type>CONTRAIL_EXTERNAL</network-type>
+   <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+   <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <backout-on-failure>true</backout-on-failure>
+</network-inputs>"""
+
+ 
+  String NetworkRequest_noPhysicalName =
+  """<vnfreq:network-request xmlns:vnfreq="http://org.openecomp/mso/infra/vnf-request/v1">
+   <vnfreq:request-info>
+      <vnfreq:request-id>1ef47428-cade-45bd-a103-0751e8b2deb0</vnfreq:request-id>
+      <vnfreq:action>UPDATE</vnfreq:action>
+      <vnfreq:source>PORTAL</vnfreq:source>
+   </vnfreq:request-info>
+   <vnfreq:network-inputs>
+      <vnfreq:network-name>MNS-25180-L-01-dmz_direct_net_1</vnfreq:network-name>
+      <vnfreq:network-type>CONTRAIL_EXTERNAL</vnfreq:network-type>
+      <vnfreq:service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</vnfreq:service-id>
+      <vnfreq:aic-cloud-region>RDM2WAGPLCP</vnfreq:aic-cloud-region>
+      <vnfreq:tenant-id>7dd5365547234ee8937416c65507d266</vnfreq:tenant-id>
+      <vnfreq:vlans>3008</vnfreq:vlans>
+   </vnfreq:network-inputs>
+   <vnfreq:network-params>
+   <network-params>
+      <param name="dhcp-enabled">true</param>
+      <param name="serviceId">a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</param>
+      <param name="cidr-mask">true</param>
+  	  <param name="backoutOnFailure">true</param>
+  	  <param name="gateway-address">10.10.125.1</param>
+   </network-params> 
+   </vnfreq:network-params>
+</vnfreq:network-request>"""
+  
+  String vnfRequestFakeRegion =
+  """<vnfreq:network-request xmlns:vnfreq="http://org.openecomp/mso/infra/vnf-request/v1">
+   <vnfreq:request-info>
+      <vnfreq:request-id>1ef47428-cade-45bd-a103-0751e8b2deb0</vnfreq:request-id>
+      <vnfreq:action>UPDATE</vnfreq:action>
+      <vnfreq:source>PORTAL</vnfreq:source>
+   </vnfreq:request-info>
+   <vnfreq:network-inputs>
+      <vnfreq:network-name>MNS-25180-L-01-dmz_direct_net_1</vnfreq:network-name>
+      <vnfreq:network-type>CONTRAIL_EXTERNAL</vnfreq:network-type>
+      <vnfreq:service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</vnfreq:service-id>
+      <vnfreq:aic-cloud-region>MDTWNJ21</vnfreq:aic-cloud-region>
+      <vnfreq:tenant-id>7dd5365547234ee8937416c65507d266</vnfreq:tenant-id>
+   </vnfreq:network-inputs>
+   <vnfreq:network-params>
+      <param name="shared">1</param>
+      <param name="external">0</param>
+   </vnfreq:network-params>
+</vnfreq:network-request>"""
+  
+  // expectedNetworkRequest
+	  String expectedNetworkRequest_Outputs =
+  """<vnfreq:network-request xmlns:vnfreq="http://org.openecomp/mso/infra/vnf-request/v1">
+   <vnfreq:request-info>
+      <vnfreq:request-id>1ef47428-cade-45bd-a103-0751e8b2deb0</vnfreq:request-id>
+      <vnfreq:action>UPDATE</vnfreq:action>
+      <vnfreq:source>PORTAL</vnfreq:source>
+   </vnfreq:request-info>
+   <vnfreq:network-inputs>
+      <vnfreq:network-name>MNS-25180-L-01-dmz_direct_net_1</vnfreq:network-name>
+      <vnfreq:network-type>CONTRAIL_EXTERNAL</vnfreq:network-type>
+      <vnfreq:service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</vnfreq:service-id>
+      <vnfreq:aic-cloud-region>RDM2WAGPLCP</vnfreq:aic-cloud-region>
+      <vnfreq:tenant-id>7dd5365547234ee8937416c65507d266</vnfreq:tenant-id>
+   </vnfreq:network-inputs>
+   <vnfreq:network-outputs>
+      <vnfreq:network-name>MNS-25180-L-01-dmz_direct_net_1</vnfreq:network-name>
+      <vnfreq:network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</vnfreq:network-id>
+   </vnfreq:network-outputs>
+   <vnfreq:network-params>
+      <param name="shared">1</param>
+      <param name="external">0</param>
+   </vnfreq:network-params>
+</vnfreq:network-request>"""
+  
+		  
+  // expectedNetworkRequest
+		  String networkInputs_404 =
+		  """<network-inputs  xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+		      <network-name>myOwn_Network</network-name>
+		      <network-type>CONTRAIL_EXTERNAL</network-type>
+		      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+		      <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+		      <tenant-id>e81d842d3e8b45c5a59f57cd76af3aaf</tenant-id>
+		   </network-inputs>"""
+  
+  String networkInputs =
+  """<network-inputs xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+   <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+   <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+   <network-type>CONTRAIL_EXTERNAL</network-type>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+   <tenant-id>e81d842d3e8b45c5a59f57cd76af3aaf</tenant-id>
+</network-inputs>"""
+  
+	  String networkOutputs =
+	"""<network-outputs>
+                   <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>			
+                   <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+                 </network-outputs>"""
+
+	  String queryAAIResponse =
+		  """<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+      <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:502-132671"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v3">
+         <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+         <network-name>HSL_direct_net_2</network-name>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-role>dmz_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <network-role-instance>0</network-role-instance>
+         <orchestration-status>pending-delete</orchestration-status>
+         <subnets>
+            <subnet>
+               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+               <gateway-address>107.239.52.1</gateway-address>
+               <network-start-address>107.239.52.0</network-start-address>
+               <cidr-mask>24</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>pending-delete</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+         <relationship-list>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>85f015d0-2e32-4c30-96d2-87a1a27f8017</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>c980a6ef-3b88-49f0-9751-dbad8608d0a6</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+               </relationship-data>
+            </relationship>
+         </relationship-list>
+      </l3-network>
+   </rest:payload>
+</rest:RESTResponse>"""
+  
+	  String queryIdAIIResponse =
+	  """<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+      <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:502-132671"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v6">
+         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-role>dmz_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <network-role-instance>0</network-role-instance>
+		 <resource-version>l3-version</resource-version>
+         <orchestration-status>pending-delete</orchestration-status>
+	     <heat-stack-id>ST_2Bindings_6006/55288ef0-595c-47d3-819e-cf93aaac6326</heat-stack-id>
+	  	 <physical-network-name>networkName</physical-network-name>
+	     <is-provider-network>false</is-provider-network>
+	  	 <is-shared-network>true</is-shared-network>
+	  	 <is-external-network>false</is-external-network>
+         <subnets>
+            <subnet>
+               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+               <gateway-address>107.239.52.1</gateway-address>
+               <network-start-address>107.239.52.0</network-start-address>
+               <cidr-mask>24</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>pending-delete</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+	  		   <subnet-name>subnetName</subnet-name>
+               <relationship-list/>
+            </subnet>
+            <subnet>
+               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+               <gateway-address>107.239.52.1</gateway-address>
+               <network-start-address>107.239.52.0</network-start-address>
+               <cidr-mask>24</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>pending-delete</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+	  		   <subnet-name>subnetName</subnet-name>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+	  	 <segmentation-assignments>
+	  		<segmentation-id>414</segmentation-id>
+	  		<resource-version>4132176</resource-version>
+	  	 </segmentation-assignments>	
+	  	 <segmentation-assignments>
+	  		<segmentation-id>415</segmentation-id>
+	  		<resource-version>4132176</resource-version>
+	  	 </segmentation-assignments>	
+		 <ctag-assignments>	
+			 <ctag-assignment>	
+				 <vlan-id-inner>inner</vlan-id-inner>	
+				 <resource-version>ctag-version</resource-version>	  
+	             <relationship-list>
+					<relationship>
+					   <related-to>tenant</related-to>
+					   <related-link>https://aai-ext1.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/897deadc2b954a6bac6d3c197fb3525e/</related-link>
+					   <relationship-data>
+						  <relationship-key>tenant.tenant-id</relationship-key>
+						  <relationship-value>897deadc2b954a6bac6d3c197fb3525e</relationship-value>
+					   </relationship-data>
+					   <related-to-property>
+						  <property-key>tenant.tenant-name</property-key>
+						  <property-value>MSOTest1</property-value>
+					   </related-to-property>
+					</relationship>
+					<relationship>
+					   <related-to>vpn-binding</related-to>
+					   <related-link>https://aai-ext1.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/a290b841-f672-44dd-b9cd-6f8c20d7d8c8/</related-link>
+					   <relationship-data>
+						  <relationship-key>vpn-binding.vpn-id</relationship-key>
+						  <relationship-value>a290b841-f672-44dd-b9cd-6f8c20d7d8c8</relationship-value>
+					   </relationship-data>
+					   <related-to-property>
+						  <property-key>vpn-binding.vpn-name</property-key>
+						  <property-value>oam_protected_net_6_MTN5_msotest2</property-value>
+					   </related-to-property>
+					</relationship>
+					<relationship>
+					   <related-to>vpn-binding</related-to>
+					   <related-link>https://aai-ext1.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/24a4b507-853a-4a38-99aa-05fcc54be24d/</related-link>
+					   <relationship-data>
+						  <relationship-key>vpn-binding.vpn-id</relationship-key>
+						  <relationship-value>24a4b507-853a-4a38-99aa-05fcc54be24d</relationship-value>
+					   </relationship-data>
+					   <related-to-property>
+						  <property-key>vpn-binding.vpn-name</property-key>
+						  <property-value>oam_protected_net_6_MTN5_msotest1</property-value>
+					   </related-to-property>
+					</relationship>
+				 </relationship-list>  
+				</ctag-assignment>	
+		 </ctag-assignments>
+         <relationship-list>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>85f015d0-2e32-4c30-96d2-87a1a27f8017</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>c980a6ef-3b88-49f0-9751-dbad8608d0a6</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+               </relationship-data>
+            </relationship>
+			<relationship>
+			  <related-to>network-policy</related-to>
+			  <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg</related-link>
+			  <relationship-data>
+				  <relationship-key>network-policy.network-policy-id</relationship-key>
+				  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0cg</relationship-value>
+			  </relationship-data>
+			</relationship>
+			<relationship>
+			   <related-to>route-table-reference</related-to>
+	  	       <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/route-table-references/route-table-reference/refFQDN1</related-link>
+			   <relationship-data>
+				  <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+				  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+			   </relationship-data>
+			</relationship>
+			<relationship>
+			   <related-to>route-table-reference</related-to>
+	  	       <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/route-table-references/route-table-reference/refFQDN2</related-link>
+			   <relationship-data>
+				  <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+				  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+			   </relationship-data>
+			</relationship>
+         </relationship-list>
+      </l3-network>
+   </rest:payload>
+</rest:RESTResponse>"""
+  
+	  String queryIdAIIResponseTestScenario01 =
+  """<?xml version="1.0" encoding="UTF-8"?>
+<l3-network xmlns="http://org.openecomp.aai.inventory/v7">
+	<network-id>4da55fe4-7a9e-478c-a434-8a98d62265ab</network-id>
+	<network-name>GN_EVPN_direct_net_0_ST1</network-name>
+	<network-type>CONTRAIL30_BASIC</network-type>
+	<network-role>GN_EVPN_direct</network-role>
+	<network-technology>contrail</network-technology>
+	<is-bound-to-vpn>false</is-bound-to-vpn>
+	<service-id>9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+	<network-role-instance>0</network-role-instance>
+	<resource-version>1465398611</resource-version>
+	<orchestration-status>pending-delete</orchestration-status>
+  	<physical-network-name>networkName</physical-network-name>
+	<is-provider-network>false</is-provider-network>
+	<is-shared-network>true</is-shared-network>
+	<is-external-network>false</is-external-network>
+	<subnets>
+		<subnet>
+			<subnet-id>cb1a7b47-5428-44c9-89c2-8b17541c3228</subnet-id>
+			<gateway-address>108.239.40.1</gateway-address>
+			<network-start-address>108.239.40.0</network-start-address>
+			<cidr-mask>28</cidr-mask>
+			<ip-version>4</ip-version>
+			<orchestration-status>pending-delete</orchestration-status>
+			<dhcp-enabled>true</dhcp-enabled>
+			<dhcp-start>108.239.40.0</dhcp-start>
+			<dhcp-end>108.239.40.0</dhcp-end>
+			<resource-version>1465398611</resource-version>
+  		    <subnet-name>subnetName</subnet-name>
+			<relationship-list />
+		</subnet>
+		<subnet>
+			<subnet-id>e2cc7c14-90f0-4205-840d-b4e07f04e621</subnet-id>
+			<gateway-address>2606:ae00:2e01:604::1</gateway-address>
+			<network-start-address>2606:ae00:2e01:604::</network-start-address>
+			<cidr-mask>64</cidr-mask>
+			<ip-version>6</ip-version>
+			<orchestration-status>pending-delete</orchestration-status>
+			<dhcp-enabled>true</dhcp-enabled>
+			<dhcp-start>2606:ae00:2e01:604::</dhcp-start>
+			<dhcp-end>2606:ae00:2e01:604::</dhcp-end>
+			<resource-version>1465398611</resource-version>
+  			<subnet-name>subnetName</subnet-name>
+			<relationship-list />
+		</subnet>
+	</subnets>
+	<ctag-assignments />
+	<segmentation-assignments>
+	   	<segmentation-id>416</segmentation-id>
+	  	<resource-version>4132176</resource-version>
+	</segmentation-assignments>
+	<relationship-list>
+		<relationship>
+			<related-to>cloud-region</related-to>
+			<related-link>https://mtanjv9aaas03.aic.cip.com:8443/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/
+			</related-link>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-region-id</relationship-key>
+				<relationship-value>AAIAIC25</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-owner</relationship-key>
+				<relationship-value>att-aic</relationship-value>
+			</relationship-data>
+			<related-to-property>
+				<property-key>cloud-region.owner-defined-type</property-key>
+				<property-value></property-value>
+			</related-to-property>
+		</relationship>
+		<relationship>
+			<related-to>tenant</related-to>
+			<related-link>https://mtanjv9aaas03.aic.cip.com:8443/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant/4ae1d3446a4c48b2bec44b6cfba06d68/</related-link>
+			<relationship-data>
+				<relationship-key>tenant.tenant-id</relationship-key>
+				<relationship-value>4ae1d3446a4c48b2bec44b6cfba06d68
+				</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-owner</relationship-key>
+				<relationship-value>att-aic</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-region-id</relationship-key>
+				<relationship-value>AAIAIC25</relationship-value>
+			</relationship-data>
+			<related-to-property>
+				<property-key>tenant.tenant-name</property-key>
+				<property-value>Ruchira Contrail 3.0 test</property-value>
+			</related-to-property>
+		</relationship>
+		<relationship>
+			<related-to>vpn-binding</related-to>
+			<related-link>https://mtanjv9aaas03.aic.cip.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+			<relationship-data>
+				<relationship-key>vpn-binding.vpn-id</relationship-key>
+				<relationship-value>9a7b327d9-287aa00-82c4b0-100001</relationship-value>
+			</relationship-data>
+			<related-to-property>
+				<property-key>vpn-binding.vpn-name</property-key>
+				<property-value>GN_EVPN_direct_net_0_ST1</property-value>
+			</related-to-property>
+		</relationship>
+		<relationship>
+		   <related-to>route-table-reference</related-to>
+		   <relationship-data>
+			  <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+			  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+		   </relationship-data>
+		</relationship>
+	</relationship-list>
+</l3-network>"""	
+  
+  String queryIdAIIResponseVpnNotPresent =
+  """<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+      <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:502-132671"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v6">
+         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-role>dmz_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <network-role-instance>0</network-role-instance>
+         <orchestration-status>pending-delete</orchestration-status>
+	  	 <physical-network-name>networkName</physical-network-name>
+	     <is-provider-network>false</is-provider-network>
+	  	 <is-shared-network>true</is-shared-network>
+	  	 <is-external-network>false</is-external-network>
+         <subnets>
+            <subnet>
+               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+               <gateway-address>107.239.52.1</gateway-address>
+               <network-start-address>107.239.52.0</network-start-address>
+               <cidr-mask>24</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>pending-delete</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+  			   <subnet-name>subnetName</subnet-name>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+         <relationship-list/>
+      </l3-network>
+   </rest:payload>
+</rest:RESTResponse>"""
+  
+	  String queryNameAIIResponse =
+		  """<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+		                   statusCode="200">
+		   <rest:headers>
+		      <rest:header name="Transfer-Encoding" value="chunked"/>
+		      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+		      <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:502-132671"/>
+		      <rest:header name="Content-Type" value="application/xml"/>
+		      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+		      <rest:header name="Cache-Control" value="private"/>
+		   </rest:headers>
+		   <rest:payload contentType="text/xml">
+		      <l3-network xmlns="http://org.openecomp.aai.inventory/v6">
+		         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+		         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+		         <network-type>CONTRAIL_EXTERNAL</network-type>
+		         <network-role>dmz_direct</network-role>
+		         <network-technology>contrail</network-technology>
+		         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+		         <network-role-instance>0</network-role-instance>
+		         <orchestration-status>pending-delete</orchestration-status>
+		         <subnets>
+		            <subnet>
+		               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+		               <gateway-address>107.239.52.1</gateway-address>
+		               <network-start-address>107.239.52.0</network-start-address>
+		               <cidr-mask>24</cidr-mask>
+		               <ip-version>4</ip-version>
+		               <orchestration-status>pending-delete</orchestration-status>
+		               <dhcp-enabled>true</dhcp-enabled>
+		               <relationship-list/>
+		            </subnet>
+		         </subnets>
+		         <relationship-list>
+		            <relationship>
+		               <related-to>vpn-binding</related-to>
+		               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+		               <relationship-data>
+		                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+		                  <relationship-value>85f015d0-2e32-4c30-96d2-87a1a27f8017</relationship-value>
+		               </relationship-data>
+		            </relationship>
+		            <relationship>
+		               <related-to>vpn-binding</related-to>
+		               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/</related-link>
+		               <relationship-data>
+		                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+		                  <relationship-value>c980a6ef-3b88-49f0-9751-dbad8608d0a6</relationship-value>
+		               </relationship-data>
+		            </relationship>
+		            <relationship>
+		               <related-to>tenant</related-to>
+		               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+		               <relationship-data>
+		                  <relationship-key>tenant.tenant-id</relationship-key>
+		                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+		               </relationship-data>
+		            </relationship>
+		         </relationship-list>
+		      </l3-network>
+		   </rest:payload>
+		</rest:RESTResponse>"""
+  
+		  String queryNameAIIResponseVpnNotPresent =
+		  """<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+		                   statusCode="200">
+		   <rest:headers>
+		      <rest:header name="Transfer-Encoding" value="chunked"/>
+		      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+		      <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:502-132671"/>
+		      <rest:header name="Content-Type" value="application/xml"/>
+		      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+		      <rest:header name="Cache-Control" value="private"/>
+		   </rest:headers>
+		   <rest:payload contentType="text/xml">
+		      <l3-network xmlns="http://org.openecomp.aai.inventory/v6>
+		         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+		         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+		         <network-type>CONTRAIL_EXTERNAL</network-type>
+		         <network-role>dmz_direct</network-role>
+		         <network-technology>contrail</network-technology>
+		         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+		         <network-role-instance>0</network-role-instance>
+		         <orchestration-status>pending-delete</orchestration-status>
+		         <subnets>
+		            <subnet>
+		               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+		               <gateway-address>107.239.52.1</gateway-address>
+		               <network-start-address>107.239.52.0</network-start-address>
+		               <cidr-mask>24</cidr-mask>
+		               <ip-version>4</ip-version>
+		               <orchestration-status>pending-delete</orchestration-status>
+		               <dhcp-enabled>true</dhcp-enabled>
+		               <relationship-list/>
+		            </subnet>
+		         </subnets>
+		      </l3-network>
+		   </rest:payload>
+		</rest:RESTResponse>"""
+		  
+	  String aaiVpnResponseStub =
+  """<rest:payload xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+              xmlns="http://org.openecomp.aai.inventory/v8"
+              contentType="text/xml">
+   <vpn-binding>
+      <global-route-target/>
+   </vpn-binding>
+</rest:payload>"""	
+		  
+	  String queryVpnBindingAAIResponse =
+	   """<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <vpn-binding xmlns="http://org.openecomp.aai.inventory/v6">
+         <vpn-id>9a7b327d9-287aa00-82c4b0-105757</vpn-id>
+         <vpn-name>GN_EVPN_Test</vpn-name>
+         <global-route-target>13979:105757</global-route-target>
+         <relationship-list>
+            <relationship>
+               <related-to>l3-network</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/689ec39e-c5fc-4462-8db2-4f760763ad28/</related-link>
+               <relationship-data>
+                  <relationship-key>l3-network.network-id</relationship-key>
+                  <relationship-value>689ec39e-c5fc-4462-8db2-4f760763ad28</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>l3-network</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/1a49396b-19b3-40a4-8792-aa2fbd0f0704/</related-link>
+               <relationship-data>
+                  <relationship-key>l3-network.network-id</relationship-key>
+                  <relationship-value>1a49396b-19b3-40a4-8792-aa2fbd0f0704</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>l3-network</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/774f3329-3c83-4771-86c7-9e6207cd50fd/</related-link>
+               <relationship-data>
+                  <relationship-key>l3-network.network-id</relationship-key>
+                  <relationship-value>774f3329-3c83-4771-86c7-9e6207cd50fd</relationship-value>
+               </relationship-data>
+            </relationship>
+         </relationship-list>
+      </vpn-binding>
+   </rest:payload>
+</rest:RESTResponse>"""
+  
+	   String updateDBRequest_Active =
+	   """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+                  xmlns:ns="http://org.openecomp.mso/requestsdb">
+   <soapenv:Header/>
+   <soapenv:Body>
+      <ns:updateInfraRequest>
+         <requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+         <lastModifiedBy>BPMN</lastModifiedBy>
+         <statusMessage>Network MNS-25180-L-01-dmz_direct_net_1 already exists. Silent success.</statusMessage>
+         <responseBody/>
+         <requestStatus>COMPLETED</requestStatus>
+         <progress>100</progress>
+         <vnfOutputs>&lt;network-id&gt;49c86598-f766-46f8-84f8-8d1c1b10f9b4&lt;/network-id&gt;&lt;network-name&gt;MNS-25180-L-01-dmz_direct_net_1&lt;/network-names&gt;</vnfOutputs>
+         <networkId>49c86598-f766-46f8-84f8-8d1c1b10f9b4</networkId>
+      </ns:updateInfraRequest>
+   </soapenv:Body>
+</soapenv:Envelope>"""
+  
+	  String updateDBRequest =
+	   """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+                  xmlns:ns="http://org.openecomp.mso/requestsdb">
+   <soapenv:Header/>
+   <soapenv:Body>
+      <ns:updateInfraRequest>
+         <requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+         <lastModifiedBy>BPMN</lastModifiedBy>
+         <statusMessage>Network successfully updated.</statusMessage>
+         <responseBody/>
+         <requestStatus>COMPLETED</requestStatus>
+         <progress>100</progress>
+         <vnfOutputs>&lt;network-id&gt;&lt;/network-id&gt;&lt;network-name&gt;&lt;/network-names&gt;</vnfOutputs>
+         <networkId/>
+      </ns:updateInfraRequest>
+   </soapenv:Body>
+</soapenv:Envelope>"""	
+  
+	  String updateDBRequestError =
+	  """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+						<soapenv:Header/>
+						<soapenv:Body>
+							<ns:updateInfraRequest xmlns:ns="http://org.openecomp.mso/requestsdb">
+								<requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+								<lastModifiedBy>BPMN</lastModifiedBy>
+								<statusMessage>Received error from SDN-C: No availability zone available</statusMessage>
+								<responseBody></responseBody>
+								<requestStatus>FAILED</requestStatus>
+								<vnfOutputs>&lt;network-id&gt;&lt;/network-id&gt;&lt;network-name&gt;&lt;/network-names&gt;</vnfOutputs>
+							</ns:updateInfraRequest>
+					   	</soapenv:Body>
+					   </soapenv:Envelope>"""
+  
+		 String updateDBRequestError01 =
+	  """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+						<soapenv:Header/>
+						<soapenv:Body>
+							<ns:updateInfraRequest xmlns:ns="http://org.openecomp.mso/requestsdb">
+								<requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+								<lastModifiedBy>BPMN</lastModifiedBy>
+								<statusMessage>Received error unexpectedly from SDN-C.</statusMessage>
+								<responseBody></responseBody>
+								<requestStatus>FAILED</requestStatus>
+								<vnfOutputs>&lt;network-id&gt;&lt;/network-id&gt;&lt;network-name&gt;&lt;/network-names&gt;</vnfOutputs>
+							</ns:updateInfraRequest>
+					   	</soapenv:Body>
+					   </soapenv:Envelope>"""
+						 
+	  String updateDBRequest_Outputs =
+  """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+                  xmlns:ns="http://org.openecomp.mso/requestsdb">
+   <soapenv:Header/>
+   <soapenv:Body>
+      <ns:updateInfraRequest>
+         <requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+         <lastModifiedBy>BPMN</lastModifiedBy>
+         <statusMessage>Network successfully updated.</statusMessage>
+         <responseBody/>
+         <requestStatus>COMPLETED</requestStatus>
+         <progress>100</progress>
+         <vnfOutputs>&lt;network-id&gt;49c86598-f766-46f8-84f8-8d1c1b10f9b4&lt;/network-id&gt;&lt;network-name&gt;MNS-25180-L-01-dmz_direct_net_1&lt;/network-names&gt;</vnfOutputs>
+         <networkId>49c86598-f766-46f8-84f8-8d1c1b10f9b4</networkId>
+      </ns:updateInfraRequest>
+   </soapenv:Body>
+</soapenv:Envelope>"""	
+  
+	  String updateNetworkRequest =
+	  """<updateNetworkRequest>
+   <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+   <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+   <networkId>49c86598-f766-46f8-84f8-8d1c1b10f9b4</networkId>
+   <networkStackId>ST_2Bindings_6006/55288ef0-595c-47d3-819e-cf93aaac6326</networkStackId>
+   <networkName>MNS-25180-L-01-dmz_direct_net_1</networkName>
+   <networkType>CONTRAIL_EXTERNAL</networkType>
+   <networkTypeVersion/>
+   <networkTechnology>CONTRAIL</networkTechnology>
+   <providerVlanNetwork>
+      <physicalNetworkName>networkName</physicalNetworkName>
+      <vlans>414,415</vlans>
+   </providerVlanNetwork>
+   <contrailNetwork>
+      <shared>true</shared>
+      <external>false</external>
+      <routeTargets>13979:105757</routeTargets>
+      <routeTargets>13979:105757</routeTargets>
+      <policyFqdns>GN_EVPN_Test</policyFqdns>
+      <routeTableFqdns>refFQDN1</routeTableFqdns>
+      <routeTableFqdns>refFQDN2</routeTableFqdns>
+   </contrailNetwork>
+   <subnets>
+      <allocationPools>
+         <start/>
+         <end/>
+      </allocationPools>
+      <cidr>107.239.52.0/24</cidr>
+      <enableDHCP>true</enableDHCP>
+      <gatewayIp>107.239.52.1</gatewayIp>
+      <ipVersion>4</ipVersion>
+      <subnetId>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnetId>
+      <subnetName>subnetName</subnetName>
+   </subnets>
+   <subnets>
+      <allocationPools>
+         <start/>
+         <end/>
+      </allocationPools>
+      <cidr>107.239.52.0/24</cidr>
+      <enableDHCP>true</enableDHCP>
+      <gatewayIp>107.239.52.1</gatewayIp>
+      <ipVersion>4</ipVersion>
+      <subnetId>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnetId>
+      <subnetName>subnetName</subnetName>
+   </subnets>
+   <skipAAI>true</skipAAI>
+   <backout>true</backout>
+   <failIfExists>false</failIfExists>
+   <networkParams>
+      <dhcp-enabled>true</dhcp-enabled>
+      <serviceId>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</serviceId>
+      <cidr-mask>true</cidr-mask>
+      <backoutOnFailure>true</backoutOnFailure>
+      <gateway-address>10.10.125.1</gateway-address>
+   </networkParams>
+   <msoRequest>
+      <requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+      <serviceInstanceId>f70e927b-6087-4974-9ef8-c5e4d5847ca4</serviceInstanceId>
+   </msoRequest>
+   <messageId>messageId_generated</messageId>
+   <notificationUrl/>
+</updateNetworkRequest>"""
+	  
+   
+  String updateNetworkRequest_noPhysicalName =
+  """<updateNetworkRequest>
+   <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+   <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+   <networkId>49c86598-f766-46f8-84f8-8d1c1b10f9b4</networkId>
+   <networkStackId>ST_2Bindings_6006/55288ef0-595c-47d3-819e-cf93aaac6326</networkStackId>
+   <networkName>MNS-25180-L-01-dmz_direct_net_1</networkName>
+   <networkType>CONTRAIL_EXTERNAL</networkType>
+   <networkTypeVersion/>
+   <networkTechnology>CONTRAIL</networkTechnology>
+   <providerVlanNetwork>
+      <physicalNetworkName>networkName</physicalNetworkName>
+      <vlans>414,415</vlans>
+   </providerVlanNetwork>
+   <contrailNetwork>
+      <shared>true</shared>
+      <external>false</external>
+      <routeTargets>13979:105757</routeTargets>
+      <routeTargets>13979:105757</routeTargets>
+      <policyFqdns>GN_EVPN_Test</policyFqdns>
+   </contrailNetwork>
+   <subnets>
+      <allocationPools>
+         <start/>
+         <end/>
+      </allocationPools>
+      <cidr>107.239.52.0/24</cidr>
+      <enableDHCP>true</enableDHCP>
+      <gatewayIp>107.239.52.1</gatewayIp>
+      <ipVersion>4</ipVersion>
+      <subnetId>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnetId>
+      <subnetName>subnetName</subnetName>
+   </subnets>
+   <subnets>
+      <allocationPools>
+         <start/>
+         <end/>
+      </allocationPools>
+      <cidr>107.239.52.0/24</cidr>
+      <enableDHCP>true</enableDHCP>
+      <gatewayIp>107.239.52.1</gatewayIp>
+      <ipVersion>4</ipVersion>
+      <subnetId>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnetId>
+      <subnetName>subnetName</subnetName>
+   </subnets>
+   <skipAAI>true</skipAAI>
+   <backout>true</backout>
+   <failIfExists>false</failIfExists>
+   <networkParams>
+      <dhcp-enabled>true</dhcp-enabled>
+      <serviceId>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</serviceId>
+      <cidr-mask>true</cidr-mask>
+      <backoutOnFailure>true</backoutOnFailure>
+      <gateway-address>10.10.125.1</gateway-address>
+   </networkParams>
+   <msoRequest>
+      <requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+      <serviceInstanceId>null</serviceInstanceId>
+   </msoRequest>
+   <messageId>messageId_generated</messageId>
+   <notificationUrl/>
+</updateNetworkRequest>"""
+  
+	  String updateNetworkResponseREST =
+  """<ns2:updateNetworkContrailResponse xmlns:ns2="http://org.openecomp.mso/network">
+	<networkId>MNS-25180-L-01-dmz_direct_net_1/2c88a3a9-69b9-43a7-ada6-1aca577c3641</networkId>
+	<neutronNetworkId>c4f4e878-cde0-4b15-ae9a-bda857759cea</neutronNetworkId>
+    <networkFqdn>default-domain:MSOTest:GN_EVPN_direct_net_0_ST1</networkFqdn>
+	<networkStackId></networkStackId>
+	<subnetMap>
+		<entry>
+			<key>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</key>
+			<value>bd8e87c6-f4e2-41b8-b0bc-9596aa00cd73</value>
+		</entry>
+		<entry>
+			<key>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</key>
+			<value>bd8e87c6-f4e2-41b8-b0bc-9596aa00cd73</value>
+		</entry>
+	</subnetMap>
+	<rollback>
+		<networkId>MNS-25180-L-01-dmz_direct_net_1/2c88a3a9-69b9-43a7-ada6-1aca577c3641</networkId>
+		<neutronNetworkId>c4f4e878-cde0-4b15-ae9a-bda857759cea</neutronNetworkId>
+		<networkStackId></networkStackId>
+		<networkType>CONTRAIL_EXTERNAL</networkType>
+		<networkUpdated>true</networkUpdated>
+		<tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+		<cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+		<msoRequest>
+			<requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+			<serviceInstanceId></serviceInstanceId>
+		</msoRequest>
+	</rollback>
+	<messageId>messageId_generated</messageId>
+</ns2:updateNetworkContrailResponse>"""
+  
+	  String updateRollbackNetworkRequest =
+	  """<NetworkAdapter:rollbackNetwork xmlns:NetworkAdapter="http://org.openecomp.mso/network">
+   <rollback>
+      <networkId>MNS-25180-L-01-dmz_direct_net_1/2c88a3a9-69b9-43a7-ada6-1aca577c3641</networkId>
+      <neutronNetworkId>c4f4e878-cde0-4b15-ae9a-bda857759cea</neutronNetworkId>
+      <networkStackId/>
+      <networkType>CONTRAIL_EXTERNAL</networkType>
+      <networkUpdated>true</networkUpdated>
+      <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+      <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+      <msoRequest>
+         <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+         <serviceInstanceId/>
+      </msoRequest>
+   </rollback>
+</NetworkAdapter:rollbackNetwork>"""	
+	  
+	  String updateNetworkResponse =
+	  """<ns2:updateNetworkContrailResponse xmlns:ns2="http://org.openecomp.mso/network"
+                                    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+   <networkId>MNS-25180-L-01-dmz_direct_net_1/2c88a3a9-69b9-43a7-ada6-1aca577c3641</networkId>
+   <neutronNetworkId>c4f4e878-cde0-4b15-ae9a-bda857759cea</neutronNetworkId>
+   <networkStackId>MNS-25180-L-01-dmz_direct_net_1/2c88a3a9-69b9-43a7-ada6-1aca577c3641</networkStackId>
+	<networkFqdn>default-domain:MSOTest:GN_EVPN_direct_net_0_ST1</networkFqdn>
+   <subnetIdMap>
+      <entry>
+         <key>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</key>
+         <value>bd8e87c6-f4e2-41b8-b0bc-9596aa00cd73</value>
+      </entry>
+   </subnetIdMap>
+   <rollback>
+      <cloudId>RDM2WAGPLCP</cloudId>
+      <msoRequest>
+         <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+         <serviceInstanceId/>
+      </msoRequest>
+      <networkUpdated>true</networkUpdated>
+      <networkId>MNS-25180-L-01-dmz_direct_net_1/2c88a3a9-69b9-43a7-ada6-1aca577c3641</networkId>
+      <networkType>CONTRAIL_EXTERNAL</networkType>
+      <networkUpdated>false</networkUpdated>
+      <neutronNetworkId>c4f4e878-cde0-4b15-ae9a-bda857759cea</neutronNetworkId>
+      <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+   </rollback>
+</ns2:updateNetworkContrailResponse>"""
+  
+	  String updateContrailAAIPayloadRequest =
+  """<l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+   <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+   <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+   <network-type>CONTRAIL_EXTERNAL</network-type>
+   <network-role>dmz_direct</network-role>
+   <network-technology>contrail</network-technology>
+   <neutron-network-id>c4f4e878-cde0-4b15-ae9a-bda857759cea</neutron-network-id>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <network-role-instance>0</network-role-instance>
+   <resource-version>l3-version</resource-version>
+   <orchestration-status>active</orchestration-status>
+   <heat-stack-id>ST_2Bindings_6006/55288ef0-595c-47d3-819e-cf93aaac6326</heat-stack-id>
+   <contrail-network-fqdn>default-domain:MSOTest:GN_EVPN_direct_net_0_ST1</contrail-network-fqdn>
+   <physical-network-name>networkName</physical-network-name>
+   <is-provider-network>false</is-provider-network>
+   <is-shared-network>true</is-shared-network>
+   <is-external-network>false</is-external-network>
+   <subnets>
+      <subnet>
+         <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+         <neutron-subnet-id>bd8e87c6-f4e2-41b8-b0bc-9596aa00cd73</neutron-subnet-id>
+         <gateway-address>107.239.52.1</gateway-address>
+         <network-start-address>107.239.52.0</network-start-address>
+         <cidr-mask>24</cidr-mask>
+         <ip-version>4</ip-version>
+         <orchestration-status>active</orchestration-status>
+         <dhcp-enabled>true</dhcp-enabled>
+         <subnet-name>subnetName</subnet-name>
+      </subnet>
+      <subnet>
+         <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+         <neutron-subnet-id>bd8e87c6-f4e2-41b8-b0bc-9596aa00cd73</neutron-subnet-id>
+         <gateway-address>107.239.52.1</gateway-address>
+         <network-start-address>107.239.52.0</network-start-address>
+         <cidr-mask>24</cidr-mask>
+         <ip-version>4</ip-version>
+         <orchestration-status>active</orchestration-status>
+         <dhcp-enabled>true</dhcp-enabled>
+         <subnet-name>subnetName</subnet-name>
+      </subnet>
+   </subnets>
+   <segmentation-assignments>
+      <segmentation-id>414</segmentation-id>
+   </segmentation-assignments>
+   <segmentation-assignments>
+      <segmentation-id>415</segmentation-id>
+   </segmentation-assignments>
+   <ctag-assignments>
+      <ctag-assignment>
+         <vlan-id-inner>inner</vlan-id-inner>
+         <resource-version>ctag-version</resource-version>
+         <relationship-list>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-ext1.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/897deadc2b954a6bac6d3c197fb3525e/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>897deadc2b954a6bac6d3c197fb3525e</relationship-value>
+               </relationship-data>
+               <related-to-property>
+                  <property-key>tenant.tenant-name</property-key>
+                  <property-value>MSOTest1</property-value>
+               </related-to-property>
+            </relationship>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-ext1.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/a290b841-f672-44dd-b9cd-6f8c20d7d8c8/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>a290b841-f672-44dd-b9cd-6f8c20d7d8c8</relationship-value>
+               </relationship-data>
+               <related-to-property>
+                  <property-key>vpn-binding.vpn-name</property-key>
+                  <property-value>oam_protected_net_6_MTN5_msotest2</property-value>
+               </related-to-property>
+            </relationship>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-ext1.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/24a4b507-853a-4a38-99aa-05fcc54be24d/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>24a4b507-853a-4a38-99aa-05fcc54be24d</relationship-value>
+               </relationship-data>
+               <related-to-property>
+                  <property-key>vpn-binding.vpn-name</property-key>
+                  <property-value>oam_protected_net_6_MTN5_msotest1</property-value>
+               </related-to-property>
+            </relationship>
+         </relationship-list>
+      </ctag-assignment>
+   </ctag-assignments>
+   <relationship-list>
+      <relationship>
+         <related-to>vpn-binding</related-to>
+         <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+         <relationship-data>
+            <relationship-key>vpn-binding.vpn-id</relationship-key>
+            <relationship-value>85f015d0-2e32-4c30-96d2-87a1a27f8017</relationship-value>
+         </relationship-data>
+      </relationship>
+      <relationship>
+         <related-to>vpn-binding</related-to>
+         <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/</related-link>
+         <relationship-data>
+            <relationship-key>vpn-binding.vpn-id</relationship-key>
+            <relationship-value>c980a6ef-3b88-49f0-9751-dbad8608d0a6</relationship-value>
+         </relationship-data>
+      </relationship>
+      <relationship>
+         <related-to>tenant</related-to>
+         <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+         <relationship-data>
+            <relationship-key>tenant.tenant-id</relationship-key>
+            <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+         </relationship-data>
+      </relationship>
+      <relationship>
+         <related-to>network-policy</related-to>
+         <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg</related-link>
+         <relationship-data>
+            <relationship-key>network-policy.network-policy-id</relationship-key>
+            <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0cg</relationship-value>
+         </relationship-data>
+      </relationship>
+      <relationship>
+         <related-to>route-table-reference</related-to>
+         <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/route-table-references/route-table-reference/refFQDN1</related-link>
+         <relationship-data>
+            <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+            <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+         </relationship-data>
+      </relationship>
+      <relationship>
+         <related-to>route-table-reference</related-to>
+         <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/route-table-references/route-table-reference/refFQDN2</related-link>
+         <relationship-data>
+            <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+            <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+         </relationship-data>
+      </relationship>
+   </relationship-list>
+</l3-network>"""
+  
+	  String updateContrailAAIResponse =
+  """<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>"""
+	  
+	  String updateNetworkErrorResponse =
+	  """<updateNetworkError>
+		 <messageId>680bd458-5ec1-4a16-b77c-509022e53450</messageId><category>INTERNAL</category>
+		 <message>400 Bad Request: The server could not comply with the request since it is either malformed or otherwise incorrect., error.type=StackValidationFailed, error.message=Property error: : resources.network.properties: : Unknown Property network_ipam_refs_data</message>
+		 <rolledBack>true</rolledBack>
+	   </updateNetworkError>"""
+  
+			
+  String networkException500 =
+  """<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:VersionMismatch</faultcode><faultstring>"http://org.openecomp.mso/network", the namespace on the "updateNetworkContrail" element, is not a valid SOAP version.</faultstring></soap:Fault></soap:Body></soap:Envelope>"""
+				  
+	String aaiResponse = 
+   """<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+					 statusCode="200">
+	 <rest:headers>
+		<rest:header name="Transfer-Encoding" value="chunked"/>
+		<rest:header name="Date" value="Sat,30 Jan 2016 20:09:24 GMT"/>
+		<rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+		<rest:header name="X-AAI-TXID"
+					 value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160130-20:09:24:814-165843"/>
+		<rest:header name="Content-Type" value="application/xml"/>
+		<rest:header name="Server" value="Apache-Coyote/1.1"/>
+		<rest:header name="Cache-Control" value="private"/>
+	 </rest:headers>
+	 <rest:payload contentType="text/xml">
+		<l3-network xmlns="http://org.openecomp.aai.inventory/v3">
+		   <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+		   <network-name>HSL_direct_net_2</network-name>
+		   <network-type>CONTRAIL_BASIC</network-type>
+		   <network-role>HSL_direct</network-role>
+		   <network-technology>contrail</network-technology>
+		   <neutron-network-id>8bbd3edf-b835-4610-96a2-a5cafa029042</neutron-network-id>
+		   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+		   <orchestration-status>active</orchestration-status>
+		   <heat-stack-id>HSL_direct_net_2/57594a56-1c92-4a38-9caa-641c1fa3d4b6</heat-stack-id>
+		   <subnets>
+			  <subnet>
+				 <subnet-id>ea5f2a2c-604f-47ff-a9c5-253ee4f0ef0a</subnet-id>
+				 <neutron-subnet-id>5a77fdc2-7789-4649-a1b9-6eaf1db1813a</neutron-subnet-id>
+				 <gateway-address>172.16.34.1</gateway-address>
+				 <network-start-address>172.16.34.0</network-start-address>
+				 <cidr-mask>28</cidr-mask>
+				 <ip-version>4</ip-version>
+				 <orchestration-status>active</orchestration-status>
+				 <dhcp-enabled>true</dhcp-enabled>
+				 <relationship-list/>
+			  </subnet>
+		   </subnets>
+		   <relationship-list>
+			  <relationship>
+				 <related-to>tenant</related-to>
+				 <related-link>https://aai-app-e2e.test.com:8443/aai/v3/cloud-infrastructure/tenants/tenant/e81d842d3e8b45c5a59f57cd76af3aaf/</related-link>
+				 <relationship-data>
+					<relationship-key>tenant.tenant-id</relationship-key>
+					<relationship-value>e81d842d3e8b45c5a59f57cd76af3aaf</relationship-value>
+				 </relationship-data>
+			  </relationship>
+		   </relationship-list>
+		</l3-network>
+	 </rest:payload>
+  </rest:RESTResponse>"""
+
+	String changeAssignSDNCRequest = 
+    """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://openecomp.com/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://openecomp.com/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://domain2.openecomp.com/workflow/sdnc/adapter/schema/v1">
+   <sdncadapter:RequestHeader>
+      <sdncadapter:RequestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</sdncadapter:RequestId>
+      <sdncadapter:SvcInstanceId>f70e927b-6087-4974-9ef8-c5e4d5847ca4</sdncadapter:SvcInstanceId>
+      <sdncadapter:SvcAction>changeassign</sdncadapter:SvcAction>
+      <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
+      <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>NetworkActivateRequest</request-action>
+         <source>VID</source>
+         <notification-url/>
+         <order-number/>
+         <order-version/>
+      </request-information>
+      <service-information>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <service-type>MSO-dev-service-type</service-type>
+         <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+         <subscriber-name>MSO_1610_dev</subscriber-name>
+      </service-information>
+      <network-request-information>
+         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <tenant>7dd5365547234ee8937416c65507d266</tenant>
+         <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+      </network-request-information>
+   </aetgt:SDNCRequestData>
+</aetgt:SDNCAdapterWorkflowRequest>"""
+
+String assignResponse =
+"""<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <sdncadapterworkflow:response-data> <tag0:CallbackHeader> <tag0:RequestId>006927ca-f5a3-47fd-880c-dfcbcd81a093</tag0:RequestId> <tag0:ResponseCode>200</tag0:ResponseCode> <tag0:ResponseMessage>OK</tag0:ResponseMessage> </tag0:CallbackHeader> <tag0:RequestData xsi:type="xs:string"><output xmlns="org:openecomp:sdnctl:vnf"><response-code>200</response-code><svc-request-id>006927ca-f5a3-47fd-880c-dfcbcd81a093</svc-request-id><ack-final-indicator>Y</ack-final-indicator><service-information><subscriber-name>notsurewecare</subscriber-name><service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id><service-instance-id>GN_EVPN_direct_net_0_ST_noGW</service-instance-id></service-information><network-information><network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id></network-information></output></tag0:RequestData> </sdncadapterworkflow:response-data> </sdncadapterworkflow:SDNCAdapterWorkflowResponse>"""
+			  
+  String sdncRollbackRequest =
+			  """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://openecomp.com/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://openecomp.com/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://domain2.openecomp.com/workflow/sdnc/adapter/schema/v1">
+   <sdncadapter:RequestHeader>
+      <sdncadapter:RequestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</sdncadapter:RequestId>
+      <sdncadapter:SvcInstanceId>f70e927b-6087-4974-9ef8-c5e4d5847ca4</sdncadapter:SvcInstanceId>
+      <sdncadapter:SvcAction>rollback</sdncadapter:SvcAction>
+      <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
+      <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>NetworkActivateRequest</request-action>
+         <source>VID</source>
+         <notification-url/>
+         <order-number/>
+         <order-version/>
+      </request-information>
+      <service-information>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <service-type>MSO-dev-service-type</service-type>
+         <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+         <subscriber-name>MSO_1610_dev</subscriber-name>
+      </service-information>
+      <network-request-information>
+         <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <tenant>7dd5365547234ee8937416c65507d266</tenant>
+         <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+      </network-request-information>
+   </aetgt:SDNCRequestData>
+</aetgt:SDNCAdapterWorkflowRequest>"""
+						 
+	   String sdncAdapterWorkflowResponse =
+	  """<aetgt:SDNCAdapterWorkflowResponse xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                   xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
+   <sdncadapterworkflow:response-data>
+<tag0:CallbackHeader xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+   <tag0:RequestId>745b1b50-e39e-4685-9cc8-c71f0bde8bf0</tag0:RequestId>
+   <tag0:ResponseCode>200</tag0:ResponseCode>
+   <tag0:ResponseMessage>OK</tag0:ResponseMessage>
+</tag0:CallbackHeader>
+   <tag0:RequestData xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:type="xs:string">&lt;output xmlns="org:openecomp:sdnctl:vnf"&gt;&lt;svc-request-id&gt;00703dc8-71ff-442d-a4a8-3adc5beef6a9&lt;/svc-request-id&gt;&lt;response-code&gt;200&lt;/response-code&gt;&lt;ack-final-indicator&gt;Y&lt;/ack-final-indicator&gt;&lt;network-information&gt;&lt;network-id&gt;49c86598-f766-46f8-84f8-8d1c1b10f9b4&lt;/network-id&gt;&lt;/network-information&gt;&lt;service-information&gt;&lt;service-type&gt;a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb&lt;/service-type&gt;&lt;service-instance-id&gt;MNS-25180-L-01-dmz_direct_net_1&lt;/service-instance-id&gt;&lt;subscriber-name&gt;notsurewecare&lt;/subscriber-name&gt;&lt;/service-information&gt;&lt;/output&gt;</tag0:RequestData>
+   </sdncadapterworkflow:response-data>
+</aetgt:SDNCAdapterWorkflowResponse>"""
+					  
+  
+	  String sdncAdapterWorkflowResponse_Error =
+	  """<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+                                                 xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1"
+                                                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                                                 xmlns="org:openecomp:sdnctl:vnf">
+   <sdncadapterworkflow:response-data>
+      <tag0:RequestData xsi:type="xs:string">
+         <output>
+            <response-code>400</response-code>
+            <response-message>Error writing to l3-netework</response-message>
+            <ack-final-indicator>Y</ack-final-indicator>
+            <svc-request-id>c79240d8-34b5-4853-af69-2021928dba00</svc-request-id>
+         </output>
+      </tag0:RequestData>
+   </sdncadapterworkflow:response-data>
+</sdncadapterworkflow:SDNCAdapterWorkflowResponse>"""
+  
+	  String expected_sdncAdapterWorkflowResponse_Error =
+  """<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns="org:openecomp:sdnctl:vnf"
+                                                 xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+                                                 xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1"
+                                                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+   <sdncadapterworkflow:response-data>
+      <tag0:RequestData xsi:type="xs:string">
+         <output>
+            <response-code>400</response-code>
+            <response-message>Error writing to l3-netework</response-message>
+            <ack-final-indicator>Y</ack-final-indicator>
+            <svc-request-id>c79240d8-34b5-4853-af69-2021928dba00</svc-request-id>
+         </output>
+      </tag0:RequestData>
+   </sdncadapterworkflow:response-data>
+</sdncadapterworkflow:SDNCAdapterWorkflowResponse>"""
+  
+	  String sdncAdapterWorkflowFormattedResponse =
+	  """<aetgt:SDNCAdapterWorkflowResponse xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                   xmlns="org:openecomp:sdnctl:vnf">
+   <aetgt:response-data>
+      <output>
+         <svc-request-id>00703dc8-71ff-442d-a4a8-3adc5beef6a9</svc-request-id>
+         <response-code>200</response-code>
+         <ack-final-indicator>Y</ack-final-indicator>
+         <network-information>
+            <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+         </network-information>
+         <service-information>
+            <service-type>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-type>
+            <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+            <subscriber-name>notsurewecare</subscriber-name>
+         </service-information>
+      </output>
+   </aetgt:response-data>
+</aetgt:SDNCAdapterWorkflowResponse>"""   
+  
+	  String falloutHandlerRequest =
+	  """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+					                             xmlns:ns="http://org.openecomp/mso/request/types/v1"
+					                             xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1">
+					   <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+					      <request-id>b69c9054-da09-4a2c-adf5-51042b62bfac</request-id>
+					      <action>UPDATE</action>
+					      <source>PORTAL</source>
+					   </request-info>
+						<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+							<aetgt:ErrorMessage>Received error from SDN-C: No availability zone available.</aetgt:ErrorMessage>
+							<aetgt:ErrorCode>5300</aetgt:ErrorCode>
+						</aetgt:WorkflowException>
+					</aetgt:FalloutHandlerRequest>"""
+  
+	  String falloutHandlerRequestObject =
+	  """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+					                             xmlns:ns="http://org.openecomp/mso/request/types/v1"
+					                             xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1">
+					   <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+					      <request-id>b69c9054-da09-4a2c-adf5-51042b62bfac</request-id>
+					      <action>UPDATE</action>
+					      <source>VID</source>
+					   </request-info>
+						<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+							<aetgt:ErrorMessage>Received error from SDN-C: No availability zone available</aetgt:ErrorMessage>
+							<aetgt:ErrorCode>7000</aetgt:ErrorCode>
+						</aetgt:WorkflowException>
+					</aetgt:FalloutHandlerRequest>"""
+					  
+					  
+	  String falloutHandlerRequest_Scenario01 =
+  """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+					                             xmlns:ns="http://org.openecomp/mso/request/types/v1"
+					                             xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1">
+					   <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+					      <request-id>b69c9054-da09-4a2c-adf5-51042b62bfac</request-id>
+					      <action>UPDATE</action>
+					      <source>VID</source>
+					   </request-info>
+						<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+							<aetgt:ErrorMessage>Unexpected Response from AAI - 400</aetgt:ErrorMessage>
+							<aetgt:ErrorCode>7020</aetgt:ErrorCode>
+						</aetgt:WorkflowException>
+					</aetgt:FalloutHandlerRequest>"""
+  
+	  String completeMsoProcessRequest =
+	  """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                            xmlns:ns="http://org.openecomp/mso/request/types/v1"
+                            xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+   <request-info>
+      <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+      <action>UPDATE</action>
+      <source>PORTAL</source>
+   </request-info>
+   <aetgt:mso-bpel-name>BPMN Network action: UPDATE</aetgt:mso-bpel-name>
+</aetgt:MsoCompletionRequest>"""
+
+// - - - - - - - -
+
+
+	    @Before
+		public void init()
+		{
+			MockitoAnnotations.initMocks(this)
+			
+		}
+		
+		public void initializeVariables (Execution mockExecution) {
+			
+			verify(mockExecution).setVariable("UPDNETI_messageId", "")
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "")
+			verify(mockExecution).setVariable("UPDNETI_UpdateNetworkInstanceInfraJsonRequest", "")
+			verify(mockExecution).setVariable("UPDNETI_networkRequest", "")
+			verify(mockExecution).setVariable("UPDNETI_networkInputs", "")
+			verify(mockExecution).setVariable("UPDNETI_networkOutputs", "")
+			verify(mockExecution).setVariable("UPDNETI_requestId", "")
+			verify(mockExecution).setVariable("UPDNETI_source", "")
+			verify(mockExecution).setVariable("UPDNETI_networkId", "")
+			
+			verify(mockExecution).setVariable("UPDNETI_CompleteMsoProcessRequest", "")
+			verify(mockExecution).setVariable("UPDNETI_FalloutHandlerRequest", "")
+			verify(mockExecution).setVariable("UPDNETI_isSilentSuccess", false)
+			verify(mockExecution).setVariable("UPDNETI_isPONR", false)
+			
+			// AAI query Cloud Region
+			verify(mockExecution).setVariable("UPDNETI_queryCloudRegionRequest","")
+			verify(mockExecution).setVariable("UPDNETI_queryCloudRegionReturnCode","")
+			verify(mockExecution).setVariable("UPDNETI_queryCloudRegionResponse","")
+			verify(mockExecution).setVariable("UPDNETI_cloudRegionPo","")
+			verify(mockExecution).setVariable("UPDNETI_cloudRegionSdnc","")
+			verify(mockExecution).setVariable("UPDNETI_isCloudRegionGood", false)
+			
+			// AAI query Id
+			verify(mockExecution).setVariable("UPDNETI_queryIdAAIRequest","")
+			verify(mockExecution).setVariable("UPDNETI_queryIdAAIResponse", "")
+			verify(mockExecution).setVariable("UPDNETI_aaiIdReturnCode", "")
+
+			// AAI query vpn binding
+			verify(mockExecution).setVariable("UPDNETI_queryVpnBindingAAIRequest","")
+			verify(mockExecution).setVariable("UPDNETI_queryVpnBindingAAIResponse", "")
+			verify(mockExecution).setVariable("UPDNETI_aaiQqueryVpnBindingReturnCode", "")
+			verify(mockExecution).setVariable("UPDNETI_vpnBindings", null)
+			verify(mockExecution).setVariable("UPDNETI_vpnCount", 0)
+			verify(mockExecution).setVariable("UPDNETI_routeCollection", "")
+			
+			// AAI query network policy
+			verify(mockExecution).setVariable("UPDNETI_queryNetworkPolicyAAIRequest","")
+			verify(mockExecution).setVariable("UPDNETI_queryNetworkPolicyAAIResponse", "")
+			verify(mockExecution).setVariable("UPDNETI_aaiQqueryNetworkPolicyReturnCode", "")
+			verify(mockExecution).setVariable("UPDNETI_networkPolicyUriList", null)
+			verify(mockExecution).setVariable("UPDNETI_networkPolicyCount", 0)
+			verify(mockExecution).setVariable("UPDNETI_networkCollection", "")
+			
+			// AAI query route table reference
+			verify(mockExecution).setVariable("UPDNETI_queryNetworkTableRefAAIRequest","")
+			verify(mockExecution).setVariable("UPDNETI_queryNetworkTableRefAAIResponse", "")
+			verify(mockExecution).setVariable("UPDNETI_aaiQqueryNetworkTableRefReturnCode", "")
+			verify(mockExecution).setVariable("UPDNETI_networkTableRefUriList", null)
+			verify(mockExecution).setVariable("UPDNETI_networkTableRefCount", 0)
+			verify(mockExecution).setVariable("UPDNETI_tableRefCollection", "")
+			
+			
+			// AAI requery Id
+			verify(mockExecution).setVariable("UPDNETI_requeryIdAAIRequest","")
+			verify(mockExecution).setVariable("UPDNETI_requeryIdAAIResponse", "")
+			verify(mockExecution).setVariable("UPDNETI_aaiRequeryIdReturnCode", "")
+
+			// AAI update contrail
+			verify(mockExecution).setVariable("UPDNETI_updateContrailAAIUrlRequest","")
+			verify(mockExecution).setVariable("UPDNETI_updateContrailAAIPayloadRequest","")
+			verify(mockExecution).setVariable("UPDNETI_updateContrailAAIResponse", "")
+			verify(mockExecution).setVariable("UPDNETI_aaiUpdateContrailReturnCode", "")
+				
+			verify(mockExecution).setVariable("UPDNETI_updateNetworkRequest", "")
+			verify(mockExecution).setVariable("UPDNETI_updateNetworkResponse", "")
+			verify(mockExecution).setVariable("UPDNETI_rollbackNetworkRequest", "")
+			verify(mockExecution).setVariable("UPDNETI_rollbackNetworkResponse", "")
+			verify(mockExecution).setVariable("UPDNETI_networkReturnCode", "")
+			verify(mockExecution).setVariable("UPDNETI_rollbackNetworkReturnCode", "")
+			verify(mockExecution).setVariable("UPDNETI_isNetworkRollbackNeeded", false)
+			
+			verify(mockExecution).setVariable("UPDNETI_changeAssignSDNCRequest", "")
+			verify(mockExecution).setVariable("UPDNETI_changeAssignSDNCResponse", "")
+			verify(mockExecution).setVariable("UPDNETI_rollbackSDNCRequest", "")
+			verify(mockExecution).setVariable("UPDNETI_rollbackSDNCResponse", "")
+			verify(mockExecution).setVariable("UPDNETI_sdncReturnCode", "")
+			verify(mockExecution).setVariable("UPDNETI_rollbackSDNCReturnCode", "")
+			verify(mockExecution).setVariable("UPDNETI_isSdncRollbackNeeded", false)
+			verify(mockExecution).setVariable("UPDNETI_sdncResponseSuccess", false)
+
+			verify(mockExecution).setVariable("UPDNETI_updateDBRequest", "")
+			verify(mockExecution).setVariable("UPDNETI_updateDBResponse", "")
+			verify(mockExecution).setVariable("UPDNETI_dbReturnCode", "")
+			
+			verify(mockExecution).setVariable("UPDNETI_isVnfBindingPresent", false)
+			verify(mockExecution).setVariable("UPDNETI_Success", false)
+			verify(mockExecution).setVariable("UPDNETI_serviceInstanceId", "")
+			verify(mockExecution).setVariable("GENGS_type", "service-instance") // Setting for Generic Sub Flow use
+			
+			
+		}
+		
+		@Test
+		//@Ignore  
+		public void preProcessRequest_NetworkRequest() {
+			
+			println "************ preProcessRequest_Payload ************* " 
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("isBaseVfModule")).thenReturn(true)
+			when(mockExecution.getVariable("recipeTimeout")).thenReturn(0)
+			when(mockExecution.getVariable("requestAction")).thenReturn("UPDATE")
+			when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("vnfId")).thenReturn("")
+			when(mockExecution.getVariable("volumeGroupId")).thenReturn("")
+			when(mockExecution.getVariable("networkId")).thenReturn("49c86598-f766-46f8-84f8-8d1c1b10f9b4")
+			when(mockExecution.getVariable("serviceType")).thenReturn("MOG")
+			when(mockExecution.getVariable("networkType")).thenReturn("modelName")
+			when(mockExecution.getVariable("bpmnRequest")).thenReturn(jsonIncomingRequest)
+			
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_adapters_db_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+									
+			// preProcessRequest(Execution execution)						
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.preProcessRequest(mockExecution)
+			
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			// Authentications
+            verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "Basic cGFzc3dvcmQ=")
+
+			verify(mockExecution).setVariable("UPDNETI_UpdateNetworkInstanceInfraJsonRequest", jsonIncomingRequest)
+			//verify(mockExecution).setVariable("UPDNETI_networkRequest", expectedNetworkRequest)
+			//verify(mockExecution).setVariable("UPDNETI_networkInputs", expectedNetworkInputs)
+			//verify(mockExecution, atLeast(3)).setVariable("UPDNETI_networkOutputs", "")
+			
+			//verify(mockExecution).setVariable("UPDNETI_requestId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution).setVariable("UPDNETI_source", "VID")
+			//verify(mockExecution).setVariable("UPDNETI_messageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution, atLeast(1)).setVariable("GENGS_type", "service-instance")
+							
+		}
+
+		
+		@Test
+		//@Ignore
+		public void preProcessRequest_MissingNetworkId() {
+
+			println "************ preProcessRequest_MissingName() ************* "
+			
+			WorkflowException missingNameWorkflowException = new WorkflowException("UpdateNetworkInstanceInfra", 2500, "Variable 'network-id' value/element is missing.")
+			
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("isBaseVfModule")).thenReturn(true)
+			when(mockExecution.getVariable("recipeTimeout")).thenReturn(0)
+			when(mockExecution.getVariable("requestAction")).thenReturn("UPDATE")
+			when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("vnfId")).thenReturn("")
+			when(mockExecution.getVariable("volumeGroupId")).thenReturn("")
+			//when(mockExecution.getVariable("networkId")).thenReturn("49c86598-f766-46f8-84f8-8d1c1b10f9b4")
+			when(mockExecution.getVariable("serviceType")).thenReturn("MOG")
+			when(mockExecution.getVariable("networkType")).thenReturn("modelName")
+			when(mockExecution.getVariable("bpmnRequest")).thenReturn(jsonIncomingRequest)
+			
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_adapters_db_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			try {
+				UpdateNetworkInstanceInfra.preProcessRequest(mockExecution)
+			} catch (Exception ex) {
+				println " Test End - Handle catch-throw BpmnError()! "
+			}
+			
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution, atLeast(1)).getVariable("isDebugLogEnabled")
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "UPDNETI_")
+			
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			// Authentications
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "Basic cGFzc3dvcmQ=")
+
+			verify(mockExecution).setVariable("UPDNETI_UpdateNetworkInstanceInfraJsonRequest", jsonIncomingRequest)
+			//verify(mockExecution, atLeast(1)).setVariable("UPDNETI_networkOutputs", networkOutputs)
+			//verify(mockExecution).setVariable("UPDNETI_networkRequest", expectedNetworkRequestMissingNetworkId)
+			//verify(mockExecution).setVariable("UPDNETI_networkInputs", expectedNetworkInputs)
+			
+			//verify(mockExecution).setVariable("UPDNETI_requestId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution).setVariable("UPDNETI_source", "VID")
+			//verify(mockExecution).setVariable("UPDNETI_messageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			
+			verify(mockExecution).setVariable(eq("WorkflowException"), refEq(missingNameWorkflowException))
+						
+		}
+		
+		@Test
+		//@Ignore
+		public void preProcessRequest_MissingCloudRegion() {
+			
+			println "************ preProcessRequest_MissingCloudRegion() ************* "
+			
+			WorkflowException missingCloudRegionWorkflowException = new WorkflowException("UpdateNetworkInstanceInfra", 2500, "requestDetails has missing 'aic-cloud-region' value/element.")
+			
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("isBaseVfModule")).thenReturn(true)
+			when(mockExecution.getVariable("recipeTimeout")).thenReturn(0)
+			when(mockExecution.getVariable("requestAction")).thenReturn("UPDATE")
+			when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("vnfId")).thenReturn("")
+			when(mockExecution.getVariable("volumeGroupId")).thenReturn("")
+			when(mockExecution.getVariable("networkId")).thenReturn("networkId")
+			when(mockExecution.getVariable("serviceType")).thenReturn("MOG")
+			when(mockExecution.getVariable("networkType")).thenReturn("modelName")
+			
+			when(mockExecution.getVariable("bpmnRequest")).thenReturn(jsonIncomingRequest_MissingCloudRegion)
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_adapters_db_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+
+									
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			try {
+				UpdateNetworkInstanceInfra.preProcessRequest(mockExecution)
+			} catch (Exception ex) {
+				println " Test End - Handle catch-throw BpmnError()! "
+			}
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution, atLeast(1)).getVariable("isDebugLogEnabled")
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "UPDNETI_")
+			
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			verify(mockExecution).setVariable("UPDNETI_messageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			// Authentications
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "Basic cGFzc3dvcmQ=")
+
+			verify(mockExecution).setVariable("UPDNETI_UpdateNetworkInstanceInfraJsonRequest", jsonIncomingRequest_MissingCloudRegion)
+			//verify(mockExecution).setVariable("UPDNETI_networkRequest", "")
+			//verify(mockExecution).setVariable("UPDNETI_networkInputs", "")
+			//verify(mockExecution, atLeast(1)).setVariable("UPDNETI_networkOutputs", "")
+			
+			//verify(mockExecution).setVariable("UPDNETI_requestId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution).setVariable("UPDNETI_source", "VID")
+			
+			verify(mockExecution).setVariable(eq("WorkflowException"), refEq(missingCloudRegionWorkflowException))
+							
+		}
+				
+		@Test
+		//@Ignore
+		public void sendSyncResponse() {
+			
+			println "************ sendSyncResponse ************* "
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("isAsyncProcess")).thenReturn(true)
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			//when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.sendSyncResponse(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UpdateNetworkInstanceInfraResponseCode", "202")
+
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void sendSyncError() {
+			
+			println "************ sendSyncError ************* "
+			
+			ExecutionEntity mockExecution = setupMock()									
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("isAsyncProcess")).thenReturn(true)
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			//when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.sendSyncError(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UpdateNetworkInstanceInfraResponseCode", "500")
+			
+		}
+		
+		
+		@Test
+		//@Ignore
+		public void prepareDBRequest() {
+			
+			println "************ prepareDBRequest ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("UPDNETI_networkOutputs")).thenReturn("")
+			when(mockExecution.getVariable("UPDNETI_requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("UPDNETI_orchestrationStatus")).thenReturn("")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.prepareDBRequest(mockExecution)
+			
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_updateDBRequest", updateDBRequest)
+		
+		}
+		
+		@Test
+		//@Ignore
+		public void prepareDBRequestErro_ExceptionObject() {
+			
+			println "************ prepareDBRequest ************* "
+			
+			WorkflowException sndcWorkflowException = new WorkflowException("UpdateNetworkInstanceInfra", 500, "Received error from SDN-C: No availability zone available")
+			
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("UPDNETI_networkOutputs")).thenReturn("")
+			when(mockExecution.getVariable("UPDNETI_requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("UPDNETI_networkOutputs")).thenReturn("")
+			when(mockExecution.getVariable("UPDNETI_orchestrationStatus")).thenReturn("")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(sndcWorkflowException)
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.prepareDBRequestError(mockExecution)
+			
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_updateDBRequest", updateDBRequestError)
+		
+		}
+		
+		@Test
+		//@Ignore
+		public void prepareDBRequest_Outputs() {
+			
+			println "************ prepareDBRequest ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("UPDNETI_networkOutputs")).thenReturn(networkOutputs)
+			when(mockExecution.getVariable("UPDNETI_requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("UPDNETI_orchestrationStatus")).thenReturn("")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.prepareDBRequest(mockExecution)
+			
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_updateDBRequest", updateDBRequest_Outputs)
+		
+		}
+			
+		@Test
+		//@Ignore
+		public void prepareUpdateNetworkRequest() {
+			
+			println "************ prepareNetworkRequest ************* "
+						ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("UPDNETI_networkRequest")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable("UPDNETI_requeryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable("UPDNETI_cloudRegionPo")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("messageId_generated")
+			when(mockExecution.getVariable("UPDNETI_source")).thenReturn("VID")
+			//when(mockExecution.getVariable("UPDNETI_queryVpnBindingAAIResponse")).thenReturn(queryVpnBindingAAIResponse)
+			when(mockExecution.getVariable("UPDNETI_routeCollection")).thenReturn("<routeTargets>13979:105757</routeTargets><routeTargets>13979:105757</routeTargets>")
+			when(mockExecution.getVariable("UPDNETI_networkCollection")).thenReturn("<policyFqdns>GN_EVPN_Test</policyFqdns>")
+			when(mockExecution.getVariable("UPDNETI_tableRefCollection")).thenReturn("<routeTableFqdns>refFQDN1</routeTableFqdns><routeTableFqdns>refFQDN2</routeTableFqdns>")
+			when(mockExecution.getVariable("UPDNETI_requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//when(mockExecution.getVariable("URN_?????")).thenReturn("")   // notificationUrl, //TODO - is this coming from URN? What variable/value to use?
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("UPDNETI_rollbackEnabled")).thenReturn("true")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.prepareUpdateNetworkRequest(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			// verify set prefix = "UPDNETI_"
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			
+			verify(mockExecution).setVariable("UPDNETI_updateNetworkRequest", updateNetworkRequest)
+			
+		}
+		
+
+		@Test
+		//@Ignore
+		public void prepareUpdateNetworkRequest_NoPhysicalname() {
+			
+			println "************ prepareNetworkRequest ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("UPDNETI_networkRequest")).thenReturn(NetworkRequest_noPhysicalName)
+			when(mockExecution.getVariable("UPDNETI_requeryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable("UPDNETI_cloudRegionPo")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("messageId_generated")
+			when(mockExecution.getVariable("UPDNETI_source")).thenReturn("VID")
+			//when(mockExecution.getVariable("UPDNETI_queryVpnBindingAAIResponse")).thenReturn(queryVpnBindingAAIResponse)
+			when(mockExecution.getVariable("UPDNETI_routeCollection")).thenReturn("<routeTargets>13979:105757</routeTargets><routeTargets>13979:105757</routeTargets>")
+			when(mockExecution.getVariable("UPDNETI_networkCollection")).thenReturn("<policyFqdns>GN_EVPN_Test</policyFqdns>")
+			when(mockExecution.getVariable("UPDNETI_tableRefCollection")).thenReturn("")
+			when(mockExecution.getVariable("UPDNETI_requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//when(mockExecution.getVariable("URN_?????")).thenReturn("")   // notificationUrl, //TODO - is this coming from URN? What variable/value to use?
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("UPDNETI_rollbackEnabled")).thenReturn("true")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.prepareUpdateNetworkRequest(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			// verify set prefix = "UPDNETI_"
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			
+			verify(mockExecution).setVariable("UPDNETI_updateNetworkRequest", updateNetworkRequest_noPhysicalName)
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void prepareSDNCRequest() {
+			
+			println "************ prepareSDNCRequest ************* "
+			
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("UPDNETI_networkRequest")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable("UPDNETI_cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable("UPDNETI_serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("openecomp-mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:28090/SDNCAdapterCallback")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("GENGSI_siResourceLink")).thenReturn("https://aai-int1.test.com:8443/aai/v8/business/customers/customer/MSO_1610_dev/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/6d4eb22a-82f1-4257-9f80-4176262cfe69/")
+			
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.prepareSDNCRequest(mockExecution)
+			
+			// verify set prefix = "UPDNETI_"
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_changeAssignSDNCRequest", changeAssignSDNCRequest)
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void prepareSDNCRollbackRequest() {
+			
+			println "************ prepareSDNCRollbackRequest ************* "
+			
+
+			
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("UPDNETI_networkRequest")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable("UPDNETI_cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable("UPDNETI_serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("UPDNETI_changeAssignSDNCResponse")).thenReturn(assignResponse)
+			when(mockExecution.getVariable("openecomp-mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:28090/SDNCAdapterCallback")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("GENGSI_siResourceLink")).thenReturn("https://aai-int1.test.com:8443/aai/v8/business/customers/customer/MSO_1610_dev/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/6d4eb22a-82f1-4257-9f80-4176262cfe69/")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.prepareSDNCRollbackRequest(mockExecution)
+			
+			// verify set prefix = "UPDNETI_"
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_rollbackSDNCRequest", sdncRollbackRequest)
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkId_200() {
+
+			println "************ callRESTQueryAAINetworkId ************* "
+			
+			WireMock.reset();
+			
+			MockGetNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", 200);
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("UPDNETI_networkRequest")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:28090")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.callRESTQueryAAINetworkId(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_queryIdAAIRequest", "http://localhost:28090/aai/v8/network/l3-networks/l3-network/49c86598-f766-46f8-84f8-8d1c1b10f9b4")
+			verify(mockExecution).setVariable("UPDNETI_aaiIdReturnCode", "200")
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void callRESTQueryAAICloudRegion30_200() {
+
+			println "************ callRESTQueryAAICloudRegion30_200 ************* "
+			
+			WireMock.reset();
+			MockGetCloudRegion("RDM2WAGPLCP", 200, "CreateNetworkV2/cloudRegion30_AAIResponse_Success.xml")
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("prefix")).thenReturn("UPDNETI_")
+			when(mockExecution.getVariable("UPDNETI_networkInputs")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:28090")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_cloud_region_uri")).thenReturn("/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.callRESTQueryAAICloudRegion(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_queryCloudRegionRequest", "http://localhost:28090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/RDM2WAGPLCP")
+			verify(mockExecution, atLeast(2)).setVariable("UPDNETI_queryCloudRegionReturnCode", "200")
+			verify(mockExecution).setVariable("UPDNETI_isCloudRegionGood", true)
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void callRESTQueryAAICloudRegion25_200() {
+
+			println "************ callRESTQueryAAICloudRegion25_200 ************* "
+			
+			WireMock.reset();
+			MockGetCloudRegion("RDM2WAGPLCP", 200, "CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml")
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("prefix")).thenReturn("UPDNETI_")
+			when(mockExecution.getVariable("UPDNETI_networkInputs")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:28090")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_cloud_region_uri")).thenReturn("/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.callRESTQueryAAICloudRegion(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_queryCloudRegionRequest", "http://localhost:28090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/RDM2WAGPLCP")
+			verify(mockExecution, atLeast(2)).setVariable("UPDNETI_queryCloudRegionReturnCode", "200")
+			verify(mockExecution).setVariable("UPDNETI_isCloudRegionGood", true)
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void callRESTQueryAAICloudRegion_NotFound() {
+
+			println "************ callRESTQueryAAICloudRegionFake ************* "
+			
+			WireMock.reset();
+			MockGetCloudRegion("MDTWNJ21", 404, "")
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("prefix")).thenReturn("UPDNETI_")
+			when(mockExecution.getVariable("UPDNETI_networkInputs")).thenReturn(vnfRequestFakeRegion)
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:28090")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_cloud_region_uri")).thenReturn("/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.callRESTQueryAAICloudRegion(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_queryCloudRegionRequest", "http://localhost:28090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/MDTWNJ21")
+			verify(mockExecution, atLeast(1)).setVariable("UPDNETI_queryCloudRegionReturnCode", "404")
+			verify(mockExecution).setVariable("UPDNETI_cloudRegionPo", "MDTWNJ21")
+			verify(mockExecution).setVariable("UPDNETI_cloudRegionSdnc", "AAIAIC25")
+			verify(mockExecution).setVariable("UPDNETI_isCloudRegionGood", true)
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkVpnBinding_200() {
+
+			println "************ callRESTQueryAAINetworkVpnBinding_200 ************* "
+			
+			WireMock.reset();
+			MockGetNetworkVpnBinding("85f015d0-2e32-4c30-96d2-87a1a27f8017", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200)
+			MockGetNetworkVpnBinding("c980a6ef-3b88-49f0-9751-dbad8608d0a6", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("UPDNETI_requeryIdAAIResponse")).thenReturn(queryIdAIIResponse) // v6
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:28090")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_vpn_binding_uri")).thenReturn("/aai/v8/network/vpn-bindings/vpn-binding")
+//			when(mockExecution.getVariable("URN_mso_workflow_UpdateNetworkInstanceInfra_aai_network_vpn-binding_uri")).thenReturn("")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true") 
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.callRESTQueryAAINetworkVpnBinding(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_vpnCount", 2)
+			verify(mockExecution).setVariable("UPDNETI_vpnBindings", ['/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/', '/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/'])
+			// the last vpnBinding value is saved.
+			verify(mockExecution).setVariable("UPDNETI_queryVpnBindingAAIRequest", "http://localhost:28090/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017")
+			verify(mockExecution, atLeast(2)).setVariable("UPDNETI_aaiQqueryVpnBindingReturnCode", "200")
+			
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkVpnBinding_TestScenario01_200() {
+
+			println "************ callRESTQueryAAINetworkVpnBinding_200 ************* "
+			
+			WireMock.reset();
+			MockGetNetworkVpnBinding("85f015d0-2e32-4c30-96d2-87a1a27f8017", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200)
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("UPDNETI_requeryIdAAIResponse")).thenReturn(queryIdAIIResponseTestScenario01) 
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:28090")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_vpn_binding_uri")).thenReturn("/aai/v8/network/vpn-bindings/vpn-binding")
+//			when(mockExecution.getVariable("URN_mso_workflow_UpdateNetworkInstanceInfra_aai_network_vpn-binding_uri")).thenReturn("")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.callRESTQueryAAINetworkVpnBinding(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_vpnCount", 1)
+			verify(mockExecution).setVariable("UPDNETI_vpnBindings", ['/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/'])
+			// the last vpnBinding value is saved.
+			verify(mockExecution).setVariable("UPDNETI_queryVpnBindingAAIRequest", "http://localhost:28090/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017")
+			verify(mockExecution).setVariable("UPDNETI_aaiQqueryVpnBindingReturnCode", "200")
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkVpnBinding_200_URN_Uri() {
+
+			println "************ callRESTQueryAAINetworkVpnBinding_200 ************* "
+			
+			WireMock.reset();
+			MockGetNetworkVpnBinding("85f015d0-2e32-4c30-96d2-87a1a27f8017", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200)
+			MockGetNetworkVpnBinding("c980a6ef-3b88-49f0-9751-dbad8608d0a6", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("UPDNETI_requeryIdAAIResponse")).thenReturn(queryIdAIIResponse) 
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:28090")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_vpn_binding_uri")).thenReturn("/aai/v8/network/vpn-bindings/vpn-binding")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.callRESTQueryAAINetworkVpnBinding(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_vpnCount", 2)
+			verify(mockExecution).setVariable("UPDNETI_vpnBindings", ['/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/', '/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/'])
+			// the last vpnBinding value is saved.
+			verify(mockExecution).setVariable("UPDNETI_queryVpnBindingAAIRequest", "http://localhost:28090/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017")
+			verify(mockExecution, atLeast(2)).setVariable("UPDNETI_aaiQqueryVpnBindingReturnCode", "200")
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkVpnBinding_NotPresent() {
+
+			println "************ callRESTQueryAAINetworkVpnBinding_NotPresent ************* "
+			
+			WireMock.reset();
+			MockGetNetworkVpnBinding("85f015d0-2e32-4c30-96d2-87a1a27f8017", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200)
+			
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			
+			when(mockExecution.getVariable("UPDNETI_requeryIdAAIResponse")).thenReturn(queryIdAIIResponseVpnNotPresent)  
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:28090")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.callRESTQueryAAINetworkVpnBinding(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_aaiQqueryVpnBindingReturnCode", "200")
+			verify(mockExecution).setVariable("UPDNETI_vpnCount", 0)
+			verify(mockExecution).setVariable("UPDNETI_queryVpnBindingAAIResponse", aaiVpnResponseStub)
+						
+		}
+		
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkTableRef_200() {
+
+			println "************ callRESTQueryAAINetworkTableRef_200 ************* "
+			
+			WireMock.reset();
+			MockGetNetworkRouteTable("refFQDN1", "CreateNetworkV2/createNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", 200)
+			MockGetNetworkRouteTable("refFQDN2", "CreateNetworkV2/createNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", 200)
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("UPDNETI_requeryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:28090")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_route_table_reference_uri")).thenReturn("/aai/v8/network/route-table-references/route-table-reference")
+//			when(mockExecution.getVariable("URN_mso_workflow_CreateNetworkInstanceInfra_aai_network_table_reference_uri")).thenReturn("")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.callRESTQueryAAINetworkTableRef(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_networkTableRefCount", 2)
+			verify(mockExecution).setVariable("UPDNETI_networkTableRefUriList", ['/aai/v8/network/route-table-references/route-table-reference/refFQDN1','/aai/v8/network/route-table-references/route-table-reference/refFQDN2'])
+			// the last vpnBinding value is saved.
+			verify(mockExecution).setVariable("UPDNETI_queryNetworkTableRefAAIRequest", "http://localhost:28090/aai/v8/network/route-table-references/route-table-reference/refFQDN1")
+			verify(mockExecution, atLeast(2)).setVariable("UPDNETI_aaiQqueryNetworkTableRefReturnCode", "200")
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkPolicy_200() {
+
+			println "************ callRESTQueryAAINetworkPolicy_200 ************* "
+			
+			WireMock.reset();
+			MockGetNetworkPolicy("cee6d136-e378-4678-a024-2cd15f0ee0cg", "UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml", 200)
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("UPDNETI_requeryIdAAIResponse")).thenReturn(queryIdAIIResponse) 
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:28090")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_network_policy_uri")).thenReturn("/aai/v8/network/network-policies/network-policy")
+//			when(mockExecution.getVariable("URN_mso_workflow_UpdateNetworkInstanceInfra_aai_network_policy_uri")).thenReturn("")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.callRESTQueryAAINetworkPolicy(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_networkPolicyCount", 1)
+			verify(mockExecution).setVariable("UPDNETI_networkPolicyUriList", ['/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg'])
+			// the last vpnBinding value is saved.
+			verify(mockExecution).setVariable("UPDNETI_queryNetworkPolicyAAIRequest", "http://localhost:28090/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg")
+			verify(mockExecution).setVariable("UPDNETI_aaiQqueryNetworkPolicyReturnCode", "200")
+			
+		}
+		
+		
+		@Test
+		//@Ignore
+		public void callRESTReQueryAAINetworkId_200() {
+
+			println "************ callRESTReQueryAAINetworkId ************* "
+			
+			WireMock.reset();
+			MockGetNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", 200)
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("UPDNETI_changeAssignSDNCResponse")).thenReturn(sdncAdapterWorkflowFormattedResponse)
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:28090")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.callRESTReQueryAAINetworkId(mockExecution)
+			
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_requeryIdAAIRequest", "http://localhost:28090/aai/v8/network/l3-networks/l3-network/49c86598-f766-46f8-84f8-8d1c1b10f9b4")
+			verify(mockExecution).setVariable("UPDNETI_aaiRequeryIdReturnCode", "200")
+			
+		}
+		
+
+		@Test
+		//@Ignore
+		public void callRESTUpdateContrailAAINetworkREST_200() {
+
+			println "************ callRESTUpdateContrailAAINetwork ************* "
+			
+			WireMock.reset();
+			MockPutNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", 200, "UpdateNetworkV2/updateNetwork_updateContrail_AAIResponse_Success.xml")
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("UPDNETI_changeAssignSDNCResponse")).thenReturn(sdncAdapterWorkflowFormattedResponse)
+			when(mockExecution.getVariable("UPDNETI_requeryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable("UPDNETI_updateNetworkResponse")).thenReturn(updateNetworkResponseREST)
+			when(mockExecution.getVariable("UPDNETI_messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:28090")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.callRESTUpdateContrailAAINetwork(mockExecution)
+
+			// Capture the arguments to setVariable
+			ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
+			ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
+			
+			verify(mockExecution, times(6)).setVariable(captor1.capture(), captor2.capture())
+			List<String> arg2List = captor2.getAllValues()
+			String payloadResponseActual = arg2List.get(4)
+			
+			assertEquals(updateContrailAAIResponse.replaceAll("\\s+", ""), payloadResponseActual.replaceAll("\\s+", ""))
+			
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_updateContrailAAIUrlRequest", "http://localhost:28090/aai/v8/network/l3-networks/l3-network/49c86598-f766-46f8-84f8-8d1c1b10f9b4")
+			verify(mockExecution).setVariable("UPDNETI_updateContrailAAIPayloadRequest", updateContrailAAIPayloadRequest)
+			verify(mockExecution).setVariable("UPDNETI_aaiUpdateContrailReturnCode", "200")
+			verify(mockExecution).setVariable("UPDNETI_isPONR", true)
+				
+		}
+		
+
+	
+		@Test
+		//@Ignore
+		public void validateUpdateNetworkResponseREST() {
+			
+			println "************ validateNetworkResponse ************* "
+			
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("UPDNETI_updateNetworkResponse")).thenReturn(updateNetworkResponseREST)
+			when(mockExecution.getVariable("UPDNETI_networkReturnCode")).thenReturn('200')
+			
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.validateUpdateNetworkResponse(mockExecution)
+
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+						
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_updateNetworkResponse", updateNetworkResponseREST)
+			verify(mockExecution).setVariable("UPDNETI_isNetworkRollbackNeeded", true)
+			verify(mockExecution).setVariable("UPDNETI_rollbackNetworkRequest", updateRollbackNetworkRequest)
+
+		}
+		
+		@Test
+		//@Ignore
+		public void validateUpdateNetworkResponseREST_Error() {
+			
+			println "************ validateNetworkResponse ************* "
+			
+			WorkflowException workflowException = new WorkflowException("UpdateNetworkInstanceInfra", 2500, "Received error from Network Adapter: JBWEB000065: HTTP Status 500.")
+			
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("UPDNETI_updateNetworkResponse")).thenReturn(networkException500)
+			when(mockExecution.getVariable("UPDNETI_networkReturnCode")).thenReturn('500')
+			
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			try {
+				UpdateNetworkInstanceInfra.validateUpdateNetworkResponse(mockExecution)
+			} catch (Exception ex) {
+				println " Test End - Handle catch-throw BpmnError()! "
+			}
+						
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution, atLeast(1)).setVariable("WorkflowException", refEq(workflowException, any(WorkflowException.class)))
+			
+		}
+		
+		@Test
+		//@Ignore 
+		public void validateSDNCResponse() {
+			
+			println "************ validateSDNCResponse ************* "
+			
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("UPDNETI_changeAssignSDNCResponse")).thenReturn(sdncAdapterWorkflowResponse)
+			when(mockExecution.getVariable("prefix")).thenReturn("UPDNETI_")
+			when(mockExecution.getVariable("SDNCA_SuccessIndicator")).thenReturn(true)
+			when(mockExecution.getVariable("UPDNETI_sdncReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable("UPDNETI_isResponseGood")).thenReturn(true)
+			
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			try {
+			  UpdateNetworkInstanceInfra.validateSDNCResponse(mockExecution)
+			  verify(mockExecution).setVariable("UPDNETI_isSdncRollbackNeeded", true)
+			  verify(mockExecution).setVariable("UPDNETI_rollbackSDNCRequest", "")
+			  
+			} catch (Exception ex) {
+				println " Graceful Exit - " + ex.getMessage()
+			}
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+			
+			//verify(mockExecution).setVariable("UPDNETI_isSdncRollbackNeeded", true)
+				
+		}
+
+		@Test
+		//@Ignore
+		public void validateSDNCResponse_Error() {
+			
+			println "************ validateSDNCResponse ************* "
+			//ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("UPDNETI_changeAssignSDNCResponse")).thenReturn(sdncAdapterWorkflowResponse_Error)
+			when(mockExecution.getVariable("prefix")).thenReturn("UPDNETI_")
+			when(mockExecution.getVariable("SDNCA_SuccessIndicator")).thenReturn(false)
+			when(mockExecution.getVariable("UPDNETI_sdncReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable("UPDNETI_isResponseGood")).thenReturn(true)
+			
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			try {
+				UpdateNetworkInstanceInfra.validateSDNCResponse(mockExecution)
+			} catch (Exception ex) {
+				println " Graceful Exit! - " + ex.getMessage() 
+			}
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+			
+			// verify set prefix = "UPDNETI_"
+			//verify(mockExecution).setVariable("UPDNETI_sdncResponseSuccess", false)
+				
+		}
+
+		
+		
+		@Test
+		//@Ignore
+		public void postProcessResponse() {
+			
+			println "************ postProcessResponse ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("UPDNETI_source")).thenReturn("PORTAL")
+			when(mockExecution.getVariable("UPDNETI_requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("UPDNETI_dbReturnCode")).thenReturn("200")
+			
+			// postProcessResponse(Execution execution)						
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.postProcessResponse(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_Success", true)
+			verify(mockExecution).setVariable("UPDNETI_CompleteMsoProcessRequest", completeMsoProcessRequest)
+		
+		}
+
+		@Test
+		//@Ignore
+		public void validateRollbackResponses_Good() {
+			
+			WorkflowException workflowException = new WorkflowException("UpdateNetworkInstanceInfra", 2500, "AAI Update Contrail Failed.  Error 404.")
+			WorkflowException expectedWorkflowException = new WorkflowException("UpdateNetworkInstanceInfra", 2500, "AAI Update Contrail Failed.  Error 404. + PO Network rollback is not supported for Update. Submit another Update to restore/rollback. + SNDC rollback completed.")
+				  
+			println "************ validateRollbackResponses_Good() ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn("UPDNETI_")
+
+			when(mockExecution.getVariable("UPDNETI_isNetworkRollbackNeeded")).thenReturn(true)
+			when(mockExecution.getVariable("UPDNETI_rollbackNetworkReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable("UPDNETI_rollbackNetworkResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable("UPDNETI_isSdncRollbackNeeded")).thenReturn(true)
+			when(mockExecution.getVariable("UPDNETI_rollbackSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable("UPDNETI_rollbackSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+									
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.validateRollbackResponses(mockExecution)
+			
+			// verify set prefix = "UPDNETI_"
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("WorkflowException", refEq(expectedWorkflowException, any(WorkflowException.class)))
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void validateRollbackResponses_Failed() {
+			
+			WorkflowException workflowException = new WorkflowException("UpdateNetworkInstanceInfra", 7020, "AAI Update Contrail Failed.  Error 404.")
+			WorkflowException expectedWorkflowException = new WorkflowException("UpdateNetworkInstanceInfra", 7020, "AAI Update Contrail Failed.  Error 404. + PO Network rollback is not supported for Update. Submit another Update to restore/rollback. + SDNC rollback failed. ")
+				  
+			println "************ validateRollbackResponses_Failed() ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn("UPDNETI_")
+
+			when(mockExecution.getVariable("UPDNETI_isNetworkRollbackNeeded")).thenReturn(true)
+			when(mockExecution.getVariable("UPDNETI_rollbackNetworkReturnCode")).thenReturn("404")
+			when(mockExecution.getVariable("UPDNETI_rollbackNetworkResponse")).thenReturn("BadResponse")
+			when(mockExecution.getVariable("UPDNETI_isSdncRollbackNeeded")).thenReturn(true)
+			when(mockExecution.getVariable("UPDNETI_rollbackSDNCReturnCode")).thenReturn("500")
+			when(mockExecution.getVariable("UPDNETI_rollbackSDNCResponse")).thenReturn("BadResponse")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+									
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.validateRollbackResponses(mockExecution)
+			
+			// verify set prefix = "UPDNETI_"
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution, atLeast(1)).setVariable("WorkflowException", refEq(expectedWorkflowException, any(WorkflowException.class)))
+
+		}
+		
+		@Test
+		//@Ignore
+		public void validateRollbackResponses_NetworkFailed() {
+			
+			WorkflowException workflowException = new WorkflowException("UpdateNetworkInstanceInfra", 7020, "AAI Update Contrail Failed.  Error 404.")
+			WorkflowException expectedWorkflowExceptionFailed = new WorkflowException("UpdateNetworkInstanceInfra", 7020, "AAI Update Contrail Failed.  Error 404. + PO Network rollback is not supported for Update. Submit another Update to restore/rollback. + SNDC rollback completed.")
+				  
+			println "************ validateRollbackResponses_NetworkFailed() ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn("UPDNETI_")
+
+			when(mockExecution.getVariable("UPDNETI_isNetworkRollbackNeeded")).thenReturn(true)
+			when(mockExecution.getVariable("UPDNETI_rollbackNetworkReturnCode")).thenReturn("404")
+			when(mockExecution.getVariable("UPDNETI_rollbackNetworkResponse")).thenReturn("BadResponse")
+			when(mockExecution.getVariable("UPDNETI_isSdncRollbackNeeded")).thenReturn(true)
+			when(mockExecution.getVariable("UPDNETI_rollbackSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable("UPDNETI_rollbackSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+									
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.validateRollbackResponses(mockExecution)
+			
+			// verify set prefix = "UPDNETI_"
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution, atLeast(1)).setVariable("WorkflowException", refEq(expectedWorkflowExceptionFailed , any(WorkflowException.class)))
+
+		}
+		
+		@Test
+		//@Ignore
+		public void validateRollbackResponses_SdncFailed() {
+			
+			WorkflowException workflowException = new WorkflowException("UpdateNetworkInstanceInfra", 7020, "AAI Update Contrail Failed.  Error 404.")
+			WorkflowException expectedWorkflowException = new WorkflowException("UpdateNetworkInstanceInfra", 7020, "AAI Update Contrail Failed.  Error 404. + PO Network rollback is not supported for Update. Submit another Update to restore/rollback. + SDNC rollback failed. ")
+				  
+			println "************ validateRollbackResponses_SdncFailed() ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn("UPDNETI_")
+
+			when(mockExecution.getVariable("UPDNETI_isNetworkRollbackNeeded")).thenReturn(true)
+			when(mockExecution.getVariable("UPDNETI_rollbackNetworkReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable("UPDNETI_rollbackNetworkResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable("UPDNETI_isSdncRollbackNeeded")).thenReturn(true)
+			when(mockExecution.getVariable("UPDNETI_rollbackSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable("UPDNETI_rollbackSDNCResponse")).thenReturn("<response-code>400</response-code>")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+									
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.validateRollbackResponses(mockExecution)
+			
+			// verify set prefix = "UPDNETI_"
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("WorkflowException", refEq(expectedWorkflowException , any(WorkflowException.class)))
+
+		}
+		
+		@Test
+		//@Ignore
+		public void validateRollbackResponses_NoRollbacks() {
+			
+			WorkflowException workflowException = new WorkflowException("UpdateNetworkInstanceInfra", 2500, " AAI Update Contrail Failed.  Error 404")
+			WorkflowException expectedWorkflowException = new WorkflowException("UpdateNetworkInstanceInfra", 2500, " AAI Update Contrail Failed.  Error 404")
+				  
+			println "************ validateRollbackResponses_NoRollbacks() ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn("UPDNETI_")
+
+			when(mockExecution.getVariable("UPDNETI_isNetworkRollbackNeeded")).thenReturn(false)
+			when(mockExecution.getVariable("UPDNETI_rollbackNetworkReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable("UPDNETI_rollbackNetworkResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable("UPDNETI_isSdncRollbackNeeded")).thenReturn(false)
+			when(mockExecution.getVariable("UPDNETI_rollbackSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable("UPDNETI_rollbackSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+									
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.validateRollbackResponses(mockExecution)
+			
+			// verify set prefix = "UPDNETI_"
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "UPDNETI_")
+			//verify(mockExecution, atLeast(1)).setVariable("WorkflowException", any(expectedWorkflowException))
+			verify(mockExecution, atLeast(1)).setVariable("WorkflowException", refEq(expectedWorkflowException, any(WorkflowException.class)))
+
+		}
+		
+	
+		@Test
+		//@Ignore 
+		public void buildErrorResponse() {
+			
+			println "************ buildErrorResponse ************* "
+			
+			
+			WorkflowException sndcWorkflowException = new WorkflowException("UpdateNetworkInstanceInfra", 5300, "Received error from SDN-C: No availability zone available.")
+			
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("UPDNETI_requestId")).thenReturn("b69c9054-da09-4a2c-adf5-51042b62bfac")
+			when(mockExecution.getVariable("UPDNETI_source")).thenReturn("PORTAL")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(sndcWorkflowException)
+			
+			// buildErrorResponse(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.buildErrorResponse(mockExecution)
+			
+			// verify set prefix = "UPDNETI_"
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_Success", false)
+			verify(mockExecution).setVariable("UPDNETI_FalloutHandlerRequest", falloutHandlerRequest)
+			
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+		}
+		
+		@Test
+		//@Ignore
+		public void buildErrorResponse_WorkflowExceptionObject() {
+			
+			println "************ buildErrorResponse ************* "
+			
+			WorkflowException sndcWorkflowException = new WorkflowException("UpdateNetworkInstanceInfra", 7000, "Received error from SDN-C: No availability zone available") 
+			
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("UPDNETI_requestId")).thenReturn("b69c9054-da09-4a2c-adf5-51042b62bfac")
+			when(mockExecution.getVariable("UPDNETI_source")).thenReturn("VID")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(sndcWorkflowException)
+			
+			// buildErrorResponse(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.buildErrorResponse(mockExecution)
+			
+			// verify set prefix = "UPDNETI_"
+			verify(mockExecution).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_Success", false)
+			verify(mockExecution).setVariable("UPDNETI_FalloutHandlerRequest", falloutHandlerRequestObject)
+			
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+		}
+		
+		@Test
+		//@Ignore
+		public void buildErrorResponse_Scenario01() {
+			
+			WorkflowException aaiWorkflowException_Secnario01 = new WorkflowException("UpdateNetworkInstanceInfra", 7020, "Unexpected Response from AAI - 400")
+			
+			println "************ buildErrorResponse ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("UPDNETI_requestId")).thenReturn("b69c9054-da09-4a2c-adf5-51042b62bfac")
+			when(mockExecution.getVariable("UPDNETI_source")).thenReturn("VID")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(aaiWorkflowException_Secnario01)
+			when(mockExecution.getVariable("UPDNETI_dbReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable("UPDNETI_updateDBResponse")).thenReturn("<GoodResponse>")
+			
+			when(mockExecution.getVariable("UPDNETI_aaiRequeryIdReturnCode")).thenReturn("400")
+			
+			// buildErrorResponse(Execution execution)
+			UpdateNetworkInstanceInfra UpdateNetworkInstanceInfra = new UpdateNetworkInstanceInfra()
+			UpdateNetworkInstanceInfra.buildErrorResponse(mockExecution)
+			
+			// verify set prefix = "UPDNETI_"
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "UPDNETI_")
+			verify(mockExecution).setVariable("UPDNETI_Success", false)
+			verify(mockExecution).setVariable("UPDNETI_FalloutHandlerRequest", falloutHandlerRequest_Scenario01)
+			
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+		}
+	
+
+		private ExecutionEntity setupMock() {
+			
+			ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
+			when(mockProcessDefinition.getKey()).thenReturn("UpdateNetworkInstanceInfra")
+			RepositoryService mockRepositoryService = mock(RepositoryService.class)
+			when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
+			when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("UpdateNetworkInstanceInfra")
+			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("UpdateNetworkInstanceInfra")
+			when(mockExecution.getProcessInstanceId()).thenReturn("UpdateNetworkInstanceInfra")
+			when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
+			when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
+			
+			return mockExecution
+		}
+		
+		
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleVolumeInfraV1Test.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleVolumeInfraV1Test.groovy
new file mode 100644
index 0000000..2e9efad
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleVolumeInfraV1Test.groovy
@@ -0,0 +1,93 @@
+/*- 
+ * ============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.infrastructure.scripts;
+
+import static org.junit.Assert.*
+import static org.mockito.Mockito.*
+
+import org.junit.Before
+import org.junit.Ignore
+import org.junit.Rule
+import org.junit.runner.RunWith
+import org.mockito.MockitoAnnotations
+import org.mockito.runners.MockitoJUnitRunner
+
+import com.github.tomakehurst.wiremock.junit.WireMockRule
+
+@RunWith(MockitoJUnitRunner.class)
+@Ignore // No Junits exists in this class to run
+class UpdateVfModuleVolumeInfraV1Test {
+	
+	String xml = """
+	<relationship-list>
+		<relationship>
+			<related-to>tenant</related-to>
+			<related-link>https://aai-ext1.test.com:8443/aai/v7/cloud-infrastructure/cloud-regions/cloud-region/att-aic/mdt1/tenants/tenant/fba1bd1e195a404cacb9ce17a9b2b421/</related-link>
+			<relationship-data>
+				<relationship-key>tenant.tenant-id</relationship-key>
+				<relationship-value>fba1bd1e195a404cacb9ce17a9b2b421</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-owner</relationship-key>
+				<relationship-value>att-aic</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-region-id</relationship-key>
+				<relationship-value>mdt1</relationship-value>
+			</relationship-data>
+			<related-to-property>
+				<property-key>tenant.tenant-name</property-key>
+				<property-value>ECOMP_MDT1</property-value>
+			</related-to-property>
+		</relationship>
+		<relationship>
+			<related-to>vf-module</related-to>
+			<related-link>https://aai-ext1.test.com:8443/aai/v7/cloud-infrastructure/cloud-regions/cloud-region/att-aic/mdt1/tenants/tenant/fba1bd1e195a404cacb9ce17a9b2b421/</related-link>
+			<relationship-data>
+				<relationship-key>vf-module.vf-module-ids</relationship-key>
+				<relationship-value>fba1bd1e195a404cacb9ce17a9b2b421</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-owner</relationship-key>
+				<relationship-value>att-aic</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-region-id</relationship-key>
+				<relationship-value>mdt1</relationship-value>
+			</relationship-data>
+			<related-to-property>
+				<property-key>vf-module.vf-module-name</property-key>
+				<property-value>ECOMP_MDT1</property-value>
+			</related-to-property>
+		</relationship>		
+	</relationship-list>
+"""
+	
+	@Rule
+	public WireMockRule wireMockRule = new WireMockRule(28090);
+	
+	@Before
+	public void init()
+	{
+		MockitoAnnotations.initMocks(this)
+		
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateVfModuleInfraTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateVfModuleInfraTest.java
new file mode 100644
index 0000000..7a9864c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateVfModuleInfraTest.java
@@ -0,0 +1,243 @@
+/*- 
+ * ============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.infrastructure;
+
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetCloudRegion;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithPriority;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkPolicyfqdn;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetVolumeGroupById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutNetwork;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutVfModuleIdNoResponse;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;
+import static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockVNFPost;
+
+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.Test;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit test cases for CreateVfModuleInfra.bpmn
+ */
+public class CreateVfModuleInfraTest extends WorkflowTest {
+	
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public CreateVfModuleInfraTest() throws IOException {
+		callbacks.put("assign", FileUtil.readResourceFile(
+			"__files/VfModularity/SDNCTopologyAssignCallback.xml"));
+		callbacks.put("query", FileUtil.readResourceFile(
+			"__files/VfModularity/SDNCTopologyQueryCallbackVfModule.xml"));
+		callbacks.put("activate", FileUtil.readResourceFile(
+			"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("vnfCreate", FileUtil.readResourceFile(
+			"__files/VfModularity/VNFAdapterRestCreateCallback.xml"));
+	}
+	
+	
+	/**
+	 * Sunny day VID scenario.
+	 * 
+	 * @throws Exception
+	 */
+	@Test	
+	@Deployment(resources = {
+			"process/CreateVfModuleInfra.bpmn",
+			"subprocess/DoCreateVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn",
+			"subprocess/ConfirmVolumeGroupTenant.bpmn",
+			"subprocess/ConfirmVolumeGroupName.bpmn",
+			"subprocess/CreateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/CompleteMsoProcess.bpmn",
+			"subprocess/FalloutHandler.bpmn"
+		})
+	public void sunnyDayVID() throws Exception {
+				
+		logStart();
+		
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+		MockGetGenericVnfByIdWithPriority("skask", ".*", 200, "VfModularity/VfModule-new.xml", 5);
+		MockGetGenericVnfById("skask", "VfModularity/GenericVnf.xml", 200);
+		MockPutVfModuleIdNoResponse("skask", "PCRF", ".*");
+		MockPutNetwork(".*", "VfModularity/AddNetworkPolicy_AAIResponse_Success.xml", 200);
+		MockPutGenericVnf("skask");
+		mockVNFPost("", 202, "skask");
+		mockSDNCAdapter("/SDNCAdapter", "vnf-type>STMTN", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+		mockSDNCAdapter("/SDNCAdapter", "SvcAction>query", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		
+		String businessKey = UUID.randomUUID().toString();
+		String createVfModuleRequest =
+			FileUtil.readResourceFile("__files/CreateVfModule_VID_request.json");
+		
+		Map<String, Object> variables = setupVariablesSunnyDayVID();
+		
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("CreateVfModuleInfra",
+			"v1", businessKey, createVfModuleRequest, variables);
+				
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 10000);
+		
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		injectSDNCCallbacks(callbacks, "assign, query");
+		injectVNFRestCallbacks(callbacks, "vnfCreate");
+		injectSDNCCallbacks(callbacks, "activate");
+		
+		// TODO add appropriate assertions
+
+		waitForProcessEnd(businessKey, 10000);
+		checkVariable(businessKey, "CreateVfModuleSuccessIndicator", true);
+		
+		logEnd();
+	}
+	
+	// Active Scenario
+		private Map<String, Object> setupVariablesSunnyDayVID() {
+			Map<String, Object> variables = new HashMap<String, Object>();
+			//try {
+			//	variables.put("bpmnRequest", FileUtil.readResourceFile("__files/CreateVfModule_VID_request.json"));
+			//}
+			//catch (Exception e) {
+				
+			//}
+			//variables.put("mso-request-id", "testRequestId");
+			variables.put("requestId", "testRequestId");		
+			variables.put("isBaseVfModule", false);
+			variables.put("isDebugLogEnabled", "true");
+			variables.put("recipeTimeout", "0");		
+			variables.put("requestAction", "CREATE_VF_MODULE");
+			variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+			variables.put("vnfId", "skask");
+			variables.put("vnfType", "vSAMP12");
+			variables.put("vfModuleId", "");
+			variables.put("volumeGroupId", "");			
+			variables.put("serviceType", "MOG");	
+			variables.put("vfModuleType", "");			
+			return variables;
+			
+		}
+		
+		/**
+		 * Sunny day VID with volume attach scenario.
+		 * 
+		 * @throws Exception
+		 */
+		@Test
+		@Deployment(resources = {
+				"process/CreateVfModuleInfra.bpmn",
+				"subprocess/DoCreateVfModule.bpmn",
+				"subprocess/SDNCAdapterV1.bpmn",
+				"subprocess/VnfAdapterRestV1.bpmn",
+				"subprocess/ConfirmVolumeGroupTenant.bpmn",
+				"subprocess/ConfirmVolumeGroupName.bpmn",
+				"subprocess/CreateAAIVfModule.bpmn",
+				"subprocess/CreateAAIVfModuleVolumeGroup.bpmn",
+				"subprocess/UpdateAAIVfModule.bpmn",
+				"subprocess/UpdateAAIGenericVnf.bpmn",
+				"subprocess/CompleteMsoProcess.bpmn",
+				"subprocess/FalloutHandler.bpmn"
+			})
+		public void sunnyDayVIDWithVolumeGroupAttach() throws Exception {
+					
+			logStart();
+			
+			MockGetVolumeGroupById("AAIAIC25", "78987", "VfModularity/VolumeGroup.xml");
+			MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+			MockGetCloudRegion("MDTWNJ21", 200, "CreateNetworkV2/cloudRegion30_AAIResponse_Success.xml");
+			MockGetVolumeGroupById("RDM2WAGPLCP", "78987", "DeleteVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml");
+			MockPutVfModuleIdNoResponse("skask", "PCRF", ".*");
+			mockVNFPost("", 202, "skask");
+			MockGetNetworkPolicyfqdn(".*", "VfModularity/QueryNetworkPolicy_AAIResponse_Success.xml", 200);
+			MockPutGenericVnf("skask");
+			MockGetGenericVnfByIdWithPriority("skask", ".*", 200, "VfModularity/VfModule-new.xml", 5);
+			mockSDNCAdapter("/SDNCAdapter", "vnf-type>STMTN", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+			mockSDNCAdapter("/SDNCAdapter", "SvcAction>query", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+			mockVNFPost("", 202, "skask");
+			mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+			
+			String businessKey = UUID.randomUUID().toString();
+			String createVfModuleRequest =
+				FileUtil.readResourceFile("__files/CreateVfModuleVolumeGroup_VID_request.json");
+			
+			Map<String, Object> variables = setupVariablesSunnyDayVIDWVolumeAttach();
+			
+			TestAsyncResponse asyncResponse = invokeAsyncProcess("CreateVfModuleInfra",
+				"v1", businessKey, createVfModuleRequest, variables);
+					
+			WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 10000);
+			
+			String responseBody = response.getResponse();
+			System.out.println("Workflow (Synch) Response:\n" + responseBody);
+			
+			injectSDNCCallbacks(callbacks, "assign, query");
+			injectVNFRestCallbacks(callbacks, "vnfCreate");
+			injectSDNCCallbacks(callbacks, "activate");
+			
+			// TODO add appropriate assertions
+
+			waitForProcessEnd(businessKey, 10000);
+			checkVariable(businessKey, "CreateVfModuleSuccessIndicator", true);
+			
+			logEnd();
+		}
+		
+		// Active Scenario
+			private Map<String, Object> setupVariablesSunnyDayVIDWVolumeAttach() {
+				Map<String, Object> variables = new HashMap<String, Object>();
+				//try {
+				//	variables.put("bpmnRequest", FileUtil.readResourceFile("__files/CreateVfModule_VID_request.json"));
+				//}
+				//catch (Exception e) {
+					
+				//}
+				//variables.put("mso-request-id", "testRequestId");
+				variables.put("requestId", "testRequestId");		
+				variables.put("isBaseVfModule", false);
+				variables.put("isDebugLogEnabled", "true");
+				variables.put("recipeTimeout", "0");		
+				variables.put("requestAction", "CREATE_VF_MODULE");
+				variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+				variables.put("vnfId", "skask");
+				variables.put("vnfType", "vSAMP12");
+				variables.put("vfModuleId", "");
+				variables.put("volumeGroupId", "78987");			
+				variables.put("serviceType", "MOG");	
+				variables.put("vfModuleType", "");			
+				return variables;
+				
+			}
+		
+	
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateVfModuleVolumeInfraV1Test.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateVfModuleVolumeInfraV1Test.java
new file mode 100644
index 0000000..e70f48d
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateVfModuleVolumeInfraV1Test.java
@@ -0,0 +1,306 @@
+/*- 
+ * ============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.infrastructure;
+
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDeleteVolumeGroupById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetVolumeGroupByName;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutVolumeGroupById;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockPostVNFVolumeGroup;
+
+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.Test;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+public class CreateVfModuleVolumeInfraV1Test extends WorkflowTest {
+
+	public static final String _prefix = "CVFMODVOL2_";
+	
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public CreateVfModuleVolumeInfraV1Test() throws IOException {
+		callbacks.put("volumeGroupCreate", FileUtil.readResourceFile(
+				"__files/CreateVfModuleVolumeInfraV1/CreateVfModuleVolumeCallbackResponse.xml"));
+		callbacks.put("volumeGroupException", FileUtil.readResourceFile(
+				"__files/CreateVfModuleVolumeInfraV1/CreateVfModuleCallbackException.xml"));
+		callbacks.put("volumeGroupRollback", FileUtil.readResourceFile(
+				"__files/CreateVfModuleVolumeInfraV1/RollbackVfModuleVolumeCallbackResponse.xml"));
+	}
+	
+	/**
+	 * Happy path scenario for VID
+	 *****************************/
+	@Test
+	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
+			"subprocess/GenericGetService.bpmn",
+			"subprocess/DoCreateVfModuleVolumeV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestSuccess() throws Exception {
+
+		logStart();
+		
+		MockNodeQueryServiceInstanceById("test-service-instance-id", "CreateVfModuleVolumeInfraV1/getSIUrlById.xml");
+		MockGetGenericVnfById("/TEST-VNF-ID-0123", "CreateVfModuleVolumeInfraV1/GenericVnf.xml", 200);
+		MockPutVolumeGroupById("AAIAIC25", "TEST-VOLUME-GROUP-ID-0123", "CreateVfModuleVolumeInfraV1/createVfModuleVolume_createVolumeName_AAIResponse_Success.xml", 201);
+		MockGetVolumeGroupByName("AAIAIC25", "MSOTESTVOL101a-vSAMP12_base_vol_module-0", "CreateVfModuleVolumeInfraV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml", 200);
+		MockPutVolumeGroupById("AAIAIC25", "8424bb3c-c3e7-4553-9662-469649ed9379", "CreateVfModuleVolumeInfraV1/createVfModuleVolume_updateVolumeName_AAIResponse_Success.xml", 200);
+		mockPostVNFVolumeGroup(202);
+
+		String businessKey = UUID.randomUUID().toString();
+		String createVfModuleVolRequest = FileUtil.readResourceFile("__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request.json");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("requestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("serviceInstanceId", "test-service-instance-id");
+		testVariables.put("vnfId", "TEST-VNF-ID-0123");
+		testVariables.put("test-volume-group-name", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0");
+		testVariables.put("test-volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+				
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("CreateVfModuleVolumeInfraV1", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 1000000);
+
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		injectVNFRestCallbacks(callbacks, "volumeGroupCreate");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "CVMVINFRAV1_SuccessIndicator", true);
+		
+		logEnd();
+	}
+	
+	/**
+	 * Happy path scenario for VID
+	 *****************************/
+	@Test
+	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
+			"subprocess/GenericGetService.bpmn",
+			"subprocess/DoCreateVfModuleVolumeV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestVolumeGroupAlreadyExists() throws Exception {
+
+		logStart();
+		
+		MockGetVolumeGroupByName("AAIAIC25", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0", "CreateVfModuleVolumeInfraV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml", 200);
+		MockGetGenericVnfById("TEST-VNF-ID-0123", "CreateVfModuleVolumeInfraV1/GenericVnf.xml", 200);
+		MockNodeQueryServiceInstanceById("test-service-instance-id", "CreateVfModuleVolumeInfraV1/getSIUrlById.xml");
+
+		String businessKey = UUID.randomUUID().toString();
+		String createVfModuleVolRequest = FileUtil.readResourceFile("__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request.json");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("requestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("serviceInstanceId", "test-service-instance-id");
+		testVariables.put("vnfId", "TEST-VNF-ID-0123");
+		testVariables.put("test-volume-group-name", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0");
+		testVariables.put("test-volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+				
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("CreateVfModuleVolumeInfraV1", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 1000000);
+
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		//injectVNFRestCallbacks(callbacks, "volumeGroupCreate");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "CVMVINFRAV1_SuccessIndicator", false);
+		
+		logEnd();
+	}
+	
+	/**
+	 *Vnf Create fail
+	 *****************************/
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
+			"subprocess/GenericGetService.bpmn",
+			"subprocess/DoCreateVfModuleVolumeV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestVNfCreateFail() throws Exception {
+
+		logStart();
+		
+		MockNodeQueryServiceInstanceById("test-service-instance-id", "CreateVfModuleVolumeInfraV1/getSIUrlById.xml");
+		MockGetGenericVnfById("/TEST-VNF-ID-0123", "CreateVfModuleVolumeInfraV1/GenericVnf.xml", 200);
+		MockPutVolumeGroupById("AAIAIC25", "TEST-VOLUME-GROUP-ID-0123", "CreateVfModuleVolumeInfraV1/createVfModuleVolume_createVolumeName_AAIResponse_Success.xml", 201);
+		MockGetVolumeGroupByName("AAIAIC25", "MSOTESTVOL101a-vSAMP12_base_vol_module-0", "CreateVfModuleVolumeInfraV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml", 200);
+		MockPutVolumeGroupById("AAIAIC25", "8424bb3c-c3e7-4553-9662-469649ed9379", "CreateVfModuleVolumeInfraV1/createVfModuleVolume_updateVolumeName_AAIResponse_Success.xml", 200);
+		mockPostVNFVolumeGroup(202);
+		MockDeleteVolumeGroupById("AAIAIC25", "8424bb3c-c3e7-4553-9662-469649ed9379", "1460134360", 204);
+
+		String businessKey = UUID.randomUUID().toString();
+		String createVfModuleVolRequest = FileUtil.readResourceFile("__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request.json");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("requestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("serviceInstanceId", "test-service-instance-id");
+		testVariables.put("vnfId", "TEST-VNF-ID-0123");
+		testVariables.put("test-volume-group-name", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0");
+		testVariables.put("test-volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+				
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("CreateVfModuleVolumeInfraV1", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 1000000);
+
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		injectVNFRestCallbacks(callbacks, "volumeGroupException");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "CVMVINFRAV1_SuccessIndicator", false);
+		
+		logEnd();
+	}
+	
+
+	/**
+	 * Error scenario - vnf not found
+	 ********************************/
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
+			"subprocess/GenericGetService.bpmn",
+			"subprocess/DoCreateVfModuleVolumeV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestFailVnfNotFound() throws Exception {
+
+		logStart();
+		
+		MockNodeQueryServiceInstanceById("test-service-instance-id", "CreateVfModuleVolumeInfraV1/getSIUrlById.xml");
+
+		String businessKey = UUID.randomUUID().toString();
+		String createVfModuleVolRequest = FileUtil.readResourceFile("__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request_noreqparm.json");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("requestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("serviceInstanceId", "test-service-instance-id");
+		testVariables.put("vnfId", "TEST-VNF-ID-0123");
+		testVariables.put("test-volume-group-name", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0");
+				
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("CreateVfModuleVolumeInfraV1", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 1000000);
+
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		//injectVNFRestCallbacks(callbacks, "volumeGroupCreate");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "CVMVINFRAV1_SuccessIndicator", false);
+		
+		logEnd();
+	}
+
+	/**
+	 * Error scenario - error in validation
+	 **************************************/
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
+			"subprocess/GenericGetService.bpmn",
+			"subprocess/DoCreateVfModuleVolumeV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestFailNoVnfPassed() throws Exception {
+
+		logStart();
+		
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		String businessKey = UUID.randomUUID().toString();
+		String createVfModuleVolRequest = FileUtil.readResourceFile("__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request.json");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("requestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("serviceInstanceId", "test-service-instance-id");
+		//testVariables.put("vnfId", "TEST-VNF-ID-0123");
+		testVariables.put("test-volume-group-name", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0");
+				
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("CreateVfModuleVolumeInfraV1", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 1000000);
+
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "CVMVINFRAV1_SuccessIndicator", false);
+		
+		logEnd();
+	}
+	
+	/**
+	 * Error scenario - service instance not found
+	 *********************************************/
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
+			"subprocess/GenericGetService.bpmn",
+			"subprocess/DoCreateVfModuleVolumeV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestFailServiceInstanceNotFound() throws Exception {
+
+		logStart();
+		
+		MockNodeQueryServiceInstanceById("test-service-instance-id", "CreateVfModuleVolumeInfraV1/getSIUrlById.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		String businessKey = UUID.randomUUID().toString();
+		String createVfModuleVolRequest = FileUtil.readResourceFile("__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request.json");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("requestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("serviceInstanceId", "test-service-instance-id");
+		//testVariables.put("vnfId", "TEST-VNF-ID-0123");
+		testVariables.put("test-volume-group-name", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0");
+				
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("CreateVfModuleVolumeInfraV1", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 1000000);
+
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "CVMVINFRAV1_SuccessIndicator", false);
+		
+		logEnd();
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateVnfInfraTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateVnfInfraTest.java
new file mode 100644
index 0000000..80c1e8c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateVnfInfraTest.java
@@ -0,0 +1,220 @@
+/*
+ * © 2014 AT&T Intellectual Property. All rights reserved. Used under license from AT&T Intellectual Property.
+ */
+/*- 
+ * ============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.infrastructure;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
+import static org.junit.Assert.assertEquals;
+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.StubResponseAAI.MockGetGenericVnfByName_404;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetServiceInstance;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceById_404;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;
+
+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.Test;
+import org.openecomp.mso.bpmn.common.BPMNUtil;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit Test for the CreateVnfInfra Flow
+ */
+public class CreateVnfInfraTest extends WorkflowTest {
+
+	private String createVnfInfraRequest;
+	private final CallbackSet callbacks = new CallbackSet();
+
+
+	public CreateVnfInfraTest() throws IOException {
+		createVnfInfraRequest = FileUtil.readResourceFile("__files/InfrastructureFlows/CreateVnfInfraRequest.json");
+		callbacks.put("assign", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyAssignCallback.xml"));
+		callbacks.put("activate", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/DoCreateVnf.bpmn", 
+							"subprocess/GenericGetService.bpmn", 
+							"subprocess/GenericGetVnf.bpmn", 
+							"subprocess/GenericPutVnf.bpmn", 
+							"subprocess/SDNCAdapterV1.bpmn", 
+							"process/CreateVnfInfra.bpmn", 
+							"subprocess/FalloutHandler.bpmn", 
+							"subprocess/CompleteMsoProcess.bpmn"})
+	public void testCreateVnfInfra_success() throws Exception{
+
+		MockNodeQueryServiceInstanceById("MIS%2F1604%2F0026%2FSW_INTERNET", "GenericFlows/getSIUrlById.xml");
+		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
+		MockGetGenericVnfByName_404();
+		MockPutGenericVnf();
+		mockSDNCAdapter("/SDNCAdapter", "vnf-type>STMTN", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		setVariablesSuccess(variables, createVnfInfraRequest, "testRequestId123", "MIS%2F1604%2F0026%2FSW_INTERNET");
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("CreateVnfInfra",
+				"v1", businessKey, createVnfInfraRequest, variables);
+
+			WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 10000);
+
+			String responseBody = response.getResponse();
+			System.out.println("Workflow (Synch) Response:\n" + responseBody);
+
+			//injectSDNCCallbacks(callbacks, "assign, query");
+			//injectSDNCCallbacks(callbacks, "activate");
+
+			// TODO add appropriate assertions
+
+			waitForProcessEnd(businessKey, 10000);
+			String status = BPMNUtil.getVariable(processEngineRule, "CreateVnfInfra", "CreateVnfInfraStatus");
+			assertEquals("Success", status);
+
+			logEnd();
+
+			//WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "CreateVnfInfra", variables);
+	//	injectSDNCCallbacks(callbacks, "assign");
+	//	injectSDNCCallbacks(callbacks, "activate");
+		//waitForProcessEnd(businessKey, 10000);
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+		//assertVariables("true", "true", "false", "true", "Success", null);
+
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/GenericGetService.bpmn", "subprocess/GenericGetVnf.bpmn", "subprocess/GenericPutVnf.bpmn", "process/CreateVnfInfra.bpmn", "subprocess/FalloutHandler.bpmn", "subprocess/CompleteMsoProcess.bpmn"})
+	public void testCreateVnfInfra_error_badRequest() throws Exception{
+
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		Map<String, String> variables = new HashMap<String, String>();
+		setVariables(variables, null, "testRequestId123", "MIS%2F1604%2F0026%2FSW_INTERNET");
+
+		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "CreateVnfInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+		assertVariables(null, null, null, null, null, "WorkflowException[processKey=CreateVnfInfra,errorCode=2500,errorMessage=Internal Error - WorkflowException Object and/or RequestInfo is null! CreateVnfInfra]");
+
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/DoCreateVnf.bpmn", "subprocess/GenericGetService.bpmn", "subprocess/GenericGetVnf.bpmn", "subprocess/GenericPutVnf.bpmn", "process/CreateVnfInfra.bpmn", "subprocess/FalloutHandler.bpmn", "subprocess/CompleteMsoProcess.bpmn"})
+	public void testCreateVnfInfra_error_siNotFound() throws Exception{
+
+		MockNodeQueryServiceInstanceById_404("MIS%2F1604%2F0026%2FSW_INTERNET");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		Map<String, String> variables = new HashMap<String, String>();
+		setVariables(variables, createVnfInfraRequest, "testRequestId123", "MIS%2F1604%2F0026%2FSW_INTERNET");
+
+		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "CreateVnfInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+		assertVariables(null, null, null, null, null, "WorkflowException[processKey=DoCreateVnf,errorCode=404,errorMessage=Service Instance Not Found]");
+
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/DoCreateVnf.bpmn", 
+							"subprocess/GenericGetService.bpmn", 
+							"subprocess/GenericGetVnf.bpmn", 
+							"subprocess/GenericPutVnf.bpmn", 
+							"process/CreateVnfInfra.bpmn", 
+							"subprocess/FalloutHandler.bpmn", 
+							"subprocess/CompleteMsoProcess.bpmn"})
+	public void testCreateVnfInfra_error_vnfExist() throws Exception{
+		MockNodeQueryServiceInstanceById("MIS%2F1604%2F0026%2FSW_INTERNET", "GenericFlows/getSIUrlById.xml");
+		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
+		
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf[?]vnf-name=testVnfName123&depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("GenericFlows/getGenericVnfResponse.xml")));
+		
+		MockPutGenericVnf();
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		Map<String, String> variables = new HashMap<String, String>();
+		setVariables(variables, createVnfInfraRequest, "testRequestId123", "MIS%2F1604%2F0026%2FSW_INTERNET");
+
+		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "CreateVnfInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+		assertVariables(null, null, null, null, null, "WorkflowException[processKey=DoCreateVnf,errorCode=5000,errorMessage=Generic Vnf Already Exist.]");
+
+	}
+
+	private void assertVariables(String exSIFound, String exSISucc, String exVnfFound, String exVnfSucc, String exResponse, String exWorkflowException) {
+
+		String siFound = BPMNUtil.getVariable(processEngineRule, "CreateVnfInfra", "GENGS_FoundIndicator");
+		String siSucc = BPMNUtil.getVariable(processEngineRule, "CreateVnfInfra", "GENGS_SuccessIndicator");
+		String vnfFound = BPMNUtil.getVariable(processEngineRule, "CreateVnfInfra", "GENGV_FoundIndicator");
+		String vnfSucc = BPMNUtil.getVariable(processEngineRule, "CreateVnfInfra", "GENGV_SuccessIndicator");
+		String response = BPMNUtil.getVariable(processEngineRule, "CreateVnfInfra", "WorkflowResponse");
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "CreateVnfInfra", "SavedWorkflowException1");
+
+		assertEquals(exSIFound, siFound);
+		assertEquals(exSISucc, siSucc);
+		assertEquals(exVnfFound, vnfFound);
+		assertEquals(exVnfSucc, vnfSucc);
+		assertEquals(exResponse, response);
+		assertEquals(exWorkflowException, workflowException);
+	}
+
+	private void setVariables(Map<String, String> variables, String request, String requestId, String siId) {
+		variables.put("isDebugLogEnabled", "true");
+		variables.put("bpmnRequest", request);
+		variables.put("mso-request-id", requestId);
+		variables.put("serviceInstanceId",siId);
+		variables.put("testVnfId","testVnfId123");
+		variables.put("vnfType", "STMTN");
+	}
+
+	private void setVariablesSuccess(Map<String, Object> variables, String request, String requestId, String siId) {
+		variables.put("isDebugLogEnabled", "true");
+		//variables.put("bpmnRequest", request);
+		//variables.put("mso-request-id", requestId);
+		variables.put("serviceInstanceId",siId);
+		variables.put("requestId", requestId);
+		variables.put("testVnfId","testVnfId123");
+		variables.put("vnfType", "STMTN");
+	}
+
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteVfModuleInfraTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteVfModuleInfraTest.java
new file mode 100644
index 0000000..a6ae368
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteVfModuleInfraTest.java
@@ -0,0 +1,579 @@
+/*- 
+ * ============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.infrastructure;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.containing;
+import static com.github.tomakehurst.wiremock.client.WireMock.delete;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.post;
+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.urlEqualTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockVNFDelete;
+
+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.Ignore;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.core.WorkflowException;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+import com.github.tomakehurst.wiremock.client.WireMock;
+/**
+ * Unit test for DoDeleteVfModule.bpmn.
+ */
+public class DeleteVfModuleInfraTest extends WorkflowTest {
+	private final CallbackSet callbacks = new CallbackSet();
+	
+	private static final String EOL = "\n";
+
+	private final String vnfAdapterDeleteCallback = 
+			"<deleteVfModuleResponse>" + EOL +
+			"    <vnfId>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnfId>" + EOL +
+			"    <vfModuleId>973ed047-d251-4fb9-bf1a-65b8949e0a73</vfModuleId>" + EOL +
+			"    <vfModuleDeleted>true</vfModuleDeleted>" + EOL +
+			"    <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
+			" 	<vfModuleOutputs>" + EOL +  
+			" 	 <entry>" + EOL +
+			"	 <key>policyKey1_contrail_network_policy_fqdn</key>" + EOL +
+			" <value>MSOTest:DefaultPolicyFQDN1</value>" + EOL +
+			"</entry>" + EOL +
+			"<entry>" + EOL +
+			"<key>policyKey2_contrail_network_policy_fqdn</key>" + EOL +
+			"<value>MSOTest:DefaultPolicyFQDN2</value>" + EOL +
+			"</entry>" + EOL +
+			" 	 <entry>" + EOL +
+			"	 <key>oam_management_v4_address</key>" + EOL +
+			" <value>1234</value>" + EOL +
+			"</entry>" + EOL +
+			" 	 <entry>" + EOL +
+			"	 <key>oam_management_v6_address</key>" + EOL +
+			" <value>1234</value>" + EOL +
+			"</entry>" + EOL +
+			"</vfModuleOutputs>" + EOL +
+			"</deleteVfModuleResponse>" + EOL;
+				
+	private final String vnfAdapterDeleteCallbackFail = 
+			"<vfModuleException>" + EOL +
+			"    <message>Error processing request to VNF-Async. Not Found.</message>" + EOL +
+			"    <category>INTERNAL</category>" + EOL +
+			"    <rolledBack>false</rolledBack>" + EOL +
+			"    <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
+			"</vfModuleException>" + EOL;
+					
+	private final String sdncAdapterDeleteCallback =
+		"<output xmlns=\"org:openecomp:sdnctl:l3api\">" + EOL +
+		"  <svc-request-id>{{REQUEST-ID}}</svc-request-id>" + EOL +
+		"  <ack-final-indicator>Y</ack-final-indicator>" + EOL +
+		"</output>" + EOL;
+	
+	public DeleteVfModuleInfraTest() throws IOException {
+		callbacks.put("sdncChangeDelete", sdncAdapterDeleteCallback);
+		callbacks.put("sdncDelete", sdncAdapterDeleteCallback);
+		callbacks.put("vnfDelete", vnfAdapterDeleteCallback);
+		callbacks.put("vnfDeleteFail", vnfAdapterDeleteCallbackFail);
+	}
+
+	@Test
+	@Deployment(resources = {
+			"process/Infrastructure/DeleteVfModuleInfra.bpmn",
+			"subprocess/DoDeleteVfModule.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/DeleteAAIVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn",
+			"subprocess/CompleteMsoProcess.bpmn",
+			"subprocess/FalloutHandler.bpmn"
+		})
+	@Ignore
+	public void  TestDeleteVfModuleSuccess() throws Exception {
+		// delete the Base Module
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73
+		String request =
+			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
+			"  <request-info>" + EOL +
+			"    <request-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</request-id>" + EOL +
+			"    <action>DELETE_VF_MODULE</action>" + EOL +
+			"    <source>PORTAL</source>" + EOL +
+			"  </request-info>" + EOL +
+			"  <vnf-inputs>" + EOL +
+			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
+			"    <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
+			"    <vnf-type>asc_heat-int</vnf-type>" + EOL +
+			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+			"    <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
+			"    <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL +
+			"    <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL +
+			"    <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL +
+			"    <orchestration-status>pending-delete</orchestration-status>" + EOL +
+			"    <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL +
+			"  </vnf-inputs>" + EOL +
+			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+		logStart();
+		WireMock.reset();
+		
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>changedelete"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>delete"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));
+		
+		mockVNFDelete(".*", "/.*", 202);
+//		MockAAIGenericVnfSearch();
+//		MockAAIVfModulePUT(false);
+//		MockAAIDeleteGenericVnf();
+//		MockAAIDeleteVfModule();
+		mockUpdateRequestDB(200, "VfModularity/DBUpdateResponse.xml");
+		
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a73/[?]resource-version=0000073"))
+				.willReturn(aResponse()
+						.withStatus(200)));
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c720/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a75/[?]resource-version=0000075"))
+				.willReturn(aResponse()
+						.withStatus(200)));
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c718/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a78/[?]resource-version=0000078"))
+				.willReturn(aResponse()
+						.withStatus(200)));
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c719/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a77/[?]resource-version=0000077"))
+				.willReturn(aResponse()
+						.withStatus(500)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("aaiFault.xml")));
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/network-policies/network-policy\\?network-policy-fqdn=.*"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("VfModularity/QueryNetworkPolicy_AAIResponse_Success.xml")));
+
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/network-policies/network-policy/.*"))
+				.willReturn(aResponse()
+						.withStatus(200)));
+		
+		
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721/[?]resource-version=0000021"))
+				.willReturn(aResponse()
+						.withStatus(200)));
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c718/[?]resource-version=0000018"))
+				.willReturn(aResponse()
+						.withStatus(500)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("aaiFault.xml")));
+		
+		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*/vf-modules/vf-module/.*"))
+				.withRequestBody(containing("MMSC"))
+				.willReturn(aResponse()
+						.withStatus(200)));
+		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*/vf-modules/vf-module/.*"))
+				.withRequestBody(containing("PCRF"))
+				.willReturn(aResponse()
+						.withStatus(500)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("aaiFault.xml")));
+		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721"))				
+				.willReturn(aResponse()
+					.withStatus(200)));
+		
+		String body;
+		
+		// The following stubs are for CreateAAIVfModule and UpdateAAIVfModule
+	
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/[?]vnf-name=STMTN5MMSC23&depth=1"))
+				.willReturn(aResponse()
+						.withStatus(500)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("aaiFault.xml")));
+	
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/[?]vnf-name=STMTN5MMSC22&depth=1"))
+				.willReturn(aResponse()
+						.withStatus(404)
+						.withHeader("Content-Type", "text/xml")
+						.withBody("Generic VNF Not Found")));
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/768073c7-f41f-4822-9323-b75962763d74[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(404)
+						.withHeader("Content-Type", "text/xml")
+						.withBody("Generic VNF Not Found")));
+	
+		body =
+			"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
+			"  <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
+			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+			"  <equipment-role>vMMSC</equipment-role>" + EOL +
+			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"  <in-maint>false</in-maint>" + EOL +
+			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+			"  <resource-version>1508691</resource-version>" + EOL +
+			"  <vf-modules>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>1508692</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"  </vf-modules>" + EOL +
+			"  <relationship-list/>" + EOL +
+			"  <l-interfaces/>" + EOL +
+			"  <lag-interfaces/>" + EOL +
+			"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/[?]vnf-name=STMTN5MMSC21&depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	
+		body =
+			"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+			"  <vnf-id>2f6aee38-1e2a-11e6-82d1-ffc7d9ee8aa4</vnf-id>" + EOL +
+			"  <vnf-name>STMTN5MMSC20</vnf-name>" + EOL +
+			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+			"  <equipment-role>vMMSC</equipment-role>" + EOL +
+			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"  <in-maint>false</in-maint>" + EOL +
+			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+			"  <resource-version>1508691</resource-version>" + EOL +
+			"  <vf-modules>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC20-MMSC::module-0-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>1508692</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC20-MMSC::module-1-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>false</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>1508692</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"  </vf-modules>" + EOL +
+			"  <relationship-list/>" + EOL +
+			"  <l-interfaces/>" + EOL +
+			"  <lag-interfaces/>" + EOL +
+			"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/[?]vnf-name=STMTN5MMSC20&depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/2f6aee38-1e2a-11e6-82d1-ffc7d9ee8aa4[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	
+		// The following stubs are for DeleteAAIVfModule
+	
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c723[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(500)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("aaiFault.xml")));
+	
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c722[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(404)
+						.withHeader("Content-Type", "text/xml")
+						.withBody("Generic VNF Not Found")));
+	
+		body =
+				"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+				"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
+				"  <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
+				"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+				"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+				"  <equipment-role>vMMSC</equipment-role>" + EOL +
+				"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+				"  <in-maint>false</in-maint>" + EOL +
+				"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+				"  <resource-version>0000021</resource-version>" + EOL +
+				"  <vf-modules>" + EOL +
+				"    <vf-module>" + EOL +
+				"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+				"      <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
+				"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>" + EOL +
+				"      <persona-model-version>1.0</persona-model-version>" + EOL +
+				"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+				"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+				"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+				"      <resource-version>0000073</resource-version>" + EOL +
+				"    </vf-module>" + EOL +
+				"  </vf-modules>" + EOL +
+				"  <relationship-list/>" + EOL +
+				"  <l-interfaces/>" + EOL +
+				"  <lag-interfaces/>" + EOL +
+				"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	
+		body =
+			"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c720</vnf-id>" + EOL +
+			"  <vnf-name>STMTN5MMSC20</vnf-name>" + EOL +
+			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+			"  <equipment-role>vMMSC</equipment-role>" + EOL +
+			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"  <in-maint>false</in-maint>" + EOL +
+			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+			"  <resource-version>0000020</resource-version>" + EOL +
+			"  <vf-modules>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC20-MMSC::module-0-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>0000074</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a75</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC20-MMSC::module-1-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a75</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>false</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>0000075</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"  </vf-modules>" + EOL +
+			"  <relationship-list/>" + EOL +
+			"  <l-interfaces/>" + EOL +
+			"  <lag-interfaces/>" + EOL +
+			"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c720[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	
+		body =
+			"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c719</vnf-id>" + EOL +
+			"  <vnf-name>STMTN5MMSC19</vnf-name>" + EOL +
+			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+			"  <equipment-role>vMMSC</equipment-role>" + EOL +
+			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"  <in-maint>false</in-maint>" + EOL +
+			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+			"  <resource-version>0000019</resource-version>" + EOL +
+			"  <vf-modules>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a76</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC19-MMSC::module-0-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a76</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>0000076</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a77</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC19-MMSC::module-1-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a77</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>false</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>0000077</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"  </vf-modules>" + EOL +
+			"  <relationship-list/>" + EOL +
+			"  <l-interfaces/>" + EOL +
+			"  <lag-interfaces/>" + EOL +
+			"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c719[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	
+		body =
+			"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c718</vnf-id>" + EOL +
+			"  <vnf-name>STMTN5MMSC18</vnf-name>" + EOL +
+			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+			"  <equipment-role>vMMSC</equipment-role>" + EOL +
+			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"  <in-maint>false</in-maint>" + EOL +
+			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+			"  <resource-version>0000018</resource-version>" + EOL +
+			"  <vf-modules>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a78</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC18-MMSC::module-0-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a78</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>0000078</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"  </vf-modules>" + EOL +
+			"  <relationship-list/>" + EOL +
+			"  <l-interfaces/>" + EOL +
+			"  <lag-interfaces/>" + EOL +
+			"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c718[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	
+		body =
+			"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
+			"  <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
+			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+			"  <equipment-role>vMMSC</equipment-role>" + EOL +
+			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"  <in-maint>false</in-maint>" + EOL +
+			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+			"  <resource-version>0000021</resource-version>" + EOL +
+			"  <vf-modules>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>0000073</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"  </vf-modules>" + EOL +
+			"  <relationship-list/>" + EOL +
+			"  <l-interfaces/>" + EOL +
+			"  <lag-interfaces/>" + EOL +
+			"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a73"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+
+		String businessKey = UUID.randomUUID().toString();
+		String deleteVfModuleRequest =
+				FileUtil.readResourceFile("__files/DeleteVfModule_VID_request.json");
+		//Map<String, Object> variables = new HashMap<String, Object>();	
+		
+		//variables.put("isDebugLogEnabled","true");
+//		variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+//		variables.put("mso-service-instance-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		
+		Map<String, Object> variables = setupVariablesSunnyDayVID();
+
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("DeleteVfModuleInfra",
+				"v1", businessKey, deleteVfModuleRequest, variables);
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 10000);
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+
+		// "changedelete" operation not required for deleting a Vf Module
+//		injectSDNCCallbacks(callbacks, "sdncChangeDelete");
+		injectVNFRestCallbacks(callbacks, "vnfDelete");
+		waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);
+		injectSDNCCallbacks(callbacks, "sdncDelete");
+
+		waitForProcessEnd(businessKey, 10000);
+		WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
+		checkVariable(businessKey, "DeleteVfModuleInfraSuccessIndicator", true);
+		checkVariable(businessKey, "WorkflowException", null);
+		if (wfe != null) {
+			System.out.println("TestDeleteVfModuleInfraSuccess: ErrorCode=" + wfe.getErrorCode() +
+					", ErrorMessage=" + wfe.getErrorMessage());
+		}
+		logEnd();
+	}
+	
+	// Active Scenario
+			private Map<String, Object> setupVariablesSunnyDayVID() {
+				Map<String, Object> variables = new HashMap<String, Object>();
+				//try {
+				//	variables.put("bpmnRequest", FileUtil.readResourceFile("__files/CreateVfModule_VID_request.json"));
+				//}
+				//catch (Exception e) {
+					
+				//}
+				//variables.put("mso-request-id", "testRequestId");
+				variables.put("requestId", "testRequestId");		
+				variables.put("isBaseVfModule", "true");
+				variables.put("isDebugLogEnabled", "true");
+				variables.put("recipeTimeout", "0");		
+				variables.put("requestAction", "DELETE_VF_MODULE");
+				variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+				variables.put("vnfId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+				variables.put("vfModuleId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+				variables.put("volumeGroupId", "");			
+				variables.put("serviceType", "MOG");	
+				variables.put("vfModuleType", "");			
+				return variables;
+				
+			}
+
+	
+}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteVfModuleVolumeInfraV1Test.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteVfModuleVolumeInfraV1Test.java
new file mode 100644
index 0000000..73acde3
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteVfModuleVolumeInfraV1Test.java
@@ -0,0 +1,166 @@
+/*- 
+ * ============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.infrastructure;
+
+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.Ignore;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit test cases for UpdateVfModuleVolume.bpmn
+ */
+public class DeleteVfModuleVolumeInfraV1Test extends WorkflowTest {
+	
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public DeleteVfModuleVolumeInfraV1Test() throws IOException {
+		callbacks.put("volumeGroupDelete", FileUtil.readResourceFile(
+				"__files/DeleteVfModuleVolumeInfraV1/DeleteVfModuleVolumeCallbackResponse.xml"));
+	}
+
+	/**
+	 * Happy path scenario.
+	 * 
+	 * @throws Exception
+	 */
+	@Test
+	@Ignore // BROKEN TEST
+	@Deployment(resources = {"process/DeleteVfModuleVolumeInfraV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void happyPath() throws Exception {
+
+		logStart();
+		
+//		DeleteVfModuleVolumeInfraV1_success();
+		
+		String businessKey = UUID.randomUUID().toString();
+		String deleteVfModuleVolRequest =
+			FileUtil.readResourceFile("__files/DeleteVfModuleVolumeInfraV1/deleteVfModuleVolume_VID_request_st.json");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("requestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("volumeGroupId", "78987");
+		testVariables.put("serviceInstanceId", "test-service-instance-id-0123");
+		
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("DeleteVfModuleVolumeInfraV1",
+			"v1", businessKey, deleteVfModuleVolRequest, testVariables);
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 100000);
+
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		injectVNFRestCallbacks(callbacks, "volumeGroupDelete");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "DELVfModVol_TransactionSuccessIndicator", true);
+		
+		logEnd();
+	}
+
+	/**
+	 * Test fails - vf module in use
+	 * 
+	 * @throws Exception
+	 */
+	@Test
+	@Deployment(resources = {"process/DeleteVfModuleVolumeInfraV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestVfModuleInUseError() throws Exception {
+
+		logStart();
+		
+//		DeleteVfModuleVolumeInfraV1_inUseError(); // no assertions to check
+		
+		String businessKey = UUID.randomUUID().toString();
+		String deleteVfModuleVolRequest =
+			FileUtil.readResourceFile("__files/DeleteVfModuleVolumeInfraV1/deleteVfModuleVolume_VID_request_st.json");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("requestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("volumeGroupId", "78987");
+		
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("DeleteVfModuleVolumeInfraV1",
+			"v1", businessKey, deleteVfModuleVolRequest, testVariables);
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 100000);
+
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		//injectVNFRestCallbacks(callbacks, "volumeGroupDelete");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "DELVfModVol_TransactionSuccessIndicator", false);
+		
+		logEnd();
+	}
+	
+	/**
+	 * Test fails on vnf adapter call
+	 * 
+	 * @throws Exception
+	 */
+	@Test
+	@Ignore // BROKEN TEST
+	@Deployment(resources = {"process/DeleteVfModuleVolumeInfraV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestVnfAdapterCallfail() throws Exception {
+
+		logStart();
+		
+//		DeleteVfModuleVolumeInfraV1_fail();
+		
+		String businessKey = UUID.randomUUID().toString();
+		String deleteVfModuleVolRequest =
+			FileUtil.readResourceFile("__files/DeleteVfModuleVolumeInfraV1/deleteVfModuleVolume_VID_request_st.json");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("requestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("volumeGroupId", "78987");
+		
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("DeleteVfModuleVolumeInfraV1",
+			"v1", businessKey, deleteVfModuleVolRequest, testVariables);
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 100000);
+
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		//injectVNFRestCallbacks(callbacks, "volumeGroupDelete");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "DELVfModVol_TransactionSuccessIndicator", false);
+		
+		logEnd();
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteVnfInfraTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteVnfInfraTest.java
new file mode 100644
index 0000000..00c5a24
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteVnfInfraTest.java
@@ -0,0 +1,200 @@
+/*
+ * © 2014 AT&T Intellectual Property. All rights reserved. Used under license from AT&T Intellectual Property.
+ */
+/*- 
+ * ============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.infrastructure;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
+import static org.junit.Assert.assertEquals;
+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.StubResponseDatabase.mockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDeleteGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDeleteGenericVnf_404;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.camunda.bpm.engine.test.Deployment;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.BPMNUtil;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Please describe the DeleteVnfInfra.java class
+ *
+ */
+public class DeleteVnfInfraTest extends WorkflowTest {
+
+	private String deleteVnfInfraRequest;
+	private String deleteVnfInfraRequestCascadeDelete;
+
+	public DeleteVnfInfraTest () throws IOException {
+		deleteVnfInfraRequest = FileUtil.readResourceFile("__files/InfrastructureFlows/CreateVnfInfraRequest.json");
+		deleteVnfInfraRequestCascadeDelete = FileUtil.readResourceFile("__files/InfrastructureFlows/DeleteVnfInfraRequestCascadeDelete.json");
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/GenericGetVnf.bpmn",  
+							"subprocess/GenericDeleteVnf.bpmn", 
+							"subprocess/DoDeleteVnf.bpmn", 
+							"process/DeleteVnfInfra.bpmn", 
+							"subprocess/FalloutHandler.bpmn", 
+							"subprocess/CompleteMsoProcess.bpmn"})
+	public void testDeleteVnfInfra_success() throws Exception{
+		
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/testVnfId123[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("GenericFlows/getGenericVnfByNameResponse.xml")));
+		
+		MockDeleteGenericVnf();
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		Map<String, String> variables = new HashMap<String, String>();
+		setVariables(variables, deleteVnfInfraRequest, "testRequestId123", "MIS%2F1604%2F0026%2FSW_INTERNET");
+		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "DeleteVnfInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+		Object cascadeDelete = BPMNUtil.getRawVariable(processEngineRule, "DeleteVnfInfra", "DELVI_cascadeDelete");
+		String found = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "GENGV_FoundIndicator") ;
+		String inUse = BPMNUtil.getVariable(processEngineRule, "DeleteVnfInfra", "DELVI_vnfInUse");
+		String response = BPMNUtil.getVariable(processEngineRule, "DeleteVnfInfra", "WorkflowResponse");
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DeleteVnfInfra", "WorkflowException");
+
+		assertEquals(false, cascadeDelete);
+		assertEquals("true", found);
+		assertEquals("false", inUse);
+		assertEquals("Success", response);
+		assertEquals(null, workflowException);
+	}
+	
+	@Test
+	@Ignore // DoDeleteVnfAndModules not complete yet
+	@Deployment(resources = {"subprocess/GenericGetVnf.bpmn", 
+							"subprocess/GenericDeleteVnf.bpmn", 
+							"subprocess/DoDeleteVnfAndModules.bpmn", 
+							"process/DeleteVnfInfra.bpmn", 
+							"subprocess/FalloutHandler.bpmn", 
+							"subprocess/CompleteMsoProcess.bpmn"})
+	public void testDeleteVnfInfra_cascadeDelete() throws Exception{
+		MockGetGenericVnfById();
+		MockDeleteGenericVnf();
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		Map<String, String> variables = new HashMap<String, String>();
+		setVariables(variables, deleteVnfInfraRequestCascadeDelete, "testRequestId123", "MIS%2F1604%2F0026%2FSW_INTERNET");
+		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "DeleteVnfInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+		String found = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "GENGV_FoundIndicator") ;
+		String inUse = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "DoDVNF_vnfInUse");
+		String response = BPMNUtil.getVariable(processEngineRule, "DeleteVnfInfra", "WorkflowResponse");
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DeleteVnfInfra", "WorkflowException");
+		Object cascadeDelete = BPMNUtil.getRawVariable(processEngineRule, "DeleteVnfInfra", "DELVI_cascadeDelete");
+
+		assertEquals(true, cascadeDelete);
+		assertEquals("true", found);
+		assertEquals("false", inUse);
+		assertEquals("Success", response);
+		assertEquals(null, workflowException);
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/GenericGetVnf.bpmn", 
+							"subprocess/GenericDeleteVnf.bpmn", 
+							"subprocess/DoDeleteVnf.bpmn", 
+							"process/DeleteVnfInfra.bpmn", 
+							"subprocess/FalloutHandler.bpmn", 
+							"subprocess/CompleteMsoProcess.bpmn"})
+	public void testDeleteVnfInfra_success_vnfNotFound() throws Exception{
+
+		MockDeleteGenericVnf_404();
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		Map<String, String> variables = new HashMap<String, String>();
+		setVariables(variables, deleteVnfInfraRequest, "testRequestId123", "MIS%2F1604%2F0026%2FSW_INTERNET");
+
+		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "DeleteVnfInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+		String found = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "GENGV_FoundIndicator") ;
+		String inUse = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "DoDVNF_vnfInUse");
+		String response = BPMNUtil.getVariable(processEngineRule, "DeleteVnfInfra", "WorkflowResponse");
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "WorkflowException");
+
+		assertEquals("false", found);
+		assertEquals("false", inUse);
+		assertEquals("Success", response);
+		assertEquals(null, workflowException);
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/GenericGetVnf.bpmn",  
+							"subprocess/GenericDeleteVnf.bpmn", 
+							"subprocess/DoDeleteVnf.bpmn", 
+							"process/DeleteVnfInfra.bpmn", 
+							"subprocess/FalloutHandler.bpmn", 
+							"subprocess/CompleteMsoProcess.bpmn"})
+	public void testDeleteVnfInfra_error_vnfInUse() throws Exception{
+
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/testVnfId123[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("GenericFlows/getGenericVnfResponse_hasRelationships.xml")));
+		MockDeleteGenericVnf();
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		Map<String, String> variables = new HashMap<String, String>();
+		setVariables(variables, deleteVnfInfraRequest, "testRequestId123", "MIS%2F1604%2F0026%2FSW_INTERNET");
+
+		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "DeleteVnfInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+		String found = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "GENGV_FoundIndicator") ;
+		String inUse = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "DoDVNF_vnfInUse");
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DeleteVnfInfra", "SavedWorkflowException1");
+
+		String exWfex = "WorkflowException[processKey=DoDeleteVnf,errorCode=5000,errorMessage=Can't Delete Generic Vnf. Generic Vnf is still in use.]";
+
+		assertEquals("true", found);
+		assertEquals("true", inUse);
+		assertEquals(exWfex, workflowException);
+	}
+
+	private void setVariables(Map<String, String> variables, String request, String requestId, String siId) {
+		variables.put("isDebugLogEnabled", "true");
+		variables.put("bpmnRequest", request);
+		variables.put("mso-request-id", requestId);
+		variables.put("serviceInstanceId",siId);
+		variables.put("vnfId","testVnfId123");
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVfModuleRollbackTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVfModuleRollbackTest.java
new file mode 100644
index 0000000..7a9345f
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVfModuleRollbackTest.java
@@ -0,0 +1,157 @@
+/*- 
+ * ============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.infrastructure;
+
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDeleteGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDeleteVfModuleId;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetVfModuleId;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutVfModuleIdNoResponse;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;
+import static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockVNFDelete;
+
+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.Test;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.WorkflowTest.CallbackSet;
+import org.openecomp.mso.bpmn.core.RollbackData;
+import org.openecomp.mso.bpmn.core.WorkflowException;
+
+/**
+ * Unit test for DoDeleteVfModule.bpmn.
+ */
+public class DoCreateVfModuleRollbackTest extends WorkflowTest {
+	private final CallbackSet callbacks = new CallbackSet();
+	
+	private static final String EOL = "\n";
+
+	private final String vnfAdapterDeleteCallback = 
+		"<deleteVfModuleResponse>" + EOL +
+		"    <vnfId>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnfId>" + EOL +
+		"    <vfModuleId>973ed047-d251-4fb9-bf1a-65b8949e0a73</vfModuleId>" + EOL +
+		"    <vfModuleDeleted>true</vfModuleDeleted>" + EOL +
+		"    <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
+		"</deleteVfModuleResponse>" + EOL;
+			
+	private final String vnfAdapterDeleteCallbackFail = 
+			"<vfModuleException>" + EOL +
+			"    <message>Error processing request to VNF-Async. Not Found.</message>" + EOL +
+			"    <category>INTERNAL</category>" + EOL +
+			"    <rolledBack>false</rolledBack>" + EOL +
+			"    <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
+			"</vfModuleException>" + EOL;
+				
+	private final String sdncAdapterDeleteCallback =
+		"<output xmlns=\"org:openecomp:sdnctl:l3api\">" + EOL +
+		"  <svc-request-id>{{REQUEST-ID}}</svc-request-id>" + EOL +
+		"  <ack-final-indicator>Y</ack-final-indicator>" + EOL +
+		"</output>" + EOL;
+	
+	public DoCreateVfModuleRollbackTest() throws IOException {
+		callbacks.put("sdncChangeDelete", sdncAdapterDeleteCallback);
+		callbacks.put("sdncDelete", sdncAdapterDeleteCallback);
+		callbacks.put("vnfDelete", vnfAdapterDeleteCallback);
+		callbacks.put("vnfDeleteFail", vnfAdapterDeleteCallbackFail);
+	}
+
+	@Test
+	
+	@Deployment(resources = {
+			"subprocess/DoCreateVfModuleRollback.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/DeleteAAIVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn"
+		})
+	public void  TestCreateVfModuleRollbackSuccess() {
+		logStart();
+
+		mockSDNCAdapter("/SDNCAdapter", "SvcAction>delete", 200, "DeleteGenericVNFV1/sdncAdapterResponse.xml");
+		mockVNFDelete("a27ce5a9-29c4-4c22-a017-6615ac73c721", "/973ed047-d251-4fb9-bf1a-65b8949e0a73", 202);
+		MockDeleteGenericVnf("a27ce5a9-29c4-4c22-a017-6615ac73c721", "0000021", 200);
+		MockDeleteVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73", "0000073", 200);
+		MockPutVfModuleIdNoResponse("a27ce5a9-29c4-4c22-a017-6615ac73c721", "MMSC", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		MockPutGenericVnf("a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		MockGetGenericVnfByIdWithDepth("a27ce5a9-29c4-4c22-a017-6615ac73c721", 1, "DoCreateVfModuleRollback/GenericVnf.xml");
+		MockGetVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73", "DoCreateVfModuleRollback/GenericVnfVfModule.xml", 200);
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		RollbackData rollbackData = new RollbackData();
+		rollbackData.put("VFMODULE", "source", "PORTAL");
+		rollbackData.put("VFMODULE", "vnfid", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		rollbackData.put("VFMODULE", "vnfname", "STMTN5MMSC21");
+		rollbackData.put("VFMODULE", "vnftype", "asc_heat-int");
+		rollbackData.put("VFMODULE", "vfmoduleid", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		rollbackData.put("VFMODULE", "vfmodulename", "STMTN5MMSC21-MMSC::module-0-0");
+		rollbackData.put("VFMODULE", "tenantid", "fba1bd1e195a404cacb9ce17a9b2b421");
+		rollbackData.put("VFMODULE", "aiccloudregion", "RDM2WAGPLCP");
+		rollbackData.put("VFMODULE", "heatstackid", "thisisaheatstack");
+		rollbackData.put("VFMODULE", "contrailNetworkPolicyFqdn0", "MSOTest:DefaultPolicyFQDN1");
+		rollbackData.put("VFMODULE", "contrailNetworkPolicyFqdn1", "MSOTest:DefaultPolicyFQDN2");
+		rollbackData.put("VFMODULE", "oamManagementV6Address", "2000:abc:bce:1111");
+		rollbackData.put("VFMODULE", "oamManagementV4Address", "127.0.0.1");
+		
+		rollbackData.put("VFMODULE", "rollbackPrepareUpdateVfModule", "true");
+		rollbackData.put("VFMODULE", "rollbackVnfAdapterCreate", "true");
+		rollbackData.put("VFMODULE", "rollbackUpdateAAIVfModule", "true");
+		rollbackData.put("VFMODULE", "rollbackSDNCRequestActivate", "true");
+		rollbackData.put("VFMODULE", "rollbackCreateAAIVfModule", "true");
+		rollbackData.put("VFMODULE", "rollbackCreateNetworkPoliciesAAI", "true");
+		rollbackData.put("VFMODULE", "rollbackUpdateVnfAAI", "true");
+		
+	
+		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("mso-service-instance-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		rollbackData.put("VFMODULE", "msorequestid", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		rollbackData.put("VFMODULE", "serviceinstanceid", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("RollbackData", rollbackData);
+		invokeSubProcess("DoCreateVfModuleRollback", businessKey, variables);
+
+		// "changedelete" operation not required for deleting a Vf Module
+//		injectSDNCCallbacks(callbacks, "sdncChangeDelete");
+		injectVNFRestCallbacks(callbacks, "vnfDelete");
+		waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);
+		injectSDNCCallbacks(callbacks, "sdncDelete");
+
+		waitForProcessEnd(businessKey, 10000);
+		WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
+		checkVariable(businessKey, "WorkflowException", null);
+		if (wfe != null) {
+			System.out.println("TestCreateVfModuleSuccess: ErrorCode=" + wfe.getErrorCode() +
+					", ErrorMessage=" + wfe.getErrorMessage());
+		}
+		logEnd();
+	}
+
+	
+}
+
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVfModuleTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVfModuleTest.java
new file mode 100644
index 0000000..235deb8
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVfModuleTest.java
@@ -0,0 +1,149 @@
+/*- 
+ * ============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.infrastructure;
+
+
+import static org.openecomp.mso.bpmn.common.BPMNUtil.getRawVariable;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithPriority;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutNetwork;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutVfModuleIdNoResponse;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;
+import static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockVNFPost;
+
+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;
+import org.openecomp.mso.bpmn.common.WorkflowTest.CallbackSet;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit tests for DoCreateVfModuleTest.bpmn.
+ */
+public class DoCreateVfModuleTest extends WorkflowTest {
+	
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public DoCreateVfModuleTest() throws IOException {
+		callbacks.put("assign", FileUtil.readResourceFile(
+			"__files/VfModularity/SDNCTopologyAssignCallback.xml"));
+		callbacks.put("query", FileUtil.readResourceFile(
+			"__files/VfModularity/SDNCTopologyQueryCallback.xml"));
+		callbacks.put("activate", FileUtil.readResourceFile(
+			"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("vnfCreate", FileUtil.readResourceFile(
+			"__files/VfModularity/VNFAdapterRestCreateCallback.xml"));
+	}
+
+	/**
+	 * Test the sunny day scenario.
+	 */
+	@Test	
+	
+	@Deployment(resources = {
+			"subprocess/DoCreateVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn",
+			"subprocess/ConfirmVolumeGroupTenant.bpmn",
+			"subprocess/ConfirmVolumeGroupName.bpmn",
+			"subprocess/CreateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/CreateAAIVfModuleVolumeGroup.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn"
+		})
+	public void sunnyDay() throws IOException {
+		
+		logStart();
+		
+		MockGetGenericVnfByIdWithPriority("skask", ".*", 200, "VfModularity/VfModule-new.xml", 5);
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+		MockPutVfModuleIdNoResponse("skask", "PCRF", ".*");
+		MockPutNetwork(".*", "VfModularity/AddNetworkPolicy_AAIResponse_Success.xml", 200);
+		MockPutGenericVnf("skask");
+		mockSDNCAdapter("/SDNCAdapter", "vnf-type>STMTN", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+		mockSDNCAdapter("/SDNCAdapter", "SvcAction>query", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+		mockVNFPost("", 202, "skask");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		
+		String businessKey = UUID.randomUUID().toString();
+		//RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		
+		Map<String, Object> variables = setupVariablesSunnyDayBuildingBlocks();
+		//runtimeService.startProcessInstanceByKey("DoCreateVfModule", variables);
+		invokeSubProcess("DoCreateVfModule", businessKey, variables);
+		
+		injectSDNCCallbacks(callbacks, "assign, query");
+		injectVNFRestCallbacks(callbacks, "vnfCreate");
+		injectSDNCCallbacks(callbacks, "activate");
+
+		waitForProcessEnd(businessKey, 10000);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		Assert.assertTrue((boolean) getRawVariable(processEngineRule, "DoCreateVfModule", "DCVFM_SuccessIndicator"));
+		
+		logEnd();
+	}
+	
+	private Map<String, Object> setupVariablesSunnyDayBuildingBlocks() {
+		Map<String, Object> variables = new HashMap<String, Object>();
+		
+		variables.put("mso-request-id", "testRequestId");
+		variables.put("requestId", "testRequestId");		
+		variables.put("isBaseVfModule", false);
+		variables.put("isDebugLogEnabled", "true");
+		variables.put("disableRollback", "true");
+		//variables.put("recipeTimeout", "0");		
+		//variables.put("requestAction", "CREATE_VF_MODULE");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("vnfId", "skask");
+		variables.put("vfModuleName", "PCRF::module-0-2");
+		variables.put("vnfType", "vSAMP12");
+		variables.put("vfModuleId", "");
+		variables.put("volumeGroupId", "");			
+		variables.put("serviceType", "MOG");	
+		variables.put("vfModuleType", "");
+		variables.put("isVidRequest", "true");
+		variables.put("asdcServiceModelVersion", "1.0");
+					
+		String vfModuleModelInfo = "{" + "\"modelInfo\": { "+ "\"modelType\": \"vfModule\"," +
+			"\"modelInvariantId\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," + 
+			"\"modelNameVersionId\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+			"\"modelName\": \"STMTN5MMSC21-MMSC::model-1-0\"," +
+			"\"modelVersion\": \"1\"," + 
+			"\"modelCustomizationId\": \"MODEL-123\"" + "}}";
+		variables.put("vfModuleModelInfo", vfModuleModelInfo);
+		
+		String cloudConfiguration = "{" + "\"cloudConfiguration\": { " + 
+				"\"lcpCloudRegionId\": \"MDTWNJ21\"," +		
+				"\"tenantId\": \"fba1bd1e195a404cacb9ce17a9b2b421\"" + "}}";
+		variables.put("cloudConfiguration", cloudConfiguration);
+		return variables;
+		
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVfModuleVolumeV1Test.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVfModuleVolumeV1Test.java
new file mode 100644
index 0000000..c7a112d
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVfModuleVolumeV1Test.java
@@ -0,0 +1,351 @@
+/*- 
+ * ============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.infrastructure;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.delete;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.post;
+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.urlEqualTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
+
+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.Test;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.WorkflowTest.CallbackSet;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+public class DoCreateVfModuleVolumeV1Test extends WorkflowTest {
+	
+	public static final String _prefix = "CVFMODVOL2_";
+	
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public DoCreateVfModuleVolumeV1Test() throws IOException {
+		callbacks.put("volumeGroupCreate", FileUtil.readResourceFile(
+				"__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeCallbackResponse.xml"));
+		callbacks.put("volumeGroupRollback", FileUtil.readResourceFile(
+				"__files/DoCreateVfModuleVolumeV1/RollbackVfModuleVolumeCallbackResponse.xml"));
+	}
+
+	/**
+	 * Happy Path
+	 * @throws Exception
+	 */
+	@Test
+	@Deployment(resources = {"subprocess/DoCreateVfModuleVolumeV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestHappyPath() throws Exception {
+
+		logStart();
+		
+		DoCreateVfModuleVolume_Success();
+		
+		String businessKey = UUID.randomUUID().toString();
+		String createVfModuleVolRequest = FileUtil.readResourceFile("__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeRequest.xml");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("DCVFMODVOLV1_volumeGroupId", "TEST-VOLUME-VOLUME-GROUP-ID-0123");
+		testVariables.put("vnf-id", "TEST-VNF-ID-0123");
+		testVariables.put("volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+		testVariables.put("test-volume-group-name", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0");
+		//testVariables.put("test-volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+		testVariables.put("DoCreateVfModuleVolumeV1Request", createVfModuleVolRequest);
+		invokeAsyncProcess("DoCreateVfModuleVolumeV1", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		
+		injectVNFRestCallbacks(callbacks, "volumeGroupCreate");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "DCVFMODVOLV1_SuccessIndicator", true);
+		
+		logEnd();
+	}
+	
+	@Test
+	@Deployment(resources = {"subprocess/DoCreateVfModuleVolumeV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestVolumeGroupExistError() throws Exception {
+
+		logStart();
+		
+		DoCreateVfModuleVolume_VolumeGroupExistsFail();
+		
+		String businessKey = UUID.randomUUID().toString();
+		String createVfModuleVolRequest = FileUtil.readResourceFile("__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeRequest.xml");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("DCVFMODVOLV1_volumeGroupId", "TEST-VOLUME-VOLUME-GROUP-ID-0123");
+		testVariables.put("vnf-id", "TEST-VNF-ID-0123");
+		testVariables.put("volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+		testVariables.put("test-volume-group-name", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0");
+		testVariables.put("DoCreateVfModuleVolumeV1Request", createVfModuleVolRequest);
+		invokeAsyncProcess("DoCreateVfModuleVolumeV1", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		
+		//injectVNFRestCallbacks(callbacks, "volumeGroupCreate");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "DCVFMODVOLV1_SuccessIndicator", false);
+		
+		logEnd();
+	}
+	
+	/**
+	 * Will trigger AAI create rollback
+	 * @throws Exception
+	 */
+	@Test
+	@Deployment(resources = {"subprocess/DoCreateVfModuleVolumeV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestVnfVolumeGroupCreateError() throws Exception {
+
+		logStart();
+		
+		DoCreateVfModuleVolume_VnfCreateVolumeGroupFail();
+		
+		String businessKey = UUID.randomUUID().toString();
+		String createVfModuleVolRequest = FileUtil.readResourceFile("__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeRequest.xml");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("DCVFMODVOLV1_volumeGroupId", "TEST-VOLUME-VOLUME-GROUP-ID-0123");
+		testVariables.put("vnf-id", "TEST-VNF-ID-0123");
+		testVariables.put("volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+		testVariables.put("test-volume-group-name", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0");
+		testVariables.put("test-volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+		testVariables.put("DoCreateVfModuleVolumeV1Request", createVfModuleVolRequest);
+		invokeAsyncProcess("DoCreateVfModuleVolumeV1", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		
+		//injectVNFRestCallbacks(callbacks, "volumeGroupCreate");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "DCVFMODVOLV1_SuccessIndicator", false);
+		
+		logEnd();
+	}
+	
+	/**
+	 * Will trigger AAI create rollback
+	 * @throws Exception
+	 */
+	@Test
+	@Deployment(resources = {"subprocess/DoCreateVfModuleVolumeV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestUpdateAaiVolumeGroupError() throws Exception {
+
+		logStart();
+		
+		DoCreateVfModuleVolume_AaiVolumeGroupUpdateFail();
+		
+		String businessKey = UUID.randomUUID().toString();
+		String createVfModuleVolRequest = FileUtil.readResourceFile("__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeRequest.xml");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("DCVFMODVOLV1_volumeGroupId", "TEST-VOLUME-VOLUME-GROUP-ID-0123");
+		testVariables.put("vnf-id", "TEST-VNF-ID-0123");
+		testVariables.put("volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+		testVariables.put("test-volume-group-name", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0");
+		testVariables.put("test-volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+		testVariables.put("DoCreateVfModuleVolumeV1Request", createVfModuleVolRequest);
+		invokeAsyncProcess("DoCreateVfModuleVolumeV1", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		
+		injectVNFRestCallbacks(callbacks, "volumeGroupCreate,volumeGroupRollback");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "DCVFMODVOLV1_SuccessIndicator", false);
+		
+		logEnd();
+	}		
+
+	/**
+	 * Will trigger not trigger rollback
+	 * @throws Exception
+	 */
+	@Test
+	@Deployment(resources = {"subprocess/DoCreateVfModuleVolumeV1.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestUpdateAaiVolumeGroupErrorNoRollback() throws Exception {
+
+		logStart();
+		
+		DoCreateVfModuleVolume_AaiVolumeGroupUpdateFail();
+		
+		String businessKey = UUID.randomUUID().toString();
+		String createVfModuleVolRequest = FileUtil.readResourceFile("__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeNoRollbackRequest.xml");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("DCVFMODVOLV1_volumeGroupId", "TEST-VOLUME-VOLUME-GROUP-ID-0123");
+		testVariables.put("vnf-id", "TEST-VNF-ID-0123");
+		testVariables.put("volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+		testVariables.put("test-volume-group-name", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0");
+		testVariables.put("test-volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+		testVariables.put("DoCreateVfModuleVolumeV1Request", createVfModuleVolRequest);
+		invokeAsyncProcess("DoCreateVfModuleVolumeV1", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		
+		injectVNFRestCallbacks(callbacks, "volumeGroupCreate");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "DCVFMODVOLV1_SuccessIndicator", false);
+		
+		logEnd();
+	}
+
+	public static void DoCreateVfModuleVolume_Success() {
+		// Notes:
+		// 1. initial aai volume group by name - /aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups/volume-group?volume-group-name=TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0
+		// 2. Create volume group - /aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups/volume-group
+		// 3. Requery Volume Group - /aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups/volume-group?volume-group-name=MSOTESTVOL101a-vSAMP12_base_vol_module-0
+		// 4. Update volume group (id from requery response - /aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups/volume-group/8424bb3c-c3e7-4553-9662-469649ed9379
+
+		//generic vnf
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/TEST-VNF-ID-0123"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/GenericVnf.xml")));
+		//create volume group
+		stubFor(put(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups/volume-group/TEST-VOLUME-GROUP-ID-0123"))
+				  .willReturn(aResponse()
+				  .withStatus(201)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/createVfModuleVolume_createVolumeName_AAIResponse_Success.xml")));
+		//requery volume group
+		stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups[?]volume-group-name=MSOTESTVOL101a-vSAMP12_base_vol_module-0"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml")));
+		//update volume group
+		stubFor(put(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups/volume-group/8424bb3c-c3e7-4553-9662-469649ed9379"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/createVfModuleVolume_updateVolumeName_AAIResponse_Success.xml")));
+		// VNF rest Adapter
+ 		stubFor(post(urlEqualTo("/vnfs/v1/volume-groups"))
+ 				.willReturn(aResponse()
+ 					.withStatus(202)
+ 					.withHeader("Content-Type", "application/xml")));
+	}
+
+	public static void DoCreateVfModuleVolume_VolumeGroupExistsFail() {
+		//generic vnf
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/TEST-VNF-ID-0123"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/GenericVnf.xml")));
+		//initial volume group query
+		stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups/volume-group[?]volume-group-name=TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml")));
+	}
+
+	public static void DoCreateVfModuleVolume_VnfCreateVolumeGroupFail() {
+		//generic vnf
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/TEST-VNF-ID-0123"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/GenericVnf.xml")));
+		//create volume group
+		stubFor(put(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups/volume-group/TEST-VOLUME-GROUP-ID-0123"))
+				  .willReturn(aResponse()
+				  .withStatus(201)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/createVfModuleVolume_createVolumeName_AAIResponse_Success.xml")));
+		//Query AAI volume group by name -- needed before delete
+		stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups[?]volume-group-name=MSOTESTVOL101a-vSAMP12_base_vol_module-0"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml")));
+		//delete volume group in aai
+		stubFor(delete(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups/volume-group/8424bb3c-c3e7-4553-9662-469649ed9379[?]resource-version=1460134360"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/createVfModuleVolume_deleteVolumeName_AAIResponse_Success.xml")));
+ 		stubFor(post(urlEqualTo("/vnfs/v1/volume-groups"))
+ 				.willReturn(aResponse()
+ 					.withStatus(404)
+ 					.withHeader("Content-Type", "application/xml")));
+	}
+
+	public static void DoCreateVfModuleVolume_AaiVolumeGroupUpdateFail() {
+		//generic vnf
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/TEST-VNF-ID-0123"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/GenericVnf.xml")));
+		//create volume group
+		stubFor(put(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups/volume-group/TEST-VOLUME-GROUP-ID-0123"))
+				  .willReturn(aResponse()
+				  .withStatus(201)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/createVfModuleVolume_createVolumeName_AAIResponse_Success.xml")));
+		//requery volume group
+		stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups[?]volume-group-name=MSOTESTVOL101a-vSAMP12_base_vol_module-0"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml")));
+		//delete volume group in aai
+		stubFor(delete(urlMatching("/aai/v[0-9]+/cloud-infrastructure/volume-groups/volume-group/8424bb3c-c3e7-4553-9662-469649ed9379[?]resource-version=1460134360"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DoCreateVfModuleVolumeV1/createVfModuleVolume_deleteVolumeName_AAIResponse_Success.xml")));
+		// VNF rest Adapter
+ 		stubFor(post(urlEqualTo("/vnfs/v1/volume-groups"))
+ 				.willReturn(aResponse()
+ 					.withStatus(202)
+ 					.withHeader("Content-Type", "application/xml")));
+ 		// VNF Rest Adapter rollback - vnfs/v1/volume-groups/STUB-TEST-8424bb3c-c3e7-4553-9662-469649ed9379/rollback
+ 		stubFor(delete(urlEqualTo("/vnfs/v1/volume-groups/TEST-VOLUME-GROUP-ID-0123/rollback"))
+ 				.willReturn(aResponse()
+ 				.withStatus(202)
+ 				.withHeader("Content-Type", "application/xml")));
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVnfTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVnfTest.java
new file mode 100644
index 0000000..b161d05
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVnfTest.java
@@ -0,0 +1,119 @@
+/*
+ * © 2014 AT&T Intellectual Property. All rights reserved. Used under license from AT&T Intellectual Property.
+ */
+/*- 
+ * ============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.infrastructure;
+
+import static org.junit.Assert.assertEquals;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByName_404;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetServiceInstance;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;
+
+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.BPMNUtil;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.WorkflowTest.CallbackSet;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit Test for the DoCreateVnf Flow
+ *
+ */
+public class DoCreateVnfTest extends WorkflowTest {
+
+	private String createVnfInfraRequest;
+	private final CallbackSet callbacks = new CallbackSet();
+
+
+	public DoCreateVnfTest() throws IOException {
+		createVnfInfraRequest = FileUtil.readResourceFile("__files/InfrastructureFlows/CreateVnfInfraRequest.json");
+		callbacks.put("assign", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyAssignCallback.xml"));
+		callbacks.put("activate", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/GenericGetService.bpmn", "subprocess/GenericGetVnf.bpmn", "subprocess/GenericPutVnf.bpmn", "subprocess/SDNCAdapterV1.bpmn", "subprocess/DoCreateVnf.bpmn"})
+	public void testDoCreateVnfInfra_success() throws Exception{
+
+		MockNodeQueryServiceInstanceById("MIS%2F1604%2F0026%2FSW_INTERNET", "GenericFlows/getSIUrlById.xml");
+		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
+		MockGetGenericVnfByName_404("testVnfName123");
+		MockPutGenericVnf("testVnfId123");
+		mockSDNCAdapter("/SDNCAdapter", "vnf-type>STMTN", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		setVariablesSuccess(variables, createVnfInfraRequest, "testRequestId123", "MIS%2F1604%2F0026%2FSW_INTERNET");
+		invokeSubProcess("DoCreateVnf", businessKey, variables);
+
+		waitForProcessEnd(businessKey, 10000);
+
+		Assert.assertTrue(isProcessEnded(businessKey));
+		assertVariables("true", "true", "false", "true", "Success", null);
+	}
+
+	private void assertVariables(String exSIFound, String exSISucc, String exVnfFound, String exVnfSucc, String exResponse, String exWorkflowException) {
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DoCreateVnf", "SavedWorkflowException1");
+
+		assertEquals(exWorkflowException, workflowException);
+	}
+
+	private void setVariablesSuccess(Map<String, Object> variables, String request, String requestId, String siId) {
+		variables.put("isDebugLogEnabled", "true");
+		//variables.put("bpmnRequest", request);
+		variables.put("mso-request-id", requestId);
+		variables.put("serviceInstanceId",siId);
+		variables.put("vnfName", "testVnfName123");
+		variables.put("disableRollback", "true");
+		variables.put("requestId", requestId);
+		variables.put("testVnfId","testVnfId123");
+		variables.put("vnfType", "STMTN");
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		String vnfModelInfo = "{ "+ "\"modelType\": \"vnf\"," +
+				"\"modelInvariantId\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," +
+				"\"modelNameVersionId\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"vSAMP12\"," +
+				"\"modelVersion\": \"1.0\"," +
+				"\"modelCustomizationId\": \"MODEL-ID-1234\"," +
+				"}";
+		variables.put("vnfModelInfo", vnfModelInfo);
+
+		String cloudConfiguration = "{ " +
+				"\"lcpCloudRegionId\": \"mdt1\"," +
+				"\"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\"" + "}";
+		variables.put("cloudConfiguration", cloudConfiguration);
+	}
+
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVfModuleTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVfModuleTest.java
new file mode 100644
index 0000000..a04ed17
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVfModuleTest.java
@@ -0,0 +1,549 @@
+/*- 
+ * ============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.infrastructure;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.containing;
+import static com.github.tomakehurst.wiremock.client.WireMock.delete;
+import static com.github.tomakehurst.wiremock.client.WireMock.post;
+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.urlEqualTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
+import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIDeleteGenericVnf;
+import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIDeleteVfModule;
+import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIGenericVnfSearch;
+
+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;
+import org.openecomp.mso.bpmn.common.WorkflowTest.CallbackSet;
+import org.openecomp.mso.bpmn.core.WorkflowException;
+
+/**
+ * Unit test for DoDeleteVfModule.bpmn.
+ */
+public class DoDeleteVfModuleTest extends WorkflowTest {
+	private final CallbackSet callbacks = new CallbackSet();
+	
+	private static final String EOL = "\n";
+
+	private final String vnfAdapterDeleteCallback = 
+		"<deleteVfModuleResponse>" + EOL +
+		"    <vnfId>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnfId>" + EOL +
+		"    <vfModuleId>973ed047-d251-4fb9-bf1a-65b8949e0a73</vfModuleId>" + EOL +
+		"    <vfModuleDeleted>true</vfModuleDeleted>" + EOL +
+		"    <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
+		"</deleteVfModuleResponse>" + EOL;
+			
+	private final String vnfAdapterDeleteCallbackFail = 
+			"<vfModuleException>" + EOL +
+			"    <message>Error processing request to VNF-Async. Not Found.</message>" + EOL +
+			"    <category>INTERNAL</category>" + EOL +
+			"    <rolledBack>false</rolledBack>" + EOL +
+			"    <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
+			"</vfModuleException>" + EOL;
+				
+	private final String sdncAdapterDeleteCallback =
+		"<output xmlns=\"org:openecomp:sdnctl:l3api\">" + EOL +
+		"  <svc-request-id>{{REQUEST-ID}}</svc-request-id>" + EOL +
+		"  <ack-final-indicator>Y</ack-final-indicator>" + EOL +
+		"</output>" + EOL;
+	
+	public DoDeleteVfModuleTest() throws IOException {
+		callbacks.put("sdncChangeDelete", sdncAdapterDeleteCallback);
+		callbacks.put("sdncDelete", sdncAdapterDeleteCallback);
+		callbacks.put("vnfDelete", vnfAdapterDeleteCallback);
+		callbacks.put("vnfDeleteFail", vnfAdapterDeleteCallbackFail);
+	}
+	
+	private final String wfeString = "WorkflowException";
+
+	@Test
+	@Deployment(resources = {
+			"subprocess/DoDeleteVfModule.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/DeleteAAIVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn"
+		})
+	public void  TestDoDeleteVfModuleSuccess() {
+		// delete the Base Module and Generic Vnf
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73
+		String request =
+			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
+			"  <request-info>" + EOL +
+			"    <action>DELETE_VF_MODULE</action>" + EOL +
+			"    <source>PORTAL</source>" + EOL +
+			"  </request-info>" + EOL +
+			"  <vnf-inputs>" + EOL +
+			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
+			"    <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
+			"    <vnf-type>asc_heat-int</vnf-type>" + EOL +
+			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+			"    <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
+			"    <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL +
+			"    <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL +
+			"    <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL +
+			"    <orchestration-status>pending-delete</orchestration-status>" + EOL +
+			"    <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL +
+			"  </vnf-inputs>" + EOL +
+			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+		logStart();
+		MockDoDeleteVfModule_SDNCSuccess();
+		MockDoDeleteVfModule_DeleteVNFSuccess();
+		MockAAIGenericVnfSearch();
+		MockAAIVfModulePUT(false);
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("mso-service-instance-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("DoDeleteVfModuleRequest",request);
+		variables.put("isVidRequest", "true");
+		invokeSubProcess("DoDeleteVfModule", businessKey, variables);
+
+		// "changedelete" operation not required for deleting a Vf Module
+//		injectSDNCCallbacks(callbacks, "sdncChangeDelete");
+		injectVNFRestCallbacks(callbacks, "vnfDelete");
+		waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);
+		injectSDNCCallbacks(callbacks, "sdncDelete");
+
+		waitForProcessEnd(businessKey, 10000);
+		WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, wfeString);
+		checkVariable(businessKey, wfeString, null);
+		if (wfe != null) {
+			System.out.println("TestDoDeleteVfModuleSuccess: ErrorCode=" + wfe.getErrorCode() +
+					", ErrorMessage=" + wfe.getErrorMessage());
+		}
+		logEnd();
+	}
+
+	@Test
+	@Deployment(resources = {
+			"subprocess/DoDeleteVfModule.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/DeleteAAIVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn"
+		})
+	public void  TestDoDeleteVfModule_Building_Block_Success() {
+		logStart();
+		MockDoDeleteVfModule_SDNCSuccess();
+		MockDoDeleteVfModule_DeleteVNFSuccess();
+		MockAAIGenericVnfSearch();
+		MockAAIVfModulePUT(false);
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		
+		variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");	
+		variables.put("requestId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("vnfId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("vfModuleId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		variables.put("serviceInstanceId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("vfModuleName", "STMTN5MMSC21-MMSC::module-0-0");
+		variables.put("sdncVersion", "1610");
+		variables.put("isVidRequest", "true");
+		String vfModuleModelInfo = "{" + "\"modelType\": \"vnf\"," +
+				"\"modelInvariantId\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," + 
+				"\"modelNameVersionId\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"vSAMP12\"," +
+				"\"modelVersion\": \"1.0\"," + 
+				"\"modelCustomizationId\": \"MODEL-ID-1234\"," + 
+				"}";
+		variables.put("vfModuleModelInfo", vfModuleModelInfo);
+			
+		String cloudConfiguration = "{" + 
+				"\"lcpCloudRegionId\": \"RDM2WAGPLCP\"," +		
+				"\"tenantId\": \"fba1bd1e195a404cacb9ce17a9b2b421\"" + "}";
+		variables.put("cloudConfiguration", cloudConfiguration);
+	
+		
+		invokeSubProcess("DoDeleteVfModule", businessKey, variables);
+
+		// "changedelete" operation not required for deleting a Vf Module
+//		injectSDNCCallbacks(callbacks, "sdncChangeDelete");
+		injectVNFRestCallbacks(callbacks, "vnfDelete");
+		waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);
+		injectSDNCCallbacks(callbacks, "sdncDelete");
+
+		waitForProcessEnd(businessKey, 10000);
+		WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, wfeString);
+		checkVariable(businessKey, wfeString, null);
+		if (wfe != null) {
+			System.out.println("TestDoDeleteVfModule_Building_Block_Success: ErrorCode=" + wfe.getErrorCode() +
+					", ErrorMessage=" + wfe.getErrorMessage());
+		}
+		logEnd();
+	}
+
+	
+	@Test
+	@Deployment(resources = {
+			"subprocess/DoDeleteVfModule.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/DeleteAAIVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn"
+		})
+	public void  TestDoDeleteVfModuleSDNCFailure() {
+		// delete the Base Module and Generic Vnf - SDNCAdapter failure
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73
+		String request =
+			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
+			"  <request-info>" + EOL +
+			"    <action>DELETE_VF_MODULE</action>" + EOL +
+			"    <source>PORTAL</source>" + EOL +
+			"  </request-info>" + EOL +
+			"  <vnf-inputs>" + EOL +
+			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
+			"    <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
+			"    <vnf-type>asc_heat-int</vnf-type>" + EOL +
+			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+			"    <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
+			"    <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL +
+			"    <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL +
+			"    <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL +
+			"    <orchestration-status>pending-delete</orchestration-status>" + EOL +
+			"    <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL +
+			"  </vnf-inputs>" + EOL +
+			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+
+		logStart();
+		MockDoDeleteVfModule_SDNCFailure();
+		MockDoDeleteVfModule_DeleteVNFSuccess();
+		MockAAIGenericVnfSearch();
+		MockAAIVfModulePUT(false);
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("mso-service-instance-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("DoDeleteVfModuleRequest", request);
+		variables.put("isVidRequest", "true");
+		invokeSubProcess("DoDeleteVfModule", businessKey, variables);
+
+		// "changedelete" operation not required for deleting a Vf Module
+//		injectSDNCCallbacks(callbacks, "sdncChangeDelete");
+		injectVNFRestCallbacks(callbacks, "vnfDelete");
+		waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);
+		// cause a failure by not injecting a callback
+//		injectSDNCCallbacks(callbacks, "sdncDelete");
+
+		waitForProcessEnd(businessKey, 10000);
+		WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, wfeString);
+		Assert.assertNotNull(wfe);
+		if (wfe != null) {
+			System.out.println("TestDoDeleteVfModuleSDNCFailure: ErrorCode=" + wfe.getErrorCode() +
+					", ErrorMessage=" + wfe.getErrorMessage());
+			Assert.assertTrue(wfe.getErrorCode() == 7000);
+			Assert.assertTrue(wfe.getErrorMessage().startsWith("Could not communicate"));
+		}
+		logEnd();
+	}
+
+	@Test
+	@Deployment(resources = {
+			"subprocess/DoDeleteVfModule.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/DeleteAAIVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn"
+		})
+	public void  TestDoDeleteVfModuleSDNCCallbackFailure() {
+		// delete the Base Module and Generic Vnf - SDNCAdapter Callback failure
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73
+		String request =
+			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
+			"  <request-info>" + EOL +
+			"    <action>DELETE_VF_MODULE</action>" + EOL +
+			"    <source>PORTAL</source>" + EOL +
+			"  </request-info>" + EOL +
+			"  <vnf-inputs>" + EOL +
+			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
+			"    <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
+			"    <vnf-type>asc_heat-int</vnf-type>" + EOL +
+			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+			"    <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
+			"    <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL +
+			"    <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL +
+			"    <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL +
+			"    <orchestration-status>pending-delete</orchestration-status>" + EOL +
+			"    <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL +
+			"  </vnf-inputs>" + EOL +
+			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+
+		logStart();
+		MockDoDeleteVfModule_SDNCSuccess();
+		MockDoDeleteVfModule_DeleteVNFSuccess();
+		MockAAIGenericVnfSearch();
+		MockAAIVfModulePUT(false);
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("mso-service-instance-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("DoDeleteVfModuleRequest",request);
+		variables.put("isVidRequest", "true");
+		invokeSubProcess("DoDeleteVfModule", businessKey, variables);
+
+		// "changedelete" operation not required for deleting a Vf Module
+//		injectSDNCCallbacks(callbacks, "sdncChangeDelete:ERR");
+		injectVNFRestCallbacks(callbacks, "vnfDelete");
+		waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);
+		// return a failure in the callback
+		injectSDNCCallbacks(callbacks, "sdncDelete:ERR");
+
+		waitForProcessEnd(businessKey, 10000);
+		WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, wfeString);
+		Assert.assertNotNull(wfe);
+		if (wfe != null) {
+			System.out.println("TestDoDeleteVfModuleSDNCCallbackFailure: ErrorCode=" + wfe.getErrorCode() +
+					", ErrorMessage=" + wfe.getErrorMessage());
+			Assert.assertTrue(wfe.getErrorCode() == 5310);
+			Assert.assertTrue(wfe.getErrorMessage().startsWith("Received error from SDN-C"));
+		}
+		logEnd();
+	}
+
+	@Test
+	@Deployment(resources = {
+			"subprocess/DoDeleteVfModule.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/DeleteAAIVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn"
+		})
+	public void  TestDoDeleteVfModuleVNFFailure() {
+		// delete the Base Module and Generic Vnf - VNFAdapter failure
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73
+		String request =
+			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
+			"  <request-info>" + EOL +
+			"    <action>DELETE_VF_MODULE</action>" + EOL +
+			"    <source>PORTAL</source>" + EOL +
+			"  </request-info>" + EOL +
+			"  <vnf-inputs>" + EOL +
+			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
+			"    <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
+			"    <vnf-type>asc_heat-int</vnf-type>" + EOL +
+			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+			"    <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
+			"    <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL +
+			"    <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL +
+			"    <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL +
+			"    <orchestration-status>pending-delete</orchestration-status>" + EOL +
+			"    <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL +
+			"  </vnf-inputs>" + EOL +
+			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+
+		logStart();
+		MockDoDeleteVfModule_SDNCSuccess();
+		MockDoDeleteVfModule_DeleteVNFFailure();
+		MockAAIGenericVnfSearch();
+		MockAAIVfModulePUT(false);
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("mso-service-instance-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("DoDeleteVfModuleRequest",request);
+		invokeSubProcess("DoDeleteVfModule", businessKey, variables);
+
+		// "changedelete" operation not required for deleting a Vf Module
+//		injectSDNCCallbacks(callbacks, "sdncChangeDelete");
+		// cause a failure by not injecting a callback
+//		injectVNFRestCallbacks(callbacks, "vnfDelete");
+//		waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);
+//		injectSDNCCallbacks(callbacks, "sdncDelete");
+
+		waitForProcessEnd(businessKey, 10000);
+		WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, wfeString);
+		Assert.assertNotNull(wfe);
+		if (wfe != null) {
+			System.out.println("TestDoDeleteVfModuleVNFFailure: ErrorCode=" + wfe.getErrorCode() +
+					", ErrorMessage=" + wfe.getErrorMessage());
+			Assert.assertTrue(wfe.getErrorCode() == 7020);
+			Assert.assertTrue(wfe.getErrorMessage().startsWith("Received error from VnfAdapter"));
+		}
+		logEnd();
+	}
+
+	@Test
+	@Deployment(resources = {
+			"subprocess/DoDeleteVfModule.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/DeleteAAIVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn"
+		})
+	public void  TestDoDeleteVfModuleVNFCallbackFailure() {
+		// delete the Base Module and Generic Vnf - VNFAdapter Callback failure
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73
+		String request =
+			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
+			"  <request-info>" + EOL +
+			"    <action>DELETE_VF_MODULE</action>" + EOL +
+			"    <source>PORTAL</source>" + EOL +
+			"  </request-info>" + EOL +
+			"  <vnf-inputs>" + EOL +
+			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
+			"    <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
+			"    <vnf-type>asc_heat-int</vnf-type>" + EOL +
+			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+			"    <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
+			"    <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL +
+			"    <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL +
+			"    <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL +
+			"    <orchestration-status>pending-delete</orchestration-status>" + EOL +
+			"    <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL +
+			"  </vnf-inputs>" + EOL +
+			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+
+		logStart();
+		MockDoDeleteVfModule_SDNCSuccess();
+		MockDoDeleteVfModule_DeleteVNFSuccess();
+		MockAAIGenericVnfSearch();
+		MockAAIVfModulePUT(false);
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("mso-service-instance-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("DoDeleteVfModuleRequest",request);
+		invokeSubProcess("DoDeleteVfModule", businessKey, variables);
+
+		// "changedelete" operation not required for deleting a Vf Module
+//		injectSDNCCallbacks(callbacks, "sdncChangeDelete");
+		injectVNFRestCallbacks(callbacks, "vnfDeleteFail");
+		waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);
+//		injectSDNCCallbacks(callbacks, "sdncDelete");
+
+		waitForProcessEnd(businessKey, 10000);
+		WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, wfeString);
+		Assert.assertNotNull(wfe);
+		if (wfe != null) {
+			System.out.println("TestDoDeleteVfModuleVNFCallbackFailure: ErrorCode=" + wfe.getErrorCode() +
+					", ErrorMessage=" + wfe.getErrorMessage());
+			Assert.assertTrue(wfe.getErrorCode() == 7020);
+			Assert.assertTrue(wfe.getErrorMessage().startsWith("Received vfModuleException from VnfAdapter"));
+		}
+		logEnd();
+	}
+
+	// start of mocks used locally and by other VF Module unit tests
+	public static void MockAAIVfModulePUT(boolean isCreate){
+		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*/vf-modules/vf-module/.*"))
+				.withRequestBody(containing("MMSC"))
+				.willReturn(aResponse()
+						.withStatus(isCreate ? 201 : 200)));
+		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*/vf-modules/vf-module/.*"))
+				.withRequestBody(containing("PCRF"))
+				.willReturn(aResponse()
+						.withStatus(500)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("aaiFault.xml")));
+		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721"))				
+				.willReturn(aResponse()
+					.withStatus(200)));
+	}
+
+	public static void MockDoDeleteVfModule_SDNCSuccess() {
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>changedelete"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>delete"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));
+	}
+
+	public static void MockDoDeleteVfModule_SDNCFailure() {
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>changedelete"))
+				  .willReturn(aResponse()
+				  .withStatus(500)));
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>delete"))
+				  .willReturn(aResponse()
+				  .withStatus(500)));
+	}
+
+	public static void MockDoDeleteVfModule_DeleteVNFSuccess() {
+		stubFor(delete(urlMatching("/vnfs/v1/vnfs/.*/vf-modules/.*"))
+				.willReturn(aResponse()
+				.withStatus(202)
+				.withHeader("Content-Type", "application/xml")));
+		stubFor(delete(urlMatching("/vnfs/v1/volume-groups/78987"))
+				.willReturn(aResponse()
+				.withStatus(202)
+				.withHeader("Content-Type", "application/xml")));
+	}
+
+	public static void MockDoDeleteVfModule_DeleteVNFFailure() {
+		stubFor(delete(urlMatching("/vnfs/v1/vnfs/.*/vf-modules/.*"))
+				.willReturn(aResponse()
+				.withStatus(500)
+				.withHeader("Content-Type", "application/xml")));
+	}
+}
+
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVnfTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVnfTest.java
new file mode 100644
index 0000000..9c98c01
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVnfTest.java
@@ -0,0 +1,140 @@
+/*
+ * © 2014 AT&T Intellectual Property. All rights reserved. Used under license from AT&T Intellectual Property.
+ */
+/*- 
+ * ============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.infrastructure;
+
+import static org.junit.Assert.assertEquals;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDeleteGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+
+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.BPMNUtil;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+
+/**
+ * Please describe the DeleteVnfInfra.java class
+ *
+ */
+public class DoDeleteVnfTest extends WorkflowTest {
+
+	
+	@Test
+	@Deployment(resources = {"subprocess/GenericGetVnf.bpmn", "subprocess/GenericDeleteVnf.bpmn", "subprocess/DoDeleteVnf.bpmn"})
+	public void testDoDeleteVnf_success() throws Exception{
+		
+		MockGetGenericVnfByIdWithDepth("testVnfId123", 1, "GenericFlows/getGenericVnfByNameResponse.xml");
+		MockDeleteGenericVnf("testVnfId123", "testReVer123");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		setVariables(variables);
+		invokeSubProcess("DoDeleteVnf", businessKey, variables);
+		// Disabled until SDNC support is there
+//		injectSDNCCallbacks(callbacks, "assign");		
+//		injectSDNCCallbacks(callbacks, "activate");
+
+		waitForProcessEnd(businessKey, 10000);
+				
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String found = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "GENGV_FoundIndicator") ;
+		String inUse = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "DoDVNF_vnfInUse");
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "WorkflowException");
+
+		assertEquals("true", found);
+		assertEquals("false", inUse);
+		assertEquals(null, workflowException);
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/GenericGetVnf.bpmn", "subprocess/GenericDeleteVnf.bpmn", "subprocess/DoDeleteVnf.bpmn"})
+	public void testDeleteVnfInfra_success_vnfNotFound() throws Exception{
+
+		MockDeleteGenericVnf("testVnfId123", "testReVer123", 404);
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		setVariables(variables);
+
+		invokeSubProcess("DoDeleteVnf", businessKey, variables);
+		// Disabled until SDNC support is there
+//		injectSDNCCallbacks(callbacks, "assign");		
+//		injectSDNCCallbacks(callbacks, "activate");
+
+		waitForProcessEnd(businessKey, 10000);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String found = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "GENGV_FoundIndicator") ;
+		String inUse = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "DoDVNF_vnfInUse");
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "WorkflowException");
+
+		assertEquals("false", found);
+		assertEquals("false", inUse);
+		assertEquals(null, workflowException);
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/GenericGetVnf.bpmn", "subprocess/GenericDeleteVnf.bpmn", "subprocess/DoDeleteVnf.bpmn"})
+	public void testDeleteVnfInfra_error_vnfInUse() throws Exception{
+
+		MockGetGenericVnfByIdWithDepth("testVnfId123", 1, "GenericFlows/getGenericVnfResponse_hasRelationships.xml");
+		MockDeleteGenericVnf("testVnfId123", "testReVer123");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		setVariables(variables);
+
+		invokeSubProcess("DoDeleteVnf", businessKey, variables);
+//		Disabled until SDNC support is there
+//		injectSDNCCallbacks(callbacks, "assign");		
+//		injectSDNCCallbacks(callbacks, "activate");
+
+		waitForProcessEnd(businessKey, 10000);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+
+		String found = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "GENGV_FoundIndicator") ;
+		String inUse = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "DoDVNF_vnfInUse");
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnf", "WorkflowException");
+		String exWfex = "WorkflowException[processKey=DoDeleteVnf,errorCode=5000,errorMessage=Can't Delete Generic Vnf. Generic Vnf is still in use.]";
+
+		assertEquals("true", found);
+		assertEquals("true", inUse);
+		assertEquals(exWfex, workflowException);
+	}
+
+	private void setVariables(Map<String, Object> variables) {
+		variables.put("mso-request-id", "123");
+		variables.put("isDebugLogEnabled", "true");		
+		variables.put("vnfId","testVnfId123");
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoUpdateVfModuleTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoUpdateVfModuleTest.java
new file mode 100644
index 0000000..e202b03
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoUpdateVfModuleTest.java
@@ -0,0 +1,115 @@
+/*- 
+ * ============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.infrastructure;
+
+
+
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithPriority;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetVfModuleIdNoResponse;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetVolumeGroupById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutVfModuleIdNoResponse;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;
+import static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockVNFPut;
+
+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;
+import org.openecomp.mso.bpmn.common.WorkflowTest.CallbackSet;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit tests for DoUpdateVfModule.bpmn.
+ */
+public class DoUpdateVfModuleTest extends WorkflowTest {
+	
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public DoUpdateVfModuleTest() throws IOException {
+		callbacks.put("changeassign", FileUtil.readResourceFile(
+			"__files/VfModularity/SDNCTopologyChangeAssignCallback.xml"));
+		callbacks.put("query", FileUtil.readResourceFile(
+			"__files/VfModularity/SDNCTopologyQueryCallback.xml"));
+		callbacks.put("activate", FileUtil.readResourceFile(
+			"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("vnfUpdate", FileUtil.readResourceFile(
+			"__files/VfModularity/VNFAdapterRestUpdateCallback.xml"));
+	}
+
+	/**
+	 * Test the happy path through the flow.
+	 */
+	@Test	
+	
+	@Deployment(resources = {
+			"subprocess/DoUpdateVfModule.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/ConfirmVolumeGroupTenant.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn"
+		})
+	public void happyPath() throws IOException {
+		
+		logStart();
+		
+		String doUpdateVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/DoUpdateVfModuleRequest.xml");
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+		MockGetVfModuleIdNoResponse("skask", "PCRF", "supercool");
+		MockPutVfModuleIdNoResponse("skask", "PCRF", "supercool");
+		MockGetVolumeGroupById("MDTWNJ21", "78987", "VfModularity/VolumeGroup.xml");
+		mockSDNCAdapter("/SDNCAdapter", "SvcAction>query", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+		mockSDNCAdapter("/SDNCAdapter", "SvcInstanceId><", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+		mockVNFPut("skask", "/supercool", 202);
+		MockPutGenericVnf("skask");
+		MockGetGenericVnfByIdWithPriority("skask", "supercool", 200, "VfModularity/VfModule-supercool.xml", 1);
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		variables.put("mso-request-id", "DEV-VF-0011");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("DoUpdateVfModuleRequest", doUpdateVfModuleRequest);
+		invokeSubProcess("DoUpdateVfModule", businessKey, variables);
+		
+		injectSDNCCallbacks(callbacks, "changeassign, query");
+		injectVNFRestCallbacks(callbacks, "vnfUpdate");
+		injectSDNCCallbacks(callbacks, "activate");
+
+		waitForProcessEnd(businessKey, 10000);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		checkVariable(businessKey, "DoUpdateVfModuleSuccessIndicator", true);
+		
+		String heatStackId = (String) getVariableFromHistory(businessKey, "DOUPVfMod_heatStackId");
+		System.out.println("Heat stack Id from AAI: " + heatStackId);
+		
+		logEnd();
+	}
+}
+
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateNetworkInstanceInfraTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateNetworkInstanceInfraTest.java
new file mode 100644
index 0000000..9ef4c94
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateNetworkInstanceInfraTest.java
@@ -0,0 +1,840 @@
+/*- 
+ * ============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.infrastructure;
+
+import static org.junit.Assert.assertEquals;
+import static org.openecomp.mso.bpmn.common.BPMNUtil.executeAsyncWorkflow;
+import static org.openecomp.mso.bpmn.common.BPMNUtil.getVariable;
+import static org.openecomp.mso.bpmn.common.BPMNUtil.waitForWorkflowToFinish;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetCloudRegion;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetwork;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkPolicy;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkRouteTable;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkVpnBinding;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutNetwork;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseNetworkAdapter.MockPutNetworkAdapter;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapterTopology;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.camunda.bpm.engine.test.Deployment;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.BPMNUtil;
+import org.openecomp.mso.bpmn.common.SDNCAdapterCallbackRule;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.WorkflowTestTransformer;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.mock.SDNCAdapterNetworkTopologyMockTransformer;
+
+import com.github.tomakehurst.wiremock.extension.ResponseTransformer;
+
+/**
+ * Unit test cases for UpdateNetworkInstanceInfra.bpmn
+ *
+ */
+public class UpdateNetworkInstanceInfraTest extends WorkflowTest {
+	@WorkflowTestTransformer
+	public static final ResponseTransformer sdncAdapterMockTransformer =
+		new SDNCAdapterNetworkTopologyMockTransformer();
+
+	@Rule
+	public final SDNCAdapterCallbackRule sdncAdapterCallbackRule =
+		new SDNCAdapterCallbackRule(processEngineRule);
+
+	/**
+	 * End-to-End flow - Unit test for UpdateNetworkInstanceInfra.bpmn
+	 *  - String input & String response
+	 */
+
+	@Test
+	//@Ignore 
+	@Deployment(resources = {"process/UpdateNetworkInstanceInfra.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/GenericGetService.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstanceInfra_Success1() throws Exception {
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("            Success1 - UpdateNetworkInstanceInfra flow Started!       ");
+		System.out.println("----------------------------------------------------------");
+
+		// setup simulators
+
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>changeassign");  //
+		MockPutNetworkAdapter("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "updateNetworkRequest", 200, "UpdateNetworkV2/updateNetworkResponse_Success.xml");
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml");
+		MockGetNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("85f015d0-2e32-4c30-96d2-87a1a27f8017", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("c980a6ef-3b88-49f0-9751-dbad8608d0a6", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkPolicy("cee6d136-e378-4678-a024-2cd15f0ee0cg", "UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN1", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN2", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", 200);
+		MockPutNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", 200, "UpdateNetworkV2/updateNetwork_updateContrail_AAIResponse_Success.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariables1();
+		WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstanceInfra", variables);
+		System.out.println("----------------------------------------------------------");
+		System.out.println("- got workflow response -");
+		System.out.println("----------------------------------------------------------");
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("true", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_Success"));
+	    Assert.assertNotNull("UPDNETI_CompleteMsoProcessRequest - ", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_CompleteMsoProcessRequest"));
+
+		String workflowResp = BPMNUtil.getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "WorkflowResponse");
+		Assert.assertNotNull(workflowResp);
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("     Success1 - UpdateNetworkInstanceInfra flow Completed      ");
+		System.out.println("----------------------------------------------------------");
+
+	}
+
+	@Test
+	//@Ignore 
+	@Deployment(resources = {"process/UpdateNetworkInstanceInfra.bpmn",
+			 				 "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstanceInfra_Success2() throws Exception {
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("            Success2 - UpdateNetworkInstanceInfra flow Started!      ");
+		System.out.println("----------------------------------------------------------");
+
+		// setup simulators
+
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>changeassign");
+		MockPutNetworkAdapter("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "updateNetworkRequest", 200, "UpdateNetworkV2/updateNetworkResponse_Success.xml");
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml");
+		MockGetNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("85f015d0-2e32-4c30-96d2-87a1a27f8017", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("c980a6ef-3b88-49f0-9751-dbad8608d0a6", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkPolicy("cee6d136-e378-4678-a024-2cd15f0ee0cg", "UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN1", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN2", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", 200);
+		MockPutNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", 200, "UpdateNetworkV2/updateNetwork_updateContrail_AAIResponse_Success.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariables2();
+		WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstanceInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("true", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_Success"));
+	    Assert.assertNotNull("UPDNETI_CompleteMsoProcessRequest - ", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_CompleteMsoProcessRequest"));
+
+	    String completeMsoProcessRequest =
+	    		"<aetgt:MsoCompletionRequest xmlns:aetgt=\"http://org.openecomp/mso/workflow/schema/v1\""  + '\n'
+	    	  + "                            xmlns:ns=\"http://org.openecomp/mso/request/types/v1\""  + '\n'
+	    	  + "                            xmlns=\"http://org.openecomp/mso/infra/vnf-request/v1\">"  + '\n'
+	    	  + "   <request-info>"  + '\n'
+	    	  + "      <request-id>testRequestId</request-id>"  + '\n'
+	    	  + "      <action>UPDATE</action>"  + '\n'
+	    	  + "      <source>VID</source>"  + '\n'
+	    	  + "   </request-info>"  + '\n'
+	    	  + "   <aetgt:mso-bpel-name>BPMN Network action: UPDATE</aetgt:mso-bpel-name>" + '\n'
+	    	  + "</aetgt:MsoCompletionRequest>";
+
+	    Assert.assertEquals(completeMsoProcessRequest, getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_CompleteMsoProcessRequest"));
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("     Success2 - UpdateNetworkInstanceInfra flow Completed     ");
+		System.out.println("----------------------------------------------------------");
+
+	}
+
+
+	@Test
+	@Deployment(resources = {"process/UpdateNetworkInstanceInfra.bpmn",
+			 				 "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstanceInfra_MissingNetworkId() throws Exception {
+
+		System.out.println("--------------------------------------------------------------------");
+		System.out.println("     Missing networkId - UpdateNetworkInstanceInfra flow Started!   ");
+		System.out.println("--------------------------------------------------------------------");
+
+		// setup simulators
+
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariablesMissingNetworkId();
+		WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstanceInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_Success"));
+	    Assert.assertNotNull("UPDNETI_FalloutHandlerRequest - ", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_FalloutHandlerRequest"));
+	    
+	    String falloutHandlerActual = getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_FalloutHandlerRequest");	
+	    String falloutHandlerExpected = 
+"<aetgt:FalloutHandlerRequest xmlns:aetgt=\"http://org.openecomp/mso/workflow/schema/v1\"" + "\n" +
+"					                             xmlns:ns=\"http://org.openecomp/mso/request/types/v1\"" + "\n" +
+"					                             xmlns:wfsch=\"http://org.openecomp/mso/workflow/schema/v1\">" + "\n" +
+"					   <request-info xmlns=\"http://org.openecomp/mso/infra/vnf-request/v1\">" + "\n" +
+"					      <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>" + "\n" +
+"					      <action>UPDATE</action>" + "\n" +
+"					      <source>VID</source>" + "\n" +
+"					   </request-info>" + "\n" +
+"						<aetgt:WorkflowException xmlns:aetgt=\"http://org.openecomp/mso/workflow/schema/v1\">" + "\n" +
+"							<aetgt:ErrorMessage>Variable 'network-id' value/element is missing.</aetgt:ErrorMessage>" + "\n" +
+"							<aetgt:ErrorCode>2500</aetgt:ErrorCode>" + "\n" +
+"						</aetgt:WorkflowException>" + "\n" +
+"					</aetgt:FalloutHandlerRequest>"; 
+	    		
+		assertEquals("Response", falloutHandlerExpected, falloutHandlerActual);
+
+		System.out.println("------------------------------------------------------------------");
+		System.out.println("    Missing networkId - UpdateNetworkInstanceInfra flow Completed ");
+		System.out.println("------------------------------------------------------------------");
+
+	}
+
+	/* NOT NEEDED
+	@Test
+	@Deployment(resources = {"process/UpdateNetworkInstanceInfra.bpmn",
+			 				 "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstanceInfra_SDNCRollback1() throws Exception {
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("       SDNCRollback1 - UpdateNetworkInstanceInfra flow Started!       ");
+		System.out.println("----------------------------------------------------------");
+
+		// setup simulators
+
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>changeassign");
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>rollback");
+		MockPutNetworkAdapter("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "updateNetworkRequest", 200, "UpdateNetworkV2/updateNetworkResponse_Success.xml");
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml");
+		MockAAIResponse_queryId_UpdateNetwork_404V2();            // failure in queryId in AAI
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariablesSDNCRollback();
+		WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstanceInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_Success"));
+	    Assert.assertNotNull("UPDNETI_FalloutHandlerRequest - ", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_FalloutHandlerRequest"));
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("   SDNCRollback1 - UpdateNetworkInstanceInfra flow Completed   ");
+		System.out.println("----------------------------------------------------------");
+
+	} */
+
+	@Test
+	@Deployment(resources = {"process/UpdateNetworkInstanceInfra.bpmn",
+			 				 "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstanceInfra_SDNCRollback_Scenario01() throws Exception {
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("       SDNCRollback - UpdateNetworkInstanceInfra flow Started!       ");
+		System.out.println("----------------------------------------------------------");
+
+		// setup simulators
+
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>changeassign");          //
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>rollback");
+		MockPutNetworkAdapter("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "updateNetworkRequest", 200, "UpdateNetworkV2/updateNetworkResponse_Success.xml");
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml");
+		MockGetNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_NoPayload_Success.xml", 200);    // no 'payload' response from NetworkAdapter, version 2
+		//MockGetNetworkVpnBinding("85f015d0-2e32-4c30-96d2-87a1a27f8017", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);     // let it fail (404) to see SDNC compensation
+		//MockGetNetworkVpnBinding("c980a6ef-3b88-49f0-9751-dbad8608d0a6", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);	 // let it fail (404) to see SDNC compensation
+		//MockGetNetworkRouteTable("refFQDN2", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", 200);
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariablesSDNCRollback();
+		WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstanceInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_Success"));
+	    Assert.assertNotNull("UPDNETI_FalloutHandlerRequest - ", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_FalloutHandlerRequest"));
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("   SDNCRollback - UpdateNetworkInstanceInfra flow Completed   ");
+		System.out.println("----------------------------------------------------------");
+
+	}
+
+	@Test
+	@Deployment(resources = {"process/UpdateNetworkInstanceInfra.bpmn",
+			 			     "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstanceInfra_Network_SDNC_Rollback() throws Exception {
+
+		System.out.println("---------------------------------------------------------------");
+		System.out.println("    Network and SDNC Rollback - UpdateNetworkInstanceInfra flow Started!       ");
+		System.out.println("---------------------------------------------------------------");
+
+		// setup simulators
+
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>changeassign");          //
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>rollback");
+		MockPutNetworkAdapter("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "updateNetworkRequest", 200, "UpdateNetworkV2/updateNetworkResponse_Success.xml");
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml");
+		MockGetNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("85f015d0-2e32-4c30-96d2-87a1a27f8017", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("c980a6ef-3b88-49f0-9751-dbad8608d0a6", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkPolicy("cee6d136-e378-4678-a024-2cd15f0ee0cg", "UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN1", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN2", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", 200);
+		//MockAAIResponse_updateContrail_CreateNetwork_SuccessV2();  // designed to fail in AAI Update
+		//mockUpdateRequestDB(500, "Database/DBUpdateResponse.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariables1();
+		WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstanceInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_Success"));
+	    Assert.assertNotNull("UPDNETI_FalloutHandlerRequest - ", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_FalloutHandlerRequest"));
+
+		System.out.println("---------------------------------------------------------------------");
+		System.out.println(" Network and SCNC Rollback - UpdateNetworkInstanceInfra flow Completed   ");
+		System.out.println("---------------------------------------------------------------------");
+
+	}
+
+	@Test
+	@Deployment(resources = {"process/UpdateNetworkInstanceInfra.bpmn",
+			 				 "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstanceInfra_Network_SDNC_Rollback_Failed() throws Exception {
+
+		System.out.println("---------------------------------------------------------------");
+		System.out.println("    Network and SDNC Rollback - UpdateNetworkInstanceInfra flow Started!       ");
+		System.out.println("---------------------------------------------------------------");
+
+		// setup simulators
+
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>changeassign");          //
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySim500Response.xml", "SvcAction>rollback");
+		MockPutNetworkAdapter("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "updateNetworkRequest", 200, "UpdateNetworkV2/updateNetworkResponse_Success.xml");
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml");
+		MockGetNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("85f015d0-2e32-4c30-96d2-87a1a27f8017", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("c980a6ef-3b88-49f0-9751-dbad8608d0a6", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkPolicy("cee6d136-e378-4678-a024-2cd15f0ee0cg", "UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN1", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN2", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", 200);
+		//MockAAIResponse_updateContrail_CreateNetwork_SuccessV2();  // designed to fail in AAI Update
+		//mockUpdateRequestDB(500, "Database/DBUpdateResponse.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariables1();
+		WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstanceInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_Success"));
+	    Assert.assertNotNull("UPDNETI_FalloutHandlerRequest - ", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_FalloutHandlerRequest"));
+
+		System.out.println("---------------------------------------------------------------------");
+		System.out.println(" Network and SCNC Rollback - UpdateNetworkInstanceInfra flow Completed   ");
+		System.out.println("---------------------------------------------------------------------");
+
+	}
+
+	@Test
+	@Deployment(resources = {"process/UpdateNetworkInstanceInfra.bpmn",
+			                 "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstanceInfra_SDNCRollback2() throws Exception {
+
+		System.out.println("----------------------------------------------------");
+		System.out.println("    SDNCRollback2 - UpdateNetworkInstanceInfra flow Started!    ");
+		System.out.println("----------------------------------------------------");
+
+		// setup simulators
+
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>changeassign");
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>rollback");
+		MockPutNetworkAdapter("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "updateNetworkRequest", 500, "UpdateNetworkV2/updateNetworkResponse_500.xml");            // failure 500 in NetworkAdapter
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml");
+		MockGetNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("85f015d0-2e32-4c30-96d2-87a1a27f8017", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("c980a6ef-3b88-49f0-9751-dbad8608d0a6", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkPolicy("cee6d136-e378-4678-a024-2cd15f0ee0cg", "UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN1", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN2", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", 200);
+		//MockPutNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", 200, "UpdateNetworkV2/updateNetwork_updateContrail_AAIResponse_Success.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariables1();
+		WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstanceInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_Success"));
+	    Assert.assertNotNull("UPDNETI_FalloutHandlerRequest - ", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_FalloutHandlerRequest"));
+
+		System.out.println("------------------------------------------------------------");
+		System.out.println(" SDNCRollback2 - UpdateNetworkInstanceInfra flow Completed      ");
+		System.out.println("------------------------------------------------------------");
+
+	}
+
+	@Test
+	@Deployment(resources = {"process/UpdateNetworkInstanceInfra.bpmn",
+			 				 "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstanceInfra_SDNCRollback3() throws Exception {
+
+		System.out.println("----------------------------------------------------");
+		System.out.println("    SDNCRollback3 - UpdateNetworkInstanceInfra flow Started!    ");
+		System.out.println("----------------------------------------------------");
+
+		// setup simulators
+
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>changeassign");
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>rollback");
+		MockPutNetworkAdapter("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "updateNetworkRequest", 400, "UpdateNetworkV2/updateNetworkResponse_400.xml");            // failure 400 in NetworkAdapter
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml");
+		MockGetNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("85f015d0-2e32-4c30-96d2-87a1a27f8017", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("c980a6ef-3b88-49f0-9751-dbad8608d0a6", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkPolicy("cee6d136-e378-4678-a024-2cd15f0ee0cg", "UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN1", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN2", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", 200);
+		//MockPutNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", 200, "UpdateNetworkV2/updateNetwork_updateContrail_AAIResponse_Success.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariables1();
+		WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstanceInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_Success"));
+	    Assert.assertNotNull("UPDNETI_FalloutHandlerRequest - ", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_FalloutHandlerRequest"));
+
+		System.out.println("------------------------------------------------------------");
+		System.out.println(" SDNCRollback3 - UpdateNetworkInstanceInfra flow Completed      ");
+		System.out.println("------------------------------------------------------------");
+
+	}
+
+	@Test
+	@Deployment(resources = {"process/UpdateNetworkInstanceInfra.bpmn",
+			 				 "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstanceInfra_PONR() throws Exception {
+
+		System.out.println("--------------------------------------------------------------------");
+		System.out.println("    PONR (Point-of-no-Return) - UpdateNetworkInstanceInfra flow Started!       ");
+		System.out.println("--------------------------------------------------------------------");
+
+		// setup simulators
+
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>changeassign");          //
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>rollback");
+		MockPutNetworkAdapter("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "updateNetworkRequest", 200, "UpdateNetworkV2/updateNetworkResponse_Success.xml");
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml");
+		MockGetNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("85f015d0-2e32-4c30-96d2-87a1a27f8017", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkVpnBinding("c980a6ef-3b88-49f0-9751-dbad8608d0a6", "UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", 200);
+		MockGetNetworkPolicy("cee6d136-e378-4678-a024-2cd15f0ee0cg", "UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN1", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", 200);
+		MockGetNetworkRouteTable("refFQDN2", "UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", 200);
+		MockPutNetwork("49c86598-f766-46f8-84f8-8d1c1b10f9b4", 200, "UpdateNetworkV2/updateNetwork_updateContrail_AAIResponse_Success.xml");
+		mockUpdateRequestDB(500, "Database/DBUpdateResponse.xml");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariables1();
+		WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstanceInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_Success"));
+	    Assert.assertNotNull("UPDNETI_FalloutHandlerRequest - ", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_FalloutHandlerRequest"));
+
+	    String falloutHandlerRequest =
+	    		  "<aetgt:FalloutHandlerRequest xmlns:aetgt=\"http://org.openecomp/mso/workflow/schema/v1\"" + '\n'
+				+ "					                             xmlns:ns=\"http://org.openecomp/mso/request/types/v1\"" + '\n'
+				+ "					                             xmlns:wfsch=\"http://org.openecomp/mso/workflow/schema/v1\">" + '\n'
+				+ "					   <request-info xmlns=\"http://org.openecomp/mso/infra/vnf-request/v1\">" + '\n'
+				+ "					      <request-id>testRequestId</request-id>" + '\n'
+				+ "					      <action>CREATE</action>" + '\n'
+				+ "					      <source>VID</source>" + '\n'
+				+ "					   </request-info>" + '\n'
+				+ "						<aetgt:WorkflowException xmlns:aetgt=\"http://org.openecomp/mso/workflow/schema/v1\">" + '\n'
+				+ "							<aetgt:ErrorMessage> DB Update failed, code: 500</aetgt:ErrorMessage>" + '\n'
+				+ "							<aetgt:ErrorCode>2500</aetgt:ErrorCode>" + '\n'
+				+ "						</aetgt:WorkflowException>" + '\n'
+				+ "					</aetgt:FalloutHandlerRequest>";
+
+	    System.out.println("Display UPDNETI_FalloutHandlerRequest - " + getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_FalloutHandlerRequest"));
+	    //Assert.assertEquals(falloutHandlerRequest, getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_FalloutHandlerRequest"));
+
+		System.out.println("--------------------------------------------------------------------");
+		System.out.println("    PONR (Point-of-no-Return) - UpdateNetworkInstanceInfra flow Completed!     ");
+		System.out.println("--------------------------------------------------------------------");
+
+
+	}
+
+	@Test
+	@Deployment(resources = {"process/UpdateNetworkInstanceInfra.bpmn",
+			                 "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstanceInfra_sdncFailure() throws Exception {
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("        SNDC Failure - UpdateNetworkInstanceInfra flow Started!      ");
+		System.out.println("----------------------------------------------------------");
+
+		// setup simulators
+
+		//MockSDNCAdapterBadAsynchronousResponse();                // 404
+		mockSDNCAdapter("/SDNCAdapter", "SvcAction>query", 500, "");             // 500
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariables2();
+		WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstanceInfra", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_Success"));
+	    Assert.assertNotNull("UPDNETI_CompleteMsoProcessRequest - ", getVariable(processEngineRule, "UpdateNetworkInstanceInfra", "UPDNETI_CompleteMsoProcessRequest"));
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("     SNDC Failure - UpdateNetworkInstanceInfra flow Completed ");
+		System.out.println("----------------------------------------------------------");
+
+	}
+
+	// *****************
+	// Utility Section
+	// *****************
+
+	// Success Scenario
+	private Map<String, String> setupVariables1() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("bpmnRequest", getCreateNetworkRequest1());
+		variables.put("mso-request-id", "testRequestId");
+		variables.put("requestId", "testRequestId");
+		variables.put("isBaseVfModule", "true");
+		variables.put("recipeTimeout", "0");
+		variables.put("requestAction", "CREATE");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("vnfId", "");
+		variables.put("vfModuleId", "");
+		variables.put("volumeGroupId", "");
+		variables.put("networkId", "49c86598-f766-46f8-84f8-8d1c1b10f9b4");
+		variables.put("serviceType", "vMOG");
+		variables.put("vfModuleType", "");
+		variables.put("networkType", "modelName");
+		return variables;
+
+	}
+
+	public String getCreateNetworkRequest1() {
+
+		String request =
+				"{ \"requestDetails\": { " + '\n' +
+				"      \"modelInfo\": { " + '\n' +
+				"         \"modelType\": \"modelType\", " + '\n' +
+				"         \"modelId\": \"modelId\", " + '\n' +
+				"         \"modelNameVersionId\": \"modelNameVersionId\", " + '\n' +
+				"         \"modelName\": \"CONTRAIL_EXTERNAL\", " + '\n' +
+				"         \"modelVersion\": \"1\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"cloudConfiguration\": { " + '\n' +
+				"          \"lcpCloudRegionId\": \"RDM2WAGPLCP\", " + '\n' +
+				"          \"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestInfo\": { " + '\n' +
+				"          \"instanceName\": \"MNS-25180-L-01-dmz_direct_net_1\", " + '\n' +
+				"          \"source\": \"VID\", " + '\n' +
+				"          \"callbackUrl\": \"\", " + '\n' +
+				"          \"suppressRollback\": \"true\" ," + '\n' +
+				"          \"productFamilyId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestParameters\": { " + '\n' +
+				"          \"backoutOnFailure\": true, " + '\n' +
+				"          \"serviceId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\", " + '\n' +
+				"          \"userParams\": [] " + '\n' +
+				"      }	" + '\n' +
+			    " } " + '\n' +
+			    "}";
+
+		return request;
+	}
+
+	// Success Scenario 2
+	private Map<String, String> setupVariables2() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("bpmnRequest", getCreateNetworkRequest2());
+		variables.put("mso-request-id", "testRequestId");
+		variables.put("requestId", "testRequestId");
+		variables.put("isBaseVfModule", "true");
+		variables.put("recipeTimeout", "0");
+		variables.put("requestAction", "UPDATE");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("vnfId", "");
+		variables.put("vfModuleId", "");
+		variables.put("volumeGroupId", "");
+		variables.put("networkId", "49c86598-f766-46f8-84f8-8d1c1b10f9b4");
+		variables.put("serviceType", "vMOG");
+		variables.put("vfModuleType", "");
+		variables.put("networkType", "modelName");
+		return variables;
+
+	}
+
+	public String getCreateNetworkRequest2() {
+
+		String request =
+				"{ \"requestDetails\": { " + '\n' +
+				"      \"modelInfo\": { " + '\n' +
+				"         \"modelType\": \"modelType\", " + '\n' +
+				"         \"modelId\": \"modelId\", " + '\n' +
+				"         \"modelNameVersionId\": \"modelNameVersionId\", " + '\n' +
+				"         \"modelName\": \"CONTRAIL_EXTERNAL\", " + '\n' +
+				"         \"modelVersion\": \"1\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"cloudConfiguration\": { " + '\n' +
+				"          \"lcpCloudRegionId\": \"RDM2WAGPLCP\", " + '\n' +
+				"          \"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestInfo\": { " + '\n' +
+				"          \"instanceName\": \"myOwn_Network\", " + '\n' +
+				"          \"source\": \"VID\", " + '\n' +
+				"          \"callbackUrl\": \"\", " + '\n' +
+				"          \"suppressRollback\": \"true\" ," + '\n' +
+				"          \"productFamilyId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestParameters\": { " + '\n' +
+				"          \"backoutOnFailure\": true, " + '\n' +
+				"          \"serviceId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\", " + '\n' +
+				"          \"userParams\": [] " + '\n' +
+				"      }	" + '\n' +
+			    " } " + '\n' +
+			    "}";
+
+		return request;
+
+	}
+
+	/* Active Scenario
+	private Map<String, String> setupVariablesActive() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("mso-request-id", "testRequestId");
+		variables.put("bpmnRequest", getCreateNetworkRequestActive());
+		variables.put("requestId", "testRequestId");
+		variables.put("isBaseVfModule", "true");
+		variables.put("recipeTimeout", "0");
+		variables.put("requestAction", "UPDATE");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("vnfId", "");
+		variables.put("vfModuleId", "");
+		variables.put("volumeGroupId", "");
+		variables.put("networkId", "49c86598-f766-46f8-84f8-8d1c1b10f9b4");
+		variables.put("serviceType", "vMOG");
+		variables.put("vfModuleType", "");
+		variables.put("networkType", "modelName");
+		return variables;
+
+	}
+
+	public String getCreateNetworkRequestActive() {
+
+		String request =
+				"{ \"requestDetails\": { " + '\n' +
+				"      \"modelInfo\": { " + '\n' +
+				"         \"modelType\": \"modelType\", " + '\n' +
+				"         \"modelId\": \"modelId\", " + '\n' +
+				"         \"modelNameVersionId\": \"modelNameVersionId\", " + '\n' +
+				"         \"modelName\": \"CONTRAIL_EXTERNAL\", " + '\n' +
+				"         \"modelVersion\": \"1\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"cloudConfiguration\": { " + '\n' +
+				"          \"lcpCloudRegionId\": \"RDM2WAGPLCP\", " + '\n' +
+				"          \"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestInfo\": { " + '\n' +
+				"          \"instanceName\": \"MNS-25180-L-01-dmz_direct_net_2\", " + '\n' +
+				"          \"source\": \"VID\", " + '\n' +
+				"          \"callbackUrl\": \"\", " + '\n' +
+				"          \"suppressRollback\": \"true\" ," + '\n' +
+				"          \"productFamilyId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestParameters\": { " + '\n' +
+				"          \"userParams\": [] " + '\n' +
+				"      }	" + '\n' +
+			    " } " + '\n' +
+			    "}";
+
+		return request;
+
+	} */
+
+	// Missing Name Scenario
+	private Map<String, String> setupVariablesMissingNetworkId() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("mso-request-id", "88f65519-9a38-4c4b-8445-9eb4a5a5af56");
+		variables.put("bpmnRequest", getCreateNetworkRequestNetworkId());
+		variables.put("requestId", "testRequestId");
+		variables.put("isBaseVfModule", "true");
+		variables.put("recipeTimeout", "0");
+		variables.put("requestAction", "UPDATE");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("vnfId", "");
+		variables.put("vfModuleId", "");
+		variables.put("volumeGroupId", "");
+		//variables.put("networkId", "49c86598-f766-46f8-84f8-8d1c1b10f9b4"); // missing, ok
+		variables.put("serviceType", "vMOG");
+		variables.put("vfModuleType", "");
+		variables.put("networkType", "modelName");
+
+		return variables;
+
+	}
+
+	public String getCreateNetworkRequestNetworkId() {
+
+		String request =
+				"{ \"requestDetails\": { " + '\n' +
+				"      \"modelInfo\": { " + '\n' +
+				"         \"modelType\": \"modelType\", " + '\n' +
+				"         \"modelId\": \"modelId\", " + '\n' +
+				"         \"modelNameVersionId\": \"modelNameVersionId\", " + '\n' +
+				"         \"modelName\": \"CONTRAIL_EXTERNAL\", " + '\n' +
+				"         \"modelVersion\": \"1\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"cloudConfiguration\": { " + '\n' +
+				"          \"lcpCloudRegionId\": \"RDM2WAGPLCP\", " + '\n' +
+				"          \"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestInfo\": { " + '\n' +
+				"          \"source\": \"VID\", " + '\n' +
+				"          \"callbackUrl\": \"\", " + '\n' +
+				"          \"suppressRollback\": \"true\" ," + '\n' +
+				"          \"productFamilyId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestParameters\": { " + '\n' +
+				"          \"userParams\": [] " + '\n' +
+				"      }	" + '\n' +
+			    " } " + '\n' +
+			    "}";
+
+			return request;
+
+	}
+
+	// SDNC Rollback Scenario
+	private Map<String, String> setupVariablesSDNCRollback() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("mso-request-id", "testRequestId");
+		variables.put("bpmnRequest", getCreateNetworkRequestSDNCRollback());
+		variables.put("requestId", "testRequestId");
+		variables.put("isBaseVfModule", "true");
+		variables.put("recipeTimeout", "0");
+		variables.put("requestAction", "UPDATE");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("vnfId", "");
+		variables.put("vfModuleId", "");
+		variables.put("volumeGroupId", "");
+		variables.put("networkId", "49c86598-f766-46f8-84f8-8d1c1b10f9b4");
+		variables.put("serviceType", "vMOG");
+		variables.put("vfModuleType", "");
+		variables.put("networkType", "modelName");
+		return variables;
+
+	}
+
+	public String getCreateNetworkRequestSDNCRollback() {
+
+		String request =
+				"{ \"requestDetails\": { " + '\n' +
+				"      \"modelInfo\": { " + '\n' +
+				"         \"modelType\": \"modelType\", " + '\n' +
+				"         \"modelId\": \"modelId\", " + '\n' +
+				"         \"modelNameVersionId\": \"modelNameVersionId\", " + '\n' +
+				"         \"modelName\": \"CONTRAIL_EXTERNAL\", " + '\n' +
+				"         \"modelVersion\": \"1\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"cloudConfiguration\": { " + '\n' +
+				"          \"lcpCloudRegionId\": \"RDM2WAGPLCP\", " + '\n' +
+				"          \"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestInfo\": { " + '\n' +
+				"          \"instanceName\": \"MNS-25180-L-01-dmz_direct_net_3\", " + '\n' +
+				"          \"source\": \"VID\", " + '\n' +
+				"          \"callbackUrl\": \"\", " + '\n' +
+				"          \"suppressRollback\": \"true\" ," + '\n' +
+				"          \"productFamilyId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestParameters\": { " + '\n' +
+				"          \"userParams\": [] " + '\n' +
+				"      }	" + '\n' +
+			    " } " + '\n' +
+			    "}";
+
+
+		return request;
+	}
+
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateVfModuleInfraTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateVfModuleInfraTest.java
new file mode 100644
index 0000000..cadca4c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateVfModuleInfraTest.java
@@ -0,0 +1,144 @@
+/*- 
+ * ============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.infrastructure;
+
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithPriority;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutVfModuleIdNoResponse;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;
+import static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockVNFPut;
+
+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.Test;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit test cases for UpdateVfModule.bpmn
+ */
+public class UpdateVfModuleInfraTest extends WorkflowTest {
+	
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public UpdateVfModuleInfraTest() throws IOException {
+		callbacks.put("changeassign", FileUtil.readResourceFile(
+			"__files/VfModularity/SDNCTopologyChangeAssignCallback.xml"));
+		callbacks.put("query", FileUtil.readResourceFile(
+			"__files/VfModularity/SDNCTopologyQueryCallback.xml"));
+		callbacks.put("activate", FileUtil.readResourceFile(
+			"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("vnfUpdate", FileUtil.readResourceFile(
+			"__files/VfModularity/VNFAdapterRestUpdateCallback.xml"));
+	}
+	
+	/**
+	 * Sunny day scenario.
+	 * 
+	 * @throws Exception
+	 */
+	@Test
+	
+	@Deployment(resources = {
+		"process/UpdateVfModuleInfra.bpmn",
+		"subprocess/DoUpdateVfModule.bpmn",
+		"subprocess/PrepareUpdateAAIVfModule.bpmn",
+		"subprocess/ConfirmVolumeGroupTenant.bpmn",
+		"subprocess/SDNCAdapterV1.bpmn",
+		"subprocess/VnfAdapterRestV1.bpmn",
+		"subprocess/UpdateAAIGenericVnf.bpmn",
+		"subprocess/UpdateAAIVfModule.bpmn",
+		"subprocess/CompleteMsoProcess.bpmn",
+		"subprocess/FalloutHandler.bpmn"
+		})
+	public void sunnyDay() throws Exception {
+				
+		logStart();
+		
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+		MockPutVfModuleIdNoResponse("skask", "PCRF", "supercool");
+		MockGetGenericVnfByIdWithPriority("skask", "supercool", 200, "VfModularity/VfModule-supercool.xml", 1);
+		mockSDNCAdapter("/SDNCAdapter", "SvcInstanceId><", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+		mockSDNCAdapter("/SDNCAdapter", "vnf-type>STMTN", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+		mockSDNCAdapter("/SDNCAdapter", "SvcAction>query", 200, "VfModularity/StandardSDNCSynchResponse.xml");
+		mockVNFPut("skask", "/supercool", 202);
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		
+		String businessKey = UUID.randomUUID().toString();
+		String updaetVfModuleRequest =
+			FileUtil.readResourceFile("__files/InfrastructureFlows/UpdateVfModule_VID_request.json");
+		
+		Map<String, Object> variables = setupVariablesSunnyDayVID();
+		
+		
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("UpdateVfModuleInfra",
+			"v1", businessKey, updaetVfModuleRequest, variables);
+		
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 10000);
+		
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		injectSDNCCallbacks(callbacks, "changeassign, query");
+		injectVNFRestCallbacks(callbacks, "vnfUpdate");
+		injectSDNCCallbacks(callbacks, "activate");
+		
+		// TODO add appropriate assertions
+
+		waitForProcessEnd(businessKey, 10000);
+		checkVariable(businessKey, "UpdateVfModuleInfraSuccessIndicator", true);
+		
+		logEnd();
+	}
+	
+	// Active Scenario
+	private Map<String, Object> setupVariablesSunnyDayVID() {
+				Map<String, Object> variables = new HashMap<String, Object>();
+				//try {
+				//	variables.put("bpmnRequest", FileUtil.readResourceFile("__files/CreateVfModule_VID_request.json"));
+				//}
+				//catch (Exception e) {
+					
+				//}
+				//variables.put("mso-request-id", "testRequestId");
+				variables.put("requestId", "testRequestId");		
+				variables.put("isBaseVfModule", false);
+				variables.put("isDebugLogEnabled", "true");
+				variables.put("recipeTimeout", "0");		
+				variables.put("requestAction", "UPDATE_VF_MODULE");
+				variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+				variables.put("vnfId", "skask");
+				variables.put("vnfType", "vSAMP12");
+				variables.put("vfModuleId", "supercool");
+				variables.put("volumeGroupId", "");			
+				variables.put("serviceType", "MOG");	
+				variables.put("vfModuleType", "");			
+				return variables;
+				
+			}
+	
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateVfModuleVolumeInfraV1Test.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateVfModuleVolumeInfraV1Test.java
new file mode 100644
index 0000000..34c0af4
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateVfModuleVolumeInfraV1Test.java
@@ -0,0 +1,141 @@
+/*- 
+ * ============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.infrastructure;
+
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetVfModuleId;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetVolumeGroupById;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockPutVNFVolumeGroup;
+
+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.Test;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit test cases for UpdateVfModuleVolume.bpmn
+ */
+public class UpdateVfModuleVolumeInfraV1Test extends WorkflowTest {
+	
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public UpdateVfModuleVolumeInfraV1Test() throws IOException {
+		callbacks.put("volumeGroupUpdate", FileUtil.readResourceFile(
+			"__files/VfModularity/VNFAdapterRestVolumeGroupCallback.xml"));
+	}
+
+	/**
+	 * Happy path scenario.
+	 * 
+	 * @throws Exception
+	 */
+	@Test
+	@Deployment(resources = {
+		"process/UpdateVfModuleVolumeInfraV1.bpmn",
+		"subprocess/VnfAdapterRestV1.bpmn",
+		"subprocess/CompleteMsoProcess.bpmn",
+		"subprocess/FalloutHandler.bpmn"
+		})
+	public void happyPath() throws Exception {
+
+		logStart();
+		
+		MockGetGenericVnfById("/TEST-VNF-ID-0123", "CreateVfModuleVolumeInfraV1/GenericVnf.xml", 200);
+		MockGetVolumeGroupById("mdt1", "78987", "UpdateVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml");
+		MockGetVfModuleId("9e48f6ea-f786-46de-800a-d480e5ccc846", "6a1dc898-b590-47b9-bbf0-34424a7a2ec3/", "UpdateVfModuleVolumeInfraV1/vf_module_aai_response.xml", 200);
+		mockPutVNFVolumeGroup("78987", 202);
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		
+		String businessKey = UUID.randomUUID().toString();
+		String updaetVfModuleVolRequest =
+			FileUtil.readResourceFile("__files/UpdateVfModuleVolumeInfraV1/updateVfModuleVolume_VID_request.json");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("requestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("serviceInstanceId", "test-service-instance-id");
+		testVariables.put("volumeGroupId", "78987");
+		testVariables.put("vnfId", "TEST-VNF-ID-0123");
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("UpdateVfModuleVolumeInfraV1",	"v1", businessKey, updaetVfModuleVolRequest, testVariables);
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 10000);
+
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		injectVNFRestCallbacks(callbacks, "volumeGroupUpdate");
+		
+		waitForProcessEnd(businessKey, 10000);
+		checkVariable(businessKey, "UpdateVfModuleVolumeSuccessIndicator", true);
+		
+		logEnd();
+	}
+	
+	/**
+	 * VF Module Personal model id does not match request model invariant id
+	 * @throws Exception
+	 */
+	@Test
+	//@Ignore
+	@Deployment(resources = {
+		"process/UpdateVfModuleVolumeInfraV1.bpmn",
+		"subprocess/VnfAdapterRestV1.bpmn",
+		"subprocess/CompleteMsoProcess.bpmn",
+		"subprocess/FalloutHandler.bpmn"
+		})
+	public void testPersonaModelIdNotMatch() throws Exception {
+
+		logStart();
+		
+		MockGetVolumeGroupById("mdt1", "78987", "UpdateVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml");
+		MockGetGenericVnfById("/TEST-VNF-ID-0123", "CreateVfModuleVolumeInfraV1/GenericVnf.xml", 200);
+		MockGetVfModuleId("9e48f6ea-f786-46de-800a-d480e5ccc846", "6a1dc898-b590-47b9-bbf0-34424a7a2ec3/", "UpdateVfModuleVolumeInfraV1/vf_module_aai_response.xml", 200);
+		mockPutVNFVolumeGroup("78987", 202);
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		
+		String businessKey = UUID.randomUUID().toString();
+		String updaetVfModuleVolRequest =
+			FileUtil.readResourceFile("__files/UpdateVfModuleVolumeInfraV1/updateVfModuleVolume_VID_request_2.json");
+		
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("requestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("serviceInstanceId", "test-service-instance-id");
+		testVariables.put("volumeGroupId", "78987");
+		testVariables.put("vnfId", "TEST-VNF-ID-0123");
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("UpdateVfModuleVolumeInfraV1",	"v1", businessKey, updaetVfModuleVolRequest, testVariables);
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 10000);
+
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		injectVNFRestCallbacks(callbacks, "volumeGroupUpdate");
+		
+		waitForProcessEnd(businessKey, 10000);
+		checkVariable(businessKey, "UpdateVfModuleVolumeSuccessIndicator", true);
+		
+		logEnd();
+	}	
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml
new file mode 100644
index 0000000..90c668c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml
@@ -0,0 +1,20 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+      <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:502-132671"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <cloud-owner>att-aic</cloud-owner>
+         <cloud-region-id>RDM2WAGPLCP</cloud-region-id>
+         <cloud-region-version>2.5</cloud-region-version>
+         <complex-name>RDM2WAGPLCP</complex-name>
+       </l3-network>
+   </rest:payload>
+</rest:RESTResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/cloudRegion30_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/cloudRegion30_AAIResponse_Success.xml
new file mode 100644
index 0000000..9b651f2
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/cloudRegion30_AAIResponse_Success.xml
@@ -0,0 +1,20 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+      <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:502-132671"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <cloud-owner>att-aic</cloud-owner>
+         <cloud-region-id>RDM2WAGPLCP</cloud-region-id>
+         <cloud-region-version>3.0</cloud-region-version>
+         <complex-name>RDM2WAGPLCP</complex-name>
+       </l3-network>
+   </rest:payload>
+</rest:RESTResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetworkResponse_400.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetworkResponse_400.xml
new file mode 100644
index 0000000..a5640b2
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetworkResponse_400.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<createNetworkError>
+<messageId>680bd458-5ec1-4a16-b77c-509022e53450</messageId><category>INTERNAL</category>
+<message>400 Bad Request: The server could not comply with the request since it is either malformed or otherwise incorrect., error.type=StackValidationFailed, error.message=Property error: : resources.network.properties: : Unknown Property network_ipam_refs_data</message>
+<rolledBack>true</rolledBack>
+</createNetworkError>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetworkResponse_500.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetworkResponse_500.xml
new file mode 100644
index 0000000..c67e980
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetworkResponse_500.xml
@@ -0,0 +1,78 @@
+<html>
+	<head>
+		<title>JBoss Web/7.2.2.Final-redhat-1 - JBWEB000064: Error report
+		</title>
+		<style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;}
+				H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;}
+				H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;}
+				BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;}
+				B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;}
+				P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A
+				{color : black;}A.name {color : black;}HR {color : #525D76;} -->
+		</style>
+	</head>
+	<body>
+		<h1>JBWEB000065: HTTP Status 500 - java.lang.NullPointerException</h1>
+		<HR size="1" noshade="noshade">
+			<p>
+				<b>JBWEB000309: type</b>
+				JBWEB000066: Exception report
+			</p>
+			<p>
+				<b>JBWEB000068: message</b>
+				<u>java.lang.NullPointerException</u>
+			</p>
+			<p>
+				<b>JBWEB000069: description</b>
+				<u>JBWEB000145: The server encountered an internal error that
+					prevented it from fulfilling this request.</u>
+			</p>
+			<p>
+				<b>JBWEB000070: exception</b>
+				<pre>org.jboss.resteasy.spi.UnhandledException:
+					java.lang.NullPointerException
+					org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:365)
+					org.jboss.resteasy.core.SynchronousDispatcher.handleException(SynchronousDispatcher.java:233)
+					org.jboss.resteasy.core.SynchronousDispatcher.handleInvokerException(SynchronousDispatcher.java:209)
+					org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:557)
+					org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:524)
+					org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:126)
+					org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
+					org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
+					org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
+					javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
+					org.openecomp.mso.logger.LogFilter.doFilter(LogFilter.java:35)
+				</pre>
+			</p>
+			<p>
+				<b>JBWEB000071: root cause</b>
+				<pre>java.lang.NullPointerException
+					org.openecomp.mso.adapters.network.NetworkAdapterRest$CreateNetworkVolumesTask.run(NetworkAdapterRest.java:128)
+					org.openecomp.mso.adapters.network.NetworkAdapterRest.createNetwork(NetworkAdapterRest.java:64)
+					sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+					sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
+					sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+					java.lang.reflect.Method.invoke(Method.java:606)
+					org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:167)
+					org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:269)
+					org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:227)
+					org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:216)
+					org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:542)
+					org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:524)
+					org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:126)
+					org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
+					org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
+					org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
+					javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
+					org.openecomp.mso.logger.LogFilter.doFilter(LogFilter.java:35)
+				</pre>
+			</p>
+			<p>
+				<b>JBWEB000072: note</b>
+				<u>JBWEB000073: The full stack trace of the root cause is available
+					in the JBoss Web/7.2.2.Final-redhat-1 logs.</u>
+			</p>
+			<HR size="1" noshade="noshade">
+				<h3>JBoss Web/7.2.2.Final-redhat-1</h3>
+	</body>
+</html>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetworkResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetworkResponse_Success.xml
new file mode 100644
index 0000000..b40bd07
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetworkResponse_Success.xml
@@ -0,0 +1,24 @@
+<ns2:createNetworkResponse xmlns:ns2="http://org.openecomp.mso/network"
+                                    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+   <networkId>MNS-25180-L-01-dmz_direct_net_1/2c88a3a9-69b9-43a7-ada6-1aca577c3641</networkId>
+   <neutronNetworkId>c4f4e878-cde0-4b15-ae9a-bda857759cea</neutronNetworkId>
+   <subnetIdMap>
+      <entry>
+         <key>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</key>
+         <value>bd8e87c6-f4e2-41b8-b0bc-9596aa00cd73</value>
+      </entry>
+   </subnetIdMap>
+   <rollback>
+      <cloudId>RDM2WAGPLCP</cloudId>
+      <msoRequest>
+         <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+         <serviceInstanceId/>
+      </msoRequest>
+      <networkCreated>true</networkCreated>
+      <networkId>MNS-25180-L-01-dmz_direct_net_1/2c88a3a9-69b9-43a7-ada6-1aca577c3641</networkId>
+      <networkType>CONTRAIL_EXTERNAL</networkType>
+      <networkUpdated>false</networkUpdated>
+      <neutronNetworkId>c4f4e878-cde0-4b15-ae9a-bda857759cea</neutronNetworkId>
+      <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+   </rollback>
+</ns2:createNetworkResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryInstance_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryInstance_Success.xml
new file mode 100644
index 0000000..ca5145c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryInstance_Success.xml
@@ -0,0 +1,4 @@
+<result-data>
+  <resource-type>service-instance</resource-type>
+  <resource-link>https://aai-conexus-e2e.test.com:8443/aai/v8/business/customers/customer/8310000058863/service-subscriptions/service-subscription/vMOG/service-instances/service-instance/f70e927b-6087-4974-9ef8-c5e4d5847ca4</resource-link>
+</result-data>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryName2_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryName2_AAIResponse_Success.xml
new file mode 100644
index 0000000..d6f7737
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryName2_AAIResponse_Success.xml
@@ -0,0 +1,62 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+      <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:502-132671"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4_3</network-id>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-role>dmz_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <network-role-instance>0</network-role-instance>
+         <orchestration-status>pending-create</orchestration-status>
+         <subnets>
+            <subnet>
+               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+               <gateway-address>107.239.52.1</gateway-address>
+               <network-start-address>107.239.52.0</network-start-address>
+               <cidr-mask>24</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>pending-create</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+         <relationship-list>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>85f015d0-2e32-4c30-96d2-87a1a27f8017</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>c980a6ef-3b88-49f0-9751-dbad8608d0a6</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+               </relationship-data>
+            </relationship>
+         </relationship-list>
+      </l3-network>
+   </rest:payload>
+</rest:RESTResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNameActive_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNameActive_AAIResponse_Success.xml
new file mode 100644
index 0000000..03b3781
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNameActive_AAIResponse_Success.xml
@@ -0,0 +1,74 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+      <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:502-132671"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+         <network-name>MNS-25180-L-01-dmz_direct_net_2</network-name>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-role>dmz_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <network-role-instance>0</network-role-instance>
+         <orchestration-status>active</orchestration-status>
+         <subnets>
+            <subnet>
+               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+               <gateway-address>107.239.52.1</gateway-address>
+               <network-start-address>107.239.52.0</network-start-address>
+               <cidr-mask>24</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>active</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+  	  		   <subnet-name>subnetName</subnet-name>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+	  	 <segmentation-assignments>
+	  		<segmentation-id>413</segmentation-id>
+	  		<resource-version>4132176</resource-version>
+	  	 </segmentation-assignments>         
+         <relationship-list>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>85f015d0-2e32-4c30-96d2-87a1a27f8017</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>c980a6ef-3b88-49f0-9751-dbad8608d0a6</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+               </relationship-data>
+            </relationship>
+			<relationship>
+			   <related-to>route-table-reference</related-to>
+			   <relationship-data>
+				  <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+				  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+			   </relationship-data>
+			</relationship>            
+         </relationship-list>
+      </l3-network>
+   </rest:payload>
+</rest:RESTResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryName_AAIResponse_404.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryName_AAIResponse_404.xml
new file mode 100644
index 0000000..5cda12d
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryName_AAIResponse_404.xml
@@ -0,0 +1,19 @@
+<rest:RESTFault xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                errorType="transport">
+   <rest:errorCode>404</rest:errorCode>
+   <rest:message>HTTP method: GET Not Found </rest:message>
+   <rest:messageDetails>&lt;Fault&gt;
+    &lt;requestError&gt;
+        &lt;serviceException&gt;
+            &lt;messageId&gt;SVC3001&lt;/messageId&gt;
+            &lt;text&gt;Resource not found for %1 using id %2 (msg=%3) (ec=%4)&lt;/text&gt;
+            &lt;variables&gt;
+                &lt;variable&gt;GETl3Networks&lt;/variable&gt;
+                &lt;variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/&gt;
+                &lt;variable&gt;Node Not Found:No Node of type l3Network found for properties: (network-id = null)&lt;/variable&gt;
+                &lt;variable&gt;ERR.5.4.6114&lt;/variable&gt;
+            &lt;/variables&gt;
+        &lt;/serviceException&gt;
+    &lt;/requestError&gt;
+&lt;/Fault&gt;</rest:messageDetails>
+</rest:RESTFault>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryName_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryName_AAIResponse_Success.xml
new file mode 100644
index 0000000..4eadb10
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryName_AAIResponse_Success.xml
@@ -0,0 +1,62 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+      <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:502-132671"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-role>dmz_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <network-role-instance>0</network-role-instance>
+         <orchestration-status>pending-create</orchestration-status>
+         <subnets>
+            <subnet>
+               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+               <gateway-address>107.239.52.1</gateway-address>
+               <network-start-address>107.239.52.0</network-start-address>
+               <cidr-mask>24</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>pending-create</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+         <relationship-list>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>85f015d0-2e32-4c30-96d2-87a1a27f8017</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>c980a6ef-3b88-49f0-9751-dbad8608d0a6</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+               </relationship-data>
+            </relationship>
+         </relationship-list>
+      </l3-network>
+   </rest:payload>
+</rest:RESTResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_404.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_404.xml
new file mode 100644
index 0000000..5cda12d
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_404.xml
@@ -0,0 +1,19 @@
+<rest:RESTFault xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                errorType="transport">
+   <rest:errorCode>404</rest:errorCode>
+   <rest:message>HTTP method: GET Not Found </rest:message>
+   <rest:messageDetails>&lt;Fault&gt;
+    &lt;requestError&gt;
+        &lt;serviceException&gt;
+            &lt;messageId&gt;SVC3001&lt;/messageId&gt;
+            &lt;text&gt;Resource not found for %1 using id %2 (msg=%3) (ec=%4)&lt;/text&gt;
+            &lt;variables&gt;
+                &lt;variable&gt;GETl3Networks&lt;/variable&gt;
+                &lt;variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/&gt;
+                &lt;variable&gt;Node Not Found:No Node of type l3Network found for properties: (network-id = null)&lt;/variable&gt;
+                &lt;variable&gt;ERR.5.4.6114&lt;/variable&gt;
+            &lt;/variables&gt;
+        &lt;/serviceException&gt;
+    &lt;/requestError&gt;
+&lt;/Fault&gt;</rest:messageDetails>
+</rest:RESTFault>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_NoPayload_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_NoPayload_Success.xml
new file mode 100644
index 0000000..e06d27e
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_NoPayload_Success.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-role>dmz_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <network-role-instance>0</network-role-instance>
+         <orchestration-status>pending-create</orchestration-status>
+   		 <physical-network-name>networkName</physical-network-name>
+   		 <is-provider-network>false</is-provider-network>
+   		 <is-shared-network>true</is-shared-network>
+   	 	 <is-external-network>false</is-external-network>         
+         <subnets>
+            <subnet>
+               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+               <gateway-address>107.239.52.1</gateway-address>
+               <network-start-address>107.239.52.0</network-start-address>
+               <cidr-mask>24</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>pending-create</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+   	  		   <subnet-name>subnetName</subnet-name>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+	  	 <segmentation-assignments>
+	  		<segmentation-id>413</segmentation-id>
+	  		<resource-version>4132176</resource-version>
+	  	 </segmentation-assignments>         
+         <relationship-list>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>85f015d0-2e32-4c30-96d2-87a1a27f8017</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>c980a6ef-3b88-49f0-9751-dbad8608d0a6</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+				<related-to>network-policy</related-to>
+				<related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg</related-link>
+				<relationship-data>
+					<relationship-key>network-policy.network-policy-id</relationship-key>
+					<relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0cg</relationship-value>
+				</relationship-data>
+			</relationship>
+			<relationship>
+			   <related-to>route-table-reference</related-to>
+			   <relationship-data>
+				  <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+				  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+			   </relationship-data>
+			</relationship>			
+         </relationship-list>
+</l3-network>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_Success.xml
new file mode 100644
index 0000000..599c34f
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_Success.xml
@@ -0,0 +1,95 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+      <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:502-132671"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-role>dmz_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <network-role-instance>0</network-role-instance>
+         <orchestration-status>pending-create</orchestration-status>
+   		 <physical-network-name>networkName</physical-network-name>
+   		 <is-provider-network>false</is-provider-network>
+   		 <is-shared-network>true</is-shared-network>
+   		 <is-external-network>false</is-external-network>         
+         <subnets>
+            <subnet>
+               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+               <gateway-address>107.239.52.1</gateway-address>
+               <network-start-address>107.239.52.0</network-start-address>
+               <cidr-mask>24</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>pending-create</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+   	  		   <subnet-name>subnetName</subnet-name>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+	  	 <segmentation-assignments>
+	  		<segmentation-id>413</segmentation-id>
+	  		<resource-version>4132176</resource-version>
+	  	 </segmentation-assignments>         
+         <relationship-list>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>85f015d0-2e32-4c30-96d2-87a1a27f8017</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>c980a6ef-3b88-49f0-9751-dbad8608d0a6</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+				<related-to>network-policy</related-to>
+				<related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg</related-link>
+				<relationship-data>
+					<relationship-key>network-policy.network-policy-id</relationship-key>
+					<relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0cg</relationship-value>
+				</relationship-data>
+			</relationship>
+			<relationship>
+			   <related-to>route-table-reference</related-to>
+	  		   <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/route-table-references/route-table-reference/refFQDN1</related-link>			   
+			   <relationship-data>
+				  <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+				  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+			   </relationship-data>
+			</relationship>
+			<relationship>
+			   <related-to>route-table-reference</related-to>
+	  		   <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/route-table-references/route-table-reference/refFQDN2</related-link>			   
+			   <relationship-data>
+				  <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+				  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+			   </relationship-data>
+			</relationship>									
+         </relationship-list>
+      </l3-network>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkPolicy_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkPolicy_AAIResponse_Success.xml
new file mode 100644
index 0000000..686ac16
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkPolicy_AAIResponse_Success.xml
@@ -0,0 +1,21 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <network-policy xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-policy-id>9a7b327d9-287aa00-82c4b0-105757</network-policy-id>
+         <network-policy-fqdn>GN_EVPN_Test</network-policy-fqdn>
+         <heat-stack-id>13979:105757</heat-stack-id>
+         <resource-version>13979:105757</resource-version>
+      </network-policy>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkTableRef1_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkTableRef1_AAIResponse_Success.xml
new file mode 100644
index 0000000..b01e469
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkTableRef1_AAIResponse_Success.xml
@@ -0,0 +1,20 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <route-table-references xmlns="http://org.openecomp.aai.inventory/v8">
+         <route-table-reference-id>5938baec-03ca-2bd5-a3f1-d54x123e253a</route-table-reference-id>
+         <route-table-reference-fqdn>refFQDN1</route-table-reference-fqdn>
+         <resource-version>12345</resource-version>
+      </route-table-references>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkTableRef2_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkTableRef2_AAIResponse_Success.xml
new file mode 100644
index 0000000..a19f941
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryNetworkTableRef2_AAIResponse_Success.xml
@@ -0,0 +1,20 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <route-table-references xmlns="http://org.openecomp.aai.inventory/v8">
+         <route-table-reference-id>5938baec-03ca-2bd5-a3f1-d54x123e253a</route-table-reference-id>
+         <route-table-reference-fqdn>refFQDN2</route-table-reference-fqdn>
+         <resource-version>12345</resource-version>
+      </route-table-references>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml
new file mode 100644
index 0000000..c35faef
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml
@@ -0,0 +1,46 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <vpn-binding xmlns="http://org.openecomp.aai.inventory/v8">
+         <vpn-id>9a7b327d9-287aa00-82c4b0-105757</vpn-id>
+         <vpn-name>GN_EVPN_Test</vpn-name>
+         <global-route-target>13979:105757</global-route-target>
+         <relationship-list>
+            <relationship>
+               <related-to>l3-network</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/l3-networks/l3-network/689ec39e-c5fc-4462-8db2-4f760763ad28/</related-link>
+               <relationship-data>
+                  <relationship-key>l3-network.network-id</relationship-key>
+                  <relationship-value>689ec39e-c5fc-4462-8db2-4f760763ad28</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>l3-network</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/l3-networks/l3-network/1a49396b-19b3-40a4-8792-aa2fbd0f0704/</related-link>
+               <relationship-data>
+                  <relationship-key>l3-network.network-id</relationship-key>
+                  <relationship-value>1a49396b-19b3-40a4-8792-aa2fbd0f0704</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>l3-network</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/l3-networks/l3-network/774f3329-3c83-4771-86c7-9e6207cd50fd/</related-link>
+               <relationship-data>
+                  <relationship-key>l3-network.network-id</relationship-key>
+                  <relationship-value>774f3329-3c83-4771-86c7-9e6207cd50fd</relationship-value>
+               </relationship-data>
+            </relationship>
+         </relationship-list>
+      </vpn-binding>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_updateContrail_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_updateContrail_AAIResponse_Success.xml
new file mode 100644
index 0000000..eedbda9
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2/createNetwork_updateContrail_AAIResponse_Success.xml
@@ -0,0 +1,11 @@
+<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>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateServiceInstance/createServiceInstance_createServiceInstance_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateServiceInstance/createServiceInstance_createServiceInstance_AAIResponse_Success.xml
new file mode 100644
index 0000000..eedbda9
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateServiceInstance/createServiceInstance_createServiceInstance_AAIResponse_Success.xml
@@ -0,0 +1,11 @@
+<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>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateServiceInstance/createServiceInstance_queryGlobalCustomerId_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateServiceInstance/createServiceInstance_queryGlobalCustomerId_AAIResponse_Success.xml
new file mode 100644
index 0000000..be820b8
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateServiceInstance/createServiceInstance_queryGlobalCustomerId_AAIResponse_Success.xml
@@ -0,0 +1,62 @@
+<rest:RESTResponse
+	xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+	statusCode="200">
+	<rest:headers>
+		<rest:header name="Transfer-Encoding" value="chunked" />
+		<rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT" />
+		<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:502-132671" />
+		<rest:header name="Content-Type" value="application/xml" />
+		<rest:header name="Server" value="Apache-Coyote/1.1" />
+		<rest:header name="Cache-Control" value="private" />
+	</rest:headers>
+	<rest:payload contentType="text/xml">
+		<customer xmlns="http://org.openecomp.aai.inventory/v8">
+			<global-customer-id>8310000058863</global-customer-id>
+			<subscriber-name>Mobility</subscriber-name>
+			<subscriber-type>INFRA</subscriber-type>
+			<resource-version>1452288058</resource-version>
+			<service-subscriptions>
+				<service-subscription>
+					<service-type>vMOG</service-type>
+					<resource-version>1452288058</resource-version>
+					<service-instances>
+						<service-instance>
+							<service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+							<persona-model-id>gg0e927b-6087-5574-9ef8-c5e4d5847db5</persona-model-id>
+							<persona-model-version>V1.0</persona-model-version>
+							<service-instance-name>vMOG-AKRON-1234</service-instance-name>
+							<resource-version>1462561835</resource-version>
+							<relationship-list />
+							<metadata />
+						</service-instance>
+					</service-instances>
+					<relationship-list>
+						<relationship>
+							<related-to>tenant</related-to>
+							<related-link>https://aai-conexus-e2e.test.com:8443/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant/396d61752cf04c3b8ca2afcb4ee049e9/</related-link>
+							<relationship-data>
+								<relationship-key>tenant.tenant-id</relationship-key>
+								<relationship-value>396d61752cf04c3b8ca2afcb4ee049e9</relationship-value>
+							</relationship-data>
+							<relationship-data>
+								<relationship-key>cloud-region.cloud-owner</relationship-key>
+								<relationship-value>att-aic</relationship-value>
+							</relationship-data>
+							<relationship-data>
+								<relationship-key>cloud-region.cloud-region-id</relationship-key>
+								<relationship-value>AAIAIC25</relationship-value>
+							</relationship-data>
+							<related-to-property>
+								<property-key>tenant.tenant-name</property-key>
+								<property-value>vMOG-AKRON-PROD</property-value>
+							</related-to-property>
+						</relationship>		
+					</relationship-list>					
+				</service-subscription>
+			</service-subscriptions>
+			<relationship-list />
+		</customer>
+	</rest:payload>
+</rest:RESTResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/CreateVfModuleCallbackException.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/CreateVfModuleCallbackException.xml
new file mode 100644
index 0000000..1ede444
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/CreateVfModuleCallbackException.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<volumeGroupException>    
+	<messageId>{{MESSAGE-ID}}</messageId>
+	<category>INTERNAL</category>
+	<message>Exception during create VF Create VF Module: Unable to determine specific VF Module Type: Nimbus_LU2_PXMC_Svc/PXMC_09_20_2016_v2 3::Pxmc09202016V2..pxmc_base.yaml..module-2 with version = 3.0</message>    
+	<rolledBack>true</rolledBack>
+</volumeGroupException>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/CreateVfModuleVolumeCallbackResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/CreateVfModuleVolumeCallbackResponse.xml
new file mode 100644
index 0000000..a421355
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/CreateVfModuleVolumeCallbackResponse.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<createVolumeGroupResponse>
+    <messageId>{{MESSAGE-ID}}</messageId>
+    <volumeGroupCreated>true</volumeGroupCreated>
+    <volumeGroupId>d485ecee-957c-4a0a-8b95-27a22b90103f</volumeGroupId>
+    <volumeGroupOutputs>
+        <entry>
+            <key>mmsc_vol_1</key>
+            <value>a73e0fe9-1ce8-49c2-8fef-e2788605be29</value>
+        </entry>
+        <entry>
+            <key>mmsc_vol_2</key>
+            <value>37b6455a-5ea8-463a-89e3-0efeaf7b7c6d</value>
+        </entry>
+        <entry>
+            <key>nemsfe_vol_1</key>
+            <value>b7ff1c21-d138-49a3-bf13-4cfd91efaf48</value>
+        </entry>
+        <entry>
+            <key>nemsbe_vol_1</key>
+            <value>a5988471-cd42-44d8-b078-64f2f13d3d4c</value>
+        </entry>
+        <entry>
+            <key>mmsc_vol_5</key>
+            <value>f7b91c1e-ab8c-413a-a850-ba80a246c7e0</value>
+        </entry>
+        <entry>
+            <key>nemsfe_vol_2</key>
+            <value>957ea3f3-2d4a-4707-bfd2-ba66f42037c2</value>
+        </entry>
+        <entry>
+            <key>mmsc_vol_3</key>
+            <value>de6fccfe-d61a-48b0-b03b-87bf1bf749b3</value>
+        </entry>
+        <entry>
+            <key>mmsc_vol_4</key>
+            <value>76162310-2c38-4c32-981c-5c2880190077</value>
+        </entry>
+    </volumeGroupOutputs>
+    <volumeGroupRollback>
+        <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+        <messageId>e585e4f4-9452-437a-b294-45a2d6d3b7a3</messageId>
+        <msoRequest>
+            <requestId>c30b9453-4b68-4c2e-aacf-58a5ba648bf5</requestId>
+            <serviceInstanceId>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</serviceInstanceId>
+        </msoRequest>
+        <tenantId>1bbab536a19b4756926e7d0ec1eb543c</tenantId>
+        <volumeGroupCreated>true</volumeGroupCreated>
+        <volumeGroupId>78987</volumeGroupId>
+        <volumeGroupStackId>ZRDM1MMSC01_base_vol/7f74e5e1-5fc1-4593-ac7e-cc9899a106ef</volumeGroupStackId>
+    </volumeGroupRollback>
+    <volumeGroupStackId>ZRDM1MMSC01_base_vol/7f74e5e1-5fc1-4593-ac7e-cc9899a106ef</volumeGroupStackId>
+</createVolumeGroupResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/CreateVfModuleVolumeRequest.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/CreateVfModuleVolumeRequest.xml
new file mode 100644
index 0000000..4584266
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/CreateVfModuleVolumeRequest.xml
@@ -0,0 +1,24 @@
+<volume-request xmlns="http://org.openecomp/mso/infra/vnf-request/v1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+	<request-info>
+		<test-data-only>123abc</test-data-only> <!-- don't remove this tag. Its used for junit test -->
+		<request-id>d8d4fcfa-fd7e-4413-b19d-c95aa67291b8</request-id>
+		<action>CREATE_VF_MODULE_VOL</action>
+		<source>SoapUI-bns-create-base-vol-1001-1</source>
+	</request-info>
+	<volume-inputs>
+		<vnf-type>Test/vSAMP12</vnf-type>
+		<vf-module-model-name>vSAMP12::base::module-0</vf-module-model-name>
+		<backout-on-failure/>
+		<asdc-service-model-version/>
+		<service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+		<aic-cloud-region>MDTWNJ21</aic-cloud-region>
+		<tenant-id>897deadc2b954a6bac6d3c197fb3525e</tenant-id>
+		<volume-group-name>MSOTESTVOL101a-vSAMP12_base_vol_module-0</volume-group-name>
+		<volume-group-id/>
+	</volume-inputs>
+	<volume-params>
+		<param name="param1">value1</param>"
+		<param name="param2">value2</param>"
+		<param name="param3">value3</param>"
+	</volume-params>	
+</volume-request>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/GenericVnf.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/GenericVnf.xml
new file mode 100644
index 0000000..aea1a46
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/GenericVnf.xml
@@ -0,0 +1,38 @@
+<generic-vnf xmlns="http://org.openecomp.aai.inventory/v8">
+	<vnf-id>TEST-VNF-ID-0123</vnf-id>
+	<vnf-name>STMTN5MMSC20</vnf-name>
+	<vnf-type>pcrf-capacity</vnf-type>
+	<service-id>SDN-MOBILITY</service-id>
+	<equipment-role>vPCRF</equipment-role>
+	<orchestration-status>pending-create</orchestration-status>
+	<in-maint>false</in-maint>
+	<is-closed-loop-disabled>false</is-closed-loop-disabled>
+	<persona-model-id>introvert</persona-model-id>
+	<persona-model-version>2.0</persona-model-version>
+	<resource-version>0000020</resource-version>
+	<vf-modules>
+		<vf-module>
+			<vf-module-id>lukewarm</vf-module-id>
+			<vf-module-name>PCRF::module-0-0</vf-module-name>
+			<persona-model-id>introvert</persona-model-id>
+			<persona-model-version>2.0</persona-model-version>
+			<is-base-vf-module>true</is-base-vf-module>
+			<heat-stack-id>fastburn</heat-stack-id>
+			<orchestration-status>pending-create</orchestration-status>
+			<resource-version>0000074</resource-version>
+		</vf-module>
+		<vf-module>
+			<vf-module-id>supercool</vf-module-id>
+			<vf-module-name>PCRF::module-1-0</vf-module-name>
+			<persona-model-id>extrovert</persona-model-id>
+			<persona-model-version>2.0</persona-model-version>
+			<is-base-vf-module>false</is-base-vf-module>
+			<heat-stack-id>slowburn</heat-stack-id>
+			<orchestration-status>pending-create</orchestration-status>
+			<resource-version>0000075</resource-version>
+		</vf-module>
+	</vf-modules>
+	<relationship-list/>
+	<l-interfaces/>
+	<lag-interfaces/>
+</generic-vnf>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/RollbackVfModuleVolumeCallbackResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/RollbackVfModuleVolumeCallbackResponse.xml
new file mode 100644
index 0000000..6ab9416
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/RollbackVfModuleVolumeCallbackResponse.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<rollbackVolumeGroupResponse>
+  <messageId>{{MESSAGE-ID}}</messageId>
+  <volumeGroupRolledback>true</volumeGroupRolledback>
+</rollbackVolumeGroupResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request.json
new file mode 100644
index 0000000..91048ec
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request.json
@@ -0,0 +1,65 @@
+{
+	"requestDetails": {
+		"modelInfo": {
+			"modelType": "volumeGroup",
+			"modelId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelName": "vSAMP12::base::module-0",
+			"modelVersion": "1",
+			"modelCustomizationId": "ee6478e5-ea33-3346-ac12-ab121484a3fe"
+		},
+		"cloudConfiguration": {
+			"lcpCloudRegionId": "mdt1",
+			"tenantId": "88a6ca3ee0394ade9403f075db23167e"
+		},
+		"requestInfo": {
+			"instanceName": "MSOTESTVOL101a-vSAMP12_base_vol_module-0",
+			"source": "VID",
+			"suppressRollback": false
+		},
+		"relatedInstanceList": [
+			{
+				"relatedInstance": {
+					"instanceId": "{service-instance-id}",
+					"modelInfo": {
+						"modelType": "service",
+						"modelId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelName": "Test",
+						"modelVersion": "2.0"
+					}
+				}
+			}, {
+				"relatedInstance": {
+					"instanceId": "{vnf-instance-id}",
+					"modelInfo": {
+						"modelType": "vnf",
+						"modelId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelName": "vSAMP12",
+						"modelVersion": "1",
+						"modelCustomizationName": "vSAMP12"
+					}
+				}
+			}
+		],
+		"requestParameters": {
+			"serviceId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+			"userParams": [
+				{"name": "vnfName", "value": "STMTN5MMSC20" },
+				{"name": "vnfName2", "value": "US1117MTSNJVBR0246" },
+				{"name": "vnfNmInformation", "value": "" },
+				{"name": "vnfType", "value": "pcrf-capacity" },
+				{"name": "vnfId", "value": "skask" },
+				{"name": "vnfStackId", "value": "slowburn" },
+				{"name": "vnfStatus", "value": "created" },
+				{"name": "aicCloudRegion", "value": "MDTWNJ21" },
+				{"name": "availabilityZone", "value": "slcp3-esx-az01" },
+				{"name": "oamNetworkName", "value": "VLAN-OAM-1323" },
+				{"name": "vmName", "value": "slcp34246vbc246ceb" },
+				{"name": "ipagNetworkId", "value": "970cd2b9-7f09-4a12-af47-182ea38ba1f0" },
+				{"name": "vpeNetworkId", "value": "545cc2c3-1930-4100-b534-5d82d0e12bb6" }
+			]
+		}
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request_noreqparm.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request_noreqparm.json
new file mode 100644
index 0000000..72e4183
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request_noreqparm.json
@@ -0,0 +1,45 @@
+{
+	"requestDetails": {
+		"modelInfo": {
+			"modelType": "volumeGroup",
+			"modelId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelName": "vSAMP12::base::module-0",
+			"modelVersion": "1"
+		},
+		"cloudConfiguration": {
+			"lcpCloudRegionId": "mdt1",
+			"tenantId": "88a6ca3ee0394ade9403f075db23167e"
+		},
+		"requestInfo": {
+			"instanceName": "MSOTESTVOL101a-vSAMP12_base_vol_module-0",
+			"source": "VID",
+			"suppressRollback": false
+		},
+		"relatedInstanceList": [
+			{
+				"relatedInstance": {
+					"instanceId": "{service-instance-id}",
+					"modelInfo": {
+						"modelType": "service",
+						"modelId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelName": "{parent service model name}",
+						"modelVersion": "1"
+					}
+				}
+			}, {
+				"relatedInstance": {
+					"instanceId": "{vnf-instance-id}",
+					"modelInfo": {
+						"modelType": "vnf",
+						"modelId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelName": "Test/vSAMP12",
+						"modelVersion": "1"
+					}
+				}
+			}
+		]
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_createVolumeName_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_createVolumeName_AAIResponse_Success.xml
new file mode 100644
index 0000000..02b43ff
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_createVolumeName_AAIResponse_Success.xml
@@ -0,0 +1,49 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+				   statusCode="200">
+   <rest:headers>
+	  <rest:header name="X-CSI-Internal-WriteableRequest" value="true"/>
+	  <rest:header name="X-CSI-MethodName" value="UNKNOWN"/>
+	  <rest:header name="Content-Length" value="968"/>
+	  <rest:header name="breadcrumbId" value="ID-mtsnjv9aaas23-44965-1459957053425-0-211465"/>
+	  <rest:header name="X-CSI-UniqueTransactionId"
+				   value="AjscCsiRestful28795@mtsnjv9aaas237d4a4d21-e60a-495f-935f-cc225dc3c847"/>
+	  <rest:header name="User-Agent" value="Jakarta Commons-HttpClient/3.1"/>
+	  <rest:header name="X-TransactionID" value="3a19f95d-d63e-4a8e-8b9c-6563895628aa"/>
+	  <rest:header name="X-CSI-ServiceName" value="UNKNOWN"/>
+	  <rest:header name="Server" value="Jetty(9.2.z-SNAPSHOT)"/>
+	  <rest:header name="Cache-Control" value="no-cache,no-store"/>
+	  <rest:header name="X-FromAppId" value="MSO"/>
+	  <rest:header name="Date" value="Fri,08 Apr 2016 16:53:04 GMT"/>
+	  <rest:header name="X-CSI-ConversationId"
+				   value="ajscUser~CNG-CSI~c0a2bb44-2167-4e85-ad6a-483a24c0823a"/>
+	  <rest:header name="volume-group-name" value="simpleCinderVolume_201604071"/>
+	  <rest:header name="X-CSI-MessageId" value="f6d6eed4-456e-4033-be04-b17582902dc2"/>
+	  <rest:header name="X-AAI-TXID" value="mtsnjv9aaas23-20160408-16:53:04:592-73255"/>
+	  <rest:header name="Content-Type" value="application/xml"/>
+	  <rest:header name="Accept" value="application/xml"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+	  <volume-group xmlns="http://org.openecomp.aai.inventory/v8">
+		 <volume-group-id>simpleCinderVolume_201604071</volume-group-id>
+		 <volume-group-name>simpleCinderVolume_201604071</volume-group-name>
+		 <heat-stack-id>simpleCinderVolume_201604071</heat-stack-id>
+		 <vnf-type>simple_cinder_master</vnf-type>
+		 <orchestration-status>Pending</orchestration-status>
+		 <resource-version>1460134360</resource-version>
+		 <relationship-list>
+			<relationship>
+			   <related-to>tenant</related-to>
+			   <related-link>https://aai-ext1.test.com:8443/aai/v6/cloud-infrastructure/tenants/tenant/897deadc2b954a6bac6d3c197fb3525e/</related-link>
+			   <relationship-data>
+				  <relationship-key>tenant.tenant-id</relationship-key>
+				  <relationship-value>897deadc2b954a6bac6d3c197fb3525e</relationship-value>
+			   </relationship-data>
+			   <related-to-property>
+				  <property-key>tenant.tenant-name</property-key>
+				  <property-value>MSOTest1</property-value>
+			   </related-to-property>
+			</relationship>
+		 </relationship-list>
+	  </volume-group>
+   </rest:payload>
+</rest:RESTResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_deleteVolumeName_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_deleteVolumeName_AAIResponse_Success.xml
new file mode 100644
index 0000000..1574310
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_deleteVolumeName_AAIResponse_Success.xml
@@ -0,0 +1,24 @@
+	<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+					   statusCode="200">
+	   <rest:headers>
+		  <rest:header name="X-CSI-Internal-WriteableRequest" value="true"/>
+		  <rest:header name="X-CSI-MethodName" value="helloWorld-GetMethod(Logical)"/>
+		  <rest:header name="Content-Length" value="0"/>
+		  <rest:header name="breadcrumbId" value="ID-mtsnjv9aaas23-44965-1459957053425-0-211467"/>
+		  <rest:header name="X-CSI-UniqueTransactionId"
+					   value="AjscCsiRestful28795@mtsnjv9aaas23d44059bc-ef96-4af8-a28b-98044e08d7af"/>
+		  <rest:header name="User-Agent" value="Jakarta Commons-HttpClient/3.1"/>
+		  <rest:header name="X-TransactionID" value="3749995c-266b-4025-a0c4-4ce6983efc66"/>
+		  <rest:header name="X-CSI-ServiceName" value="helloWorld"/>
+		  <rest:header name="Server" value="Jetty(9.2.z-SNAPSHOT)"/>
+		  <rest:header name="Cache-Control" value="no-cache,no-store"/>
+		  <rest:header name="X-FromAppId" value="MSO"/>
+		  <rest:header name="Date" value="Fri,08 Apr 2016 16:53:04 GMT"/>
+		  <rest:header name="X-CSI-ConversationId"
+					   value="ajscUser~CNG-CSI~bbd0e78f-d4e7-41be-b9ad-4a6767fa660a"/>
+		  <rest:header name="X-CSI-MessageId" value="6ccfeb13-56da-4836-bfbd-5a42dee60939"/>
+		  <rest:header name="X-AAI-TXID" value="mtsnjv9aaas23-20160408-16:53:04:629-73256"/>
+		  <rest:header name="Content-Type" value="application/xml"/>
+		  <rest:header name="Accept" value="application/xml"/>
+	   </rest:headers>
+	</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_queryVolumeName_AAIResponse_404.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_queryVolumeName_AAIResponse_404.xml
new file mode 100644
index 0000000..96e906f
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_queryVolumeName_AAIResponse_404.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<volume-group xmlns="http://org.openecomp.aai.inventory/v7">
+	<volume-group-id>94f0f72f-4be1-49ed-8410-702396797163</volume-group-id>
+	<volume-group-name>MSOTESTVOL103H-vSAMP12_base_vol_module-0</volume-group-name>
+	<heat-stack-id/>
+	<vnf-type>Test/vSAMP12</vnf-type>
+	<orchestration-status>Pending</orchestration-status>
+	<resource-version>1469203133</resource-version>
+	<relationship-list>
+		<relationship>
+			<related-to>tenant</related-to>
+			<related-link>https://aai-ext1.test.com:8443/aai/v7/cloud-infrastructure/cloud-regions/cloud-region/att-aic/mtn6/tenants/tenant/e444c311b27a45dc9522f2370d70f90f/</related-link>
+			<relationship-data>
+				<relationship-key>tenant.tenant-id</relationship-key>
+				<relationship-value>e444c311b27a45dc9522f2370d70f90f</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-owner</relationship-key>
+				<relationship-value>att-aic</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-region-id</relationship-key>
+				<relationship-value>mtn6</relationship-value>
+			</relationship-data>
+			<related-to-property>
+				<property-key>tenant.tenant-name</property-key>
+				<property-value>MSOCustomer1</property-value>
+			</related-to-property>
+		</relationship>
+	</relationship-list>
+</volume-group>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml
new file mode 100644
index 0000000..5e8913f
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml
@@ -0,0 +1,49 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+				   statusCode="200">
+   <rest:headers>
+	  <rest:header name="X-CSI-Internal-WriteableRequest" value="true"/>
+	  <rest:header name="X-CSI-MethodName" value="UNKNOWN"/>
+	  <rest:header name="Content-Length" value="968"/>
+	  <rest:header name="breadcrumbId" value="ID-mtsnjv9aaas23-44965-1459957053425-0-211465"/>
+	  <rest:header name="X-CSI-UniqueTransactionId"
+				   value="AjscCsiRestful28795@mtsnjv9aaas237d4a4d21-e60a-495f-935f-cc225dc3c847"/>
+	  <rest:header name="User-Agent" value="Jakarta Commons-HttpClient/3.1"/>
+	  <rest:header name="X-TransactionID" value="3a19f95d-d63e-4a8e-8b9c-6563895628aa"/>
+	  <rest:header name="X-CSI-ServiceName" value="UNKNOWN"/>
+	  <rest:header name="Server" value="Jetty(9.2.z-SNAPSHOT)"/>
+	  <rest:header name="Cache-Control" value="no-cache,no-store"/>
+	  <rest:header name="X-FromAppId" value="MSO"/>
+	  <rest:header name="Date" value="Fri,08 Apr 2016 16:53:04 GMT"/>
+	  <rest:header name="X-CSI-ConversationId"
+				   value="ajscUser~CNG-CSI~c0a2bb44-2167-4e85-ad6a-483a24c0823a"/>
+	  <rest:header name="volume-group-name" value="simpleCinderVolume_201604071"/>
+	  <rest:header name="X-CSI-MessageId" value="f6d6eed4-456e-4033-be04-b17582902dc2"/>
+	  <rest:header name="X-AAI-TXID" value="mtsnjv9aaas23-20160408-16:53:04:592-73255"/>
+	  <rest:header name="Content-Type" value="application/xml"/>
+	  <rest:header name="Accept" value="application/xml"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+	  <volume-group xmlns="http://org.openecomp.aai.inventory/v8">
+		 <volume-group-id>8424bb3c-c3e7-4553-9662-469649ed9379</volume-group-id>
+		 <volume-group-name>MSOTESTVOL103W-vSAMP12_base_vol_module-0</volume-group-name>
+		 <heat-stack-id/>
+		 <vnf-type>simple_cinder_master</vnf-type>
+		 <orchestration-status>Pending</orchestration-status>
+		 <resource-version>1460134360</resource-version>
+		 <relationship-list>
+			<relationship>
+			   <related-to>tenant</related-to>
+			   <related-link>https://aai-ext1.test.com:8443/aai/v6/cloud-infrastructure/tenants/tenant/897deadc2b954a6bac6d3c197fb3525e/</related-link>
+			   <relationship-data>
+				  <relationship-key>tenant.tenant-id</relationship-key>
+				  <relationship-value>897deadc2b954a6bac6d3c197fb3525e</relationship-value>
+			   </relationship-data>
+			   <related-to-property>
+				  <property-key>tenant.tenant-name</property-key>
+				  <property-value>MSOTest1</property-value>
+			   </related-to-property>
+			</relationship>
+		 </relationship-list>
+	  </volume-group>
+   </rest:payload>
+</rest:RESTResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_updateVolumeName_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_updateVolumeName_AAIResponse_Success.xml
new file mode 100644
index 0000000..1574310
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_updateVolumeName_AAIResponse_Success.xml
@@ -0,0 +1,24 @@
+	<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+					   statusCode="200">
+	   <rest:headers>
+		  <rest:header name="X-CSI-Internal-WriteableRequest" value="true"/>
+		  <rest:header name="X-CSI-MethodName" value="helloWorld-GetMethod(Logical)"/>
+		  <rest:header name="Content-Length" value="0"/>
+		  <rest:header name="breadcrumbId" value="ID-mtsnjv9aaas23-44965-1459957053425-0-211467"/>
+		  <rest:header name="X-CSI-UniqueTransactionId"
+					   value="AjscCsiRestful28795@mtsnjv9aaas23d44059bc-ef96-4af8-a28b-98044e08d7af"/>
+		  <rest:header name="User-Agent" value="Jakarta Commons-HttpClient/3.1"/>
+		  <rest:header name="X-TransactionID" value="3749995c-266b-4025-a0c4-4ce6983efc66"/>
+		  <rest:header name="X-CSI-ServiceName" value="helloWorld"/>
+		  <rest:header name="Server" value="Jetty(9.2.z-SNAPSHOT)"/>
+		  <rest:header name="Cache-Control" value="no-cache,no-store"/>
+		  <rest:header name="X-FromAppId" value="MSO"/>
+		  <rest:header name="Date" value="Fri,08 Apr 2016 16:53:04 GMT"/>
+		  <rest:header name="X-CSI-ConversationId"
+					   value="ajscUser~CNG-CSI~bbd0e78f-d4e7-41be-b9ad-4a6767fa660a"/>
+		  <rest:header name="X-CSI-MessageId" value="6ccfeb13-56da-4836-bfbd-5a42dee60939"/>
+		  <rest:header name="X-AAI-TXID" value="mtsnjv9aaas23-20160408-16:53:04:629-73256"/>
+		  <rest:header name="Content-Type" value="application/xml"/>
+		  <rest:header name="Accept" value="application/xml"/>
+	   </rest:headers>
+	</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/getSIUrlById.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/getSIUrlById.xml
new file mode 100644
index 0000000..416689e
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/getSIUrlById.xml
@@ -0,0 +1,6 @@
+    <search-results xmlns="http://org.openecomp.aai.inventory">
+         <result-data>
+            <resource-type>service-instance</resource-type>
+            <resource-link>https://aai-ext1.test.com:8443/aai/v7/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/123456789/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET</resource-link>
+         </result-data>
+      </search-results>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/Database/DBAdapter.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/Database/DBAdapter.xml
new file mode 100644
index 0000000..5a36d74
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/Database/DBAdapter.xml
@@ -0,0 +1 @@
+<DbTag>Notified</DbTag>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/Database/DBUpdateResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/Database/DBUpdateResponse.xml
new file mode 100644
index 0000000..7c30f75
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/Database/DBUpdateResponse.xml
@@ -0,0 +1,4 @@
+
+
+<ns2:updateRequestResponse xmlns:ns2="http://org.openecomp.mso/requestsdb"
+                           xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"/>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteGenericVNFV1/sdncAdapterResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteGenericVNFV1/sdncAdapterResponse.xml
new file mode 100644
index 0000000..8056f05
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteGenericVNFV1/sdncAdapterResponse.xml
@@ -0,0 +1,7 @@
+<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
+	<sdncadapterworkflow:response-data>
+		<tag0:RequestData xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">
+		&lt;output xmlns="org:openecomp:sdnctl:vnf"&gt;&lt;svc-request-id&gt;1660b8da-0a94-442d-8ed5-ea079e3c67c8&lt;/svc-request-id&gt;&lt;response-code&gt;200&lt;/response-code&gt;&lt;ack-final-indicator&gt;Y&lt;/ack-final-indicator&gt;&lt;vnf-information&gt;&lt;vnf-id&gt;8925b50d-de67-44c1-b984-e7ce7b0f4dae&lt;/vnf-id&gt;&lt;/vnf-information&gt;&lt;service-information&gt;&lt;service-type&gt;a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb&lt;/service-type&gt;&lt;service-instance-id&gt;8925b50d-de67-44c1-b984-e7ce7b0f4dae&lt;/service-instance-id&gt;&lt;subscriber-name&gt;notsurewecare&lt;/subscriber-name&gt;&lt;/service-information&gt;&lt;/output&gt;
+		</tag0:RequestData>
+	</sdncadapterworkflow:response-data>
+</sdncadapterworkflow:SDNCAdapterWorkflowResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/cloudRegion25_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/cloudRegion25_AAIResponse_Success.xml
new file mode 100644
index 0000000..90c668c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/cloudRegion25_AAIResponse_Success.xml
@@ -0,0 +1,20 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+      <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:502-132671"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <cloud-owner>att-aic</cloud-owner>
+         <cloud-region-id>RDM2WAGPLCP</cloud-region-id>
+         <cloud-region-version>2.5</cloud-region-version>
+         <complex-name>RDM2WAGPLCP</complex-name>
+       </l3-network>
+   </rest:payload>
+</rest:RESTResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/cloudRegion30_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/cloudRegion30_AAIResponse_Success.xml
new file mode 100644
index 0000000..9b651f2
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/cloudRegion30_AAIResponse_Success.xml
@@ -0,0 +1,20 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+      <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:502-132671"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <cloud-owner>att-aic</cloud-owner>
+         <cloud-region-id>RDM2WAGPLCP</cloud-region-id>
+         <cloud-region-version>3.0</cloud-region-version>
+         <complex-name>RDM2WAGPLCP</complex-name>
+       </l3-network>
+   </rest:payload>
+</rest:RESTResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/deleteAAIResponse_Failure500_RESTFault.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/deleteAAIResponse_Failure500_RESTFault.xml
new file mode 100644
index 0000000..4ce7048
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/deleteAAIResponse_Failure500_RESTFault.xml
@@ -0,0 +1,19 @@
+<rest:RESTFault xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                errorType="transport">
+   <rest:errorCode>500</rest:errorCode>
+   <rest:message>HTTP method: GET Internal Server Error </rest:message>
+   <rest:messageDetails>&lt;Fault&gt;
+    &lt;requestError&gt;
+        &lt;serviceException&gt;
+            &lt;messageId&gt;SVC3002&lt;/messageId&gt;
+            &lt;text&gt;Error writing output performing %1 on %2 (msg=%3) (ec=%4)&lt;/text&gt;
+            &lt;variables&gt;
+                &lt;variable&gt;PUT customer&lt;/variable&gt;
+                &lt;variable&gt;SubName32&lt;/variable&gt;
+                &lt;variable&gt;Unexpected error reading/updating database:Adding this property for key [service-instance-id] and value [12312442454112] violates a uniqueness constraint [service-instance-id]&lt;/variable&gt;
+                &lt;variable&gt;ERR.5.4.5105&lt;/variable&gt;
+            &lt;/variables&gt;
+        &lt;/serviceException&gt;
+    &lt;/requestError&gt;
+&lt;/Fault&gt;</rest:messageDetails>
+</rest:RESTFault>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/deleteNetworkAAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/deleteNetworkAAIResponse_Success.xml
new file mode 100644
index 0000000..a740caa
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/deleteNetworkAAIResponse_Success.xml
@@ -0,0 +1,61 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Sat,30 Jan 2016 20:09:24 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160130-20:09:24:814-165843"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+         <network-name>HSL_direct_net_2</network-name>
+         <network-type>CONTRAIL_BASIC</network-type>
+         <network-role>HSL_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <neutron-network-id>8bbd3edf-b835-4610-96a2-a5cafa029042</neutron-network-id>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <orchestration-status>active</orchestration-status>
+         <heat-stack-id>HSL_direct_net_2/57594a56-1c92-4a38-9caa-641c1fa3d4b6</heat-stack-id>
+         <subnets>
+            <subnet>
+               <subnet-id>ea5f2a2c-604f-47ff-a9c5-253ee4f0ef0a</subnet-id>
+               <neutron-subnet-id>5a77fdc2-7789-4649-a1b9-6eaf1db1813a</neutron-subnet-id>
+               <gateway-address>172.16.34.1</gateway-address>
+               <network-start-address>172.16.34.0</network-start-address>
+               <cidr-mask>28</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>active</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+         <relationship-list>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/e81d842d3e8b45c5a59f57cd76af3aaf/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>e81d842d3e8b45c5a59f57cd76af3aaf</relationship-value>
+               </relationship-data>
+            </relationship>
+			<relationship>
+               <related-to>cloud-region</related-to>
+               <related-link>cloud-infrastructure/cloud-regions/cloud-region/att-aic/RDM2WAGPLCP/</related-link>
+               <relationship-data>
+                  <relationship-key>cloud-region.cloud-owner</relationship-key>
+                  <relationship-value>att-aic</relationship-value>
+               </relationship-data>
+               <relationship-data>
+                  <relationship-key>cloud-region.cloud-region-id</relationship-key>
+                  <relationship-value>RDM2WAGPLCP</relationship-value>
+               </relationship-data>						   
+            </relationship>			            
+         </relationship-list>
+      </l3-network>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/deleteNetworkAAIResponse_withRelationship_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/deleteNetworkAAIResponse_withRelationship_Success.xml
new file mode 100644
index 0000000..841cae0
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2/deleteNetworkAAIResponse_withRelationship_Success.xml
@@ -0,0 +1,73 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Sat,30 Jan 2016 20:09:24 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160130-20:09:24:814-165843"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+         <network-name>HSL_direct_net_2</network-name>
+         <network-type>CONTRAIL_BASIC</network-type>
+         <network-role>HSL_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <neutron-network-id>8bbd3edf-b835-4610-96a2-a5cafa029042</neutron-network-id>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <orchestration-status>active</orchestration-status>
+         <heat-stack-id>HSL_direct_net_2/57594a56-1c92-4a38-9caa-641c1fa3d4b6</heat-stack-id>
+         <subnets>
+            <subnet>
+               <subnet-id>ea5f2a2c-604f-47ff-a9c5-253ee4f0ef0a</subnet-id>
+               <neutron-subnet-id>5a77fdc2-7789-4649-a1b9-6eaf1db1813a</neutron-subnet-id>
+               <gateway-address>172.16.34.1</gateway-address>
+               <network-start-address>172.16.34.0</network-start-address>
+               <cidr-mask>28</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>active</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+         <relationship-list>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/e81d842d3e8b45c5a59f57cd76af3aaf/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>e81d842d3e8b45c5a59f57cd76af3aaf</relationship-value>
+               </relationship-data>
+            </relationship>
+			<relationship>
+				<related-to>vf-module</related-to>
+				<related-link>https://aai-app-e2e.ecomp.cci.com:8443/aai/v8/network/generic-vnfs/generic-vnf/105df7e5-0b3b-49f7-a837-4864b62827c4/vf-modules/vf-module/d9217058-95a0-49ee-b9a9-949259e89349/</related-link>
+				<relationship-data>
+				   <relationship-key>generic-vnf.vnf-id</relationship-key>
+				   <relationship-value>105df7e5-0b3b-49f7-a837-4864b62827c4</relationship-value>
+			    </relationship-data>
+			    <relationship-data>
+				   <relationship-key>vf-module.vf-module-id</relationship-key>
+				   <relationship-value>d9217058-95a0-49ee-b9a9-949259e89349</relationship-value>
+			    </relationship-data>
+		    </relationship>            
+			<relationship>
+       		   <related-to>generic-vnf</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/generic-vnfs/generic-vnf/45f822d9-73ca-4255-9844-7cef401bbf47/</related-link>
+               <relationship-data>
+                 <relationship-key>generic-vnf.vnf-id</relationship-key>
+                 <relationship-value>45f822d9-73ca-4255-9844-7cef401bbf47</relationship-value>
+               </relationship-data>
+               <related-to-property>
+                 <property-key>generic-vnf.vnf-name</property-key>
+                 <property-value>zrdm1scpx05</property-value>
+               </related-to-property>
+            </relationship>
+         </relationship-list>
+      </l3-network>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteVfModuleVolumeInfraV1/DeleteVfModuleVolumeCallbackResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteVfModuleVolumeInfraV1/DeleteVfModuleVolumeCallbackResponse.xml
new file mode 100644
index 0000000..25aa45a
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteVfModuleVolumeInfraV1/DeleteVfModuleVolumeCallbackResponse.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<deleteVolumeGroupResponse>
+	<messageId>{{MESSAGE-ID}}</messageId>
+	<volumeGroupDeleted>true</volumeGroupDeleted>
+</deleteVolumeGroupResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteVfModuleVolumeInfraV1/deleteVfModuleVolume_VID_request_st.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteVfModuleVolumeInfraV1/deleteVfModuleVolume_VID_request_st.json
new file mode 100644
index 0000000..35ba121
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteVfModuleVolumeInfraV1/deleteVfModuleVolume_VID_request_st.json
@@ -0,0 +1,17 @@
+{
+	"requestDetails": {
+		"modelInfo": {
+			"modelType": "volumeGroup",
+			"modelInvariantId": "0b01b8c2-8416-11e6-ae22-56b6b6499611",
+			"modelName": "vSAMP12::base::module-0",
+			"modelVersion": "1.0"
+		},
+		"cloudConfiguration": {
+			"lcpCloudRegionId": "MDTWNJ21",
+			"tenantId": "fba1bd1e195a404cacb9ce17a9b2b421"
+		},
+		"requestInfo": {
+			"source": "VID"
+		}
+	}
+}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml
new file mode 100644
index 0000000..fd10548
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml
@@ -0,0 +1,42 @@
+<volume-group xmlns="http://org.openecomp.aai.inventory/v8">
+	<volume-group-id>78987</volume-group-id>
+	<volume-group-name>MSOTESTVOL102a-vSAMP12_base_vol_module-0</volume-group-name>
+	<heat-stack-id/>
+	<vnf-type>Test/vSAMP12</vnf-type>
+	<orchestration-status>Pending</orchestration-status>
+	<resource-version>0000020</resource-version>
+	<relationship-list>
+		<relationship>
+			<related-to>generic-vnf</related-to>
+			<related-link>https://aai-ext1.test.com:8443/aai/v8/network/generic-vnfs/generic-vnf/9e48f6ea-f786-46de-800a-d480e5ccc846/</related-link>
+			<relationship-data>
+				<relationship-key>generic-vnf.vnf-id</relationship-key>
+				<relationship-value>9e48f6ea-f786-46de-800a-d480e5ccc846</relationship-value>
+			</relationship-data>
+			<related-to-property>
+				<property-key>generic-vnf.vnf-name</property-key>
+				<property-value>MSOSTSAMP12-10601</property-value>
+			</related-to-property>
+		</relationship>
+		<relationship>
+			<related-to>tenant</related-to>
+			<related-link>https://aai-ext1.test.com:8443/aai/v7/cloud-infrastructure/cloud-regions/cloud-region/att-aic/mdt1/tenants/tenant/fba1bd1e195a404cacb9ce17a9b2b421/</related-link>
+			<relationship-data>
+				<relationship-key>tenant.tenant-id</relationship-key>
+				<relationship-value>fba1bd1e195a404cacb9ce17a9b2b421</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-owner</relationship-key>
+				<relationship-value>att-aic</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-region-id</relationship-key>
+				<relationship-value>mdt1</relationship-value>
+			</relationship-data>
+			<related-to-property>
+				<property-key>tenant.tenant-name</property-key>
+				<property-value>ECOMP_MDT1</property-value>
+			</related-to-property>
+		</relationship>
+	</relationship-list>
+</volume-group>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleRollback/GenericVnf.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleRollback/GenericVnf.xml
new file mode 100644
index 0000000..50e4347
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleRollback/GenericVnf.xml
@@ -0,0 +1,26 @@
+<generic-vnf xmlns="http://org.openecomp.aai.inventory/v7">
+	<vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>
+	<vnf-name>STMTN5MMSC21</vnf-name>
+	<vnf-type>mmsc-capacity</vnf-type>
+	<service-id>SDN-MOBILITY</service-id>
+	<equipment-role>vMMSC</equipment-role>
+	<orchestration-status>pending-create</orchestration-status>
+	<in-maint>false</in-maint>
+	<is-closed-loop-disabled>false</is-closed-loop-disabled>
+	<resource-version>1508691</resource-version>
+	<vf-modules>
+		<vf-module>
+			<vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>
+			<vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>
+			<persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>
+			<persona-model-version>1.0</persona-model-version>
+			<is-base-vf-module>true</is-base-vf-module>
+			<heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>
+			<orchestration-status>pending-create</orchestration-status>
+			<resource-version>1508692</resource-version>
+		</vf-module>
+	</vf-modules>
+	<relationship-list/>
+	<l-interfaces/>
+	<lag-interfaces/>
+</generic-vnf>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleRollback/GenericVnfVfModule.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleRollback/GenericVnfVfModule.xml
new file mode 100644
index 0000000..f60260d
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleRollback/GenericVnfVfModule.xml
@@ -0,0 +1,26 @@
+<generic-vnf xmlns="http://org.openecomp.aai.inventory/v7">
+	<vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>
+	<vnf-name>STMTN5MMSC21</vnf-name>
+	<vnf-type>mmsc-capacity</vnf-type>
+	<service-id>SDN-MOBILITY</service-id>
+	<equipment-role>vMMSC</equipment-role>
+	<orchestration-status>pending-create</orchestration-status>
+	<in-maint>false</in-maint>
+	<is-closed-loop-disabled>false</is-closed-loop-disabled>
+	<resource-version>0000021</resource-version>
+	<vf-modules>
+		<vf-module>
+			<vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>
+			<vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>
+			<persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>
+			<persona-model-version>1.0</persona-model-version>
+			<is-base-vf-module>true</is-base-vf-module>
+			<heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>
+			<orchestration-status>pending-create</orchestration-status>
+			<resource-version>0000073</resource-version>
+		</vf-module>
+	</vf-modules>
+	<relationship-list/>
+	<l-interfaces/>
+	<lag-interfaces/>
+</generic-vnf>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeCallbackResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeCallbackResponse.xml
new file mode 100644
index 0000000..a421355
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeCallbackResponse.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<createVolumeGroupResponse>
+    <messageId>{{MESSAGE-ID}}</messageId>
+    <volumeGroupCreated>true</volumeGroupCreated>
+    <volumeGroupId>d485ecee-957c-4a0a-8b95-27a22b90103f</volumeGroupId>
+    <volumeGroupOutputs>
+        <entry>
+            <key>mmsc_vol_1</key>
+            <value>a73e0fe9-1ce8-49c2-8fef-e2788605be29</value>
+        </entry>
+        <entry>
+            <key>mmsc_vol_2</key>
+            <value>37b6455a-5ea8-463a-89e3-0efeaf7b7c6d</value>
+        </entry>
+        <entry>
+            <key>nemsfe_vol_1</key>
+            <value>b7ff1c21-d138-49a3-bf13-4cfd91efaf48</value>
+        </entry>
+        <entry>
+            <key>nemsbe_vol_1</key>
+            <value>a5988471-cd42-44d8-b078-64f2f13d3d4c</value>
+        </entry>
+        <entry>
+            <key>mmsc_vol_5</key>
+            <value>f7b91c1e-ab8c-413a-a850-ba80a246c7e0</value>
+        </entry>
+        <entry>
+            <key>nemsfe_vol_2</key>
+            <value>957ea3f3-2d4a-4707-bfd2-ba66f42037c2</value>
+        </entry>
+        <entry>
+            <key>mmsc_vol_3</key>
+            <value>de6fccfe-d61a-48b0-b03b-87bf1bf749b3</value>
+        </entry>
+        <entry>
+            <key>mmsc_vol_4</key>
+            <value>76162310-2c38-4c32-981c-5c2880190077</value>
+        </entry>
+    </volumeGroupOutputs>
+    <volumeGroupRollback>
+        <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+        <messageId>e585e4f4-9452-437a-b294-45a2d6d3b7a3</messageId>
+        <msoRequest>
+            <requestId>c30b9453-4b68-4c2e-aacf-58a5ba648bf5</requestId>
+            <serviceInstanceId>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</serviceInstanceId>
+        </msoRequest>
+        <tenantId>1bbab536a19b4756926e7d0ec1eb543c</tenantId>
+        <volumeGroupCreated>true</volumeGroupCreated>
+        <volumeGroupId>78987</volumeGroupId>
+        <volumeGroupStackId>ZRDM1MMSC01_base_vol/7f74e5e1-5fc1-4593-ac7e-cc9899a106ef</volumeGroupStackId>
+    </volumeGroupRollback>
+    <volumeGroupStackId>ZRDM1MMSC01_base_vol/7f74e5e1-5fc1-4593-ac7e-cc9899a106ef</volumeGroupStackId>
+</createVolumeGroupResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeNoRollbackRequest.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeNoRollbackRequest.xml
new file mode 100644
index 0000000..803a847
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeNoRollbackRequest.xml
@@ -0,0 +1,24 @@
+<volume-request xmlns="http://org.openecomp/mso/infra/vnf-request/v1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+	<request-info>
+		<test-data-only>123abc</test-data-only> <!-- don't remove this tag. Its used for junit test -->
+		<request-id>d8d4fcfa-fd7e-4413-b19d-c95aa67291b8</request-id>
+		<action>CREATE_VF_MODULE_VOL</action>
+		<source>SoapUI-bns-create-base-vol-1001-1</source>
+	</request-info>
+	<volume-inputs>
+		<vnf-type>Test/vSAMP12</vnf-type>
+		<vf-module-model-name>vSAMP12::base::module-0</vf-module-model-name>
+		<backout-on-failure>false</backout-on-failure>
+		<asdc-service-model-version/>
+		<service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+		<aic-cloud-region>MDTWNJ21</aic-cloud-region>
+		<tenant-id>897deadc2b954a6bac6d3c197fb3525e</tenant-id>
+		<volume-group-name>MSOTESTVOL101a-vSAMP12_base_vol_module-0</volume-group-name>
+		<volume-group-id/>
+	</volume-inputs>
+	<volume-params>
+		<param name="param1">value1</param>"
+		<param name="param2">value2</param>"
+		<param name="param3">value3</param>"
+	</volume-params>	
+</volume-request>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeRequest.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeRequest.xml
new file mode 100644
index 0000000..e6ada9c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/CreateVfModuleVolumeRequest.xml
@@ -0,0 +1,24 @@
+<volume-request xmlns="http://org.openecomp/mso/infra/vnf-request/v1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+	<request-info>
+		<test-data-only>123abc</test-data-only> <!-- don't remove this tag. Its used for junit test -->
+		<request-id>d8d4fcfa-fd7e-4413-b19d-c95aa67291b8</request-id>
+		<action>CREATE_VF_MODULE_VOL</action>
+		<source>SoapUI-bns-create-base-vol-1001-1</source>
+	</request-info>
+	<volume-inputs>
+		<vnf-type>Test/vSAMP12</vnf-type>
+		<vf-module-model-name>vSAMP12::base::module-0</vf-module-model-name>
+		<backout-on-failure>true</backout-on-failure>
+		<asdc-service-model-version/>
+		<service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+		<aic-cloud-region>MDTWNJ21</aic-cloud-region>
+		<tenant-id>897deadc2b954a6bac6d3c197fb3525e</tenant-id>
+		<volume-group-name>MSOTESTVOL101a-vSAMP12_base_vol_module-0</volume-group-name>
+		<volume-group-id/>
+	</volume-inputs>
+	<volume-params>
+		<param name="param1">value1</param>"
+		<param name="param2">value2</param>"
+		<param name="param3">value3</param>"
+	</volume-params>	
+</volume-request>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/GenericVnf.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/GenericVnf.xml
new file mode 100644
index 0000000..aea1a46
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/GenericVnf.xml
@@ -0,0 +1,38 @@
+<generic-vnf xmlns="http://org.openecomp.aai.inventory/v8">
+	<vnf-id>TEST-VNF-ID-0123</vnf-id>
+	<vnf-name>STMTN5MMSC20</vnf-name>
+	<vnf-type>pcrf-capacity</vnf-type>
+	<service-id>SDN-MOBILITY</service-id>
+	<equipment-role>vPCRF</equipment-role>
+	<orchestration-status>pending-create</orchestration-status>
+	<in-maint>false</in-maint>
+	<is-closed-loop-disabled>false</is-closed-loop-disabled>
+	<persona-model-id>introvert</persona-model-id>
+	<persona-model-version>2.0</persona-model-version>
+	<resource-version>0000020</resource-version>
+	<vf-modules>
+		<vf-module>
+			<vf-module-id>lukewarm</vf-module-id>
+			<vf-module-name>PCRF::module-0-0</vf-module-name>
+			<persona-model-id>introvert</persona-model-id>
+			<persona-model-version>2.0</persona-model-version>
+			<is-base-vf-module>true</is-base-vf-module>
+			<heat-stack-id>fastburn</heat-stack-id>
+			<orchestration-status>pending-create</orchestration-status>
+			<resource-version>0000074</resource-version>
+		</vf-module>
+		<vf-module>
+			<vf-module-id>supercool</vf-module-id>
+			<vf-module-name>PCRF::module-1-0</vf-module-name>
+			<persona-model-id>extrovert</persona-model-id>
+			<persona-model-version>2.0</persona-model-version>
+			<is-base-vf-module>false</is-base-vf-module>
+			<heat-stack-id>slowburn</heat-stack-id>
+			<orchestration-status>pending-create</orchestration-status>
+			<resource-version>0000075</resource-version>
+		</vf-module>
+	</vf-modules>
+	<relationship-list/>
+	<l-interfaces/>
+	<lag-interfaces/>
+</generic-vnf>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/RollbackVfModuleVolumeCallbackResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/RollbackVfModuleVolumeCallbackResponse.xml
new file mode 100644
index 0000000..6ab9416
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/RollbackVfModuleVolumeCallbackResponse.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<rollbackVolumeGroupResponse>
+  <messageId>{{MESSAGE-ID}}</messageId>
+  <volumeGroupRolledback>true</volumeGroupRolledback>
+</rollbackVolumeGroupResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_VID_request.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_VID_request.json
new file mode 100644
index 0000000..5ff965f
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_VID_request.json
@@ -0,0 +1,64 @@
+{
+	"requestDetails": {
+		"modelInfo": {
+			"modelType": "volumeGroup",
+			"modelId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelName": "vSAMP12::base::module-0",
+			"modelVersion": "1"
+		},
+		"cloudConfiguration": {
+			"lcpCloudRegionId": "mdt1",
+			"tenantId": "88a6ca3ee0394ade9403f075db23167e"
+		},
+		"requestInfo": {
+			"instanceName": "MSOTESTVOL103W-vSAMP12_base_vol_module-0",
+			"source": "VID",
+			"callbackUrl": "{do we support this???}"
+		},
+		"relatedInstanceList": [
+			{
+				"relatedInstance": {
+					"instanceId": "{service-instance-id}",
+					"modelInfo": {
+						"modelType": "service",
+						"modelId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelName": "{parent service model name}",
+						"modelVersion": "1"
+					}
+				}
+			}, {
+				"relatedInstance": {
+					"instanceId": "{vnf-instance-id}",
+					"modelInfo": {
+						"modelType": "vnf",
+						"modelId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelName": "Test/vSAMP12",
+						"modelVersion": "1"
+					}
+				}
+			}
+		],
+		"requestParameters": {
+			"backoutOnFailure": true,
+			"serviceId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+			"userParams": {
+				{"name": "vnfName", "value": "STMTN5MMSC20" },
+				{"name": "vnfName2", "value": "US1117MTSNJVBR0246" },
+				{"name": "vnfNmInformation", "value": "" },
+				{"name": "vnfType", "value": "pcrf-capacity" },
+				{"name": "vnfId", "value": "skask" },
+				{"name": "vnfStackId", "value": "slowburn" },
+				{"name": "vnfStatus", "value": "created" },
+				{"name": "aicCloudRegion", "value": "MDTWNJ21" },
+				{"name": "availabilityZone", "value": "slcp3-esx-az01" },
+				{"name": "oamNetworkName", "value": "VLAN-OAM-1323" },
+				{"name": "vmName", "value": "slcp34246vbc246ceb" },
+				{"name": "ipagNetworkId", "value": "970cd2b9-7f09-4a12-af47-182ea38ba1f0" },
+				{"name": "vpeNetworkId", "value": "545cc2c3-1930-4100-b534-5d82d0e12bb6" }
+			}
+		}
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_createVolumeName_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_createVolumeName_AAIResponse_Success.xml
new file mode 100644
index 0000000..02b43ff
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_createVolumeName_AAIResponse_Success.xml
@@ -0,0 +1,49 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+				   statusCode="200">
+   <rest:headers>
+	  <rest:header name="X-CSI-Internal-WriteableRequest" value="true"/>
+	  <rest:header name="X-CSI-MethodName" value="UNKNOWN"/>
+	  <rest:header name="Content-Length" value="968"/>
+	  <rest:header name="breadcrumbId" value="ID-mtsnjv9aaas23-44965-1459957053425-0-211465"/>
+	  <rest:header name="X-CSI-UniqueTransactionId"
+				   value="AjscCsiRestful28795@mtsnjv9aaas237d4a4d21-e60a-495f-935f-cc225dc3c847"/>
+	  <rest:header name="User-Agent" value="Jakarta Commons-HttpClient/3.1"/>
+	  <rest:header name="X-TransactionID" value="3a19f95d-d63e-4a8e-8b9c-6563895628aa"/>
+	  <rest:header name="X-CSI-ServiceName" value="UNKNOWN"/>
+	  <rest:header name="Server" value="Jetty(9.2.z-SNAPSHOT)"/>
+	  <rest:header name="Cache-Control" value="no-cache,no-store"/>
+	  <rest:header name="X-FromAppId" value="MSO"/>
+	  <rest:header name="Date" value="Fri,08 Apr 2016 16:53:04 GMT"/>
+	  <rest:header name="X-CSI-ConversationId"
+				   value="ajscUser~CNG-CSI~c0a2bb44-2167-4e85-ad6a-483a24c0823a"/>
+	  <rest:header name="volume-group-name" value="simpleCinderVolume_201604071"/>
+	  <rest:header name="X-CSI-MessageId" value="f6d6eed4-456e-4033-be04-b17582902dc2"/>
+	  <rest:header name="X-AAI-TXID" value="mtsnjv9aaas23-20160408-16:53:04:592-73255"/>
+	  <rest:header name="Content-Type" value="application/xml"/>
+	  <rest:header name="Accept" value="application/xml"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+	  <volume-group xmlns="http://org.openecomp.aai.inventory/v8">
+		 <volume-group-id>simpleCinderVolume_201604071</volume-group-id>
+		 <volume-group-name>simpleCinderVolume_201604071</volume-group-name>
+		 <heat-stack-id>simpleCinderVolume_201604071</heat-stack-id>
+		 <vnf-type>simple_cinder_master</vnf-type>
+		 <orchestration-status>Pending</orchestration-status>
+		 <resource-version>1460134360</resource-version>
+		 <relationship-list>
+			<relationship>
+			   <related-to>tenant</related-to>
+			   <related-link>https://aai-ext1.test.com:8443/aai/v6/cloud-infrastructure/tenants/tenant/897deadc2b954a6bac6d3c197fb3525e/</related-link>
+			   <relationship-data>
+				  <relationship-key>tenant.tenant-id</relationship-key>
+				  <relationship-value>897deadc2b954a6bac6d3c197fb3525e</relationship-value>
+			   </relationship-data>
+			   <related-to-property>
+				  <property-key>tenant.tenant-name</property-key>
+				  <property-value>MSOTest1</property-value>
+			   </related-to-property>
+			</relationship>
+		 </relationship-list>
+	  </volume-group>
+   </rest:payload>
+</rest:RESTResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_deleteVolumeName_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_deleteVolumeName_AAIResponse_Success.xml
new file mode 100644
index 0000000..1574310
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_deleteVolumeName_AAIResponse_Success.xml
@@ -0,0 +1,24 @@
+	<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+					   statusCode="200">
+	   <rest:headers>
+		  <rest:header name="X-CSI-Internal-WriteableRequest" value="true"/>
+		  <rest:header name="X-CSI-MethodName" value="helloWorld-GetMethod(Logical)"/>
+		  <rest:header name="Content-Length" value="0"/>
+		  <rest:header name="breadcrumbId" value="ID-mtsnjv9aaas23-44965-1459957053425-0-211467"/>
+		  <rest:header name="X-CSI-UniqueTransactionId"
+					   value="AjscCsiRestful28795@mtsnjv9aaas23d44059bc-ef96-4af8-a28b-98044e08d7af"/>
+		  <rest:header name="User-Agent" value="Jakarta Commons-HttpClient/3.1"/>
+		  <rest:header name="X-TransactionID" value="3749995c-266b-4025-a0c4-4ce6983efc66"/>
+		  <rest:header name="X-CSI-ServiceName" value="helloWorld"/>
+		  <rest:header name="Server" value="Jetty(9.2.z-SNAPSHOT)"/>
+		  <rest:header name="Cache-Control" value="no-cache,no-store"/>
+		  <rest:header name="X-FromAppId" value="MSO"/>
+		  <rest:header name="Date" value="Fri,08 Apr 2016 16:53:04 GMT"/>
+		  <rest:header name="X-CSI-ConversationId"
+					   value="ajscUser~CNG-CSI~bbd0e78f-d4e7-41be-b9ad-4a6767fa660a"/>
+		  <rest:header name="X-CSI-MessageId" value="6ccfeb13-56da-4836-bfbd-5a42dee60939"/>
+		  <rest:header name="X-AAI-TXID" value="mtsnjv9aaas23-20160408-16:53:04:629-73256"/>
+		  <rest:header name="Content-Type" value="application/xml"/>
+		  <rest:header name="Accept" value="application/xml"/>
+	   </rest:headers>
+	</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml
new file mode 100644
index 0000000..5e8913f
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml
@@ -0,0 +1,49 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+				   statusCode="200">
+   <rest:headers>
+	  <rest:header name="X-CSI-Internal-WriteableRequest" value="true"/>
+	  <rest:header name="X-CSI-MethodName" value="UNKNOWN"/>
+	  <rest:header name="Content-Length" value="968"/>
+	  <rest:header name="breadcrumbId" value="ID-mtsnjv9aaas23-44965-1459957053425-0-211465"/>
+	  <rest:header name="X-CSI-UniqueTransactionId"
+				   value="AjscCsiRestful28795@mtsnjv9aaas237d4a4d21-e60a-495f-935f-cc225dc3c847"/>
+	  <rest:header name="User-Agent" value="Jakarta Commons-HttpClient/3.1"/>
+	  <rest:header name="X-TransactionID" value="3a19f95d-d63e-4a8e-8b9c-6563895628aa"/>
+	  <rest:header name="X-CSI-ServiceName" value="UNKNOWN"/>
+	  <rest:header name="Server" value="Jetty(9.2.z-SNAPSHOT)"/>
+	  <rest:header name="Cache-Control" value="no-cache,no-store"/>
+	  <rest:header name="X-FromAppId" value="MSO"/>
+	  <rest:header name="Date" value="Fri,08 Apr 2016 16:53:04 GMT"/>
+	  <rest:header name="X-CSI-ConversationId"
+				   value="ajscUser~CNG-CSI~c0a2bb44-2167-4e85-ad6a-483a24c0823a"/>
+	  <rest:header name="volume-group-name" value="simpleCinderVolume_201604071"/>
+	  <rest:header name="X-CSI-MessageId" value="f6d6eed4-456e-4033-be04-b17582902dc2"/>
+	  <rest:header name="X-AAI-TXID" value="mtsnjv9aaas23-20160408-16:53:04:592-73255"/>
+	  <rest:header name="Content-Type" value="application/xml"/>
+	  <rest:header name="Accept" value="application/xml"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+	  <volume-group xmlns="http://org.openecomp.aai.inventory/v8">
+		 <volume-group-id>8424bb3c-c3e7-4553-9662-469649ed9379</volume-group-id>
+		 <volume-group-name>MSOTESTVOL103W-vSAMP12_base_vol_module-0</volume-group-name>
+		 <heat-stack-id/>
+		 <vnf-type>simple_cinder_master</vnf-type>
+		 <orchestration-status>Pending</orchestration-status>
+		 <resource-version>1460134360</resource-version>
+		 <relationship-list>
+			<relationship>
+			   <related-to>tenant</related-to>
+			   <related-link>https://aai-ext1.test.com:8443/aai/v6/cloud-infrastructure/tenants/tenant/897deadc2b954a6bac6d3c197fb3525e/</related-link>
+			   <relationship-data>
+				  <relationship-key>tenant.tenant-id</relationship-key>
+				  <relationship-value>897deadc2b954a6bac6d3c197fb3525e</relationship-value>
+			   </relationship-data>
+			   <related-to-property>
+				  <property-key>tenant.tenant-name</property-key>
+				  <property-value>MSOTest1</property-value>
+			   </related-to-property>
+			</relationship>
+		 </relationship-list>
+	  </volume-group>
+   </rest:payload>
+</rest:RESTResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_updateVolumeName_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_updateVolumeName_AAIResponse_Success.xml
new file mode 100644
index 0000000..1574310
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_updateVolumeName_AAIResponse_Success.xml
@@ -0,0 +1,24 @@
+	<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+					   statusCode="200">
+	   <rest:headers>
+		  <rest:header name="X-CSI-Internal-WriteableRequest" value="true"/>
+		  <rest:header name="X-CSI-MethodName" value="helloWorld-GetMethod(Logical)"/>
+		  <rest:header name="Content-Length" value="0"/>
+		  <rest:header name="breadcrumbId" value="ID-mtsnjv9aaas23-44965-1459957053425-0-211467"/>
+		  <rest:header name="X-CSI-UniqueTransactionId"
+					   value="AjscCsiRestful28795@mtsnjv9aaas23d44059bc-ef96-4af8-a28b-98044e08d7af"/>
+		  <rest:header name="User-Agent" value="Jakarta Commons-HttpClient/3.1"/>
+		  <rest:header name="X-TransactionID" value="3749995c-266b-4025-a0c4-4ce6983efc66"/>
+		  <rest:header name="X-CSI-ServiceName" value="helloWorld"/>
+		  <rest:header name="Server" value="Jetty(9.2.z-SNAPSHOT)"/>
+		  <rest:header name="Cache-Control" value="no-cache,no-store"/>
+		  <rest:header name="X-FromAppId" value="MSO"/>
+		  <rest:header name="Date" value="Fri,08 Apr 2016 16:53:04 GMT"/>
+		  <rest:header name="X-CSI-ConversationId"
+					   value="ajscUser~CNG-CSI~bbd0e78f-d4e7-41be-b9ad-4a6767fa660a"/>
+		  <rest:header name="X-CSI-MessageId" value="6ccfeb13-56da-4836-bfbd-5a42dee60939"/>
+		  <rest:header name="X-AAI-TXID" value="mtsnjv9aaas23-20160408-16:53:04:629-73256"/>
+		  <rest:header name="Content-Type" value="application/xml"/>
+		  <rest:header name="Accept" value="application/xml"/>
+	   </rest:headers>
+	</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getGenericVnfByNameResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getGenericVnfByNameResponse.xml
new file mode 100644
index 0000000..a472996
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getGenericVnfByNameResponse.xml
@@ -0,0 +1,23 @@
+<generic-vnfs xmlns="http://org.openecomp.aai.inventory/v3">
+         <generic-vnf>
+            <vnf-id>2f1cc940-455f-4ee2-9411-a7899cd4f124</vnf-id>
+            <vnf-name>testVnfName123</vnf-name>
+            <vnf-type>mmsc-capacity</vnf-type>
+            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+            <equipment-role>vMMSC</equipment-role>
+            <orchestration-status>pending-create</orchestration-status>
+            <resource-version>testReVer123</resource-version>
+            <relationship-list>
+               <relationship>
+                  <related-to>nothing</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
+                  </relationship-data>
+               </relationship>
+            </relationship-list>
+            <l-interfaces/>
+            <lag-interfaces/>
+         </generic-vnf>
+      </generic-vnfs>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse.xml
new file mode 100644
index 0000000..8ba178c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse.xml
@@ -0,0 +1,90 @@
+<generic-vnfs xmlns="http://org.openecomp.aai.inventory/v3">
+         <generic-vnf>
+            <vnf-id>2f1cc940-455f-4ee2-9411-a7899cd4f124</vnf-id>
+            <vnf-name>testVnfName123</vnf-name>
+            <vnf-type>mmsc-capacity</vnf-type>
+            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+            <equipment-role>vMMSC</equipment-role>
+            <orchestration-status>pending-create</orchestration-status>
+            <relationship-list>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
+                  </relationship-data>
+               </relationship>
+            </relationship-list>
+            <l-interfaces/>
+            <lag-interfaces/>
+         </generic-vnf>
+         <generic-vnf>
+            <vnf-id>802767b3-18a6-4432-96db-25522786aee0</vnf-id>
+            <vnf-name>ZRDM1MMSC03</vnf-name>
+            <vnf-type>mmsc-capacity</vnf-type>
+            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+            <equipment-role>vMMSC</equipment-role>
+            <orchestration-status>pending-create</orchestration-status>
+            <relationship-list>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
+                  </relationship-data>
+               </relationship>
+            </relationship-list>
+            <l-interfaces/>
+            <lag-interfaces/>
+         </generic-vnf>
+      </generic-vnfs>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse_hasRelationships.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse_hasRelationships.xml
new file mode 100644
index 0000000..8ba178c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse_hasRelationships.xml
@@ -0,0 +1,90 @@
+<generic-vnfs xmlns="http://org.openecomp.aai.inventory/v3">
+         <generic-vnf>
+            <vnf-id>2f1cc940-455f-4ee2-9411-a7899cd4f124</vnf-id>
+            <vnf-name>testVnfName123</vnf-name>
+            <vnf-type>mmsc-capacity</vnf-type>
+            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+            <equipment-role>vMMSC</equipment-role>
+            <orchestration-status>pending-create</orchestration-status>
+            <relationship-list>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
+                  </relationship-data>
+               </relationship>
+            </relationship-list>
+            <l-interfaces/>
+            <lag-interfaces/>
+         </generic-vnf>
+         <generic-vnf>
+            <vnf-id>802767b3-18a6-4432-96db-25522786aee0</vnf-id>
+            <vnf-name>ZRDM1MMSC03</vnf-name>
+            <vnf-type>mmsc-capacity</vnf-type>
+            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+            <equipment-role>vMMSC</equipment-role>
+            <orchestration-status>pending-create</orchestration-status>
+            <relationship-list>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
+                  </relationship-data>
+               </relationship>
+            </relationship-list>
+            <l-interfaces/>
+            <lag-interfaces/>
+         </generic-vnf>
+      </generic-vnfs>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getSIUrlById.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getSIUrlById.xml
new file mode 100644
index 0000000..416689e
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getSIUrlById.xml
@@ -0,0 +1,6 @@
+    <search-results xmlns="http://org.openecomp.aai.inventory">
+         <result-data>
+            <resource-type>service-instance</resource-type>
+            <resource-link>https://aai-ext1.test.com:8443/aai/v7/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/123456789/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET</resource-link>
+         </result-data>
+      </search-results>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getServiceInstance.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getServiceInstance.xml
new file mode 100644
index 0000000..e377c704
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getServiceInstance.xml
@@ -0,0 +1,30 @@
+<service-instance>
+               <service-instance-id>MIS/1604/0026/SW_INTERNET</service-instance-id>
+               <resource-version>123456789</resource-version>
+               <relationship-list>
+                  <relationship>
+                     <related-to>cvlan-tag</related-to>
+                     <related-link>https://aai-ext1.test.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/port-groups/port-group/slcp1447vbc.ipag/cvlan-tags/cvlan-tag/2003/</related-link>
+                     <relationship-data>
+                        <relationship-key>cvlan-tag.cvlan-tag</relationship-key>
+                        <relationship-value>2003</relationship-value>
+                     </relationship-data>
+                     <relationship-data>
+                        <relationship-key>port-group.interface-id</relationship-key>
+                        <relationship-value>slcp1447vbc.ipag</relationship-value>
+                     </relationship-data>
+                     <relationship-data>
+                        <relationship-key>vce.vnf-id</relationship-key>
+                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
+                     </relationship-data>
+                  </relationship>
+                  <relationship>
+                     <related-to>vce</related-to>
+					 <related-link>https://aai-ext1.test.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/</related-link>
+                     <relationship-data>
+                        <relationship-key>vce.vnf-id</relationship-key>
+                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
+                     </relationship-data>
+                  </relationship>
+               </relationship-list>
+            </service-instance>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/CreateVnfInfraRequest.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/CreateVnfInfraRequest.json
new file mode 100644
index 0000000..2b9c287
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/CreateVnfInfraRequest.json
@@ -0,0 +1,38 @@
+{
+  "requestDetails": {
+      "modelInfo": {
+        "modelType": "vnf",
+         "modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+         "modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+         "modelName": "vSAMP12",
+         "modelVersion": "1.0",
+         "modelCustomizationName": "vSAMP12 1"
+      },
+      "cloudConfiguration": {
+          "lcpCloudRegionId": "mdt1",
+          "tenantId": "88a6ca3ee0394ade9403f075db23167e"
+      },
+      "requestInfo": {
+          "instanceName": "testVnfName123",
+          "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+          "source": "VID",
+          "suppressRollback": false
+      },
+      "relatedInstanceList": [
+         {
+            "relatedInstance": {
+               "instanceId": "{serviceInstanceId}",
+               "modelInfo": {
+                  "modelType": "service",
+                  "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+                  "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+                  "modelName": "{parent service model name}",
+                  "modelVersion": "1.0"
+               }
+            }
+         }
+      ],
+      "requestParameters": {
+      }
+  }
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/DeleteVnfInfraRequestCascadeDelete.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/DeleteVnfInfraRequestCascadeDelete.json
new file mode 100644
index 0000000..f90b967
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/DeleteVnfInfraRequestCascadeDelete.json
@@ -0,0 +1,39 @@
+{
+  "requestDetails": {
+      "modelInfo": {
+        "modelType": "vnf",
+         "modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+         "modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+         "modelName": "vSAMP12",
+         "modelVersion": "1.0",
+         "modelCustomizationName": "vSAMP12 1"
+      },
+      "cloudConfiguration": {
+          "lcpCloudRegionId": "mdt1",
+          "tenantId": "88a6ca3ee0394ade9403f075db23167e"
+      },
+      "requestInfo": {
+          "instanceName": "testVnfName123",
+          "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+          "source": "VID",
+          "suppressRollback": false
+      },
+      "relatedInstanceList": [
+         {
+            "relatedInstance": {
+               "instanceId": "{serviceInstanceId}",
+               "modelInfo": {
+                  "modelType": "service",
+                  "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+                  "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+                  "modelName": "{parent service model name}",
+                  "modelVersion": "1.0"
+               }
+            }
+         }
+      ],
+      "requestParameters": {
+      	"cascadeDelete": true
+      }
+  }
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/UpdateVfModule_VID_request.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/UpdateVfModule_VID_request.json
new file mode 100644
index 0000000..e3556e7
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/UpdateVfModule_VID_request.json
@@ -0,0 +1,51 @@
+{
+"requestDetails": {
+"modelInfo": {
+"modelType": "vfModule",
+"modelInvariantId": "introvert",
+"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelName": "STMTN5MMSC21-MMSC::model-1-0",
+"modelVersion": "1",
+"modelCustomizationId": "MODEL12345"
+},
+"cloudConfiguration": {
+"lcpCloudRegionId": "MDTWNJ21",
+"tenantId": "fba1bd1e195a404cacb9ce17a9b2b421"
+},
+"requestInfo": {
+"instanceName": "PCRF::module-0",
+"instanceId": "supercool",
+"source": "VID",
+"suppressRollback": true
+},
+"relatedInstanceList": [
+{
+"relatedInstance": {
+"instanceId": "123456",
+"modelInfo": {
+"modelType": "service",
+"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+"modelName": "SERVICE_MODEL_NAME",
+"modelVersion": "1.0"
+}
+}
+},
+{
+"relatedInstance": {
+"instanceId": "skask",
+"modelInfo": {
+"modelType": "vnf",
+"modelInvariantId": "skask",
+"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+"modelName": "vSAMP12",
+"modelVersion": "1.0",
+"modelCustomizationName": "vSAMP12 1"
+}
+}
+}
+],
+"requestParameters": {
+"userParams": {}
+}
+}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetworkResponse_400.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetworkResponse_400.xml
new file mode 100644
index 0000000..a5640b2
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetworkResponse_400.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<createNetworkError>
+<messageId>680bd458-5ec1-4a16-b77c-509022e53450</messageId><category>INTERNAL</category>
+<message>400 Bad Request: The server could not comply with the request since it is either malformed or otherwise incorrect., error.type=StackValidationFailed, error.message=Property error: : resources.network.properties: : Unknown Property network_ipam_refs_data</message>
+<rolledBack>true</rolledBack>
+</createNetworkError>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetworkResponse_500.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetworkResponse_500.xml
new file mode 100644
index 0000000..c67e980
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetworkResponse_500.xml
@@ -0,0 +1,78 @@
+<html>
+	<head>
+		<title>JBoss Web/7.2.2.Final-redhat-1 - JBWEB000064: Error report
+		</title>
+		<style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;}
+				H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;}
+				H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;}
+				BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;}
+				B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;}
+				P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A
+				{color : black;}A.name {color : black;}HR {color : #525D76;} -->
+		</style>
+	</head>
+	<body>
+		<h1>JBWEB000065: HTTP Status 500 - java.lang.NullPointerException</h1>
+		<HR size="1" noshade="noshade">
+			<p>
+				<b>JBWEB000309: type</b>
+				JBWEB000066: Exception report
+			</p>
+			<p>
+				<b>JBWEB000068: message</b>
+				<u>java.lang.NullPointerException</u>
+			</p>
+			<p>
+				<b>JBWEB000069: description</b>
+				<u>JBWEB000145: The server encountered an internal error that
+					prevented it from fulfilling this request.</u>
+			</p>
+			<p>
+				<b>JBWEB000070: exception</b>
+				<pre>org.jboss.resteasy.spi.UnhandledException:
+					java.lang.NullPointerException
+					org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:365)
+					org.jboss.resteasy.core.SynchronousDispatcher.handleException(SynchronousDispatcher.java:233)
+					org.jboss.resteasy.core.SynchronousDispatcher.handleInvokerException(SynchronousDispatcher.java:209)
+					org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:557)
+					org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:524)
+					org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:126)
+					org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
+					org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
+					org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
+					javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
+					org.openecomp.mso.logger.LogFilter.doFilter(LogFilter.java:35)
+				</pre>
+			</p>
+			<p>
+				<b>JBWEB000071: root cause</b>
+				<pre>java.lang.NullPointerException
+					org.openecomp.mso.adapters.network.NetworkAdapterRest$CreateNetworkVolumesTask.run(NetworkAdapterRest.java:128)
+					org.openecomp.mso.adapters.network.NetworkAdapterRest.createNetwork(NetworkAdapterRest.java:64)
+					sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+					sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
+					sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+					java.lang.reflect.Method.invoke(Method.java:606)
+					org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:167)
+					org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:269)
+					org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:227)
+					org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:216)
+					org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:542)
+					org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:524)
+					org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:126)
+					org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
+					org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
+					org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
+					javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
+					org.openecomp.mso.logger.LogFilter.doFilter(LogFilter.java:35)
+				</pre>
+			</p>
+			<p>
+				<b>JBWEB000072: note</b>
+				<u>JBWEB000073: The full stack trace of the root cause is available
+					in the JBoss Web/7.2.2.Final-redhat-1 logs.</u>
+			</p>
+			<HR size="1" noshade="noshade">
+				<h3>JBoss Web/7.2.2.Final-redhat-1</h3>
+	</body>
+</html>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetworkResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetworkResponse_Success.xml
new file mode 100644
index 0000000..7a00744
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetworkResponse_Success.xml
@@ -0,0 +1,24 @@
+<ns2:updateNetworkContrailResponse xmlns:ns2="http://org.openecomp.mso/network"
+                                    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+   <networkId>MNS-25180-L-01-dmz_direct_net_1/2c88a3a9-69b9-43a7-ada6-1aca577c3641</networkId>
+   <neutronNetworkId>c4f4e878-cde0-4b15-ae9a-bda857759cea</neutronNetworkId>
+   <subnetIdMap>
+      <entry>
+         <key>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</key>
+         <value>bd8e87c6-f4e2-41b8-b0bc-9596aa00cd73</value>
+      </entry>
+   </subnetIdMap>
+   <rollback>
+      <cloudId>RDM2WAGPLCP</cloudId>
+      <msoRequest>
+         <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+         <serviceInstanceId/>
+      </msoRequest>
+      <networkCreated>true</networkCreated>
+      <networkId>MNS-25180-L-01-dmz_direct_net_1/2c88a3a9-69b9-43a7-ada6-1aca577c3641</networkId>
+      <networkType>CONTRAIL_EXTERNAL</networkType>
+      <networkUpdated>false</networkUpdated>
+      <neutronNetworkId>c4f4e878-cde0-4b15-ae9a-bda857759cea</neutronNetworkId>
+      <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+   </rollback>
+</ns2:updateNetworkContrailResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryInstance_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryInstance_Success.xml
new file mode 100644
index 0000000..ca5145c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryInstance_Success.xml
@@ -0,0 +1,4 @@
+<result-data>
+  <resource-type>service-instance</resource-type>
+  <resource-link>https://aai-conexus-e2e.test.com:8443/aai/v8/business/customers/customer/8310000058863/service-subscriptions/service-subscription/vMOG/service-instances/service-instance/f70e927b-6087-4974-9ef8-c5e4d5847ca4</resource-link>
+</result-data>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_NoPayload_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_NoPayload_Success.xml
new file mode 100644
index 0000000..e06d27e
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_NoPayload_Success.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-role>dmz_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <network-role-instance>0</network-role-instance>
+         <orchestration-status>pending-create</orchestration-status>
+   		 <physical-network-name>networkName</physical-network-name>
+   		 <is-provider-network>false</is-provider-network>
+   		 <is-shared-network>true</is-shared-network>
+   	 	 <is-external-network>false</is-external-network>         
+         <subnets>
+            <subnet>
+               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+               <gateway-address>107.239.52.1</gateway-address>
+               <network-start-address>107.239.52.0</network-start-address>
+               <cidr-mask>24</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>pending-create</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+   	  		   <subnet-name>subnetName</subnet-name>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+	  	 <segmentation-assignments>
+	  		<segmentation-id>413</segmentation-id>
+	  		<resource-version>4132176</resource-version>
+	  	 </segmentation-assignments>         
+         <relationship-list>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>85f015d0-2e32-4c30-96d2-87a1a27f8017</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>c980a6ef-3b88-49f0-9751-dbad8608d0a6</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+				<related-to>network-policy</related-to>
+				<related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg</related-link>
+				<relationship-data>
+					<relationship-key>network-policy.network-policy-id</relationship-key>
+					<relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0cg</relationship-value>
+				</relationship-data>
+			</relationship>
+			<relationship>
+			   <related-to>route-table-reference</related-to>
+			   <relationship-data>
+				  <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+				  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+			   </relationship-data>
+			</relationship>			
+         </relationship-list>
+</l3-network>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml
new file mode 100644
index 0000000..24ee1df
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml
@@ -0,0 +1,95 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
+      <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:502-132671"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-role>dmz_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <network-role-instance>0</network-role-instance>
+         <orchestration-status>pending-create</orchestration-status>
+   		 <physical-network-name>networkName</physical-network-name>
+   		 <is-provider-network>false</is-provider-network>
+   		 <is-shared-network>true</is-shared-network>
+   		 <is-external-network>false</is-external-network>         
+         <subnets>
+            <subnet>
+               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+               <gateway-address>107.239.52.1</gateway-address>
+               <network-start-address>107.239.52.0</network-start-address>
+               <cidr-mask>24</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>pending-create</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+   	  		   <subnet-name>subnetName</subnet-name>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+	  	 <segmentation-assignments>
+	  		<segmentation-id>413</segmentation-id>
+	  		<resource-version>4132176</resource-version>
+	  	 </segmentation-assignments>         
+         <relationship-list>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>85f015d0-2e32-4c30-96d2-87a1a27f8017</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>c980a6ef-3b88-49f0-9751-dbad8608d0a6</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+				<related-to>network-policy</related-to>
+				<related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg</related-link>
+				<relationship-data>
+					<relationship-key>network-policy.network-policy-id</relationship-key>
+					<relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0cg</relationship-value>
+				</relationship-data>
+			</relationship>
+			<relationship>
+			   <related-to>route-table-reference</related-to>
+	  		   <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/route-table-references/route-table-reference/refFQDN1</related-link>			   
+			   <relationship-data>
+				  <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+				  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+			   </relationship-data>
+			</relationship>
+			<relationship>
+			   <related-to>route-table-reference</related-to>
+	  		   <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/route-table-references/route-table-reference/refFQDN2</related-link>			   
+			   <relationship-data>
+				  <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+				  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+			   </relationship-data>
+			</relationship>		
+         </relationship-list>
+      </l3-network>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml
new file mode 100644
index 0000000..686ac16
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml
@@ -0,0 +1,21 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <network-policy xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-policy-id>9a7b327d9-287aa00-82c4b0-105757</network-policy-id>
+         <network-policy-fqdn>GN_EVPN_Test</network-policy-fqdn>
+         <heat-stack-id>13979:105757</heat-stack-id>
+         <resource-version>13979:105757</resource-version>
+      </network-policy>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml
new file mode 100644
index 0000000..b01e469
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml
@@ -0,0 +1,20 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <route-table-references xmlns="http://org.openecomp.aai.inventory/v8">
+         <route-table-reference-id>5938baec-03ca-2bd5-a3f1-d54x123e253a</route-table-reference-id>
+         <route-table-reference-fqdn>refFQDN1</route-table-reference-fqdn>
+         <resource-version>12345</resource-version>
+      </route-table-references>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml
new file mode 100644
index 0000000..a19f941
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml
@@ -0,0 +1,20 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <route-table-references xmlns="http://org.openecomp.aai.inventory/v8">
+         <route-table-reference-id>5938baec-03ca-2bd5-a3f1-d54x123e253a</route-table-reference-id>
+         <route-table-reference-fqdn>refFQDN2</route-table-reference-fqdn>
+         <resource-version>12345</resource-version>
+      </route-table-references>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml
new file mode 100644
index 0000000..c35faef
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml
@@ -0,0 +1,46 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <vpn-binding xmlns="http://org.openecomp.aai.inventory/v8">
+         <vpn-id>9a7b327d9-287aa00-82c4b0-105757</vpn-id>
+         <vpn-name>GN_EVPN_Test</vpn-name>
+         <global-route-target>13979:105757</global-route-target>
+         <relationship-list>
+            <relationship>
+               <related-to>l3-network</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/l3-networks/l3-network/689ec39e-c5fc-4462-8db2-4f760763ad28/</related-link>
+               <relationship-data>
+                  <relationship-key>l3-network.network-id</relationship-key>
+                  <relationship-value>689ec39e-c5fc-4462-8db2-4f760763ad28</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>l3-network</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/l3-networks/l3-network/1a49396b-19b3-40a4-8792-aa2fbd0f0704/</related-link>
+               <relationship-data>
+                  <relationship-key>l3-network.network-id</relationship-key>
+                  <relationship-value>1a49396b-19b3-40a4-8792-aa2fbd0f0704</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>l3-network</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/l3-networks/l3-network/774f3329-3c83-4771-86c7-9e6207cd50fd/</related-link>
+               <relationship-data>
+                  <relationship-key>l3-network.network-id</relationship-key>
+                  <relationship-value>774f3329-3c83-4771-86c7-9e6207cd50fd</relationship-value>
+               </relationship-data>
+            </relationship>
+         </relationship-list>
+      </vpn-binding>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_updateContrail_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_updateContrail_AAIResponse_Success.xml
new file mode 100644
index 0000000..eedbda9
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_updateContrail_AAIResponse_Success.xml
@@ -0,0 +1,11 @@
+<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>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml
new file mode 100644
index 0000000..b03e95c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<volume-group xmlns="http://org.openecomp.aai.inventory/v8">
+	<volume-group-id>78987</volume-group-id>
+	<volume-group-name>MSOTESTVOL102a-vSAMP12_base_vol_module-0</volume-group-name>
+	<heat-stack-id/>
+	<vnf-type>Test/vSAMP12</vnf-type>
+	<orchestration-status>Pending</orchestration-status>
+	<resource-version>0000020</resource-version>
+	<relationship-list>
+		<relationship>
+			<related-to>tenant</related-to>
+			<related-link>https://aai-ext1.test.com:8443/aai/v7/cloud-infrastructure/cloud-regions/cloud-region/att-aic/mdt1/tenants/tenant/fba1bd1e195a404cacb9ce17a9b2b421/</related-link>
+			<relationship-data>
+				<relationship-key>tenant.tenant-id</relationship-key>
+				<relationship-value>fba1bd1e195a404cacb9ce17a9b2b421</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-owner</relationship-key>
+				<relationship-value>att-aic</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-region-id</relationship-key>
+				<relationship-value>mdt1</relationship-value>
+			</relationship-data>
+			<related-to-property>
+				<property-key>tenant.tenant-name</property-key>
+				<property-value>ECOMP_MDT1</property-value>
+			</related-to-property>
+		</relationship>
+		<relationship>
+			<related-to>vf-module</related-to>
+			<related-link>http://localhost:28090/aai/v8/network/generic-vnfs/generic-vnf/9e48f6ea-f786-46de-800a-d480e5ccc846/vf-modules/vf-module/6a1dc898-b590-47b9-bbf0-34424a7a2ec3/</related-link>
+			<relationship-data>
+				<relationship-key>generic-vnf.vnf-id</relationship-key>
+				<relationship-value>9e48f6ea-f786-46de-800a-d480e5ccc846</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>vf-module.vf-module-id</relationship-key>
+				<relationship-value>6a1dc898-b590-47b9-bbf0-34424a7a2ec3</relationship-value>
+			</relationship-data>
+		</relationship>
+	</relationship-list>
+</volume-group>
+      
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/updateVfModuleVolume_VID_request.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/updateVfModuleVolume_VID_request.json
new file mode 100644
index 0000000..8ab460e
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/updateVfModuleVolume_VID_request.json
@@ -0,0 +1,64 @@
+{
+	"requestDetails": {
+		"modelInfo": {
+			"modelType": "volumeGroup",
+			"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelName": "vSAMP12::base::module-0",
+			"modelVersion": "1"
+		},
+		"cloudConfiguration": {
+			"lcpCloudRegionId": "mdt1",
+			"tenantId": "fba1bd1e195a404cacb9ce17a9b2b421"
+		},
+		"requestInfo": {
+			"instanceName": "MSOTESTVOL101a-vSAMP12_base_vol_module-0",
+			"source": "VID",
+			"suppressRollback": false
+		},
+		"relatedInstanceList": [
+			{
+				"relatedInstance": {
+					"instanceId": "{service-instance-id}",
+					"modelInfo": {
+						"modelType": "service",
+						"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelName": "Test",
+						"modelVersion": "2.0"
+					}
+				}
+			}, {
+				"relatedInstance": {
+					"instanceId": "{vnf-instance-id}",
+					"modelInfo": {
+						"modelType": "vnf",
+						"modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelName": "Test/vSAMP12",
+						"modelVersion": "1",
+						"modelCustomizationName": "vSAMP12"
+					}
+				}
+			}
+		],
+		"requestParameters": {
+			"serviceId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+			"userParams": [
+				{"name": "vnfName", "value": "STMTN5MMSC20" },
+				{"name": "vnfName2", "value": "US1117MTSNJVBR0246" },
+				{"name": "vnfNmInformation", "value": "" },
+				{"name": "vnfType", "value": "pcrf-capacity" },
+				{"name": "vnfId", "value": "skask" },
+				{"name": "vnfStackId", "value": "slowburn" },
+				{"name": "vnfStatus", "value": "created" },
+				{"name": "aicCloudRegion", "value": "MDTWNJ21" },
+				{"name": "availabilityZone", "value": "slcp3-esx-az01" },
+				{"name": "oamNetworkName", "value": "VLAN-OAM-1323" },
+				{"name": "vmName", "value": "slcp34246vbc246ceb" },
+				{"name": "ipagNetworkId", "value": "970cd2b9-7f09-4a12-af47-182ea38ba1f0" },
+				{"name": "vpeNetworkId", "value": "545cc2c3-1930-4100-b534-5d82d0e12bb6" }
+			]
+		}
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/updateVfModuleVolume_VID_request_2.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/updateVfModuleVolume_VID_request_2.json
new file mode 100644
index 0000000..963e2dd
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/updateVfModuleVolume_VID_request_2.json
@@ -0,0 +1,64 @@
+{
+	"requestDetails": {
+		"modelInfo": {
+			"modelType": "volumeGroup",
+			"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelName": "vSAMP12::base::module-0",
+			"modelVersion": "1"
+		},
+		"cloudConfiguration": {
+			"lcpCloudRegionId": "mdt1",
+			"tenantId": "fba1bd1e195a404cacb9ce17a9b2b421"
+		},
+		"requestInfo": {
+			"instanceName": "MSOTESTVOL101a-vSAMP12_base_vol_module-0",
+			"source": "VID",
+			"suppressRollback": false
+		},
+		"relatedInstanceList": [
+			{
+				"relatedInstance": {
+					"instanceId": "{service-instance-id}",
+					"modelInfo": {
+						"modelType": "service",
+						"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff-x",
+						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelName": "Test",
+						"modelVersion": "2.0"
+					}
+				}
+			}, {
+				"relatedInstance": {
+					"instanceId": "{vnf-instance-id}",
+					"modelInfo": {
+						"modelType": "vnf",
+						"modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelName": "Test/vSAMP12",
+						"modelVersion": "1",
+						"modelCustomizationName": "vSAMP12"
+					}
+				}
+			}
+		],
+		"requestParameters": {
+			"serviceId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+			"userParams": [
+				{"name": "vnfName", "value": "STMTN5MMSC20" },
+				{"name": "vnfName2", "value": "US1117MTSNJVBR0246" },
+				{"name": "vnfNmInformation", "value": "" },
+				{"name": "vnfType", "value": "pcrf-capacity" },
+				{"name": "vnfId", "value": "skask" },
+				{"name": "vnfStackId", "value": "slowburn" },
+				{"name": "vnfStatus", "value": "created" },
+				{"name": "aicCloudRegion", "value": "MDTWNJ21" },
+				{"name": "availabilityZone", "value": "slcp3-esx-az01" },
+				{"name": "oamNetworkName", "value": "VLAN-OAM-1323" },
+				{"name": "vmName", "value": "slcp34246vbc246ceb" },
+				{"name": "ipagNetworkId", "value": "970cd2b9-7f09-4a12-af47-182ea38ba1f0" },
+				{"name": "vpeNetworkId", "value": "545cc2c3-1930-4100-b534-5d82d0e12bb6" }
+			]
+		}
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/vf_module_aai_response.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/vf_module_aai_response.xml
new file mode 100644
index 0000000..aa2a85c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/vf_module_aai_response.xml
@@ -0,0 +1,29 @@
+<vf-module xmlns="http://org.openecomp.aai.inventory/v8">
+   <vf-module-id>6a1dc898-b590-47b9-bbf0-34424a7a2ec3</vf-module-id>
+   <vf-module-name>MSOST10606-vSAMP12_MTN6_base_module-0</vf-module-name>
+   <heat-stack-id>MSOST10606-vSAMP12_MTN6_base_module-0/81b01583-690c-4ec3-9c58-0eafa7a90be7</heat-stack-id>
+   <orchestration-status>active</orchestration-status>
+   <is-base-vf-module>true</is-base-vf-module>
+   <resource-version>1475077639</resource-version>
+   <persona-model-id>ff5256d2-5a33-55df-13ab-12abad84e7ff</persona-model-id>
+   <persona-model-version>1.0</persona-model-version>
+   <relationship-list>
+      <relationship>
+         <related-to>volume-group</related-to>
+         <related-link>https://aai-ext1.test.com:8443/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/mtn6/volume-groups/volume-group/064bd1c6-e377-4009-a744-e958eec6e727/</related-link>
+         <relationship-data>
+            <relationship-key>cloud-region.cloud-owner</relationship-key>
+            <relationship-value>att-aic</relationship-value>
+         </relationship-data>
+         <relationship-data>
+            <relationship-key>cloud-region.cloud-region-id</relationship-key>
+            <relationship-value>mtn6</relationship-value>
+         </relationship-data>
+         <relationship-data>
+            <relationship-key>volume-group.volume-group-id</relationship-key>
+            <relationship-value>064bd1c6-e377-4009-a744-e958eec6e727</relationship-value>
+         </relationship-data>
+      </relationship>
+   </relationship-list>
+
+</vf-module>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/AddNetworkPolicy_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/AddNetworkPolicy_AAIResponse_Success.xml
new file mode 100644
index 0000000..0ec1e30
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/AddNetworkPolicy_AAIResponse_Success.xml
@@ -0,0 +1,21 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <network-policy xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-policy-id>9a7b327d9-287aa00-82c4b0-105757</network-policy-id>
+         <network-policy-fqdn>fqdn123</network-policy-fqdn>
+         <heat-stack-id>slowburn</heat-stack-id>
+         <resource-version>145878989</resource-version>
+      </network-policy>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/GenericVnf.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/GenericVnf.xml
new file mode 100644
index 0000000..b2560bc
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/GenericVnf.xml
@@ -0,0 +1,38 @@
+<generic-vnf xmlns="http://org.openecomp.aai.inventory/v7">
+	<vnf-id>skask</vnf-id>
+	<vnf-name>STMTN5MMSC20</vnf-name>
+	<vnf-type>pcrf-capacity</vnf-type>
+	<service-id>SDN-MOBILITY</service-id>
+	<equipment-role>vPCRF</equipment-role>
+	<orchestration-status>pending-create</orchestration-status>
+	<in-maint>false</in-maint>
+	<is-closed-loop-disabled>false</is-closed-loop-disabled>
+	<persona-model-id>introvert</persona-model-id>
+	<persona-model-version>2.0</persona-model-version>
+	<resource-version>0000020</resource-version>
+	<vf-modules>
+		<vf-module>
+			<vf-module-id>lukewarm</vf-module-id>
+			<vf-module-name>PCRF::module-0-0</vf-module-name>
+			<persona-model-id>introvert</persona-model-id>
+			<persona-model-version>2.0</persona-model-version>
+			<is-base-vf-module>true</is-base-vf-module>
+			<heat-stack-id>fastburn</heat-stack-id>
+			<orchestration-status>pending-create</orchestration-status>
+			<resource-version>0000074</resource-version>
+		</vf-module>
+		<vf-module>
+			<vf-module-id>supercool</vf-module-id>
+			<vf-module-name>PCRF::module-1-0</vf-module-name>
+			<persona-model-id>extrovert</persona-model-id>
+			<persona-model-version>2.0</persona-model-version>
+			<is-base-vf-module>false</is-base-vf-module>
+			<heat-stack-id>slowburn</heat-stack-id>
+			<orchestration-status>pending-create</orchestration-status>
+			<resource-version>0000075</resource-version>
+		</vf-module>
+	</vf-modules>
+	<relationship-list/>
+	<l-interfaces/>
+	<lag-interfaces/>
+</generic-vnf>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/QueryNetworkPolicy_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/QueryNetworkPolicy_AAIResponse_Success.xml
new file mode 100644
index 0000000..d7bbb15
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/QueryNetworkPolicy_AAIResponse_Success.xml
@@ -0,0 +1,21 @@
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <network-policy xmlns="http://org.openecomp.aai.inventory/v8">
+         <network-policy-id>9a7b327d9-287aa00-82c4b0-105757</network-policy-id>
+         <network-policy-fqdn>GN_EVPN_Test</network-policy-fqdn>
+         <heat-stack-id>195159195</heat-stack-id>
+         <resource-version>14567890</resource-version>
+      </network-policy>
+   </rest:payload>
+</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/StandardSDNCSynchResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/StandardSDNCSynchResponse.xml
new file mode 100644
index 0000000..919ff2c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/StandardSDNCSynchResponse.xml
@@ -0,0 +1,5 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <SDNCAdapterResponse xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1"/>
+  </soap:Body>
+</soap:Envelope>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-new.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-new.xml
new file mode 100644
index 0000000..a71441e
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-new.xml
@@ -0,0 +1,9 @@
+<vf-module xmlns="http://org.openecomp.aai.inventory/v7">
+	<vf-module-id>b37d96db-7d2c-47ce-bf61-a6c7b82fe161</vf-module-id>
+	<vf-module-name>PCRF::module-0-2</vf-module-name>
+	<persona-model-id>00000000-0000-0000-0000-000000000000</persona-model-id>
+	<persona-model-version>1.0</persona-model-version>
+	<is-base-vf-module>false</is-base-vf-module>
+	<orchestration-status>pending-create</orchestration-status>
+	<resource-version>330-90</resource-version>
+</vf-module>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-supercool.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-supercool.xml
new file mode 100644
index 0000000..1066b17
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-supercool.xml
@@ -0,0 +1,27 @@
+<vf-module xmlns="http://org.openecomp.aai.inventory/v7">
+	<vf-module-id>supercool</vf-module-id>
+	<vf-module-name>PCRF::module-2</vf-module-name>
+	<heat-stack-id>fastburn</heat-stack-id>
+	<orchestration-status>pending-create</orchestration-status>
+	<is-base-vf-module>false</is-base-vf-module>
+	<resource-version>330-89</resource-version>
+	<persona-model-id>introvert</persona-model-id>
+	<persona-model-version>2.0</persona-model-version>
+	<relationship-list>
+		<relationship>
+			<related-to>volume-group</related-to>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-owner</relationship-key>
+				<relationship-value>att-aic</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-region-id</relationship-key>
+				<relationship-value>pdk1</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>volume-group.volume-group-id</relationship-key>
+				<relationship-value>78987</relationship-value>
+			</relationship-data>
+		</relationship>
+	</relationship-list>
+</vf-module>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VolumeGroup.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VolumeGroup.xml
new file mode 100644
index 0000000..df84706
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VolumeGroup.xml
@@ -0,0 +1,25 @@
+  <volume-group xmlns="http://org.openecomp.aai.inventory/v7">
+         <volume-group-id>78987</volume-group-id>
+         <volume-group-name>Volume_2</volume-group-name>
+         <heat-stack-id>slowburn</heat-stack-id>
+         <vnf-type>pcrf-capacity</vnf-type>
+         <orchestration-status>Active</orchestration-status>
+         <resource-version>0000020</resource-version>
+         <relationship-list>
+            <relationship>
+               <related-to>tenant</related-to>
+               <relationship-data>
+                  <relationship-key>cloud-region.cloud-owner</relationship-key>
+                  <relationship-value>att-aic</relationship-value>
+               </relationship-data>
+               <relationship-data>
+                  <relationship-key>cloud-region.cloud-region-id</relationship-key>
+                  <relationship-value>MDTWNJ21</relationship-value>
+               </relationship-data>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>fba1bd1e195a404cacb9ce17a9b2b421</relationship-value>
+               </relationship-data>
+            </relationship>
+         </relationship-list>
+      </volume-group>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/deleteNetworkResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/deleteNetworkResponse_Success.xml
new file mode 100644
index 0000000..902c083
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/deleteNetworkResponse_Success.xml
@@ -0,0 +1,3 @@
+<ns2:deleteNetworkResponse xmlns:ns2="http://org.openecomp.mso/network">
+	<networkDeleted>true</networkDeleted>
+</ns2:deleteNetworkResponse>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/camunda.cfg.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/camunda.cfg.xml
new file mode 100644
index 0000000..c94e32e
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/camunda.cfg.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<beans xmlns="http://www.springframework.org/schema/beans" 
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+  <bean id="processEngineConfiguration" class="org.camunda.bpm.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
+
+    <property name="jdbcUrl" value="jdbc:h2:mem:camunda;DB_CLOSE_DELAY=1000" />
+    <property name="jdbcDriver" value="org.h2.Driver" />
+    <property name="jdbcUsername" value="sa" />
+    <property name="jdbcPassword" value="" />
+
+    <!-- Database configurations -->
+    <property name="databaseSchemaUpdate" value="true" />
+
+    <!-- job executor configurations -->
+    <property name="jobExecutorActivate" value="true" />
+
+    <property name="history" value="full" />
+
+    <property name="customPostBPMNParseListeners">
+      <list>
+        <bean class="org.camunda.bpm.engine.impl.bpmn.parser.FoxFailedJobParseListener" />
+      </list>
+    </property>
+
+    <property name="failedJobCommandFactory" ref="foxFailedJobCommandFactory" />
+
+    <!--<property name="idGenerator" ref="uuidGenerator" />-->
+
+    <!-- engine plugins -->
+    <property name="processEnginePlugins">
+      <list>
+        <ref bean="connectProcessEnginePlugin" />
+        <ref bean="spinProcessEnginePlugin" />
+        <ref bean="loggingPlugin" />
+        <ref bean="workflowExceptionPlugin" />
+        <ref bean="workbenchPlugin" />
+	  </list>
+    </property>
+  </bean>
+
+  <bean id="workbenchPlugin" class="org.camunda.bpm.debugger.server.EmbeddableDebugWebsocketBootstrap">
+        	<property name="httpPort" value="28088"/>
+  </bean>          
+
+  <bean id="loggingPlugin" class="org.openecomp.mso.bpmn.core.plugins.LoggingAndURNMappingPlugin" />
+  
+  <!-- Needed until all subflows generate MSOWorkflowException events --> 
+  <bean id="workflowExceptionPlugin" class="org.openecomp.mso.bpmn.core.plugins.WorkflowExceptionPlugin" />
+
+  <bean id="foxFailedJobCommandFactory" class="org.camunda.bpm.engine.impl.jobexecutor.FoxFailedJobCommandFactory" />
+
+  <!--<bean id="uuidGenerator" class="org.camunda.bpm.engine.impl.persistence.StrongUuidGenerator" />-->
+
+  <!-- engine plugin beans -->
+  <bean id="connectProcessEnginePlugin" class="org.camunda.connect.plugin.impl.ConnectProcessEnginePlugin" />
+  <bean id="spinProcessEnginePlugin" class="org.camunda.spin.plugin.impl.SpinProcessEnginePlugin" />
+
+</beans>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/logging.properties b/bpmn/MSOInfrastructureBPMN/src/test/resources/logging.properties
new file mode 100644
index 0000000..4941c55
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/logging.properties
@@ -0,0 +1,2 @@
+#register SLF4JBridgeHandler as handler for the j.u.l. root logger
+handlers = org.slf4j.bridge.SLF4JBridgeHandler
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/mso.bpmn.properties b/bpmn/MSOInfrastructureBPMN/src/test/resources/mso.bpmn.properties
new file mode 100644
index 0000000..f800d00
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/mso.bpmn.properties
@@ -0,0 +1,3 @@
+# Default BPMN properties for unit tests
+
+URNMapping.FileSystemLoading.Enabled=true
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/mso.bpmn.urn.properties b/bpmn/MSOInfrastructureBPMN/src/test/resources/mso.bpmn.urn.properties
new file mode 100644
index 0000000..4ec6617
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/mso.bpmn.urn.properties
@@ -0,0 +1,85 @@
+# Default URN Mappings for unit tests
+
+mso.rollback=true
+
+canopi.auth=757A94191D685FD2092AC1490730A4FC
+csi.aots.addincidentmanagement.endpoint=http://localhost:28090/AddIncidentManagementTicketRequest
+csi.networkstatus.endpoint=http://localhost:28090/SendManagedNetworkStatusNotification
+mso.csi.pwd=4EA237303511EFBBC37F17A351562131
+mso.csi.usrname=mso
+mso.msoKey=07a7159d3bf51a0e53be7a8f89699be7
+
+mso.adapters.completemsoprocess.endpoint=http://localhost:28090/CompleteMsoProcess
+
+mso.adapters.db.endpoint=http://localhost:28090/dbadapters/RequestsDbAdapter
+mso.adapters.db.auth=757A94191D685FD2092AC1490730A4FC
+
+mso.adapters.network.endpoint=http://localhost:28090/networks/NetworkAdapter
+mso.adapters.network.rest.endpoint=http://localhost:28090/networks/NetworkAdapter
+
+mso.adapters.po.auth=757A94191D685FD2092AC1490730A4FC
+mso.adapters.po.password=3141634BF7E070AA289CF2892C986C0B
+mso.po.timeout=PT60S
+
+aai.auth=757A94191D685FD2092AC1490730A4FC
+
+mso.adapters.sdnc.endpoint=http://localhost:28090/SDNCAdapter
+mso.adapters.sdnc.rest.endpoint=http://localhost:28090/SDNCAdapter/v1/sdnc
+mso.adapters.sdnc.timeout=PT60S
+mso.sdnc.firewall.yang.model=http://com/openecomp/svc/mis/firewall-lite-gui
+mso.sdnc.firewall.yang.model.version=2015-05-15
+mso.sdnc.password=3141634BF7E070AA289CF2892C986C0B
+mso.sdnc.timeout.firewall.minutes=20
+mso.sdnc.timeout=PT10S
+mso.sdnc.timeout.ucpe.async.hours=120
+mso.sdnc.timeout.ucpe.async.minutes=5
+mso.workflow.message.endpoint=http://localhost:28080/mso/WorkflowMesssage
+mso.workflow.sdncadapter.callback=http://localhost:28080/mso/SDNCAdapterCallbackService
+
+mso.catalog.db.endpoint=http://localhost:28090/
+
+mso.adapters.tenant.endpoint=http://localhost:28090/tenantAdapterMock
+mso.adapters.vnf-async.endpoint=http://localhost:28090/vnfs/VnfAdapterAsync
+mso.adapters.vnf.endpoint=http://localhost:28090/vnfs/VnfAdapter
+mso.adapters.vnf.rest.endpoint=http://localhost:28090/vnfs/v1/vnfs
+mso.workflow.vnfadapter.create.callback=http://localhost:28080/mso/vnfAdapterNotify
+mso.workflow.vnfadapter.delete.callback=http://localhost:28080/mso/vnfAdapterNotify
+mso.workflow.vnfadapter.query.callback=http://localhost:28080/mso/services/VNFAdapterQuerCallbackV1
+mso.workflow.vnfadapter.rollback.callback=http://localhost:28080/mso/vnfAdapterNotify
+mso.workflow.createvce.delay.seconds=1
+mso.infra.customer.id=testCustIdInfra
+
+aai.endpoint=http://localhost:28090
+
+# AAI version mappings
+
+# Example to override default version for a resource:
+#mso.workflow.default.aai.vce.version=6
+#mso.workflow.default.aai.v6.vce.uri=/aai/v6/network/vces/vce
+
+mso.workflow.global.default.aai.version=8
+mso.workflow.default.aai.cloud-region.version=9
+mso.workflow.default.aai.generic-vnf.version=9
+
+mso.workflow.default.aai.v9.cloud-region.uri=/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/att-aic
+mso.workflow.default.aai.v8.customer.uri=/aai/v8/business/customers/customer
+mso.workflow.default.aai.v8.generic-query.uri=/aai/v8/search/generic-query
+mso.workflow.default.aai.v9.generic-vnf.uri=/aai/v9/network/generic-vnfs/generic-vnf
+mso.workflow.default.aai.v8.l3-network.uri=/aai/v8/network/l3-networks/l3-network
+mso.workflow.default.aai.v8.network-policy.uri=/aai/v8/network/network-policies/network-policy
+mso.workflow.default.aai.v8.nodes-query.uri=/aai/v8/search/nodes-query
+mso.workflow.default.aai.v8.route-table-reference.uri=/aai/v8/network/route-table-references/route-table-reference
+mso.workflow.default.aai.v8.tenant.uri=/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant
+mso.workflow.default.aai.v8.vce.uri=/aai/v8/network/vces/vce
+mso.workflow.default.aai.v8.vpn-binding.uri=/aai/v8/network/vpn-bindings/vpn-binding
+
+
+log.debug.CompleteMsoProcess=true
+log.debug.CreateNetworkInstanceInfra=true
+log.debug.CreateServiceInstanceInfra=true
+log.debug.DeleteNetworkInstanceInfra=true
+log.debug.FalloutHandler=true
+log.debug.GenericGetService=true
+log.debug.sdncAdapter=true
+log.debug.UpdateNetworkInstanceInfra=true
+log.debug.VnfAdapterRestV1=true
\ No newline at end of file
