diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateNetworkInstanceTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateNetworkInstanceTest.groovy
new file mode 100644
index 0000000..13e107e
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateNetworkInstanceTest.groovy
@@ -0,0 +1,360 @@
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+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.mockito.MockitoAnnotations
+import org.openecomp.mso.bpmn.common.scripts.MsoUtils
+import org.openecomp.mso.bpmn.core.WorkflowException
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*
+
+import com.github.tomakehurst.wiremock.junit.WireMockRule
+
+class CreateNetworkInstanceTest  {
+	
+	@Rule
+	public WireMockRule wireMockRule = new WireMockRule(8090);
+	
+		String Prefix="CRENI_"
+		def utils = new MsoUtils()
+	
+		String createDBRequestError =
+"""<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 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>CREATE</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>5300</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>CREATE</action>
+      <source>VID</source>
+   </request-info>
+   <aetgt:status-message>Network has been created successfully.</aetgt:status-message>
+   <aetgt:mso-bpel-name>BPMN Network action: CREATE</aetgt:mso-bpel-name>
+</aetgt:MsoCompletionRequest>"""
+
+
+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"
+			   }
+            ]
+		  }
+  }}"""	
+
+	    @Before
+		public void init()
+		{
+			MockitoAnnotations.initMocks(this)
+			
+		}
+
+		public void initializeVariables(Execution mockExecution) {
+			
+			verify(mockExecution).setVariable(Prefix + "Success", false)
+			
+			verify(mockExecution).setVariable(Prefix + "CompleteMsoProcessRequest", "")
+			verify(mockExecution).setVariable(Prefix + "FalloutHandlerRequest", "")
+			verify(mockExecution).setVariable(Prefix + "isSilentSuccess", false)
+				
+		}
+				
+		@Test
+		//@Ignore  
+		public void preProcessRequest() {
+			
+			println "************ preProcessRequest() ************* " 
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("bpmnRequest")).thenReturn(jsonIncomingRequest)
+			
+									
+			// preProcessRequest(Execution execution)						
+			CreateNetworkInstance CreateNetworkInstance = new CreateNetworkInstance()
+			CreateNetworkInstance.preProcessRequest(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+			
+			initializeVariables(mockExecution)
+			//verify(mockExecution).setVariable(Prefix + "Success", false)
+							
+		}
+		
+		
+		@Test
+		//@Ignore
+		public void getNetworkModelInfo() {
+			
+			println "************ getNetworkModelInfo() ************* "
+			
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+									
+			// preProcessRequest(Execution execution)
+			CreateNetworkInstance CreateNetworkInstance = new CreateNetworkInstance()
+			CreateNetworkInstance.getNetworkModelInfo(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+							
+		}
+		
+		@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)
+			CreateNetworkInstance CreateNetworkInstance = new CreateNetworkInstance()
+			CreateNetworkInstance.sendSyncResponse(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable("CreateNetworkInstanceResponseCode", "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")
+			
+			CreateNetworkInstance CreateNetworkInstance = new CreateNetworkInstance()
+			CreateNetworkInstance.sendSyncError(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable("CreateNetworkInstanceResponseCode", "500")
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void prepareDBRequestError() {
+			
+			println "************ prepareDBRequestError ************* "
+			
+			WorkflowException sndcWorkflowException = new WorkflowException("CreateNetworkInstance", 500, "Received error from SDN-C: No availability zone available")
+			
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(sndcWorkflowException)
+			//when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable(Prefix + "requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("networkId")).thenReturn("")
+			when(mockExecution.getVariable("networkName")).thenReturn("")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_adapters_db_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+
+			// preProcessRequest(Execution execution)
+			CreateNetworkInstance CreateNetworkInstance = new CreateNetworkInstance()
+			CreateNetworkInstance.prepareDBRequestError(mockExecution)
+			
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "createDBRequest", createDBRequestError)
+		
+		}
+		
+
+		@Test
+		//@Ignore
+		public void prepareCompletion() {
+			
+			println "************ postProcessResponse ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable(Prefix + "dbReturnCode")).thenReturn("200")
+			
+			// postProcessResponse(Execution execution)
+			CreateNetworkInstance CreateNetworkInstance = new CreateNetworkInstance()
+			CreateNetworkInstance.prepareCompletion(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "Success", true)
+			verify(mockExecution).setVariable(Prefix + "CompleteMsoProcessRequest", completeMsoProcessRequest)
+		
+		}
+
+		@Test
+		//@Ignore
+		public void buildErrorResponse() {
+			
+			println "************ buildErrorResponse ************* "
+			
+			
+			WorkflowException sndcWorkflowException = new WorkflowException("CreateNetworkInstance", 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("mso-request-id")).thenReturn("b69c9054-da09-4a2c-adf5-51042b62bfac")
+			//when(mockExecution.getVariable("WorkflowException")).thenReturn(sndcWorkflowException)
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(sndcWorkflowException)
+			
+			// buildErrorResponse(Execution execution)
+			CreateNetworkInstance CreateNetworkInstance = new CreateNetworkInstance()
+			CreateNetworkInstance.buildErrorResponse(mockExecution)
+			
+			verify(mockExecution, atLeast(1)).setVariable("prefix", "CRENI_")
+			verify(mockExecution).setVariable(Prefix + "FalloutHandlerRequest", falloutHandlerRequest)
+			
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+		}
+		
+		@Test
+		//@Ignore
+		public void postProcessResponse() {
+			
+			println "************ postProcessResponse() ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("CMSO_ResponseCode")).thenReturn("200")
+			
+			// postProcessResponse(Execution execution)						
+			CreateNetworkInstance CreateNetworkInstance = new CreateNetworkInstance()
+			CreateNetworkInstance.postProcessResponse(mockExecution)
+
+			//verify(mockExecution).getVariable("isDebugLogEnabled")
+			//verify(mockExecution).setVariable("prefix", Prefix)
+
+			verify(mockExecution).setVariable(Prefix + "Success", true)
+		
+		}
+		
+		@Test
+		//@Ignore
+		public void processRollbackData() {
+			
+			println "************ callDBCatalog() ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+									
+			// preProcessRequest(Execution execution)
+			CreateNetworkInstance CreateNetworkInstance = new CreateNetworkInstance()
+			CreateNetworkInstance.processRollbackData(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+							
+		}
+		
+		private ExecutionEntity setupMock() {
+			
+			ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
+			when(mockProcessDefinition.getKey()).thenReturn("CreateNetworkInstance")
+			RepositoryService mockRepositoryService = mock(RepositoryService.class)
+			when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
+			when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("CreateNetworkInstance")
+			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("CreateNetworkInstance")
+			when(mockExecution.getProcessInstanceId()).thenReturn("CreateNetworkInstance")
+			when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
+			when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
+			
+			return mockExecution
+		}
+		
+}
\ No newline at end of file
diff --git a/bpmn/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
index 4f53757..0cf9792 100644
--- 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
@@ -27,10 +27,11 @@
 import org.mockito.ArgumentCaptor
 import org.mockito.MockitoAnnotations
 import org.mockito.runners.MockitoJUnitRunner
+import org.openecomp.mso.bpmn.common.scripts.MsoGroovyTest
 import org.junit.Before
+import org.junit.Ignore;
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.openecomp.mso.bpmn.common.scripts.MsoGroovyTest;
 
 
 @RunWith(MockitoJUnitRunner.class)
@@ -64,8 +65,8 @@
 					"instanceId": "{service-instance-id}",
 					"modelInfo": {
 						"modelType": "service",
-						"modelId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelInvariantUuid": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+						"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "Test",
 						"modelVersion": "2.0"
 					}
@@ -79,7 +80,7 @@
 						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "vSAMP12",
 						"modelVersion": "1",
-						"modelCustomizationName": "vSAMP12"
+						"modelInstanceName": "vSAMP12"
 					}
 				}
 			}
@@ -162,6 +163,7 @@
 	
 
 	@Test
+	@Ignore
 	public void testPreProcessRequest() {
 		
 		ExecutionEntity mockExecution = setupMock('CreateVfModuleVolumeInfraV1')
@@ -171,6 +173,7 @@
 		when(mockExecution.getVariable("serviceInstanceId")).thenReturn('')
 		when(mockExecution.getVariable("vnfId")).thenReturn('test-vnf-id')
 		when(mockExecution.getVariable("mso-request-id")).thenReturn('1234')
+		when(mockExecution.getVariable("URN_mso_rollback")).thenReturn('true')
 								
 		CreateVfModuleVolumeInfraV1 createVfModuleVolumeInfraV1 = new CreateVfModuleVolumeInfraV1()
 		createVfModuleVolumeInfraV1.preProcessRequest(mockExecution, 'true')
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteNetworkInstanceTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteNetworkInstanceTest.groovy
new file mode 100644
index 0000000..3046978
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteNetworkInstanceTest.groovy
@@ -0,0 +1,397 @@
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import static org.mockito.Mockito.*
+
+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.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.junit.WireMockRule
+
+
+@RunWith(MockitoJUnitRunner.class)
+class DeleteNetworkInstanceTest  {
+
+	@Rule
+	public WireMockRule wireMockRule = new WireMockRule(8090);
+	
+	String Prefix="DELNI_"
+	def utils = new MsoUtils()
+
+	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>DELETE</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:SourceSystemErrorCode>200</aetgt:SourceSystemErrorCode>
+</aetgt:WorkflowException>
+					</aetgt:FalloutHandlerRequest>"""
+
+	String falloutHandlerRequestObj =
+	"""<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>DELETE</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>7000</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>DELETE</action>
+      <source>VID</source>
+   </request-info>
+   <aetgt:status-message>Network has been deleted successfully.</aetgt:status-message>
+   <aetgt:mso-bpel-name>BPMN Network action: DELETE</aetgt:mso-bpel-name>
+</aetgt:MsoCompletionRequest>"""
+
+String deleteDBRequest =
+"""<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 deleted.</statusMessage>
+         <responseBody/>
+         <requestStatus>COMPLETED</requestStatus>
+         <progress>100</progress>
+         <vnfOutputs>&lt;network-outputs xmlns="http://org.openecomp/mso/infra/vnf-request/v1" xmlns:aetgt="http://org.openecomp/mso/infra/vnf-request/v1" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"/&gt;</vnfOutputs>
+      </ns:updateInfraRequest>
+   </soapenv:Body>
+</soapenv:Envelope>"""	
+
+String deleteDBRequestErrorObj =
+"""<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>
+								<progress></progress>
+								<vnfOutputs>&lt;network-outputs xmlns="http://org.openecomp/mso/infra/vnf-request/v1" xmlns:aetgt="http://org.openecomp/mso/infra/vnf-request/v1" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"/&gt;</vnfOutputs>
+							</ns:updateInfraRequest>
+					   	</soapenv:Body>
+					   </soapenv:Envelope>"""
+
+String deleteDBRequestErrorString =
+"""<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>
+								<progress></progress>
+								<vnfOutputs>&lt;network-outputs xmlns="http://org.openecomp/mso/infra/vnf-request/v1" xmlns:aetgt="http://org.openecomp/mso/infra/vnf-request/v1" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"/&gt;</vnfOutputs>
+							</ns:updateInfraRequest>
+					   	</soapenv:Body>
+					   </soapenv:Envelope>"""
+					   
+					   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"
+			   }
+            ]
+		  }
+  }}"""	
+					   
+// - - - - - - - -
+
+
+	    @Before
+		public void init()
+		{
+			MockitoAnnotations.initMocks(this)
+		}
+		
+		@Test
+		//@Ignore  
+		public void preProcessRequest() {
+			
+			println "************ preProcessRequest_Payload ************* " 
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("bpmnRequest")).thenReturn(jsonIncomingRequest)
+									
+			DeleteNetworkInstance DeleteNetworkInstance = new DeleteNetworkInstance()
+			DeleteNetworkInstance.preProcessRequest(mockExecution)
+			
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+			
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+
+		}
+
+		public void initializeVariables (Execution mockExecution) {
+			
+			
+			verify(mockExecution).setVariable(Prefix + "Success", false)
+			
+			verify(mockExecution).setVariable(Prefix + "CompleteMsoProcessRequest", "")
+			verify(mockExecution).setVariable(Prefix + "FalloutHandlerRequest", "")
+			verify(mockExecution).setVariable(Prefix + "isSilentSuccess", false)
+		
+		}
+		
+			
+		@Test
+		//@Ignore
+		public void getNetworkModelInfo() {
+			
+			println "************ getNetworkModelInfo() ************* "
+			
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+									
+			// preProcessRequest(Execution execution)
+			DeleteNetworkInstance DeleteNetworkInstance = new DeleteNetworkInstance()
+			DeleteNetworkInstance.getNetworkModelInfo(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+							
+		}
+			
+		@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)
+			DeleteNetworkInstance DeleteNetworkInstance = new DeleteNetworkInstance()
+			DeleteNetworkInstance.sendSyncResponse(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable("DeleteNetworkInstanceResponseCode", "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")
+			
+			DeleteNetworkInstance DeleteNetworkInstance = new DeleteNetworkInstance()
+			DeleteNetworkInstance.sendSyncError(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable("DeleteNetworkInstanceResponseCode", "500")
+			
+		}
+		
+
+		@Test
+		//@Ignore
+		public void prepareCompletion() {
+			
+			println "************ postProcessResponse ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "source")).thenReturn("PORTAL")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			
+			// postProcessResponse(Execution execution)
+			DeleteNetworkInstance DeleteNetworkInstance = new DeleteNetworkInstance()
+			DeleteNetworkInstance.prepareCompletion(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "CompleteMsoProcessRequest", completeMsoProcessRequest)
+		
+		}
+		
+		
+		@Test
+		//@Ignore
+		public void prepareDBRequestError() {
+			
+			println "************ prepareDBRequestError ************* "
+			
+			WorkflowException sndcWorkflowExceptionObj = new WorkflowException("CreateNetworkV2", 500, "Received error from SDN-C: No availability zone available")
+			
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(sndcWorkflowExceptionObj)
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_adapters_db_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+
+			// preProcessRequest(Execution execution)
+			DeleteNetworkInstance DeleteNetworkInstance = new DeleteNetworkInstance()
+			DeleteNetworkInstance.prepareDBRequestError(mockExecution)
+			
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "deleteDBRequest", deleteDBRequestErrorObj)
+		
+		}
+		
+	
+		@Test
+		//@Ignore
+		public void postProcessResponse() {
+			
+			println "************ postProcessResponse ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("CMSO_ResponseCode")).thenReturn("200")
+			
+			// postProcessResponse(Execution execution)						
+			DeleteNetworkInstance DeleteNetworkInstance = new DeleteNetworkInstance()
+			DeleteNetworkInstance.postProcessResponse(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "Success", true)
+
+		
+		}
+
+		
+		@Test
+		//@Ignore
+		public void buildErrorResponse_FalloutHandlerRequest() {
+			
+			println "************ buildErrorResponse ************* "
+			
+			WorkflowException sndcWorkflowExceptionObj = new WorkflowException("DeleteNetworkInstance", 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("mso-request-id")).thenReturn("b69c9054-da09-4a2c-adf5-51042b62bfac")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(sndcWorkflowExceptionObj)
+			when(mockExecution.getVariable(Prefix + "source")).thenReturn("PORTAL")
+			
+			// buildErrorResponse(Execution execution)
+			DeleteNetworkInstance DeleteNetworkInstance = new DeleteNetworkInstance()
+			DeleteNetworkInstance.buildErrorResponse(mockExecution)
+			
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "Success", false)
+			verify(mockExecution).setVariable(Prefix + "FalloutHandlerRequest", falloutHandlerRequestObj)
+			
+		}
+	
+	
+		private ExecutionEntity setupMock() {
+		
+			ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
+			when(mockProcessDefinition.getKey()).thenReturn("DeleteNetworkInstance")
+			RepositoryService mockRepositoryService = mock(RepositoryService.class)
+			when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
+			when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DeleteNetworkInstance")
+			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("DeleteNetworkInstance")
+			when(mockExecution.getProcessInstanceId()).thenReturn("DeleteNetworkInstance")
+			when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
+			when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
+
+			return mockExecution
+			
+		}
+		
+}
\ No newline at end of file
diff --git a/bpmn/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
index 2e6b35e..fac156e 100644
--- 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
@@ -26,6 +26,7 @@
 import org.apache.commons.lang3.*
 import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
 import org.junit.Before
+import org.junit.Ignore
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.MockitoAnnotations
@@ -121,11 +122,14 @@
 	}
 	
 	@Test
+	//@Ignore
 	public void testPrepareDbRequest() {
 		
 		ExecutionEntity mockExecution = setupMock('DeleteVfModuleVolumeInfraV1')
 		when(mockExecution.getVariable("DELVfModVol_requestId")).thenReturn('TEST-REQUEST-ID-0123')
 		when(mockExecution.getVariable("DELVfModVol_volumeOutputs")).thenReturn('')
+		when(mockExecution.getVariable("URN_mso_adapters_db_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+		when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
 		
 		DeleteVfModuleVolumeInfraV1 myproc = new DeleteVfModuleVolumeInfraV1()
 		myproc.prepareDBRequest(mockExecution, 'true')
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateNetworkInstanceRollbackTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateNetworkInstanceRollbackTest.groovy
new file mode 100644
index 0000000..2bb8863
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateNetworkInstanceRollbackTest.groovy
@@ -0,0 +1,349 @@
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import static org.mockito.Mockito.*
+
+import org.camunda.bpm.engine.delegate.BpmnError
+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.impl.pvm.process.ProcessDefinitionImpl
+import org.camunda.bpm.engine.repository.ProcessDefinition
+import org.camunda.bpm.engine.runtime.Execution;
+import org.mockito.MockitoAnnotations
+import org.mockito.runners.MockitoJUnitRunner
+import org.mockito.internal.debugging.MockitoDebuggerImpl
+import org.openecomp.mso.bpmn.common.scripts.MsoUtils
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.junit.Before
+import org.junit.Rule;
+import org.junit.Test
+import org.junit.Ignore
+import org.junit.runner.RunWith
+
+import static org.openecomp.mso.bpmn.mock.StubResponseNetworkAdapter.MockNetworkAdapterRestRollbackDelete;
+import static org.junit.Assert.*;
+
+import com.github.tomakehurst.wiremock.client.WireMock;
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+import org.apache.commons.lang3.*
+
+
+@RunWith(MockitoJUnitRunner.class)
+class DoCreateNetworkInstanceRollbackTest  {
+	
+	@Rule
+	public WireMockRule wireMockRule = new WireMockRule(28090);
+	
+		def utils = new MsoUtils()
+		String Prefix="CRENWKIR_"
+
+
+		String rollbackNetworkRequest =
+		"""<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>
+      <networkCreated>true</networkCreated>
+      <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+      <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+      <msoRequest>
+         <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+         <serviceInstanceId/>
+      </msoRequest>
+   </rollback>
+</NetworkAdapter:rollbackNetwork>"""			
+								
+					String rollbackActivateSDNCRequest =
+		"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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:MsoAction>generic-resource</sdncadapter:MsoAction>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>CreateNetworkInstance</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-information>
+         <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>invariant-uuid</model-invariant-uuid>
+            <model-customization-uuid>customization-uuid</model-customization-uuid>
+            <model-uuid>uuid</model-uuid>
+            <model-version>version</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-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 rollbackSDNCRequest =
+		"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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:MsoAction>generic-resource</sdncadapter:MsoAction>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>CreateNetworkInstance</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-information>
+         <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>invariant-uuid</model-invariant-uuid>
+            <model-customization-uuid>customization-uuid</model-customization-uuid>
+            <model-uuid>uuid</model-uuid>
+            <model-version>version</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-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>"""			
+		
+// - - - - - - - -
+
+
+	    @Before
+		public void init()
+		{
+			MockitoAnnotations.initMocks(this)
+			
+		}
+		
+		public void initializeVariables (Execution mockExecution) {
+
+			verify(mockExecution).setVariable(Prefix + "WorkflowException", null)
+			
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkRequest", null)
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkResponse", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkReturnCode", "")
+	
+			verify(mockExecution).setVariable(Prefix + "rollbackSDNCRequest", null)
+			verify(mockExecution).setVariable(Prefix + "rollbackSDNCResponse", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackSDNCReturnCode", "")
+			
+			verify(mockExecution).setVariable(Prefix + "rollbackActivateSDNCRequest", null)
+			verify(mockExecution).setVariable(Prefix + "rollbackActivateSDNCResponse", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackActivateSDNCReturnCode", "")
+	
+			verify(mockExecution).setVariable(Prefix + "Success", false)
+			verify(mockExecution).setVariable(Prefix + "fullRollback", false)
+			verify(mockExecution).setVariable(Prefix + "networkId", "")
+			verify(mockExecution).setVariable(Prefix + "urlRollbackPoNetwork", "")
+			
+		}
+		
+		@Test
+		//@Ignore  
+		public void preProcessRequest() {
+			
+			println "************ preProcessRequest ************* " 
+			
+			WorkflowException workflowException = new WorkflowException("DoCreateNetworkInstance", 2500, "Received error from Network Adapter: JBWEB000065: HTTP Status 500.")
+			Map<String, String> rollbackData = new HashMap<String, String>();
+			rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
+			rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
+			rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
+					
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+			when(mockExecution.getVariable("rollbackData")).thenReturn(rollbackData)
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1702")
+						
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_endpoint")).thenReturn("http://localhost:28090/SDNCAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_network_rest_endpoint")).thenReturn("http://localhost:28090/networks/NetworkAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_resource_endpoint")).thenReturn("http://localhost:28090/SDNCAdapterRpc")
+			
+			
+			// preProcessRequest(Execution execution)						
+			DoCreateNetworkInstanceRollback DoCreateNetworkInstanceRollback = new DoCreateNetworkInstanceRollback()
+			DoCreateNetworkInstanceRollback.preProcessRequest(mockExecution)
+			
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+			
+			//verify variable initialization
+			initializeVariables(mockExecution)
+								
+		}
+		
+		@Test
+		//@Ignore
+		public void callPONetworkAdapter() {
+
+			MockNetworkAdapterRestRollbackDelete("deleteNetworkResponse_Success.xml","8abc633a-810b-4ca5-8b3a-09511d13a2ce");
+			
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn( rollbackNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn(rollbackSDNCRequest)
+			when(mockExecution.getVariable("URN_mso_adapters_network_rest_endpoint")).thenReturn("http://localhost:28090/networks/NetworkAdapter")
+			
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstanceRollback DoCreateNetworkInstanceRollback = new DoCreateNetworkInstanceRollback()
+			DoCreateNetworkInstanceRollback.callPONetworkAdapter(mockExecution)
+			
+			verify(mockExecution, atLeast(1)).setVariable(Prefix + "urlRollbackPoNetwork", "http://localhost:28090/networks/NetworkAdapter/8abc633a-810b-4ca5-8b3a-09511d13a2ce/rollback")
+			
+		}
+		
+		@Test
+		//@Ignore
+		public void validateRollbackResponses_Good() {
+			
+			WorkflowException workflowException = new WorkflowException("DoCreateNetworkInstanceRollback", 2500, "AAI Update Contrail Failed.  Error 404.")
+			WorkflowException expectedWorkflowException = new WorkflowException("DoCreateNetworkInstanceRollback", 2500, "AAI Update Contrail Failed.  Error 404. + SNDC activate rollback completed. + PO Network rollback completed. + SNDC assign rollback completed.")
+				  
+			println "************ validateRollbackResponses_Good() ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "WorkflowException")).thenReturn(workflowException)
+			when(mockExecution.getVariable(Prefix + "fullRollback")).thenReturn(false)
+									
+			DoCreateNetworkInstanceRollback DoCreateNetworkInstanceRollback = new DoCreateNetworkInstanceRollback()
+			DoCreateNetworkInstanceRollback.validateRollbackResponses(mockExecution)
+			
+			// verify set prefix = Prefix + ""
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution, atLeast(1)).setVariable("rolledBack", true)
+			verify(mockExecution, atLeast(1)).setVariable("wasDeleted", true)
+			verify(mockExecution).setVariable("WorkflowException", refEq(expectedWorkflowException, any(WorkflowException.class)))
+			//verify(mockExecution).setVariable("WorkflowException", expectedWorkflowException)
+		}
+		
+		@Test
+		//@Ignore
+		public void validateRollbackResponses_FullRollback() {
+			
+			Map<String, String> rollbackData = new HashMap<String, String>();
+			rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
+			rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
+			rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
+				  
+			println "************ validateRollbackResponses_FullRollback() ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "workflowException")).thenReturn(null)
+			when(mockExecution.getVariable(Prefix + "fullRollback")).thenReturn(true)
+			when(mockExecution.getVariable("rollbackData")).thenReturn(rollbackData)
+									
+			DoCreateNetworkInstanceRollback DoCreateNetworkInstanceRollback = new DoCreateNetworkInstanceRollback()
+			DoCreateNetworkInstanceRollback.validateRollbackResponses(mockExecution)
+			
+			// verify set prefix = Prefix + ""
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution, atLeast(1)).setVariable("rollbackSuccessful", true)
+			verify(mockExecution, atLeast(1)).setVariable("rollbackError", false)
+			
+		}
+		
+		
+		private ExecutionEntity setupMock() {
+			
+			ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
+			when(mockProcessDefinition.getKey()).thenReturn("DoCreateNetworkInstanceRollback")
+			RepositoryService mockRepositoryService = mock(RepositoryService.class)
+			when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
+			when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DoCreateNetworkInstanceRollback")
+			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("DoCreateNetworkInstanceRollback")
+			when(mockExecution.getProcessInstanceId()).thenReturn("DoCreateNetworkInstanceRollback")
+			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/DoCreateNetworkInstanceTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateNetworkInstanceTest.groovy
new file mode 100644
index 0000000..d0b87b3
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateNetworkInstanceTest.groovy
@@ -0,0 +1,3988 @@
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import static org.mockito.Mockito.*
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkByName;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkByName_404;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkCloudRegion;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkCloudRegion_404;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutNetworkIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkPolicy;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkTableReference;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkVpnBinding;
+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.Ignore
+import org.junit.Rule
+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.MsoUtils
+import org.openecomp.mso.bpmn.core.WorkflowException
+
+import com.github.tomakehurst.wiremock.client.WireMock
+import com.github.tomakehurst.wiremock.junit.WireMockRule
+import org.apache.commons.lang3.*
+
+@RunWith(MockitoJUnitRunner.class)
+class DoCreateNetworkInstanceTest  {
+
+	@Rule
+	public WireMockRule wireMockRule = new WireMockRule(8090);
+
+		def utils = new MsoUtils()
+		String Prefix="CRENWKI_"
+
+// ---- Start XML Zone ----
+		String xmlIncomingRequest =
+		"""<rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
+      <network-request xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+         <request-info>
+            <request-id>1ef47428-cade-45bd-a103-0751e8b2deb0</request-id>
+            <action>CREATE</action>
+            <source>PORTAL</source>
+         </request-info>
+         <network-inputs>
+            <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>7dd5365547234ee8937416c65507d266</tenant-id>
+			<physicalNetworkName>dvs-slcp3-01</physicalNetworkName>
+			<vlans>3008</vlans>
+            <service-instance-id>MNS-25180-L-01-dmz_direct_net_1</service-instance-id>
+	        <backout-on-failure>true</backout-on-failure>
+         </network-inputs>
+         <network-params xmlns:vnfreq="http://org.openecomp/mso/infra/vnf-request/v1">
+            <param xmlns="" xmlns:ns3="http://org.openecomp/mso/infra/vnf-request/v1" name="shared">1</param>
+            <param xmlns="" xmlns:ns3="http://org.openecomp/mso/infra/vnf-request/v1" name="external">0</param>
+         </network-params>
+      </network-request>
+   </rest:payload>"""
+
+   		String expectedXMLNetworkRequest =
+"""<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>CREATE</vnfreq:action>
+         <vnfreq:source>PORTAL</vnfreq:source>
+      </vnfreq:request-info>
+      <vnfreq:network-inputs>
+         <vnfreq:network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</vnfreq:network-id>
+         <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:service-instance-id>MNS-25180-L-01-dmz_direct_net_1</vnfreq:service-instance-id>
+         <vnfreq:backout-on-failure>true</vnfreq:backout-on-failure>
+      </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 expectedXMLNetworkInputs =
+"""<vnfreq:network-inputs xmlns:vnfreq="http://org.openecomp/mso/infra/vnf-request/v1">
+   <vnfreq:network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</vnfreq:network-id>
+   <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:service-instance-id>MNS-25180-L-01-dmz_direct_net_1</vnfreq:service-instance-id>
+   <vnfreq:backout-on-failure>true</vnfreq:backout-on-failure>
+</vnfreq:network-inputs>"""
+
+		String networkXMLOutputs =
+""""""
+
+// ---- End XML Zone ----
+
+// ---- Start JSON Zone ----
+		// JSON format Input
+		String jsonIncomingRequest =
+		"""{ "requestDetails": {
+	      "modelInfo": {
+			"modelType": "network",
+  			"modelCustomizationId": "f21df226-8093-48c3-be7e-0408fcda0422",
+  			"modelName": "CONTRAIL_EXTERNAL",
+  			"modelVersion": "1.0"
+		  },
+		  "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 expectedJSONNetworkRequest =
+  """<network-request xmlns="http://www.w3.org/2001/XMLSchema">
+   <request-info>
+      <request-id>null</request-id>
+      <action>CREATE</action>
+      <source>VID</source>
+      <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+   </request-info>
+   <network-inputs>
+      <network-id>networkId</network-id>
+      <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+      <network-type>CONTRAIL_EXTERNAL</network-type>
+      <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+      <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <backout-on-failure>false</backout-on-failure>
+      <sdncVersion>1610</sdncVersion>
+   </network-inputs>
+   <network-params>
+      <param name="some_user_param1">someValue1</param>
+   </network-params>
+</network-request>"""
+
+		String expectedJSONNetworkInputs =
+"""<network-inputs xmlns="http://www.w3.org/2001/XMLSchema">
+   <network-id>networkId</network-id>
+   <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+   <network-type>CONTRAIL_EXTERNAL</network-type>
+   <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+   <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+   <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <backout-on-failure>false</backout-on-failure>
+   <sdncVersion>1610</sdncVersion>
+</network-inputs>"""
+
+		String networkJSONOutputs =
+"""<network-outputs>
+	                   <network-id>networkId</network-id>
+	                   <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+	                 </network-outputs>"""
+
+// ---- End JSON Zone ----
+
+// ---- Start vPIR Zone ----
+	  // expectedNetworkRequest
+		String expectedvIPRNetworkRequest =
+  """<network-request xmlns="http://www.w3.org/2001/XMLSchema">
+   <request-info>
+      <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+      <action>CREATE</action>
+      <source>VID</source>
+      <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+   </request-info>
+   <network-inputs>
+      <network-id>networkId</network-id>
+      <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+      <network-type>CONTRAIL_EXTERNAL</network-type>
+      <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+      <global-customer-id>globalId_45678905678</global-customer-id>
+      <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <backout-on-failure>false</backout-on-failure>
+      <failIfExist>false</failIfExist>
+      <networkModelInfo>
+         <modelName>CONTRAIL_EXTERNAL</modelName>
+         <modelUuid>sn5256d1-5a33-55df-13ab-12abad84e111</modelUuid>
+         <modelInvariantUuid>sn5256d1-5a33-55df-13ab-12abad84e764</modelInvariantUuid>
+         <modelVersion>1</modelVersion>
+         <modelCustomizationUuid>sn5256d1-5a33-55df-13ab-12abad84e222</modelCustomizationUuid>
+      </networkModelInfo>
+      <serviceModelInfo>
+         <modelName>HNGW Protected OAM</modelName>
+         <modelUuid>36a3a8ea-49a6-4ac8-b06c-89a54544b9b6</modelUuid>
+         <modelInvariantUuid>fcc85cb0-ad74-45d7-a5a1-17c8744fdb71</modelInvariantUuid>
+         <modelVersion>1.0</modelVersion>
+         <modelCustomizationUuid/>
+      </serviceModelInfo>
+      <sdncVersion>1702</sdncVersion>
+   </network-inputs>
+   <network-params/>
+</network-request>"""
+
+		String expectedvIPRNetworkInputs =
+"""<network-inputs xmlns="http://www.w3.org/2001/XMLSchema">
+   <network-id>networkId</network-id>
+   <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+   <network-type>CONTRAIL_EXTERNAL</network-type>
+   <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+   <global-customer-id>globalId_45678905678</global-customer-id>
+   <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+   <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <backout-on-failure>false</backout-on-failure>
+   <failIfExist>false</failIfExist>
+   <networkModelInfo>
+      <modelName>CONTRAIL_EXTERNAL</modelName>
+      <modelUuid>sn5256d1-5a33-55df-13ab-12abad84e111</modelUuid>
+      <modelInvariantUuid>sn5256d1-5a33-55df-13ab-12abad84e764</modelInvariantUuid>
+      <modelVersion>1</modelVersion>
+      <modelCustomizationUuid>sn5256d1-5a33-55df-13ab-12abad84e222</modelCustomizationUuid>
+   </networkModelInfo>
+   <serviceModelInfo>
+      <modelName>HNGW Protected OAM</modelName>
+      <modelUuid>36a3a8ea-49a6-4ac8-b06c-89a54544b9b6</modelUuid>
+      <modelInvariantUuid>fcc85cb0-ad74-45d7-a5a1-17c8744fdb71</modelInvariantUuid>
+      <modelVersion>1.0</modelVersion>
+      <modelCustomizationUuid/>
+   </serviceModelInfo>
+   <sdncVersion>1702</sdncVersion>
+</network-inputs>"""
+
+		String networkvIPROutputs =
+"""<network-outputs>
+	                   <network-id>networkId</network-id>
+	                   <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+	                 </network-outputs>"""
+
+// ---- End vPIR Zone ----
+
+  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>CREATE</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>
+      <subscriptionServiceType>MSO-dev-service-type</subscriptionServiceType>
+      <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>CREATE</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>
+      <subscriptionServiceType>MSO-dev-service-type</subscriptionServiceType>
+      <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 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-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>"""
+
+	  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-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>
+            <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>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 queryIdAIIResponse_segmentation =
+"""<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-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>
+            <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-assignment>
+				<segmentation-id>1</segmentation-id>
+				<resource-version>1498507569188</resource-version>
+			</segmentation-assignment>
+		 </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 queryIdAIIResponse_Ipv4 =
+"""<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-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>ipv4</ip-version>
+               <orchestration-status>pending-create</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>ipv4</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>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 queryIdAIIResponse_SRIOV =
+"""<?xml version="1.0" encoding="UTF-8"?>
+<l3-network xmlns="http://org.openecomp.aai.inventory/v8">
+	<network-id>6cb1ae5a-d2db-4eb6-97bf-d52a506a53d8</network-id>
+	<network-name>MSO_TEST_1702_A_HnportalProviderNetwork.HNPortalPROVIDERNETWORK.SR_IOV_Provider2_1_net_17</network-name>
+	<network-type>SR_IOV_Provider2_1</network-type>
+	<network-role>HnportalProviderNetwork.HNPortalPROVIDERNETWORK.SR_IOV_Provider2_1</network-role>
+	<network-technology>AIC_SR_IOV</network-technology>
+	<is-bound-to-vpn>false</is-bound-to-vpn>
+	<service-id/>
+	<resource-version>1487336177672</resource-version>
+	<orchestration-status>PendingCreate</orchestration-status>
+	<persona-model-id>f70d7a32-0ac8-4bd5-a0fb-3c9336540d78</persona-model-id>
+	<persona-model-version>1.0</persona-model-version>
+	<physical-network-name>Physnet21</physical-network-name>
+	<is-provider-network>true</is-provider-network>
+	<is-shared-network>false</is-shared-network>
+	<is-external-network>false</is-external-network>
+	<subnets>
+		<subnet>
+			<subnet-id>10437</subnet-id>
+			<subnet-name>MSO_TEST_1702_A_HnportalProviderNetwork.HNPortalPROVIDERNETWORK.SR_IOV_Provider2_1_net_17_S0</subnet-name>
+			<gateway-address>192.168.6.1</gateway-address>
+			<network-start-address>192.168.6.0</network-start-address>
+			<cidr-mask>26</cidr-mask>
+			<ip-version>4</ip-version>
+			<orchestration-status>PendingCreate</orchestration-status>
+			<dhcp-enabled>true</dhcp-enabled>
+			<dhcp-start>192.168.6.3</dhcp-start>
+			<dhcp-end>192.168.6.62</dhcp-end>
+			<resource-version>1487336177359</resource-version>
+		</subnet>
+	</subnets>
+	<relationship-list>
+		<relationship>
+			<related-to>tenant</related-to>
+			<related-link>https://aai-ext1.test.com:8443/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/mtn16/tenants/tenant/6accefef3cb442ff9e644d589fb04107</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>mtn16</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>tenant.tenant-id</relationship-key>
+				<relationship-value>6accefef3cb442ff9e644d589fb04107</relationship-value>
+			</relationship-data>
+			<related-to-property>
+				<property-key>tenant.tenant-name</property-key>
+				<property-value>MSO_TEST_1702_A</property-value>
+			</related-to-property>
+		</relationship>
+		<relationship>
+			<related-to>cloud-region</related-to>
+			<related-link>https://aai-ext1.test.com:8443/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/mtn16</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>mtn16</relationship-value>
+			</relationship-data>
+			<related-to-property>
+				<property-key>cloud-region.owner-defined-type</property-key>
+				<property-value>lcp</property-value>
+			</related-to-property>
+		</relationship>
+		<relationship>
+			<related-to>service-instance</related-to>
+			<related-link>https://aai-ext1.test.com:8443/aai/v8/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/51d8336b-a993-4afe-a5fc-10b3afbd6560</related-link>
+			<relationship-data>
+				<relationship-key>customer.global-customer-id</relationship-key>
+				<relationship-value>MSO_1610_ST</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>service-subscription.service-type</relationship-key>
+				<relationship-value>MSO-dev-service-type</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>service-instance.service-instance-id</relationship-key>
+				<relationship-value>51d8336b-a993-4afe-a5fc-10b3afbd6560</relationship-value>
+			</relationship-data>
+			<related-to-property>
+				<property-key>service-instance.service-instance-name</property-key>
+				<property-value>HnportalProviderNetwork_17</property-value>
+			</related-to-property>
+		</relationship>
+	</relationship-list>
+</l3-network>"""
+
+	  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-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>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-create</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-create</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>
+  	       <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 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/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>
+         <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-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>"""
+
+		  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-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>
+		      </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 createDBRequestError01 =
+	  """<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 createDBRequest_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 created.</statusMessage>
+         <responseBody/>
+         <requestStatus>COMPLETED</requestStatus>
+         <progress>100</progress>
+         <vnfOutputs>&lt;network-id&gt;networkId&lt;/network-id&gt;&lt;network-name&gt;MNS-25180-L-01-dmz_direct_net_1&lt;/network-names&gt;</vnfOutputs>
+         <networkId>networkId</networkId>
+      </ns:updateInfraRequest>
+   </soapenv:Body>
+</soapenv:Envelope>"""
+
+	  String createNetworkRequest =
+	  """<createNetworkRequest>
+   <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+   <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+   <networkId>49c86598-f766-46f8-84f8-8d1c1b10f9b4</networkId>
+   <networkName>MNS-25180-L-01-dmz_direct_net_1</networkName>
+   <networkType>CONTRAIL_EXTERNAL</networkType>
+   <modelCustomizationUuid>sn5256d1-5a33-55df-13ab-12abad84e222</modelCustomizationUuid>
+   <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>
+   <msoRequest>
+      <requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+      <serviceInstanceId>f70e927b-6087-4974-9ef8-c5e4d5847ca4</serviceInstanceId>
+   </msoRequest>
+   <messageId>messageId_generated</messageId>
+   <notificationUrl/>
+</createNetworkRequest>"""
+
+String createNetworkRequestAlaCarte = 
+"""<createNetworkRequest>
+   <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+   <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+   <networkId>49c86598-f766-46f8-84f8-8d1c1b10f9b4</networkId>
+   <networkName>MNS-25180-L-01-dmz_direct_net_1</networkName>
+   <networkType>CONTRAIL_EXTERNAL</networkType>
+   <modelCustomizationUuid>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationUuid>
+   <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>
+      <some_user_param1>someValue1</some_user_param1>
+   </networkParams>
+   <msoRequest>
+      <requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+      <serviceInstanceId>f70e927b-6087-4974-9ef8-c5e4d5847ca4</serviceInstanceId>
+   </msoRequest>
+   <messageId>messageId_generated</messageId>
+   <notificationUrl/>
+</createNetworkRequest>"""
+
+String createNetworkRequest_SRIOV =
+"""<createNetworkRequest>
+   <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+   <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+   <networkId>6cb1ae5a-d2db-4eb6-97bf-d52a506a53d8</networkId>
+   <networkName>MSO_TEST_1702_A_HnportalProviderNetwork.HNPortalPROVIDERNETWORK.SR_IOV_Provider2_1_net_17</networkName>
+   <networkType>CONTRAIL_EXTERNAL</networkType>
+   <modelCustomizationUuid>sn5256d1-5a33-55df-13ab-12abad84e222</modelCustomizationUuid>
+   <networkTechnology>AIC_SR_IOV</networkTechnology>
+   <providerVlanNetwork>
+      <physicalNetworkName>Physnet21</physicalNetworkName>
+      <vlans/>
+   </providerVlanNetwork>
+   <subnets>
+      <allocationPools>
+         <start>192.168.6.3</start>
+         <end>192.168.6.62</end>
+      </allocationPools>
+      <cidr>192.168.6.0/26</cidr>
+      <enableDHCP>true</enableDHCP>
+      <gatewayIp>192.168.6.1</gatewayIp>
+      <ipVersion>4</ipVersion>
+      <subnetId>10437</subnetId>
+      <subnetName>MSO_TEST_1702_A_HnportalProviderNetwork.HNPortalPROVIDERNETWORK.SR_IOV_Provider2_1_net_17_S0</subnetName>
+   </subnets>
+   <skipAAI>true</skipAAI>
+   <backout>true</backout>
+   <failIfExists>false</failIfExists>
+   <msoRequest>
+      <requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+      <serviceInstanceId>f70e927b-6087-4974-9ef8-c5e4d5847ca4</serviceInstanceId>
+   </msoRequest>
+   <messageId>messageId_generated</messageId>
+   <notificationUrl/>
+</createNetworkRequest>"""
+
+  String createNetworkRequest_noPhysicalName =
+  """<createNetworkRequest>
+   <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+   <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+   <networkId>49c86598-f766-46f8-84f8-8d1c1b10f9b4</networkId>
+   <networkName>MNS-25180-L-01-dmz_direct_net_1</networkName>
+   <networkType>CONTRAIL_EXTERNAL</networkType>
+   <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/>
+</createNetworkRequest>"""
+
+	  String createNetworkResponseREST =
+  """<ns2:createNetworkResponse 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>
+	<networkCreated>true</networkCreated>
+	<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>
+		<networkCreated>true</networkCreated>
+		<tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+		<cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+		<msoRequest>
+			<requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+			<serviceInstanceId></serviceInstanceId>
+		</msoRequest>
+	</rollback>
+	<messageId>messageId_generated</messageId>
+</ns2:createNetworkResponse>"""
+
+	  String createRollbackNetworkRequest =
+	  """<rollbackNetworkRequest>
+   <networkRollback>
+      <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>
+      <networkCreated>true</networkCreated>
+      <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+      <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+      <msoRequest>
+         <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+         <serviceInstanceId/>
+      </msoRequest>
+   </networkRollback>
+</rollbackNetworkRequest>"""	
+	  
+	  String createNetworkResponse =
+	  """<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>
+   <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>
+      <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>"""
+
+	  String updateContrailAAIPayloadRequest =
+  """<l3-network xmlns="http://org.openecomp.aai.inventory/v9">
+   <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>Created</orchestration-status>
+   <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>Created</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>Created</orchestration-status>
+         <dhcp-enabled>true</dhcp-enabled>
+         <subnet-name>subnetName</subnet-name>
+      </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>"""
+
+String updateContrailAAIPayloadRequest_segmentation =
+"""<l3-network xmlns="http://org.openecomp.aai.inventory/v9">
+   <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>Created</orchestration-status>
+   <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>Created</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>Created</orchestration-status>
+         <dhcp-enabled>true</dhcp-enabled>
+         <subnet-name>subnetName</subnet-name>
+      </subnet>
+   </subnets>
+   <segmentation-assignments>
+      <segmentation-assignment>
+         <segmentation-id>1</segmentation-id>
+         <resource-version>1498507569188</resource-version>
+      </segmentation-assignment>
+   </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 createNetworkErrorResponse =
+	  """<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>"""
+
+
+  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 "createNetworkContrail" 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 assignSDNCRequest =
+    """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>assign</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>networkId</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 assignSDNCRequest_decodeUrlLink =
+"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>assign</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>VIRTUAL USP</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>networkId</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 assignRpcSDNCRequest =
+    """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>assign</sdncadapter:SvcAction>
+      <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
+      <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
+      <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>CreateNetworkInstance</request-action>
+         <source>VID</source>
+         <notification-url/>
+         <order-number/>
+         <order-version/>
+      </request-information>
+      <service-information>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>fcc85cb0-ad74-45d7-a5a1-17c8744fdb71</model-invariant-uuid>
+            <model-uuid>36a3a8ea-49a6-4ac8-b06c-89a54544b9b6</model-uuid>
+            <model-version>1.0</model-version>
+            <model-name>HNGW Protected OAM</model-name>
+         </ecomp-model-information>
+         <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+         <global-customer-id>globalId_45678905678</global-customer-id>
+         <subscriber-name>MSO_1610_dev</subscriber-name>
+      </service-information>
+      <network-information>
+         <network-id>networkId</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>sn5256d1-5a33-55df-13ab-12abad84e764</model-invariant-uuid>
+            <model-customization-uuid>sn5256d1-5a33-55df-13ab-12abad84e222</model-customization-uuid>
+            <model-uuid>sn5256d1-5a33-55df-13ab-12abad84e111</model-uuid>
+            <model-version>1</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-information>
+      <network-request-input>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <tenant>7dd5365547234ee8937416c65507d266</tenant>
+         <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+         <aic-clli/>
+         <network-input-parameters/>
+      </network-request-input>
+   </aetgt:SDNCRequestData>
+</aetgt:SDNCAdapterWorkflowRequest>"""
+
+String activateSDNCRequest =
+"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>activate</sdncadapter:SvcAction>
+      <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
+      <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
+      <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>CreateNetworkInstance</request-action>
+         <source>VID</source>
+         <notification-url/>
+         <order-number/>
+         <order-version/>
+      </request-information>
+      <service-information>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>fcc85cb0-ad74-45d7-a5a1-17c8744fdb71</model-invariant-uuid>
+            <model-uuid>36a3a8ea-49a6-4ac8-b06c-89a54544b9b6</model-uuid>
+            <model-version>1.0</model-version>
+            <model-name>HNGW Protected OAM</model-name>
+         </ecomp-model-information>
+         <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+         <global-customer-id>globalId_45678905678</global-customer-id>
+         <subscriber-name>MSO_1610_dev</subscriber-name>
+      </service-information>
+      <network-information>
+         <network-id>networkId</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>sn5256d1-5a33-55df-13ab-12abad84e764</model-invariant-uuid>
+            <model-customization-uuid>sn5256d1-5a33-55df-13ab-12abad84e222</model-customization-uuid>
+            <model-uuid>sn5256d1-5a33-55df-13ab-12abad84e111</model-uuid>
+            <model-version>1</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-information>
+      <network-request-input>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <tenant>7dd5365547234ee8937416c65507d266</tenant>
+         <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+         <aic-clli/>
+         <network-input-parameters/>
+      </network-request-input>
+   </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="com:att: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://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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 sdncRpcRollbackRequest =
+"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>unassign</sdncadapter:SvcAction>
+      <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
+      <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
+      <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>DeleteNetworkInstance</request-action>
+         <source>VID</source>
+         <notification-url/>
+         <order-number/>
+         <order-version/>
+      </request-information>
+      <service-information>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>fcc85cb0-ad74-45d7-a5a1-17c8744fdb71</model-invariant-uuid>
+            <model-uuid>36a3a8ea-49a6-4ac8-b06c-89a54544b9b6</model-uuid>
+            <model-version>1.0</model-version>
+            <model-name>HNGW Protected OAM</model-name>
+         </ecomp-model-information>
+         <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+         <global-customer-id>globalId_45678905678</global-customer-id>
+         <subscriber-name>MSO_1610_dev</subscriber-name>
+      </service-information>
+      <network-information>
+         <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>sn5256d1-5a33-55df-13ab-12abad84e764</model-invariant-uuid>
+            <model-customization-uuid>sn5256d1-5a33-55df-13ab-12abad84e222</model-customization-uuid>
+            <model-uuid>sn5256d1-5a33-55df-13ab-12abad84e111</model-uuid>
+            <model-version>1</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-information>
+      <network-request-input>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <tenant>7dd5365547234ee8937416c65507d266</tenant>
+         <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+         <aic-clli/>
+         <network-input-parameters/>
+      </network-request-input>
+   </aetgt:SDNCRequestData>
+</aetgt:SDNCAdapterWorkflowRequest>"""
+
+String sdncActivateRollbackRequest =
+"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>deactivate</sdncadapter:SvcAction>
+      <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
+      <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
+      <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>DeleteNetworkInstance</request-action>
+         <source>VID</source>
+         <notification-url/>
+         <order-number/>
+         <order-version/>
+      </request-information>
+      <service-information>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>fcc85cb0-ad74-45d7-a5a1-17c8744fdb71</model-invariant-uuid>
+            <model-uuid>36a3a8ea-49a6-4ac8-b06c-89a54544b9b6</model-uuid>
+            <model-version>1.0</model-version>
+            <model-name>HNGW Protected OAM</model-name>
+         </ecomp-model-information>
+         <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+         <global-customer-id>globalId_45678905678</global-customer-id>
+         <subscriber-name>MSO_1610_dev</subscriber-name>
+      </service-information>
+      <network-information>
+         <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>sn5256d1-5a33-55df-13ab-12abad84e764</model-invariant-uuid>
+            <model-customization-uuid>sn5256d1-5a33-55df-13ab-12abad84e222</model-customization-uuid>
+            <model-uuid>sn5256d1-5a33-55df-13ab-12abad84e111</model-uuid>
+            <model-version>1</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-information>
+      <network-request-input>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <tenant>7dd5365547234ee8937416c65507d266</tenant>
+         <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+         <aic-clli/>
+         <network-input-parameters/>
+      </network-request-input>
+   </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.mso/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="com:att: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="com:att: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="com:att: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="com:att: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 sdncAdapterWorkflowAssignResponse =
+"""<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+                                                 xmlns:tag0="http://org.openecomp.mso/workflow/sdnc/adapter/schema/v1"
+                                                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<sdncadapterworkflow:response-data>
+		<tag0:CallbackHeader>
+			<tag0:RequestId>79ec9006-3695-4fcc-93a8-be6f9e248beb</tag0:RequestId>
+			<tag0:ResponseCode>200</tag0:ResponseCode>
+			<tag0:ResponseMessage>OK</tag0:ResponseMessage>
+		</tag0:CallbackHeader>
+		<tag0:RequestData xsi:type="xs:string">
+			<output xmlns="com:att:sdnctl:generic-resource">
+				<response-message/>
+				<svc-request-id>79ec9006-3695-4fcc-93a8-be6f9e248beb</svc-request-id>
+				<service-response-information>
+					<instance-id>f805ec2b-b4d8-473e-8325-67f110139e5d</instance-id>
+				</service-response-information>
+				<response-code>200</response-code>
+				<network-response-information>
+					<instance-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</instance-id>
+					<object-path>restconf/config/GENERIC-RESOURCE-API:services/service/f805ec2b-b4d8-473e-8325-67f110139e5d/service-data/networks/network/f7e4db56-aab5-4065-8e65-cec1cd1de24f</object-path>
+				</network-response-information>
+				<ack-final-indicator>Y</ack-final-indicator>
+			</output>
+		</tag0:RequestData>
+	</sdncadapterworkflow:response-data>
+</sdncadapterworkflow:SDNCAdapterWorkflowResponse>"""
+
+		String rollbackNetworkRequest =
+"""<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>
+      <networkCreated>true</networkCreated>
+      <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+      <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+      <msoRequest>
+         <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+         <serviceInstanceId/>
+      </msoRequest>
+   </rollback>
+</NetworkAdapter:rollbackNetwork>"""
+
+			String rollbackActivateSDNCRequest =
+"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>CreateNetworkInstance</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-information>
+         <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>invariant-uuid</model-invariant-uuid>
+            <model-customization-uuid>customization-uuid</model-customization-uuid>
+            <model-uuid>uuid</model-uuid>
+            <model-version>version</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-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 rollbackSDNCRequest =
+"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>CreateNetworkInstance</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-information>
+         <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>invariant-uuid</model-invariant-uuid>
+            <model-customization-uuid>customization-uuid</model-customization-uuid>
+            <model-uuid>uuid</model-uuid>
+            <model-version>version</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-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>"""
+
+// - - - - - - - -
+
+	    @Before
+		public void init()
+		{
+			MockitoAnnotations.initMocks(this)
+
+		}
+
+		public void initializeVariables (Execution mockExecution) {
+
+			verify(mockExecution).setVariable(Prefix + "networkRequest", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackEnabled", null)
+			verify(mockExecution).setVariable(Prefix + "networkInputs", "")
+			//verify(mockExecution).setVariable(Prefix + "requestId", "")
+			verify(mockExecution).setVariable(Prefix + "messageId", "")
+			verify(mockExecution).setVariable(Prefix + "source", "")
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "")
+			verify(mockExecution).setVariable(Prefix + "serviceInstanceId","")
+			verify(mockExecution).setVariable("GENGS_type","")
+			verify(mockExecution).setVariable(Prefix + "rsrc_endpoint", null)
+			verify(mockExecution).setVariable(Prefix + "networkOutputs", "")
+			verify(mockExecution).setVariable(Prefix + "networkId","")
+			verify(mockExecution).setVariable(Prefix + "networkName","")
+
+			// AAI query Name
+			verify(mockExecution).setVariable(Prefix + "queryNameAAIRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryNameAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiNameReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "isAAIqueryNameGood", false)
+
+			// AAI query Cloud Region
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionReturnCode","")
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionResponse","")
+			verify(mockExecution).setVariable(Prefix + "cloudRegionPo","")
+			verify(mockExecution).setVariable(Prefix + "cloudRegionSdnc","")
+			verify(mockExecution).setVariable(Prefix + "isCloudRegionGood", false)
+
+			// AAI query Id
+			verify(mockExecution).setVariable(Prefix + "queryIdAAIRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryIdAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiIdReturnCode", "")
+
+			// AAI query vpn binding
+			verify(mockExecution).setVariable(Prefix + "queryVpnBindingAAIRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryVpnBindingAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "vpnBindings", null)
+			verify(mockExecution).setVariable(Prefix + "vpnCount", 0)
+			verify(mockExecution).setVariable(Prefix + "routeCollection", "")
+
+			// AAI query network policy
+			verify(mockExecution).setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "networkPolicyUriList", null)
+			verify(mockExecution).setVariable(Prefix + "networkPolicyCount", 0)
+			verify(mockExecution).setVariable(Prefix + "networkCollection", "")
+
+			// AAI query route table reference
+			verify(mockExecution).setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "networkTableRefUriList", null)
+			verify(mockExecution).setVariable(Prefix + "networkTableRefCount", 0)
+			verify(mockExecution).setVariable(Prefix + "tableRefCollection", "")
+
+			// AAI requery Id
+			verify(mockExecution).setVariable(Prefix + "requeryIdAAIRequest","")
+			verify(mockExecution).setVariable(Prefix + "requeryIdAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiRequeryIdReturnCode", "")
+
+			// AAI update contrail
+			verify(mockExecution).setVariable(Prefix + "updateContrailAAIUrlRequest","")
+			verify(mockExecution).setVariable(Prefix + "updateContrailAAIPayloadRequest","")
+			verify(mockExecution).setVariable(Prefix + "updateContrailAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
+
+			verify(mockExecution).setVariable(Prefix + "createNetworkRequest", "")
+			verify(mockExecution).setVariable(Prefix + "createNetworkResponse", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkRequest", "")
+			//verify(mockExecution).setVariable(Prefix + "rollbackNetworkResponse", "")
+			verify(mockExecution).setVariable(Prefix + "networkReturnCode", "")
+			//verify(mockExecution).setVariable(Prefix + "rollbackNetworkReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "isNetworkRollbackNeeded", false)
+
+			verify(mockExecution).setVariable(Prefix + "assignSDNCRequest", "")
+			verify(mockExecution).setVariable(Prefix + "assignSDNCResponse", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackSDNCRequest", "")
+			//verify(mockExecution).setVariable(Prefix + "rollbackSDNCResponse", "")
+			verify(mockExecution).setVariable(Prefix + "sdncReturnCode", "")
+			//verify(mockExecution).setVariable(Prefix + "rollbackSDNCReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "isSdncRollbackNeeded", false)
+			verify(mockExecution).setVariable(Prefix + "sdncResponseSuccess", false)
+
+			verify(mockExecution).setVariable(Prefix + "activateSDNCRequest", "")
+			verify(mockExecution).setVariable(Prefix + "activateSDNCResponse", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackActivateSDNCRequest", "")
+			//verify(mockExecution).setVariable(Prefix + "rollbackActivateSDNCResponse", "")
+			verify(mockExecution).setVariable(Prefix + "sdncActivateReturnCode", "")
+			//verify(mockExecution).setVariable(Prefix + "rollbackActivateSDNCReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "isSdncActivateRollbackNeeded", false)
+			verify(mockExecution).setVariable(Prefix + "sdncActivateResponseSuccess", false)
+
+			verify(mockExecution).setVariable(Prefix + "orchestrationStatus", "")
+			verify(mockExecution).setVariable(Prefix + "isVnfBindingPresent", false)
+			verify(mockExecution).setVariable(Prefix + "Success", false)
+
+			verify(mockExecution).setVariable(Prefix + "isException", false)
+
+		}
+
+		@Test
+		//@Ignore
+		public void preProcessRequest_vIPR_NetworkRequest() {
+
+			println "************ preProcessRequest_Payload ************* "
+
+		  def networkModelInfo = """{"modelUuid": "sn5256d1-5a33-55df-13ab-12abad84e111",
+                                     "modelName": "CONTRAIL_EXTERNAL",
+									 "modelType": "CONTRAIL_EXTERNAL",
+									 "modelVersion": "1",
+									 "modelCustomizationUuid": "sn5256d1-5a33-55df-13ab-12abad84e222",
+									 "modelInvariantUuid": "sn5256d1-5a33-55df-13ab-12abad84e764"
+									}""".trim()
+
+		 def serviceModelInfo = """{"modelUuid": "36a3a8ea-49a6-4ac8-b06c-89a54544b9b6",
+                                     "modelName": "HNGW Protected OAM",
+									 "modelType": "service",
+									 "modelVersion": "1.0",
+									 "modelInvariantUuid": "fcc85cb0-ad74-45d7-a5a1-17c8744fdb71"
+									}""".trim()
+
+
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+
+			// Pre-defined value, testing Only
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			// Inputs:
+			when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("disableRollback")).thenReturn("true")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("networkId")).thenReturn("networkId")                                // optional
+			when(mockExecution.getVariable("networkName")).thenReturn("MNS-25180-L-01-dmz_direct_net_1")        // optional
+			when(mockExecution.getVariable("productFamilyId")).thenReturn("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb")
+			when(mockExecution.getVariable("networkModelInfo")).thenReturn("CONTRAIL_EXTERNAL")
+			when(mockExecution.getVariable("lcpCloudRegionId")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable("tenantId")).thenReturn("7dd5365547234ee8937416c65507d266")
+			when(mockExecution.getVariable("failIfExists")).thenReturn("false")
+			when(mockExecution.getVariable("networkModelInfo")).thenReturn(networkModelInfo)
+			when(mockExecution.getVariable("serviceModelInfo")).thenReturn(serviceModelInfo)
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1702")
+			when(mockExecution.getVariable("action")).thenReturn("CREATE")
+			when(mockExecution.getVariable("subscriptionServiceType")).thenReturn("MSO-dev-service-type")
+			when(mockExecution.getVariable("globalSubscriberId")).thenReturn("globalId_45678905678")
+
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_endpoint")).thenReturn("http://localhost:8090/SDNCAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_network_rest_endpoint")).thenReturn("http://localhost:8090/networks/NetworkAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_resource_endpoint")).thenReturn("http://localhost:8090/SDNCAdapterRpc")
+
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.preProcessRequest(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			verify(mockExecution).setVariable("action", "CREATE")
+			verify(mockExecution).setVariable(Prefix + "networkId","")
+			verify(mockExecution).setVariable(Prefix + "networkRequest", expectedvIPRNetworkRequest)
+			verify(mockExecution, atLeast(1)).setVariable(Prefix + "rollbackEnabled", false)
+			verify(mockExecution).setVariable(Prefix + "networkInputs", expectedvIPRNetworkInputs)
+			//verify(mockExecution).setVariable(Prefix + "requestId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution).setVariable("mso-service-instance-id", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution).setVariable(Prefix + "messageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution).setVariable(Prefix + "source", "VID")
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable(Prefix + "serviceInstanceId","f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			verify(mockExecution, atLeast(1)).setVariable("GENGS_type", "service-instance")
+			//verify(mockExecution, atLeast(1)).setVariable("mso-request-id", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution, atLeast(1)).setVariable("msoRequestId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution).setVariable("mso-service-instance-id","88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution).setVariable(Prefix + "networkId","")
+			verify(mockExecution).setVariable(Prefix + "networkOutputs", networkvIPROutputs)
+			verify(mockExecution).setVariable(Prefix + "networkName","")
+
+		}
+
+		@Test
+		//@Ignore
+		public void preProcessRequest_JSON_NetworkRequest() {
+
+			println "************ preProcessRequest_Payload ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+
+			// Pre-defined value, testing Only
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			// Inputs:
+			// when(mockExecution.getVariable("requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("requestAction")).thenReturn("CREATE")
+			when(mockExecution.getVariable("networkId")).thenReturn("networkId")                                // optional
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("bpmnRequest")).thenReturn(jsonIncomingRequest)                      // JSON format
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1610")                      // 1610 default
+			when(mockExecution.getVariable("disableRollback")).thenReturn(true)
+			
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_endpoint")).thenReturn("http://localhost:8090/SDNCAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_network_rest_endpoint")).thenReturn("http://localhost:8090/networks/NetworkAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_resource_endpoint")).thenReturn("http://localhost:8090/SDNCAdapterRpc")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.preProcessRequest(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			verify(mockExecution).setVariable("action", "CREATE")
+			verify(mockExecution).setVariable(Prefix + "networkRequest", expectedJSONNetworkRequest)
+			verify(mockExecution).setVariable(Prefix + "rollbackEnabled", false)
+			verify(mockExecution).setVariable(Prefix + "networkInputs", expectedJSONNetworkInputs)
+			//verify(mockExecution).setVariable(Prefix + "requestId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution).setVariable(Prefix + "messageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution).setVariable(Prefix + "source", "VID")
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable(Prefix + "serviceInstanceId","f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			verify(mockExecution, atLeast(1)).setVariable("GENGS_type", "service-instance")
+			//verify(mockExecution, atLeast(1)).setVariable("msoRequestId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution).setVariable("mso-service-instance-id","88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution).setVariable(Prefix + "networkId","")
+			verify(mockExecution).setVariable(Prefix + "networkOutputs", networkJSONOutputs)
+			verify(mockExecution).setVariable(Prefix + "networkName","")
+
+
+		}
+
+		@Test
+		//@Ignore
+		public void preProcessRequest_XML_NetworkRequest() {
+
+			println "************ preProcessRequest_Payload ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+
+			// Pre-defined value, testing Only
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			// Inputs:
+			// when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("bpmnRequest")).thenReturn(xmlIncomingRequest)                      // XML format
+
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_endpoint")).thenReturn("http://localhost:8090/SDNCAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_network_rest_endpoint")).thenReturn("http://localhost:8090/networks/NetworkAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_resource_endpoint")).thenReturn("http://localhost:8090/SDNCAdapterRpc")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.preProcessRequest(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			verify(mockExecution).setVariable(Prefix + "networkRequest", expectedXMLNetworkRequest)
+			verify(mockExecution).setVariable("action", "CREATE")
+			verify(mockExecution).setVariable(Prefix + "rollbackEnabled", true)
+			verify(mockExecution).setVariable(Prefix + "networkInputs", expectedXMLNetworkInputs)
+			//verify(mockExecution).setVariable(Prefix + "requestId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution).setVariable(Prefix + "messageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution).setVariable(Prefix + "source", "PORTAL")
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable(Prefix + "serviceInstanceId","MNS-25180-L-01-dmz_direct_net_1")
+			verify(mockExecution, atLeast(1)).setVariable("GENGS_type", "service-instance")
+			//verify(mockExecution).setVariable("mso-service-instance-id","88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution, atLeast(1)).setVariable(Prefix + "networkId","")
+			verify(mockExecution).setVariable(Prefix + "networkOutputs", networkXMLOutputs)
+			verify(mockExecution).setVariable(Prefix + "networkName","")
+
+		}
+
+
+
+		@Test
+		//@Ignore
+		public void prepareCreateNetworkRequest() {
+
+			println "************ prepareNetworkRequest ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedvIPRNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "queryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable(Prefix + "cloudRegionPo")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("messageId_generated")
+			when(mockExecution.getVariable(Prefix + "source")).thenReturn("VID")
+			//when(mockExecution.getVariable(Prefix + "queryVpnBindingAAIResponse")).thenReturn(queryVpnBindingAAIResponse)
+			when(mockExecution.getVariable(Prefix + "routeCollection")).thenReturn("<routeTargets>13979:105757</routeTargets><routeTargets>13979:105757</routeTargets>")
+			when(mockExecution.getVariable(Prefix + "networkCollection")).thenReturn("<policyFqdns>GN_EVPN_Test</policyFqdns>")
+			when(mockExecution.getVariable(Prefix + "tableRefCollection")).thenReturn("<routeTableFqdns>refFQDN1</routeTableFqdns><routeTableFqdns>refFQDN2</routeTableFqdns>")
+			when(mockExecution.getVariable(Prefix + "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(Prefix + "rollbackEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.prepareCreateNetworkRequest(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			verify(mockExecution).setVariable(Prefix + "createNetworkRequest", createNetworkRequest)
+
+		}
+		
+		
+		@Test
+		//@Ignore
+		public void prepareCreateNetworkRequest_Ipv4() {
+
+			println "************ prepareNetworkRequest ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedvIPRNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "queryIdAAIResponse")).thenReturn(queryIdAIIResponse_Ipv4)
+			when(mockExecution.getVariable(Prefix + "cloudRegionPo")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("messageId_generated")
+			when(mockExecution.getVariable(Prefix + "source")).thenReturn("VID")
+			//when(mockExecution.getVariable(Prefix + "queryVpnBindingAAIResponse")).thenReturn(queryVpnBindingAAIResponse)
+			when(mockExecution.getVariable(Prefix + "routeCollection")).thenReturn("<routeTargets>13979:105757</routeTargets><routeTargets>13979:105757</routeTargets>")
+			when(mockExecution.getVariable(Prefix + "networkCollection")).thenReturn("<policyFqdns>GN_EVPN_Test</policyFqdns>")
+			when(mockExecution.getVariable(Prefix + "tableRefCollection")).thenReturn("<routeTableFqdns>refFQDN1</routeTableFqdns><routeTableFqdns>refFQDN2</routeTableFqdns>")
+			when(mockExecution.getVariable(Prefix + "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(Prefix + "rollbackEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.prepareCreateNetworkRequest(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			verify(mockExecution).setVariable(Prefix + "createNetworkRequest", createNetworkRequest)
+
+		}
+		
+		@Test
+		//@Ignore
+		public void prepareCreateNetworkRequest_AlaCarte() {
+
+			println "************ prepareNetworkRequest ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedJSONNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "queryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable(Prefix + "cloudRegionPo")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("messageId_generated")
+			when(mockExecution.getVariable(Prefix + "source")).thenReturn("VID")
+			//when(mockExecution.getVariable(Prefix + "queryVpnBindingAAIResponse")).thenReturn(queryVpnBindingAAIResponse)
+			when(mockExecution.getVariable(Prefix + "routeCollection")).thenReturn("<routeTargets>13979:105757</routeTargets><routeTargets>13979:105757</routeTargets>")
+			when(mockExecution.getVariable(Prefix + "networkCollection")).thenReturn("<policyFqdns>GN_EVPN_Test</policyFqdns>")
+			when(mockExecution.getVariable(Prefix + "tableRefCollection")).thenReturn("<routeTableFqdns>refFQDN1</routeTableFqdns><routeTableFqdns>refFQDN2</routeTableFqdns>")
+			when(mockExecution.getVariable(Prefix + "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(Prefix + "rollbackEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.prepareCreateNetworkRequest(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			verify(mockExecution).setVariable(Prefix + "createNetworkRequest", createNetworkRequestAlaCarte)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareCreateNetworkRequest_SRIOV() {
+
+			println "************ prepareNetworkRequest ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedvIPRNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "queryIdAAIResponse")).thenReturn(queryIdAIIResponse_SRIOV)
+			when(mockExecution.getVariable(Prefix + "cloudRegionPo")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("messageId_generated")
+			when(mockExecution.getVariable(Prefix + "source")).thenReturn("VID")
+			//when(mockExecution.getVariable(Prefix + "queryVpnBindingAAIResponse")).thenReturn(queryVpnBindingAAIResponse)
+			when(mockExecution.getVariable(Prefix + "routeCollection")).thenReturn("<routeTargets>13979:105757</routeTargets><routeTargets>13979:105757</routeTargets>")
+			when(mockExecution.getVariable(Prefix + "networkCollection")).thenReturn("<policyFqdns>GN_EVPN_Test</policyFqdns>")
+			when(mockExecution.getVariable(Prefix + "tableRefCollection")).thenReturn("<routeTableFqdns>refFQDN1</routeTableFqdns><routeTableFqdns>refFQDN2</routeTableFqdns>")
+			when(mockExecution.getVariable(Prefix + "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(Prefix + "rollbackEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.prepareCreateNetworkRequest(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			verify(mockExecution).setVariable(Prefix + "createNetworkRequest", createNetworkRequest_SRIOV)
+
+		}
+
+
+		@Test
+		//@Ignore
+		public void prepareSDNCRequest() {
+
+			println "************ prepareSDNCRequest ************* "
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedvIPRNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable(Prefix + "networkId")).thenReturn("networkId")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:8090/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)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.prepareSDNCRequest(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "assignSDNCRequest", assignSDNCRequest)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareSDNCRequest_decodeUrlLink() {
+
+			println "************ prepareSDNCRequest ************* "
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedvIPRNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable(Prefix + "networkId")).thenReturn("networkId")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:8090/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/VIRTUAL%20USP/service-instances/service-instance/6d4eb22a-82f1-4257-9f80-4176262cfe69/")
+
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.prepareSDNCRequest(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "assignSDNCRequest", assignSDNCRequest_decodeUrlLink)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareRpcSDNCRequest() {
+
+			println "************ prepareRpcSDNCRequest ************* "
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedvIPRNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56") // test ONLY
+			when(mockExecution.getVariable(Prefix + "networkId")).thenReturn("networkId")
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:8090/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)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.prepareRpcSDNCRequest(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "assignSDNCRequest", assignRpcSDNCRequest)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareSDNCRollbackRequest() {
+
+			println "************ prepareSDNCRollbackRequest ************* "
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedvIPRNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable(Prefix + "assignSDNCResponse")).thenReturn(assignResponse)
+			when(mockExecution.getVariable(Prefix + "networkId")).thenReturn("8abc633a-810b-4ca5-8b3a-09511d13a2ce")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:8090/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)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.prepareSDNCRollbackRequest(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "rollbackSDNCRequest", sdncRollbackRequest)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareRpcSDNCActivateRequest() {
+
+			println "************ prepareRpcSDNCActivateRequest ************* "
+
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedvIPRNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable(Prefix + "networkId")).thenReturn("networkId")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56") // test ONLY
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:8090/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)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.prepareRpcSDNCActivateRequest(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "activateSDNCRequest", activateSDNCRequest)
+
+		}
+
+
+		@Test
+		//@Ignore
+		public void prepareRpcSDNCRollbackRequest() {
+
+			println "************ prepareRpcSDNCRollbackRequest ************* "
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedvIPRNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable(Prefix + "assignSDNCResponse")).thenReturn(assignResponse)
+			when(mockExecution.getVariable(Prefix + "networkId")).thenReturn("8abc633a-810b-4ca5-8b3a-09511d13a2ce")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56") // test ONLY
+			when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:8090/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)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.prepareRpcSDNCRollbackRequest(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "rollbackSDNCRequest", sdncRpcRollbackRequest)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareRpcSDNCActivateRollback() {
+
+			println "************ prepareRpcSDNCActivateRollback ************* "
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedvIPRNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable(Prefix + "activateSDNCResponse")).thenReturn(assignResponse)
+			when(mockExecution.getVariable(Prefix + "networkId")).thenReturn("8abc633a-810b-4ca5-8b3a-09511d13a2ce")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56") // test ONLY
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:8090/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)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.prepareRpcSDNCActivateRollback(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix)
+			//verify(mockExecution).setVariable("mso-request-id", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution).setVariable(Prefix + "requestId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution).setVariable("mso-service-instance-id", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution).setVariable(Prefix + "rollbackActivateSDNCRequest", sdncActivateRollbackRequest)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkName_200() {
+
+			println "************ callRESTQueryAAINetworkName ************* "
+
+			WireMock.reset();
+			MockGetNetworkByName("MNS-25180-L-01-dmz_direct_net_1", "CreateNetworkV2/createNetwork_queryName_AAIResponse_Success.xml");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(networkInputs)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_network_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTQueryAAINetworkName(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "queryNameAAIRequest", "http://localhost:8090/aai/v8/network/l3-networks/l3-network?network-name=MNS-25180-L-01-dmz_direct_net_1")
+
+			verify(mockExecution).setVariable(Prefix + "aaiNameReturnCode", "200")
+			verify(mockExecution).setVariable(Prefix + "orchestrationStatus", "PENDING-CREATE")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkName_404() {
+
+			println "************ callRESTQueryAAINetworkName ************* "
+
+			WireMock.reset();
+			MockGetNetworkByName_404("CreateNetworkV2/createNetwork_queryName_AAIResponse_Success.xml", "myOwn_Network");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(networkInputs_404)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_network_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTQueryAAINetworkName(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "queryNameAAIRequest", "http://localhost:8090/aai/v8/network/l3-networks/l3-network?network-name=myOwn_Network")
+			verify(mockExecution).setVariable(Prefix + "aaiNameReturnCode", "404")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkId_200() {
+
+			println "************ callRESTQueryAAINetworkId ************* "
+
+			WireMock.reset();
+			MockGetNetworkByIdWithDepth("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_Success.xml", "1");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "assignSDNCResponse")).thenReturn(sdncAdapterWorkflowAssignResponse)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_network_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_l3_network_uri")).thenReturn("/aai/v9/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1702")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTQueryAAINetworkId(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "queryIdAAIRequest", "http://localhost:8090/aai/v9/network/l3-networks/l3-network/49c86598-f766-46f8-84f8-8d1c1b10f9b4"+"?depth=1")
+			verify(mockExecution).setVariable(Prefix + "aaiIdReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAICloudRegion30_200() {
+
+			println "************ callRESTQueryAAICloudRegion30_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix)
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(expectedvIPRNetworkRequest)
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_default_aai_cloud_infrastructure_cloud_region_uri")).thenReturn("/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic")
+			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("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTQueryAAICloudRegion(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionRequest", "http://localhost:8090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/RDM2WAGPLCP")
+			verify(mockExecution, atLeast(2)).setVariable(Prefix + "queryCloudRegionReturnCode", "200")
+			verify(mockExecution).setVariable(Prefix + "isCloudRegionGood", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAICloudRegion25_200() {
+
+			println "************ callRESTQueryAAICloudRegion25_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix)
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(expectedvIPRNetworkRequest)
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_default_aai_cloud_infrastructure_cloud_region_uri")).thenReturn("/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic")
+			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("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTQueryAAICloudRegion(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionRequest", "http://localhost:8090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/RDM2WAGPLCP")
+			verify(mockExecution, atLeast(2)).setVariable(Prefix + "queryCloudRegionReturnCode", "200")
+			verify(mockExecution).setVariable(Prefix + "isCloudRegionGood", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAICloudRegion_NotFound() {
+
+			println "************ callRESTQueryAAICloudRegionFake ************* "
+
+			WireMock.reset();
+			MockGetNetworkCloudRegion_404("MDTWNJ21")
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix)
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(vnfRequestFakeRegion)
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			//old: when(mockExecution.getVariable("URN_mso_workflow_default_aai_cloud_infrastructure_cloud_region_uri")).thenReturn("/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTQueryAAICloudRegion(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionRequest", "http://localhost:8090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/MDTWNJ21")
+			verify(mockExecution, atLeast(1)).setVariable(Prefix + "queryCloudRegionReturnCode", "404")
+			verify(mockExecution).setVariable(Prefix + "cloudRegionPo", "MDTWNJ21")
+			verify(mockExecution).setVariable(Prefix + "cloudRegionSdnc", "AAIAIC25")
+			verify(mockExecution).setVariable(Prefix + "isCloudRegionGood", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkVpnBinding_200() {
+
+			println "************ callRESTQueryAAINetworkVpnBinding_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+			MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "c980a6ef-3b88-49f0-9751-dbad8608d0a6");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "queryIdAAIResponse")).thenReturn(queryIdAIIResponse) // v6
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_default_aai_network_vpn-binding_uri")).thenReturn("")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_network_vpn-binding_uri")).thenReturn("")
+			when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_vpn_binding_uri")).thenReturn("/aai/v8/network/vpn-bindings/vpn-binding")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTQueryAAINetworkVpnBinding(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "vpnCount", 2)
+			verify(mockExecution).setVariable(Prefix + "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(Prefix + "queryVpnBindingAAIRequest", "http://localhost:8090/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017?depth=all")
+			verify(mockExecution, atLeast(2)).setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkVpnBinding_TestScenario01_200() {
+
+			println "************ callRESTQueryAAINetworkVpnBinding_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "queryIdAAIResponse")).thenReturn(queryIdAIIResponseTestScenario01)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_default_aai_network_vpn-binding_uri")).thenReturn("")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_network_vpn-binding_uri")).thenReturn("")
+			when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_vpn_binding_uri")).thenReturn("/aai/v8/network/vpn-bindings/vpn-binding")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTQueryAAINetworkVpnBinding(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "vpnCount", 1)
+			verify(mockExecution).setVariable(Prefix + "vpnBindings", ['/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/'])
+			// the last vpnBinding value is saved.
+			verify(mockExecution).setVariable(Prefix + "queryVpnBindingAAIRequest", "http://localhost:8090/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017?depth=all")
+			verify(mockExecution).setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkVpnBinding_200_URN_Uri() {
+
+			println "************ callRESTQueryAAINetworkVpnBinding_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+			MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "c980a6ef-3b88-49f0-9751-dbad8608d0a6");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "queryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			//when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_network_vpn_binding_uri")).thenReturn("/aai/v8/network/vpn-bindings/vpn-binding")
+			//when(mockExecution.getVariable("URN_mso_workflow_default_aai_network_vpn_binding_uri")).thenReturn("/aai/v8/network/vpn-bindings/vpn-binding")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTQueryAAINetworkVpnBinding(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "vpnCount", 2)
+			verify(mockExecution).setVariable(Prefix + "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(Prefix + "queryVpnBindingAAIRequest", "http://localhost:8090/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017?depth=all")
+			verify(mockExecution, atLeast(2)).setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkVpnBinding_NotPresent() {
+
+			println "************ callRESTQueryAAINetworkVpnBinding_NotPresent ************* "
+
+			WireMock.reset();
+			MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+
+			when(mockExecution.getVariable(Prefix + "queryIdAAIResponse")).thenReturn(queryIdAIIResponseVpnNotPresent)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			//when(mockExecution.getVariable("URN_mso_workflow_default_aai_network_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTQueryAAINetworkVpnBinding(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
+			verify(mockExecution).setVariable(Prefix + "vpnCount", 0)
+			verify(mockExecution).setVariable(Prefix + "queryVpnBindingAAIResponse", aaiVpnResponseStub)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkPolicy_200() {
+
+			println "************ callRESTQueryAAINetworkPolicy_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkPolicy("CreateNetworkV2/createNetwork_queryNetworkPolicy_AAIResponse_Success.xml", "cee6d136-e378-4678-a024-2cd15f0ee0cg");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "queryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			//when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_network_policy_uri")).thenReturn("")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_default_aai_network_policy_uri")).thenReturn("/aai/v8/network/network-policies/network-policy")
+			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("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTQueryAAINetworkPolicy(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "networkPolicyCount", 1)
+			verify(mockExecution).setVariable(Prefix + "networkPolicyUriList", ['/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg'])
+			// the last vpnBinding value is saved.
+			verify(mockExecution).setVariable(Prefix + "queryNetworkPolicyAAIRequest", "http://localhost:8090/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg?depth=all")
+			verify(mockExecution).setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkTableRef_200() {
+
+			println "************ callRESTQueryAAINetworkTableRef_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkTableReference("CreateNetworkV2/createNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", "refFQDN1");
+			MockGetNetworkTableReference("CreateNetworkV2/createNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", "refFQDN2");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "queryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_network_table_reference_uri")).thenReturn("")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_network_table_reference_uri")).thenReturn("")
+			when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_route_table_reference_uri")).thenReturn("/aai/v8/network/route-table-references/route-table-reference")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTQueryAAINetworkTableRef(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "networkTableRefCount", 2)
+			verify(mockExecution).setVariable(Prefix + "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(Prefix + "queryNetworkTableRefAAIRequest", "http://localhost:8090/aai/v8/network/route-table-references/route-table-reference/refFQDN1?depth=all")
+			verify(mockExecution, atLeast(2)).setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTReQueryAAINetworkId_200() {
+
+			println "************ callRESTReQueryAAINetworkId ************* "
+
+			WireMock.reset();
+			MockGetNetworkByIdWithDepth("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_Success.xml", "1");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "networkId")).thenReturn("49c86598-f766-46f8-84f8-8d1c1b10f9b4")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			//when(mockExecution.getVariable("URN_mso_workflow_default_aai_l3_network_version")).thenReturn("8")
+			when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_l3_network_uri")).thenReturn("/aai/v9/network/l3-networks/l3-network")
+			//old: when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_network_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1702")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTReQueryAAINetworkId(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "requeryIdAAIRequest", "http://localhost:8090/aai/v9/network/l3-networks/l3-network/49c86598-f766-46f8-84f8-8d1c1b10f9b4"+"?depth=1")
+			verify(mockExecution).setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTUpdateContrailAAINetworkREST_200() {
+
+			println "************ callRESTUpdateContrailAAINetwork ************* "
+
+			WireMock.reset();
+			MockPutNetworkIdWithDepth("CreateNetworkV2/createNetwork_updateContrail_AAIResponse_Success.xml", "49c86598-f766-46f8-84f8-8d1c1b10f9b4", "1");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "networkId")).thenReturn("49c86598-f766-46f8-84f8-8d1c1b10f9b4")
+			when(mockExecution.getVariable(Prefix + "requeryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable(Prefix + "createNetworkResponse")).thenReturn(createNetworkResponseREST)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_network_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_l3_network_uri")).thenReturn("/aai/v9/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "rollbackEnabled")).thenReturn("false")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTUpdateContrailAAINetwork(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "updateContrailAAIUrlRequest", "http://localhost:8090/aai/v9/network/l3-networks/l3-network/49c86598-f766-46f8-84f8-8d1c1b10f9b4"+"?depth=1")
+			verify(mockExecution).setVariable(Prefix + "updateContrailAAIPayloadRequest", updateContrailAAIPayloadRequest)
+			verify(mockExecution).setVariable(Prefix + "aaiUpdateContrailReturnCode", "200")
+			//verify(mockExecution).setVariable(Prefix + "updateContrailAAIResponse", updateContrailAAIResponse)
+			verify(mockExecution).setVariable(Prefix + "isPONR", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTUpdateContrailAAINetworkREST_200_segmentation() {
+
+			println "************ callRESTUpdateContrailAAINetwork ************* "
+
+			WireMock.reset();
+			MockPutNetworkIdWithDepth("CreateNetworkV2/createNetwork_updateContrail_AAIResponse_Success.xml", "49c86598-f766-46f8-84f8-8d1c1b10f9b4", "1");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "networkId")).thenReturn("49c86598-f766-46f8-84f8-8d1c1b10f9b4")
+			when(mockExecution.getVariable(Prefix + "requeryIdAAIResponse")).thenReturn(queryIdAIIResponse_segmentation)
+			when(mockExecution.getVariable(Prefix + "createNetworkResponse")).thenReturn(createNetworkResponseREST)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_network_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("URN_mso_workflow_DoCreateNetworkInstance_aai_l3_network_uri")).thenReturn("/aai/v9/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "rollbackEnabled")).thenReturn("false")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.callRESTUpdateContrailAAINetwork(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "updateContrailAAIUrlRequest", "http://localhost:8090/aai/v9/network/l3-networks/l3-network/49c86598-f766-46f8-84f8-8d1c1b10f9b4"+"?depth=1")
+			verify(mockExecution).setVariable(Prefix + "updateContrailAAIPayloadRequest", updateContrailAAIPayloadRequest_segmentation)
+			verify(mockExecution).setVariable(Prefix + "aaiUpdateContrailReturnCode", "200")
+			//verify(mockExecution).setVariable(Prefix + "updateContrailAAIResponse", updateContrailAAIResponse)
+			verify(mockExecution).setVariable(Prefix + "isPONR", true)
+
+		}
+
+		
+
+		@Test
+		//@Ignore
+		public void validateCreateNetworkResponseREST() {
+
+			println "************ validateNetworkResponse ************* "
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "createNetworkResponse")).thenReturn(createNetworkResponseREST)
+			when(mockExecution.getVariable(Prefix + "networkReturnCode")).thenReturn('200')
+
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.validateCreateNetworkResponse(mockExecution)
+
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "createNetworkResponse", createNetworkResponseREST)
+			verify(mockExecution).setVariable(Prefix + "isNetworkRollbackNeeded", true)
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkRequest", createRollbackNetworkRequest)
+
+		}
+
+		@Test
+		//@Ignore
+		public void validateCreateNetworkResponseREST_Error() {
+
+			println "************ validateNetworkResponse ************* "
+
+			WorkflowException workflowException = new WorkflowException("DoCreateNetworkInstance", 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(Prefix + "createNetworkResponse")).thenReturn(networkException500)
+			when(mockExecution.getVariable(Prefix + "networkReturnCode")).thenReturn('500')
+
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			try {
+				DoCreateNetworkInstance.validateCreateNetworkResponse(mockExecution)
+			} catch (Exception ex) {
+				println " Test End - Handle catch-throw BpmnError()! "
+			}
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			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(Prefix + "assignSDNCResponse")).thenReturn(sdncAdapterWorkflowResponse)
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable("SDNCA_SuccessIndicator")).thenReturn(true)
+			when(mockExecution.getVariable(Prefix + "sdncReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "isResponseGood")).thenReturn(true)
+
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			try {
+			  DoCreateNetworkInstance.validateSDNCResponse(mockExecution)
+			  verify(mockExecution).setVariable(Prefix + "isSdncRollbackNeeded", true)
+
+			} catch (Exception ex) {
+				println " Graceful Exit - " + ex.getMessage()
+			}
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+			//verify(mockExecution).setVariable(Prefix + "isSdncRollbackNeeded", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void validateSDNCResponse_Error() {
+
+			println "************ validateSDNCResponse ************* "
+
+			WorkflowException workflowException = new WorkflowException("DoCreateNetworkInstance", 2500, "Received error from SNDC Adapter: HTTP Status 500.")
+
+			//ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "assignSDNCResponse")).thenReturn(sdncAdapterWorkflowResponse_Error)
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable("SDNCA_SuccessIndicator")).thenReturn(false)
+			when(mockExecution.getVariable(Prefix + "sdncReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+
+
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			try {
+				DoCreateNetworkInstance.validateSDNCResponse(mockExecution)
+			} catch (Exception ex) {
+				println " Graceful Exit! - " + ex.getMessage()
+			}
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			//verify(mockExecution).setVariable(Prefix + "sdncResponseSuccess", false)
+
+		}
+
+		@Test
+		//@Ignore
+		public void validateRpcSDNCActivateResponse() {
+
+			println "************ validateRpcSDNCActivateResponse ************* "
+
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "activateSDNCResponse")).thenReturn(sdncAdapterWorkflowResponse)
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable("SDNCA_SuccessIndicator")).thenReturn(true)
+			when(mockExecution.getVariable(Prefix + "sdncActivateReturnCode")).thenReturn("200")
+
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			try {
+			  DoCreateNetworkInstance.validateRpcSDNCActivateResponse(mockExecution)
+			  verify(mockExecution).setVariable(Prefix + "isSdncActivateRollbackNeeded", true)
+
+			} catch (Exception ex) {
+				println " Graceful Exit - " + ex.getMessage()
+			}
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+			//verify(mockExecution).setVariable(Prefix + "isSdncRollbackNeeded", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareRollbackData() {
+
+			println "************ prepareRollbackData() ************* "
+
+
+
+			WorkflowException workflowException = new WorkflowException("DoCreateNetworkInstance", 2500, "Received error from Network Adapter: JBWEB000065: HTTP Status 500.")
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn(rollbackSDNCRequest)
+			when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCRequest")).thenReturn(rollbackActivateSDNCRequest)
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn(rollbackNetworkRequest)
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.prepareRollbackData(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+		}
+
+		@Test
+		@Ignore
+		public void postProcessResponse() {
+
+			println "************ postProcessResponse() ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "isException")).thenReturn(false)
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1702")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn(sdncRpcRollbackRequest)
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn(rollbackSDNCRequest)
+			when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCRequest")).thenReturn(sdncActivateRollbackRequest)
+
+
+			// preProcessRequest(Execution execution)
+			DoCreateNetworkInstance DoCreateNetworkInstance = new DoCreateNetworkInstance()
+			DoCreateNetworkInstance.postProcessResponse(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "Success", true)
+
+		}
+
+		private ExecutionEntity setupMock() {
+
+			ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
+			when(mockProcessDefinition.getKey()).thenReturn("DoCreateNetworkInstance")
+			RepositoryService mockRepositoryService = mock(RepositoryService.class)
+			when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
+			when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DoCreateNetworkInstance")
+			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("DoCreateNetworkInstance")
+			when(mockExecution.getProcessInstanceId()).thenReturn("DoCreateNetworkInstance")
+			when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
+			when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
+
+			return mockExecution
+		}
+}
\ No newline at end of file
diff --git a/bpmn/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
deleted file mode 100644
index e9c27b0..0000000
--- a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV1Test.groovy
+++ /dev/null
@@ -1,218 +0,0 @@
-/*- 
- * ============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/DoDeleteNetworkInstanceRollbackTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteNetworkInstanceRollbackTest.groovy
new file mode 100644
index 0000000..96a84de
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteNetworkInstanceRollbackTest.groovy
@@ -0,0 +1,323 @@
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import static org.mockito.Mockito.*
+
+import org.camunda.bpm.engine.delegate.BpmnError
+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.impl.pvm.process.ProcessDefinitionImpl
+import org.camunda.bpm.engine.repository.ProcessDefinition
+import org.camunda.bpm.engine.runtime.Execution;
+import org.mockito.MockitoAnnotations
+import org.mockito.runners.MockitoJUnitRunner
+import org.mockito.internal.debugging.MockitoDebuggerImpl
+import org.openecomp.mso.bpmn.common.scripts.MsoUtils
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.junit.Before
+import org.junit.Rule;
+import org.junit.Test
+import org.junit.Ignore
+import org.junit.runner.RunWith
+
+import static org.junit.Assert.*;
+
+import com.github.tomakehurst.wiremock.client.WireMock;
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.commons.lang3.*
+
+
+@RunWith(MockitoJUnitRunner.class)
+class DoDeleteNetworkInstanceRollbackTest  {
+	
+	@Rule
+	public WireMockRule wireMockRule = new WireMockRule(8090);
+	
+		def utils = new MsoUtils()
+		String Prefix="DELNWKIR_"
+
+
+		String rollbackNetworkRequest =
+		"""<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>
+      <networkCreated>true</networkCreated>
+      <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+      <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+      <msoRequest>
+         <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+         <serviceInstanceId/>
+      </msoRequest>
+   </rollback>
+</NetworkAdapter:rollbackNetwork>"""			
+								
+					String rollbackDeActivateSDNCRequest =
+		"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>activate</sdncadapter:SvcAction>
+      <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
+      <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
+      <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>CreateNetworkInstance</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-information>
+         <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>invariant-uuid</model-invariant-uuid>
+            <model-customization-uuid>customization-uuid</model-customization-uuid>
+            <model-uuid>uuid</model-uuid>
+            <model-version>version</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-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 rollbackSDNCRequest =
+		"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>CreateNetworkInstance</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-information>
+         <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>invariant-uuid</model-invariant-uuid>
+            <model-customization-uuid>customization-uuid</model-customization-uuid>
+            <model-uuid>uuid</model-uuid>
+            <model-version>version</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-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>"""			
+		
+// - - - - - - - -
+
+
+	    @Before
+		public void init()
+		{
+			MockitoAnnotations.initMocks(this)
+			
+		}
+		
+		public void initializeVariables (Execution mockExecution) {
+
+			verify(mockExecution).setVariable(Prefix + "WorkflowException", null)
+		
+			verify(mockExecution).setVariable(Prefix + "rollbackDeactivateSDNCRequest", null)
+			verify(mockExecution).setVariable(Prefix + "rollbackDeactivateSDNCResponse", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackDeactivateSDNCReturnCode", "")
+	
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkRequest", null)
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkResponse", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkReturnCode", "")
+					
+			verify(mockExecution).setVariable(Prefix + "Success", false)
+			verify(mockExecution).setVariable(Prefix + "fullRollback", false)
+			
+		}
+		
+		@Test
+		//@Ignore  
+		public void preProcessRequest() {
+			
+			println "************ preProcessRequest ************* " 
+			
+			WorkflowException workflowException = new WorkflowException("DoCreateNetworkInstance", 2500, "Received error from Network Adapter: JBWEB000065: HTTP Status 500.")
+			Map<String, String> rollbackData = new HashMap<String, String>();
+			rollbackData.put("rollbackDeactivateSDNCRequest", rollbackDeActivateSDNCRequest)
+			rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
+			rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
+					
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+			when(mockExecution.getVariable("rollbackData")).thenReturn(rollbackData)
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1702")
+			
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_endpoint")).thenReturn("http://localhost:8090/SDNCAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_network_rest_endpoint")).thenReturn("http://localhost:8090/networks/NetworkAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_resource_endpoint")).thenReturn("http://localhost:8090/SDNCAdapterRpc")
+			
+			
+			// preProcessRequest(Execution execution)						
+			DoDeleteNetworkInstanceRollback DoDeleteNetworkInstanceRollback = new DoDeleteNetworkInstanceRollback()
+			DoDeleteNetworkInstanceRollback.preProcessRequest(mockExecution)
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+			
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+								
+		}
+		
+
+		@Test
+		//@Ignore
+		public void validateRollbackResponses_Good() {
+			
+			WorkflowException workflowException = new WorkflowException("DoDeleteNetworkInstanceRollback", 2500, "AAI Update Contrail Failed.  Error 404.")
+			WorkflowException expectedWorkflowException = new WorkflowException("DoDeleteNetworkInstanceRollback", 2500, "AAI Update Contrail Failed.  Error 404. + SNDC deactivate rollback completed. + PO Network rollback completed. + SNDC unassign rollback completed.")
+				  
+			println "************ validateRollbackResponses_Good() ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+
+			when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "WorkflowException")).thenReturn(workflowException)
+			when(mockExecution.getVariable(Prefix + "fullRollback")).thenReturn(false)
+									
+			DoDeleteNetworkInstanceRollback DoDeleteNetworkInstanceRollback = new DoDeleteNetworkInstanceRollback()
+			DoDeleteNetworkInstanceRollback.validateRollbackResponses(mockExecution)
+			
+			// verify set prefix = Prefix + ""
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution, atLeast(1)).setVariable("rolledBack", true)
+			verify(mockExecution, atLeast(1)).setVariable("wasDeleted", true)
+			verify(mockExecution).setVariable("WorkflowException", refEq(expectedWorkflowException, any(WorkflowException.class)))
+			//verify(mockExecution).setVariable("WorkflowException", expectedWorkflowException)
+		}
+		
+		@Test
+		//@Ignore
+		public void validateRollbackResponses_FullRollback() {
+			
+			Map<String, String> rollbackData = new HashMap<String, String>();
+			rollbackData.put("rollbackDeactivateSDNCRequest", rollbackDeActivateSDNCRequest)
+			rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
+			rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
+				  
+			println "************ validateRollbackResponses_FullRollback() ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+
+			when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "WorkflowException")).thenReturn(null)
+			when(mockExecution.getVariable(Prefix + "fullRollback")).thenReturn(true)
+			when(mockExecution.getVariable("rollbackData")).thenReturn(rollbackData)
+									
+			DoDeleteNetworkInstanceRollback DoDeleteNetworkInstanceRollback = new DoDeleteNetworkInstanceRollback()
+			DoDeleteNetworkInstanceRollback.validateRollbackResponses(mockExecution)
+			
+			// verify set prefix = Prefix + ""
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution, atLeast(1)).setVariable("rollbackSuccessful", true)
+			verify(mockExecution, atLeast(1)).setVariable("rollbackError", false)
+			
+		}
+		
+		
+		private ExecutionEntity setupMock() {
+			
+			ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
+			when(mockProcessDefinition.getKey()).thenReturn("DoDeleteNetworkInstanceRollback")
+			RepositoryService mockRepositoryService = mock(RepositoryService.class)
+			when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
+			when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DoDeleteNetworkInstanceRollback")
+			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("DoDeleteNetworkInstanceRollback")
+			when(mockExecution.getProcessInstanceId()).thenReturn("DoDeleteNetworkInstanceRollback")
+			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/DoDeleteNetworkInstanceTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteNetworkInstanceTest.groovy
new file mode 100644
index 0000000..0f87b64
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteNetworkInstanceTest.groovy
@@ -0,0 +1,1929 @@
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import static org.mockito.Mockito.*
+
+import static org.openecomp.mso.bpmn.mock.StubResponseNetworkAdapter.MockNetworkAdapter;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkCloudRegion;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkCloudRegion_404;
+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.Ignore
+import org.junit.Rule
+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.MsoUtils
+import org.openecomp.mso.bpmn.core.WorkflowException
+
+import com.github.tomakehurst.wiremock.client.WireMock
+import com.github.tomakehurst.wiremock.junit.WireMockRule
+import org.apache.commons.lang3.*
+
+
+@RunWith(MockitoJUnitRunner.class)
+class DoDeleteNetworkInstanceTest  {
+
+	@Rule
+	public WireMockRule wireMockRule = new WireMockRule(8090);
+
+		def utils = new MsoUtils()
+		String Prefix="DELNWKI_"
+
+		String incomingJsonRequest =
+		"""{ "requestDetails": {
+	      "modelInfo": {
+			"modelType": "network",
+  			"modelCustomizationId": "f21df226-8093-48c3-be7e-0408fcda0422",
+  			"modelName": "CONTRAIL_EXTERNAL",
+  			"modelVersion": "1.0"
+		  },
+		  "cloudConfiguration": {
+  			"lcpCloudRegionId": "RDM2WAGPLCP",
+  			"tenantId": "7dd5365547234ee8937416c65507d266"
+		  },
+		  "requestInfo": {
+  			"instanceName": "HSL_direct_net_2",
+  			"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 expectedDoDeleteNetworkInstanceRequest =
+  """{ "requestDetails": {
+	      "modelInfo": {
+			"modelType": "networkTyp",
+  			"modelId": "modelId",
+  			"modelNameVersionId": "modelNameVersionId",
+  			"modelName": "CONTRAIL_EXTERNAL",
+  			"modelVersion": "1"
+		  },
+		  "cloudConfiguration": {
+  			"lcpCloudRegionId": "RDM2WAGPLCP",
+  			"tenantId": "7dd5365547234ee8937416c65507d266"
+		  },
+		  "requestInfo": {
+  			"instanceName": "HSL_direct_net_2",
+  			"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": []
+		  }
+  }"""
+
+    // expectedVnfRequest
+	String expectedNetworkRequest =
+"""<network-request xmlns="http://www.w3.org/2001/XMLSchema">
+   <request-info>
+      <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+      <action>DELETE</action>
+      <source>VID</source>
+      <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+   </request-info>
+   <network-inputs>
+      <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+      <network-name>HSL_direct_net_2</network-name>
+      <network-type>CONTRAIL_EXTERNAL</network-type>
+      <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+      <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <backout-on-failure>false</backout-on-failure>
+      <sdncVersion>1610</sdncVersion>
+   </network-inputs>
+   <network-params/>
+</network-request>"""
+
+	String expectedVperNetworkRequest =
+"""<network-request xmlns="http://www.w3.org/2001/XMLSchema">
+   <request-info>
+      <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+      <action>DELETE</action>
+      <source>VID</source>
+      <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+   </request-info>
+   <network-inputs>
+      <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>
+      <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+      <global-customer-id>globalId_45678905678</global-customer-id>
+      <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <backout-on-failure>false</backout-on-failure>
+      <failIfExist>false</failIfExist>
+      <networkModelInfo>
+         <modelName>CONTRAIL_EXTERNAL</modelName>
+         <modelUuid>sn5256d1-5a33-55df-13ab-12abad84e111</modelUuid>
+         <modelInvariantUuid>sn5256d1-5a33-55df-13ab-12abad84e764</modelInvariantUuid>
+         <modelVersion>1</modelVersion>
+         <modelCustomizationUuid>sn5256d1-5a33-55df-13ab-12abad84e222</modelCustomizationUuid>
+      </networkModelInfo>
+      <serviceModelInfo>
+         <modelName/>
+         <modelUuid/>
+         <modelInvariantUuid/>
+         <modelVersion/>
+         <modelCustomizationUuid/>
+      </serviceModelInfo>
+      <sdncVersion>1702</sdncVersion>
+   </network-inputs>
+   <network-params/>
+</network-request>"""	 
+
+	String expected_networkInput =
+	"""<network-inputs xmlns="http://www.w3.org/2001/XMLSchema">
+   <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+   <network-name>HSL_direct_net_2</network-name>
+   <network-type>CONTRAIL_EXTERNAL</network-type>
+   <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+   <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+   <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <backout-on-failure>false</backout-on-failure>
+   <sdncVersion>1610</sdncVersion>
+</network-inputs>"""
+
+	String expectedVper_networkInput = 
+"""<network-inputs xmlns="http://www.w3.org/2001/XMLSchema">
+   <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>
+   <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+   <global-customer-id>globalId_45678905678</global-customer-id>
+   <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+   <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <backout-on-failure>false</backout-on-failure>
+   <failIfExist>false</failIfExist>
+   <networkModelInfo>
+      <modelName>CONTRAIL_EXTERNAL</modelName>
+      <modelUuid>sn5256d1-5a33-55df-13ab-12abad84e111</modelUuid>
+      <modelInvariantUuid>sn5256d1-5a33-55df-13ab-12abad84e764</modelInvariantUuid>
+      <modelVersion>1</modelVersion>
+      <modelCustomizationUuid>sn5256d1-5a33-55df-13ab-12abad84e222</modelCustomizationUuid>
+   </networkModelInfo>
+   <serviceModelInfo>
+      <modelName/>
+      <modelUuid/>
+      <modelInvariantUuid/>
+      <modelVersion/>
+      <modelCustomizationUuid/>
+   </serviceModelInfo>
+   <sdncVersion>1702</sdncVersion>
+</network-inputs>"""	
+
+// emptyRegionVnfRequest
+String emptyRegionVnfRequest =
+"""<network-request xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+   <request-info>
+      <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+      <action>DELETE</action>
+      <source>PORTAL</source>
+   </request-info>
+   <network-inputs>
+      <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+      <network-name>HSL_direct_net_2</network-name>
+      <network-type>CONTRAIL_BASIC</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">0</param>
+   </network-params>
+</network-request>"""
+
+String vnfRequestCloudRegionNotFound =
+"""<network-request xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+   <request-info>
+      <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+      <action>DELETE</action>
+      <source>PORTAL</source>
+   </request-info>
+   <network-inputs>
+      <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+      <network-name>HSL_direct_net_2</network-name>
+      <network-type>CONTRAIL_BASIC</network-type>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <aic-cloud-region>MDTWNJ21</aic-cloud-region>
+      <tenant-id>e81d842d3e8b45c5a59f57cd76af3aaf</tenant-id>
+   </network-inputs>
+   <network-params>
+      <param name="shared">0</param>
+   </network-params>
+</network-request>"""
+
+		String vnfPayload =
+	"""<rest:payload xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+              contentType="text/xml">
+   <network-request xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+      <request-info>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <action>DELETE</action>
+         <source>PORTAL</source>
+      </request-info>
+      <network-inputs>
+         <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+         <network-name>HSL_direct_net_2</network-name>
+         <network-type>CONTRAIL_BASIC</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>
+      <network-params>
+         <param name="shared">0</param>
+      </network-params>
+   </network-request>
+</rest:payload>"""
+
+	String vnfPayload_MissingId =
+"""<rest:payload xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+              contentType="text/xml">
+   <network-request xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+      <request-info>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <action>DELETE</action>
+         <source>PORTAL</source>
+      </request-info>
+      <network-inputs>
+         <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+         <network-name/>
+         <network-type>CONTRAIL_BASIC</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>
+      <network-params>
+         <param name="shared">0</param>
+      </network-params>
+   </network-request>
+</rest:payload>"""
+
+		String vnfRequestRESTPayload =
+"""<network-request xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+      <request-info>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <action>DELETE</action>
+         <source>PORTAL</source>
+      </request-info>
+      <network-inputs>
+         <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+         <network-name>HSL_direct_net_2</network-name>
+         <network-type>CONTRAIL_BASIC</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>
+      <network-outputs>
+         <network-id>id</network-id>
+         <network-name>name</network-name>
+      </network-outputs>
+      <network-params>
+         <param name="shared">0</param>
+      </network-params>
+  </network-request>"""
+
+
+String incomingRequestMissingCloudRegion =
+"""{ "requestDetails": {
+	      "modelInfo": {
+			"modelType": "network",
+  			"modelCustomizationId": "f21df226-8093-48c3-be7e-0408fcda0422",
+  			"modelName": "CONTRAIL_EXTERNAL",
+  			"modelVersion": "1.0"
+		  },
+		  "cloudConfiguration": {
+  			"tenantId": "7dd5365547234ee8937416c65507d266"
+		  },
+		  "requestInfo": {
+  			"instanceName": "HSL_direct_net_2",
+  			"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 expectedNetworkRequestMissingId =
+  """<network-request xmlns="http://www.w3.org/2001/XMLSchema">
+   <request-info>
+      <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+      <action>DELETE</action>
+      <source>VID</source>
+      <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+   </request-info>
+   <network-inputs>
+      <network-id/>
+      <network-name>HSL_direct_net_2</network-name>
+      <network-type>CONTRAIL_EXTERNAL</network-type>
+      <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+      <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <backout-on-failure>false</backout-on-failure>
+      <sdncVersion>1610</sdncVersion>
+   </network-inputs>
+   <network-params/>
+</network-request>"""
+
+String expectedNetworkRequestMissingCloudRegion =
+"""<network-request xmlns="http://www.w3.org/2001/XMLSchema">
+   <request-info>
+      <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+      <action>DELETE</action>
+      <source>VID</source>
+      <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+   </request-info>
+   <network-inputs>
+      <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+      <network-name>HSL_direct_net_2</network-name>
+      <network-type>CONTRAIL_EXTERNAL</network-type>
+      <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+      <aic-cloud-region>null</aic-cloud-region>
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <backout-on-failure>false</backout-on-failure>
+      <sdncVersion>1610</sdncVersion>
+   </network-inputs>
+   <network-params/>
+</network-request>"""
+
+		// vnfRESTRequest
+		String vnfRESTRequest =
+"""<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   xmlns="http://www.w3.org/2001/XMLSchema"
+                   statusCode="200">
+   <rest:payload contentType="text/xml">
+      <network-request>
+         <request-info>
+            <action>DELETE</action>
+            <source>VID</source>
+            <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+         </request-info>
+         <network-inputs>
+            <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+            <network-name>HSL_direct_net_2</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>
+            <userParams/>
+         </network-params>
+      </network-request>
+   </rest:payload>
+</rest:RESTResponse>"""
+
+	String networkInputs =
+  """<network-inputs xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+   <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+   <network-name>HSL_direct_net_2</network-name>
+   <network-type>CONTRAIL_BASIC</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 networkInputsNoType =
+"""<network-inputs xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+   <network-id></network-id>
+   <network-name></network-name>
+   <network-type></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 networkInputsMissingId =
+ """<network-inputs xmlns="http://www.w3.org/2001/XMLSchema">
+   <network-id/>
+   <network-name>HSL_direct_net_2</network-name>
+   <network-type>CONTRAIL_EXTERNAL</network-type>
+   <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+   <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+   <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <backout-on-failure>false</backout-on-failure>
+   <sdncVersion>1610</sdncVersion>
+</network-inputs>"""
+
+String networkInputsMissingCloudRegion =
+"""<network-inputs xmlns="http://www.w3.org/2001/XMLSchema">
+   <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+   <network-name>HSL_direct_net_2</network-name>
+   <network-type>CONTRAIL_EXTERNAL</network-type>
+   <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+   <aic-cloud-region>null</aic-cloud-region>
+   <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <backout-on-failure>false</backout-on-failure>
+   <sdncVersion>1610</sdncVersion>
+</network-inputs>"""
+
+	String MissingIdFault = "Invalid value or missing network-id element"
+	String MissingRegionFault = "Invalid value or missing 'aic-cloud-region' element"
+
+	String  invalidWorkflowException = """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+					<aetgt:ErrorMessage>Invalid value of network-id element</aetgt:ErrorMessage>
+					<aetgt:ErrorCode>2500</aetgt:ErrorCode>
+				  </aetgt:WorkflowException>"""
+
+
+	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="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 deleteNetworkRequest =
+    """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+  <soapenv:Header/>
+  <soapenv:Body>
+      <NetworkAdapter:deleteNetwork xmlns:NetworkAdapter="http://org.openecomp.mso/network">
+         <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+         <tenantId>e81d842d3e8b45c5a59f57cd76af3aaf</tenantId>
+         <networkType>CONTRAIL_BASIC</networkType>
+         <networkId>HSL_direct_net_2/57594a56-1c92-4a38-9caa-641c1fa3d4b6</networkId>
+         <request>
+            <requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+            <serviceInstanceId>0</serviceInstanceId>
+         </request>
+      </NetworkAdapter:deleteNetwork>
+  </soapenv:Body>
+</soapenv:Envelope>"""
+
+String deleteNetworkRESTRequest =
+"""<deleteNetworkRequest>
+   <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+   <tenantId>e81d842d3e8b45c5a59f57cd76af3aaf</tenantId>
+   <networkId>bdc5efe8-404a-409b-85f6-0dcc9eebae30</networkId>
+   <networkStackId>HSL_direct_net_2/57594a56-1c92-4a38-9caa-641c1fa3d4b6</networkStackId>
+   <networkType>CONTRAIL_BASIC</networkType>
+   <modelCustomizationUuid>sn5256d1-5a33-55df-13ab-12abad84e222</modelCustomizationUuid>
+   <skipAAI>true</skipAAI>
+   <msoRequest>
+      <requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+      <serviceInstanceId>f70e927b-6087-4974-9ef8-c5e4d5847ca4</serviceInstanceId>
+   </msoRequest>
+   <messageId>messageId_value</messageId>
+   <notificationUrl/>
+</deleteNetworkRequest>"""
+
+String deleteNetworkRESTRequestAlaCarte =
+"""<deleteNetworkRequest>
+   <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+   <tenantId>e81d842d3e8b45c5a59f57cd76af3aaf</tenantId>
+   <networkId>bdc5efe8-404a-409b-85f6-0dcc9eebae30</networkId>
+   <networkStackId>HSL_direct_net_2/57594a56-1c92-4a38-9caa-641c1fa3d4b6</networkStackId>
+   <networkType>CONTRAIL_BASIC</networkType>
+   <modelCustomizationUuid>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationUuid>
+   <skipAAI>true</skipAAI>
+   <msoRequest>
+      <requestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</requestId>
+      <serviceInstanceId>f70e927b-6087-4974-9ef8-c5e4d5847ca4</serviceInstanceId>
+   </msoRequest>
+   <messageId>messageId_value</messageId>
+   <notificationUrl/>
+</deleteNetworkRequest>"""
+
+    String deleteNetworkResponse_noRollback =
+"""<ns2:deleteNetworkResponse xmlns:ns2="http://org.openecomp.mso/network">
+	<networkDeleted>true</networkDeleted>
+</ns2:deleteNetworkResponse>
+"""
+
+	String deleteNetworkResponse =
+	"""<ns2:deleteNetworkResponse xmlns:ns2="http://org.openecomp.mso/network">
+	    <networkDeleted>true</networkDeleted>
+	    <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>
+		 <networkCreated>true</networkCreated>
+		 <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+		 <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+		 <msoRequest>
+			<requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+			<serviceInstanceId></serviceInstanceId>
+		 </msoRequest>
+	    </rollback>
+       </ns2:deleteNetworkResponse>"""
+
+	   String deleteRollbackNetworkRequest =
+	   """<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>
+      <networkCreated>true</networkCreated>
+      <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+      <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+      <msoRequest>
+         <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+         <serviceInstanceId/>
+      </msoRequest>
+   </rollback>
+</NetworkAdapter:rollbackNetwork>"""
+
+	String deleteNetworkResponseFalseCompletion =
+		"""<ns2:deleteNetworkResponse xmlns:ns2="http://org.openecomp.mso/network"
+		     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+		   <networkDeleted>false</networkDeleted>
+		</ns2:deleteNetworkResponse>"""
+
+	String deleteNetworkErrorResponse =
+	"""<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<deleteNetworkError>
+<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>
+</deleteNetworkError>
+"""
+
+	String deleteNetworkWorkflowException =
+	"""<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+					<aetgt:ErrorMessage>Received error from Network Adapter: 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</aetgt:ErrorMessage>
+					<aetgt:ErrorCode>7020</aetgt:ErrorCode>
+				  </aetgt:WorkflowException>"""
+
+String aaiWorkflowException =
+"""<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+					<aetgt:ErrorMessage>Bpmn error encountered in DoDeleteNetworkInstance flow. Unexpected Response from AAI Adapter - org.apache.http.conn.HttpHostConnectException: Connect to localhost:8090 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect</aetgt:ErrorMessage>
+					<aetgt:ErrorCode>2500</aetgt:ErrorCode>
+				  </aetgt:WorkflowException>"""
+
+	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/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>"""
+
+String aaiResponseWithRelationship =
+"""<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>"""
+
+	String deleteSDNCRequest =
+    """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>delete</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>DisconnectNetworkRequest</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/>
+         <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+         <subscriber-name/>
+      </service-information>
+      <network-request-information>
+         <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+         <network-type>CONTRAIL_BASIC</network-type>
+         <network-name>HSL_direct_net_2</network-name>
+         <tenant>7dd5365547234ee8937416c65507d266</tenant>
+         <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+      </network-request-information>
+   </aetgt:SDNCRequestData>
+</aetgt:SDNCAdapterWorkflowRequest>"""
+
+	String deleteRpcSDNCRequest =
+	"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>unassign</sdncadapter:SvcAction>
+      <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
+      <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
+      <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>DeleteNetworkInstance</request-action>
+         <source>VID</source>
+         <notification-url/>
+         <order-number/>
+         <order-version/>
+      </request-information>
+      <service-information>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>fcc85cb0-ad74-45d7-a5a1-17c8744fdb71</model-invariant-uuid>
+            <model-uuid>36a3a8ea-49a6-4ac8-b06c-89a54544b9b6</model-uuid>
+            <model-version>1.0</model-version>
+            <model-name>HNGW Protected OAM</model-name>
+         </ecomp-model-information>
+         <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+         <global-customer-id>globalId_45678905678</global-customer-id>
+         <subscriber-name/>
+      </service-information>
+      <network-information>
+         <network-id>networkId</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>sn5256d1-5a33-55df-13ab-12abad84e764</model-invariant-uuid>
+            <model-customization-uuid>sn5256d1-5a33-55df-13ab-12abad84e222</model-customization-uuid>
+            <model-uuid>sn5256d1-5a33-55df-13ab-12abad84e111</model-uuid>
+            <model-version>1</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-information>
+      <network-request-input>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <tenant>7dd5365547234ee8937416c65507d266</tenant>
+         <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+         <aic-clli/>
+         <network-input-parameters/>
+      </network-request-input>
+   </aetgt:SDNCRequestData>
+</aetgt:SDNCAdapterWorkflowRequest>"""
+
+	String sdncAdapaterDeactivateRollback =
+"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>activate</sdncadapter:SvcAction>
+      <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
+      <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
+      <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>CreateNetworkInstance</request-action>
+         <source>VID</source>
+         <notification-url/>
+         <order-number/>
+         <order-version/>
+      </request-information>
+      <service-information>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>fcc85cb0-ad74-45d7-a5a1-17c8744fdb71</model-invariant-uuid>
+            <model-uuid>36a3a8ea-49a6-4ac8-b06c-89a54544b9b6</model-uuid>
+            <model-version>1.0</model-version>
+            <model-name>HNGW Protected OAM</model-name>
+         </ecomp-model-information>
+         <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+         <global-customer-id>globalId_45678905678</global-customer-id>
+         <subscriber-name/>
+      </service-information>
+      <network-information>
+         <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>sn5256d1-5a33-55df-13ab-12abad84e764</model-invariant-uuid>
+            <model-customization-uuid>sn5256d1-5a33-55df-13ab-12abad84e222</model-customization-uuid>
+            <model-uuid>sn5256d1-5a33-55df-13ab-12abad84e111</model-uuid>
+            <model-version>1</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-information>
+      <network-request-input>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <tenant>7dd5365547234ee8937416c65507d266</tenant>
+         <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+         <aic-clli/>
+         <network-input-parameters/>
+      </network-request-input>
+   </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.mso/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.mso/workflow/sdnc/adapter/schema/v1">&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;output xmlns="com:att:sdnctl:vnf"&gt;&lt;svc-request-id&gt;19174929-3809-49ca-89eb-17f84a035389&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;bdc5efe8-404a-409b-85f6-0dcc9eebae30&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;HSL_direct_net_2&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_404 =
+   """<aetgt:SDNCAdapterWorkflowResponse xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                   xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
+   <sdncadapterworkflow:response-data>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;output xmlns="com:att:sdnctl:vnf"&gt;&lt;svc-request-id&gt;00703dc8-71ff-442d-a4a8-3adc5beef6a9&lt;/svc-request-id&gt;&lt;response-code&gt;404&lt;/response-code&gt;&lt;response-message&gt;Service instance not found in config tree&lt;/response-message&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;</sdncadapterworkflow:response-data>
+</aetgt:SDNCAdapterWorkflowResponse>"""
+
+	String expected_sdncAdapterWorkflowFormattedResponse_404 =
+"""<aetgt:SDNCAdapterWorkflowResponse xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                   xmlns="com:att:sdnctl:vnf">
+   <aetgt:response-data>
+      <output>
+         <svc-request-id>00703dc8-71ff-442d-a4a8-3adc5beef6a9</svc-request-id>
+         <response-code>404</response-code>
+         <response-message>Service instance not found in config tree</response-message>
+         <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>MNS-25180-L-01-dmz_direct_net_1</service-instance-id>
+            <subscriber-name>notsurewecare</subscriber-name>
+         </service-information>
+      </output>
+   </aetgt:response-data>
+</aetgt:SDNCAdapterWorkflowResponse>"""
+
+	String sdncAdapterWorkflowFormattedResponse =
+	"""<aetgt:SDNCAdapterWorkflowResponse xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                   xmlns="com:att:sdnctl:vnf">
+   <aetgt:response-data>
+      <output>
+         <svc-request-id>19174929-3809-49ca-89eb-17f84a035389</svc-request-id>
+         <response-code>200</response-code>
+         <ack-final-indicator>Y</ack-final-indicator>
+         <network-information>
+            <network-id>bdc5efe8-404a-409b-85f6-0dcc9eebae30</network-id>
+         </network-information>
+         <service-information>
+            <service-type>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-type>
+            <service-instance-id>HSL_direct_net_2</service-instance-id>
+            <subscriber-name>notsurewecare</subscriber-name>
+         </service-information>
+      </output>
+   </aetgt:response-data>
+</aetgt:SDNCAdapterWorkflowResponse>"""
+
+String sdncAdapterWorkflowFormattedResponse_404 =
+"""<aetgt:SDNCAdapterWorkflowResponse xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                   xmlns="com:att:sdnctl:vnf">
+   <aetgt:response-data>
+      <output>
+         <svc-request-id>00703dc8-71ff-442d-a4a8-3adc5beef6a9</svc-request-id>
+         <response-code>404</response-code>
+         <response-message>Service instance not found in config tree</response-message>
+         <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>MNS-25180-L-01-dmz_direct_net_1</service-instance-id>
+            <subscriber-name>notsurewecare</subscriber-name>
+         </service-information>
+      </output>
+   </aetgt:response-data>
+</aetgt:SDNCAdapterWorkflowResponse>"""
+
+	String invalidRequest = "Invalid value of network-id element"
+
+
+
+	String sndcWorkflowException =
+	"""<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:SourceSystemErrorCode>200</aetgt:SourceSystemErrorCode>
+</aetgt:WorkflowException>"""
+
+	String sndcWorkflowErrorResponse =
+	"""<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+					<aetgt:ErrorMessage>Received error from SDN-C: <aetgt:SDNCAdapterWorkflowResponse xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                   xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
+   <sdncadapterworkflow:response-data>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;output xmlns="com:att:sdnctl:vnf"&gt;&lt;svc-request-id&gt;00703dc8-71ff-442d-a4a8-3adc5beef6a9&lt;/svc-request-id&gt;&lt;response-code&gt;404&lt;/response-code&gt;&lt;response-message&gt;Service instance not found in config tree&lt;/response-message&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;</sdncadapterworkflow:response-data>
+</aetgt:SDNCAdapterWorkflowResponse></aetgt:ErrorMessage>
+					<aetgt:ErrorCode>5300</aetgt:ErrorCode>
+				  </aetgt:WorkflowException>"""
+
+	String unexpectedErrorEncountered =
+	"""<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+					<aetgt:ErrorMessage>bpel error deleting network</aetgt:ErrorMessage>
+					<aetgt:ErrorCode>5300</aetgt:ErrorCode>
+				  </aetgt:WorkflowException>"""
+
+
+				  // expectedVnfRequest
+  String inputViprSDC_NetworkRequest =
+			  """<network-request xmlns="http://www.w3.org/2001/XMLSchema">
+   <request-info>
+      <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+      <action>DELETE</action>
+      <source>VID</source>
+      <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+   </request-info>
+   <network-inputs>
+      <network-id>networkId</network-id>
+      <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+      <network-type>CONTRAIL_EXTERNAL</network-type>
+      <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+      <global-customer-id>globalId_45678905678</global-customer-id>
+      <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <backout-on-failure>false</backout-on-failure>
+      <failIfExist>false</failIfExist>
+      <networkModelInfo>
+         <modelName>CONTRAIL_EXTERNAL</modelName>
+         <modelUuid>sn5256d1-5a33-55df-13ab-12abad84e111</modelUuid>
+         <modelInvariantUuid>sn5256d1-5a33-55df-13ab-12abad84e764</modelInvariantUuid>
+         <modelVersion>1</modelVersion>
+         <modelCustomizationUuid>sn5256d1-5a33-55df-13ab-12abad84e222</modelCustomizationUuid>
+         <modelType>CONTRAIL_EXTERNAL</modelType>
+      </networkModelInfo>
+      <serviceModelInfo>
+         <modelName>HNGW Protected OAM</modelName>
+         <modelUuid>36a3a8ea-49a6-4ac8-b06c-89a54544b9b6</modelUuid>
+         <modelInvariantUuid>fcc85cb0-ad74-45d7-a5a1-17c8744fdb71</modelInvariantUuid>
+         <modelVersion>1.0</modelVersion>
+         <modelCustomizationUuid/>
+         <modelType>service</modelType>
+      </serviceModelInfo>
+      <sdncVersion>1702</sdncVersion>
+   </network-inputs>
+   <network-params/>
+</network-request>"""
+// - - - - - - - -
+
+
+	    @Before
+		public void init()
+		{
+			MockitoAnnotations.initMocks(this)
+		}
+
+		@Test
+		//@Ignore
+		public void preProcessRequest_Json() {
+			
+			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("DELETE")
+			when(mockExecution.getVariable("networkId")).thenReturn("bdc5efe8-404a-409b-85f6-0dcc9eebae30")
+			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("")
+			when(mockExecution.getVariable("serviceType")).thenReturn("MOG")
+			when(mockExecution.getVariable("networkType")).thenReturn("modelName")
+			when(mockExecution.getVariable("bpmnRequest")).thenReturn(incomingJsonRequest)
+			when(mockExecution.getVariable("disableRollback")).thenReturn(true)
+			when(mockExecution.getVariable("testMessageId")).thenReturn("7df689f9-7b93-430b-9b9e-28140d70cc7ad")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("mso-service-instance-id")).thenReturn("FH/VLXM/003717//SW_INTERNET")
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1610")
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.preProcessRequest(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			verify(mockExecution).setVariable("action", "DELETE")
+			verify(mockExecution).setVariable(Prefix + "networkRequest", expectedNetworkRequest)
+
+			verify(mockExecution).setVariable(Prefix + "rollbackEnabled", false)
+
+			verify(mockExecution).setVariable(Prefix + "networkInputs", expected_networkInput)
+			verify(mockExecution).setVariable(Prefix + "messageId", "7df689f9-7b93-430b-9b9e-28140d70cc7ad")
+			verify(mockExecution).setVariable(Prefix + "source", "VID")
+
+			// Authentications
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "Basic cGFzc3dvcmQ=")
+
+
+		}
+
+		@Test
+		//@Ignore
+		public void preProcessRequest_vPER() {
+
+			def networkModelInfo = """{"modelUuid": "sn5256d1-5a33-55df-13ab-12abad84e111",
+                                     "modelName": "CONTRAIL_EXTERNAL",
+									 "modelType": "CONTRAIL_EXTERNAL",
+									 "modelVersion": "1",
+									 "modelCustomizationUuid": "sn5256d1-5a33-55df-13ab-12abad84e222",
+									 "modelInvariantUuid": "sn5256d1-5a33-55df-13ab-12abad84e764"
+									}""".trim()
+			
+			println "************ preProcessRequest_Payload ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			// Inputs:
+			when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("disableRollback")).thenReturn("true")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("networkId")).thenReturn("bdc5efe8-404a-409b-85f6-0dcc9eebae30")                                // optional
+			when(mockExecution.getVariable("networkName")).thenReturn("MNS-25180-L-01-dmz_direct_net_1")        // optional
+			when(mockExecution.getVariable("productFamilyId")).thenReturn("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb")
+			when(mockExecution.getVariable("networkModelInfo")).thenReturn("CONTRAIL_EXTERNAL")
+			when(mockExecution.getVariable("lcpCloudRegionId")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable("tenantId")).thenReturn("7dd5365547234ee8937416c65507d266")
+			when(mockExecution.getVariable("failIfExists")).thenReturn("false")
+			when(mockExecution.getVariable("networkModelInfo")).thenReturn(networkModelInfo)
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1702")
+			when(mockExecution.getVariable("action")).thenReturn("DELETE")
+			when(mockExecution.getVariable("subscriptionServiceType")).thenReturn("MSO-dev-service-type")
+			when(mockExecution.getVariable("globalSubscriberId")).thenReturn("globalId_45678905678")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("7df689f9-7b93-430b-9b9e-28140d70cc7ad")
+
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.preProcessRequest(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			verify(mockExecution).setVariable("action", "DELETE")
+			verify(mockExecution).setVariable(Prefix + "networkRequest", expectedVperNetworkRequest)
+
+			verify(mockExecution).setVariable(Prefix + "rollbackEnabled", false)
+
+			verify(mockExecution).setVariable(Prefix + "networkInputs", expectedVper_networkInput)
+			verify(mockExecution).setVariable(Prefix + "messageId", "7df689f9-7b93-430b-9b9e-28140d70cc7ad")
+			verify(mockExecution).setVariable(Prefix + "source", "VID")
+
+			// Authentications
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "Basic cGFzc3dvcmQ=")
+
+
+		}
+		
+		public void initializeVariables (Execution mockExecution) {
+
+			verify(mockExecution).setVariable(Prefix + "networkRequest", "")
+			verify(mockExecution).setVariable(Prefix + "isSilentSuccess", false)
+			verify(mockExecution).setVariable(Prefix + "Success", false)
+
+			verify(mockExecution).setVariable(Prefix + "requestId", "")
+			verify(mockExecution).setVariable(Prefix + "source", "")
+			verify(mockExecution).setVariable(Prefix + "lcpCloudRegion", "")
+			verify(mockExecution).setVariable(Prefix + "networkInputs", "")
+			verify(mockExecution).setVariable(Prefix + "tenantId", "")
+
+			verify(mockExecution).setVariable(Prefix + "queryAAIRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "isAAIGood", false)
+			verify(mockExecution).setVariable(Prefix + "isVfRelationshipExist", false)
+
+			// AAI query Cloud Region
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionReturnCode","")
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionResponse","")
+			verify(mockExecution).setVariable(Prefix + "cloudRegionPo","")
+			verify(mockExecution).setVariable(Prefix + "cloudRegionSdnc","")
+
+			verify(mockExecution).setVariable(Prefix + "deleteNetworkRequest", "")
+			verify(mockExecution).setVariable(Prefix + "deleteNetworkResponse", "")
+			verify(mockExecution).setVariable(Prefix + "networkReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkRequest", "")
+
+			verify(mockExecution).setVariable(Prefix + "deleteSDNCRequest", "")
+			verify(mockExecution).setVariable(Prefix + "deleteSDNCResponse", "")
+			verify(mockExecution).setVariable(Prefix + "sdncReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "sdncResponseSuccess", false)
+
+			verify(mockExecution).setVariable(Prefix + "deactivateSDNCRequest", "")
+			verify(mockExecution).setVariable(Prefix + "deactivateSDNCResponse", "")
+			verify(mockExecution).setVariable(Prefix + "deactivateSdncReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "isSdncDeactivateRollbackNeeded", "")
+
+			verify(mockExecution).setVariable(Prefix + "rollbackDeactivateSDNCRequest", "")
+			verify(mockExecution).setVariable(Prefix + "isException", false)
+
+		}
+
+		@Test
+		//@Ignore
+		public void preProcessRequest_Json_MissingId() {
+
+			println "************ preProcessRequest_MissingId() ************* "
+			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("DELETE")
+			//when(mockExecution.getVariable("networkId")).thenReturn("") // missing Id
+			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("")
+			when(mockExecution.getVariable("serviceType")).thenReturn("MOG")
+			when(mockExecution.getVariable("networkType")).thenReturn("modelName")
+			when(mockExecution.getVariable("bpmnRequest")).thenReturn(incomingJsonRequest)
+			when(mockExecution.getVariable("disableRollback")).thenReturn(true)
+			
+			when(mockExecution.getVariable("testMessageId")).thenReturn("7df689f9-7b93-430b-9b9e-28140d70cc7ad")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("mso-service-instance-id")).thenReturn("FH/VLXM/003717//SW_INTERNET")
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1610")
+
+			// preProcessRequest(Execution execution)
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			try {
+				DoDeleteNetworkInstance.preProcessRequest(mockExecution)
+			} catch (Exception ex) {
+				println " Test End - Handle catch-throw BpmnError()! "
+			}
+
+			//verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			verify(mockExecution).setVariable("action", "DELETE")
+			verify(mockExecution).setVariable(Prefix + "networkRequest", expectedNetworkRequestMissingId)
+			verify(mockExecution).setVariable(Prefix + "rollbackEnabled", false)
+
+			verify(mockExecution).setVariable(Prefix + "networkInputs", networkInputsMissingId)
+			verify(mockExecution).setVariable(Prefix + "messageId", "7df689f9-7b93-430b-9b9e-28140d70cc7ad")
+			verify(mockExecution).setVariable(Prefix + "source", "VID")
+
+		}
+
+		@Test
+		//@Ignore
+		public void preProcessRequest_Json_MissingCloudRegion() {
+
+			def networkModelInfo = """{"modelVersionId": "sn5256d1-5a33-55df-13ab-12abad84e111",
+                                     "modelName": "CONTRAIL_EXTERNAL",
+									 "modelType": "CONTRAIL_EXTERNAL",
+									 "modelVersion": "1",
+									 "modelCustomizationId": "sn5256d1-5a33-55df-13ab-12abad84e222",
+									 "modelInvariantId": "sn5256d1-5a33-55df-13ab-12abad84e764"
+									}""".trim()
+			
+			println "************ preProcessRequest_MissingCloudRegion() ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("networkModelInfo")).thenReturn(networkModelInfo)
+			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("DELETE")
+			when(mockExecution.getVariable("networkId")).thenReturn("bdc5efe8-404a-409b-85f6-0dcc9eebae30")
+			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("")
+			when(mockExecution.getVariable("serviceType")).thenReturn("MOG")
+			when(mockExecution.getVariable("networkType")).thenReturn("modelName")
+			when(mockExecution.getVariable("bpmnRequest")).thenReturn(incomingRequestMissingCloudRegion)
+			when(mockExecution.getVariable("disableRollback")).thenReturn(true)
+			
+			when(mockExecution.getVariable("testMessageId")).thenReturn("7df689f9-7b93-430b-9b9e-28140d70cc7ad")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("mso-service-instance-id")).thenReturn("FH/VLXM/003717//SW_INTERNET")
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1610")
+
+			// preProcessRequest(Execution execution)
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.preProcessRequest(mockExecution)
+
+			//verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			verify(mockExecution).setVariable("action", "DELETE")
+			verify(mockExecution).setVariable(Prefix + "networkRequest", expectedNetworkRequestMissingCloudRegion)
+			verify(mockExecution).setVariable(Prefix + "rollbackEnabled", false)
+
+			verify(mockExecution).setVariable(Prefix + "networkInputs", networkInputsMissingCloudRegion)
+			verify(mockExecution).setVariable(Prefix + "messageId", "7df689f9-7b93-430b-9b9e-28140d70cc7ad")
+			verify(mockExecution).setVariable(Prefix + "lcpCloudRegion", null)
+
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO","Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "Basic cGFzc3dvcmQ=")
+
+		}
+
+
+
+		@Test
+		//@Ignore
+		public void prepareNetworkRequest() {
+
+			println "************ prepareNetworkRequest ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedVperNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "queryAAIResponse")).thenReturn(queryAAIResponse)
+			when(mockExecution.getVariable(Prefix + "cloudRegionPo")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "tenantId")).thenReturn("e81d842d3e8b45c5a59f57cd76af3aaf")
+
+			when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("URN_mso_adapters_network_rest_endpoint")).thenReturn("http://localhost:8090/networks/NetworkAdapter")
+			when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("messageId_value")
+			//when(mockExecution.getVariable("URN_?????")).thenReturn("")   // notificationUrl, //TODO - is this coming from URN? What variable/value to use? 
+			when(mockExecution.getVariable(Prefix + "rollbackEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.prepareNetworkRequest(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable("URN_mso_adapters_network_rest_endpoint", "http://localhost:8090/networks/NetworkAdapter/bdc5efe8-404a-409b-85f6-0dcc9eebae30")
+			//verify(mockExecution).setVariable(Prefix + "deleteNetworkRequest", deleteNetworkRequest)
+			verify(mockExecution).setVariable(Prefix + "deleteNetworkRequest", deleteNetworkRESTRequest)
+
+		}
+		
+		@Test
+		//@Ignore
+		public void prepareNetworkRequest_AlaCarte() {
+
+			println "************ prepareNetworkRequest ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "queryAAIResponse")).thenReturn(queryAAIResponse)
+			when(mockExecution.getVariable(Prefix + "cloudRegionPo")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "tenantId")).thenReturn("e81d842d3e8b45c5a59f57cd76af3aaf")
+
+			when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("URN_mso_adapters_network_rest_endpoint")).thenReturn("http://localhost:8090/networks/NetworkAdapter")
+			when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("messageId_value")
+			//when(mockExecution.getVariable("URN_?????")).thenReturn("")   // notificationUrl, //TODO - is this coming from URN? What variable/value to use?
+			when(mockExecution.getVariable(Prefix + "rollbackEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.prepareNetworkRequest(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable("URN_mso_adapters_network_rest_endpoint", "http://localhost:8090/networks/NetworkAdapter/bdc5efe8-404a-409b-85f6-0dcc9eebae30")
+			//verify(mockExecution).setVariable(Prefix + "deleteNetworkRequest", deleteNetworkRequest)
+			verify(mockExecution).setVariable("mso-request-id", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution).setVariable(Prefix + "deleteNetworkRequest", deleteNetworkRESTRequestAlaCarte)
+
+		}
+
+		@Test
+		//@Ignore
+		public void sendRequestToVnfAdapter() {
+
+			println "************ sendRequestToVnfAdapter ************* "
+
+			WireMock.reset();
+			MockNetworkAdapter("bdc5efe8-404a-409b-85f6-0dcc9eebae30", 200, "deleteNetworkResponse_Success.xml");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "deleteNetworkRequest")).thenReturn(deleteNetworkRESTRequest)
+			when(mockExecution.getVariable("URN_mso_adapters_network_rest_endpoint")).thenReturn("http://localhost:8090/networks/NetworkAdapter/bdc5efe8-404a-409b-85f6-0dcc9eebae30")
+			when(mockExecution.getVariable("BasicAuthHeaderValuePO")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.sendRequestToVnfAdapter(mockExecution)
+
+			verify(mockExecution).setVariable(Prefix + "networkReturnCode", 200)
+			//verify(mockExecution).setVariable(Prefix + "deleteNetworkResponse", deleteNetworkResponse_noRollback)
+						
+		}
+
+
+		@Test
+		//@Ignore
+		public void prepareSDNCRequest() {
+
+			println "************ prepareSDNCRequest ************* "
+
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "queryAAIResponse")).thenReturn(aaiResponse)
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:8090/SDNCAdapterCallback")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.prepareSDNCRequest(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "deleteSDNCRequest", deleteSDNCRequest)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareRpcSDNCRequest() {
+
+			println "************ prepareRpcSDNCRequest ************* "
+
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(inputViprSDC_NetworkRequest)
+			when(mockExecution.getVariable(Prefix + "cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56") // test ONLY
+			when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:8090/SDNCAdapterCallback")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.prepareRpcSDNCRequest(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "deleteSDNCRequest", deleteRpcSDNCRequest)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareRpcSDNCActivateRollback() {
+
+			println "************ prepareRpcSDNCActivateRollback ************* "
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(inputViprSDC_NetworkRequest)
+			when(mockExecution.getVariable(Prefix + "cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable(Prefix + "networkId")).thenReturn("8abc633a-810b-4ca5-8b3a-09511d13a2ce")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56") // test ONLY
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:8090/SDNCAdapterCallback")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("GENGSI_siResourceLink")).thenReturn(null)
+			when(mockExecution.getVariable(Prefix + "deactivateSDNCResponse")).thenReturn(sdncAdapterWorkflowFormattedResponse)
+
+			// preProcessRequest(Execution execution)
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.prepareRpcSDNCDeactivateRollback(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix)
+			//verify(mockExecution).setVariable("mso-request-id", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution).setVariable(Prefix + "requestId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			//verify(mockExecution).setVariable("mso-service-instance-id", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution).setVariable(Prefix + "rollbackDeactivateSDNCRequest", sdncAdapaterDeactivateRollback)
+
+		}
+
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAI_200() {
+
+			println "************ callRESTQueryAAI ************* "
+
+			WireMock.reset();
+			MockGetNetworkByIdWithDepth("bdc5efe8-404a-409b-85f6-0dcc9eebae30", "DeleteNetworkV2/deleteNetworkAAIResponse_Success.xml", "1");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_network_l3_network_uri")).thenReturn("")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_DoDeleteNetworkInstance_aai_network_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("URN_mso_workflow_DoDeleteNetworkInstance_aai_l3_network_uri")).thenReturn("/aai/v9/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.callRESTQueryAAI(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "queryAAIRequest", "http://localhost:8090/aai/v9/network/l3-networks/l3-network/bdc5efe8-404a-409b-85f6-0dcc9eebae30"+"?depth=1")
+
+			verify(mockExecution).setVariable(Prefix + "aaiReturnCode", "200")
+			//verify(mockExecution).setVariable(Prefix + "queryAAIResponse", aaiResponse)
+			verify(mockExecution).setVariable(Prefix + "isAAIGood", true)
+			verify(mockExecution).setVariable(Prefix + "isVfRelationshipExist", false)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAI_withRelationship_200() {
+
+			println "************ callRESTQueryAAI ************* "
+
+			WireMock.reset();
+			MockGetNetworkByIdWithDepth("bdc5efe8-404a-409b-85f6-0dcc9eebae30", "DeleteNetworkV2/deleteNetworkAAIResponse_withRelationship_Success.xml", "1");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_network_l3_network_uri")).thenReturn("")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_DoDeleteNetworkInstance_aai_network_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("URN_mso_workflow_DoDeleteNetworkInstance_aai_l3_network_uri")).thenReturn("/aai/v9/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.callRESTQueryAAI(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "queryAAIRequest", "http://localhost:8090/aai/v9/network/l3-networks/l3-network/bdc5efe8-404a-409b-85f6-0dcc9eebae30"+"?depth=1")
+
+			verify(mockExecution).setVariable(Prefix + "aaiReturnCode", "200")
+			//verify(mockExecution).setVariable(Prefix + "queryAAIResponse", aaiResponseWithRelationship)
+			verify(mockExecution).setVariable(Prefix + "isAAIGood", true)
+			verify(mockExecution).setVariable(Prefix + "isVfRelationshipExist", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAI_200_DefaultUri() {
+
+			println "************ callRESTQueryAAI ************* "
+
+			WireMock.reset();
+			MockGetNetworkByIdWithDepth("bdc5efe8-404a-409b-85f6-0dcc9eebae30", "DeleteNetworkV2/deleteNetworkAAIResponse_Success.xml", "1");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_default_aai_network_l3_network_uri")).thenReturn("/aai/v8/network/l3-networks/l3-network")
+			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/v9/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.callRESTQueryAAI(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "queryAAIRequest", "http://localhost:8090/aai/v9/network/l3-networks/l3-network/bdc5efe8-404a-409b-85f6-0dcc9eebae30"+ "?depth=1")
+
+			verify(mockExecution).setVariable(Prefix + "aaiReturnCode", "200")
+			//verify(mockExecution).setVariable(Prefix + "queryAAIResponse", aaiResponse)
+			verify(mockExecution).setVariable(Prefix + "isAAIGood", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAICloudRegion30_200() {
+
+			println "************ callRESTQueryAAICloudRegion30_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkCloudRegion("DeleteNetworkV2/cloudRegion30_AAIResponse_Success.xml", "RDM2WAGPLCP");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix)
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "lcpCloudRegion")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_default_aai_cloud_infrastructure_cloud_region_uri")).thenReturn("/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.callRESTQueryAAICloudRegion(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionRequest", "http://localhost:8090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/RDM2WAGPLCP")
+			verify(mockExecution, atLeast(2)).setVariable(Prefix + "queryCloudRegionReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAICloudRegion_NotFound() {
+
+			println "************ callRESTQueryAAICloudRegion_NotFound ************* "
+
+			WireMock.reset();
+			MockGetNetworkCloudRegion_404("MDTWNJ21");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix)
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(vnfRequestCloudRegionNotFound)
+			when(mockExecution.getVariable(Prefix + "lcpCloudRegion")).thenReturn("MDTWNJ21")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_default_aai_cloud_infrastructure_cloud_region_uri")).thenReturn("/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.callRESTQueryAAICloudRegion(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "cloudRegionPo", "MDTWNJ21")
+			verify(mockExecution).setVariable(Prefix + "cloudRegionSdnc", "AAIAIC25")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAICloudRegion25_200() {
+
+			println "************ callRESTQueryAAICloudRegion25_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkCloudRegion("DeleteNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix)
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "lcpCloudRegion")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			// old: when(mockExecution.getVariable("URN_mso_workflow_default_aai_cloud_infrastructure_cloud_region_uri")).thenReturn("/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.callRESTQueryAAICloudRegion(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionRequest", "http://localhost:8090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/RDM2WAGPLCP")
+			verify(mockExecution, atLeast(2)).setVariable(Prefix + "queryCloudRegionReturnCode", "200")
+
+		}
+
+
+		@Test
+		//@Ignore
+		public void validateNetworkResponse() {
+
+			println "************ validateNetworkResponse ************* "
+
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "deleteNetworkResponse")).thenReturn(deleteNetworkResponse)
+			when(mockExecution.getVariable(Prefix + "networkReturnCode")).thenReturn('200')
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.validateNetworkResponse(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			//verify(mockExecution).setVariable(Prefix + "rollbackNetworkRequest", null)
+
+		}
+
+
+		@Test
+		//@Ignore
+		public void validateSDNCResponse_200() {
+
+			println "************ validateSDNCResponse ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "sdncReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable("SDNCA_SuccessIndicator")).thenReturn(true)
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			try {
+				DoDeleteNetworkInstance.validateSDNCResponse(mockExecution, sdncAdapterWorkflowResponse)
+			} catch (Exception ex) {
+			    println " Graceful Exit - " + ex.getMessage()
+			}
+
+		}
+
+		@Test
+		//@Ignore
+		public void validateSDNCResponse_404() {
+
+			println "************ validateSDNCResponse ************* "
+
+			WorkflowException workflowException = new WorkflowException("DoCreateNetworkInstance", 2500, "Received error from SNDC Adapter: HTTP Status 404.")
+
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "sdncReturnCode")).thenReturn("404")
+			when(mockExecution.getVariable("SDNCA_SuccessIndicator")).thenReturn(false)
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			try {
+				DoDeleteNetworkInstance.validateSDNCResponse(mockExecution)
+			} catch (Exception ex) {
+				println " Graceful Exit - " + ex.getMessage()
+			}
+
+		}
+
+		@Test
+		//@Ignore
+		public void validateRpcSDNCDeactivateResponse() {
+
+			println "************ validateRpcSDNCDeactivateResponse ************* "
+
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "deactivateSDNCResponse")).thenReturn(sdncAdapterWorkflowResponse)
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable("SDNCA_SuccessIndicator")).thenReturn(true)
+			when(mockExecution.getVariable(Prefix + "deactivateSDNCReturnCode")).thenReturn("200")
+
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			try {
+			  DoDeleteNetworkInstance.validateRpcSDNCDeactivateResponse(mockExecution)
+			  verify(mockExecution).setVariable(Prefix + "isSdncDeactivateRollbackNeeded", true)
+
+			} catch (Exception ex) {
+				println " Graceful Exit - " + ex.getMessage()
+			}
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+			//verify(mockExecution).setVariable(Prefix + "isSdncRollbackNeeded", true)
+
+		}
+
+		@Test
+		@Ignore
+		public void postProcessResponse() {
+
+			println "************ postProcessResponse ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "source")).thenReturn("PORTAL")
+			when(mockExecution.getVariable(Prefix + "isException")).thenReturn(false)
+
+			// postProcessResponse(Execution execution)
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.postProcessResponse(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "Success", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareRollbackData() {
+
+			println "************ prepareRollbackData() ************* "
+
+
+
+			WorkflowException workflowException = new WorkflowException("DoCreateNetworkInstance", 2500, "Received error from Network Adapter: JBWEB000065: HTTP Status 500.")
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn(deleteRollbackNetworkRequest)
+			//when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn(null)
+			//when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn("")
+			when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")).thenReturn(sdncAdapaterDeactivateRollback)
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+
+			// preProcessRequest(Execution execution)
+			DoDeleteNetworkInstance DoDeleteNetworkInstance = new DoDeleteNetworkInstance()
+			DoDeleteNetworkInstance.prepareRollbackData(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+		}
+
+
+		private ExecutionEntity setupMock() {
+
+			ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
+			when(mockProcessDefinition.getKey()).thenReturn("DoDeleteNetworkInstance")
+			RepositoryService mockRepositoryService = mock(RepositoryService.class)
+			when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
+			when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DoDeleteNetworkInstance")
+			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("DoDeleteNetworkInstance")
+			when(mockExecution.getProcessInstanceId()).thenReturn("DoDeleteNetworkInstance")
+			when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
+			when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
+
+			return mockExecution
+
+		}
+
+}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateNetworkInstanceRollbackTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateNetworkInstanceRollbackTest.groovy
new file mode 100644
index 0000000..c97bedb
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateNetworkInstanceRollbackTest.groovy
@@ -0,0 +1,315 @@
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import static org.mockito.Mockito.*
+
+import org.camunda.bpm.engine.delegate.BpmnError
+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.impl.pvm.process.ProcessDefinitionImpl
+import org.camunda.bpm.engine.repository.ProcessDefinition
+import org.camunda.bpm.engine.runtime.Execution;
+import org.mockito.MockitoAnnotations
+import org.mockito.runners.MockitoJUnitRunner
+import org.mockito.internal.debugging.MockitoDebuggerImpl
+import org.openecomp.mso.bpmn.common.scripts.MsoUtils
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.junit.Before
+import org.junit.Rule;
+import org.junit.Test
+import org.junit.Ignore
+import org.junit.runner.RunWith
+
+import static org.junit.Assert.*;
+
+import com.github.tomakehurst.wiremock.client.WireMock;
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+import org.apache.commons.lang3.*
+
+
+@RunWith(MockitoJUnitRunner.class)
+class DoUpdateNetworkInstanceRollbackTest  {
+
+	@Rule
+	public WireMockRule wireMockRule = new WireMockRule(28090);
+
+		def utils = new MsoUtils()
+		String Prefix="UPDNETIR_"
+
+
+		String rollbackNetworkRequest =
+		"""<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>
+      <networkCreated>true</networkCreated>
+      <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+      <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+      <msoRequest>
+         <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+         <serviceInstanceId/>
+      </msoRequest>
+   </rollback>
+</NetworkAdapter:rollbackNetwork>"""
+
+					String rollbackActivateSDNCRequest =
+		"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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:MsoAction>generic-resource</sdncadapter:MsoAction>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>CreateNetworkInstance</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-information>
+         <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>invariant-uuid</model-invariant-uuid>
+            <model-customization-uuid>customization-uuid</model-customization-uuid>
+            <model-uuid>uuid</model-uuid>
+            <model-version>version</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-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 rollbackSDNCRequest =
+		"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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:MsoAction>generic-resource</sdncadapter:MsoAction>
+   </sdncadapter:RequestHeader>
+   <aetgt:SDNCRequestData>
+      <request-information>
+         <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
+         <request-action>CreateNetworkInstance</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-information>
+         <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>invariant-uuid</model-invariant-uuid>
+            <model-customization-uuid>customization-uuid</model-customization-uuid>
+            <model-uuid>uuid</model-uuid>
+            <model-version>version</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-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>"""
+
+// - - - - - - - -
+
+
+	    @Before
+		public void init()
+		{
+			MockitoAnnotations.initMocks(this)
+
+		}
+
+		public void initializeVariables (Execution mockExecution) {
+
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkRequest", null)
+			verify(mockExecution).setVariable(Prefix + "rollbackSDNCRequest", null)
+			verify(mockExecution).setVariable(Prefix + "WorkflowException", null)
+
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkRequest", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkResponse", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkReturnCode", "")
+
+			verify(mockExecution).setVariable(Prefix + "rollbackSDNCRequest", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackSDNCResponse", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackSDNCReturnCode", "")
+
+			verify(mockExecution).setVariable(Prefix + "Success", false)
+			verify(mockExecution).setVariable(Prefix + "fullRollback", false)
+
+
+		}
+
+		@Test
+		//@Ignore
+		public void preProcessRequest() {
+
+			println "************ preProcessRequest ************* "
+
+			WorkflowException workflowException = new WorkflowException("DoUpdateNetworkInstanceRollback", 2500, "Received error from Network Adapter: JBWEB000065: HTTP Status 500.")
+			Map<String, String> rollbackData = new HashMap<String, String>();
+			rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
+			rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
+
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+			when(mockExecution.getVariable("rollbackData")).thenReturn(rollbackData)
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1610")
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_endpoint")).thenReturn("http://localhost:28090/SDNCAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_network_rest_endpoint")).thenReturn("http://localhost:28090/networks/NetworkAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_resource_endpoint")).thenReturn("http://localhost:28090/SDNCAdapterRpc")
+
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstanceRollback DoUpdateNetworkInstanceRollback = new DoUpdateNetworkInstanceRollback()
+			DoUpdateNetworkInstanceRollback.preProcessRequest(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+		}
+
+
+		@Test
+		@Ignore
+		public void validateRollbackResponses_Good() {
+
+			WorkflowException workflowException = new WorkflowException("DoUpdateNetworkInstanceRollback", 2500, "AAI Update Contrail Failed.  Error 404.")
+			WorkflowException expectedWorkflowException = new WorkflowException("DoUpdateNetworkInstanceRollback", 2500, "AAI Update Contrail Failed.  Error 404. + SNDC activate rollback completed. + PO Network rollback completed. + SNDC assign rollback completed.")
+
+			println "************ validateRollbackResponses_Good() ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "WorkflowException")).thenReturn(workflowException)
+			when(mockExecution.getVariable(Prefix + "fullRollback")).thenReturn(false)
+
+			DoUpdateNetworkInstanceRollback DoUpdateNetworkInstanceRollback = new DoUpdateNetworkInstanceRollback()
+			DoUpdateNetworkInstanceRollback.validateRollbackResponses(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution, atLeast(1)).setVariable("rolledBack", true)
+			verify(mockExecution, atLeast(1)).setVariable("wasDeleted", true)
+			verify(mockExecution).setVariable("WorkflowException", refEq(expectedWorkflowException, any(WorkflowException.class)))
+			//verify(mockExecution).setVariable("WorkflowException", expectedWorkflowException)
+		}
+
+		@Test
+		//@Ignore
+		public void validateRollbackResponses_FullRollback() {
+
+			Map<String, String> rollbackData = new HashMap<String, String>();
+			rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
+			rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
+
+			println "************ validateRollbackResponses_FullRollback() ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix)
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn("Good")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCResponse")).thenReturn("GoodResponse")
+			when(mockExecution.getVariable(Prefix + "WorkflowException")).thenReturn(null)
+			when(mockExecution.getVariable(Prefix + "fullRollback")).thenReturn(true)
+			when(mockExecution.getVariable("rollbackData")).thenReturn(rollbackData)
+
+			DoUpdateNetworkInstanceRollback DoUpdateNetworkInstanceRollback = new DoUpdateNetworkInstanceRollback()
+			DoUpdateNetworkInstanceRollback.validateRollbackResponses(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution, atLeast(1)).setVariable("rollbackSuccessful", true)
+			verify(mockExecution, atLeast(1)).setVariable("rollbackError", false)
+
+		}
+
+
+		private ExecutionEntity setupMock() {
+
+			ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
+			when(mockProcessDefinition.getKey()).thenReturn("DoUpdateNetworkInstanceRollback")
+			RepositoryService mockRepositoryService = mock(RepositoryService.class)
+			when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
+			when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DoUpdateNetworkInstanceRollback")
+			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("DoUpdateNetworkInstanceRollback")
+			when(mockExecution.getProcessInstanceId()).thenReturn("DoUpdateNetworkInstanceRollback")
+			when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
+			when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
+
+			return mockExecution
+		}
+
+}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateNetworkInstanceTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateNetworkInstanceTest.groovy
new file mode 100644
index 0000000..fb44067
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateNetworkInstanceTest.groovy
@@ -0,0 +1,2625 @@
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import static org.mockito.Mockito.*
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkCloudRegion;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkCloudRegion_404;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkVpnBinding;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkTableReference;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkPolicy;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutNetworkIdWithDepth;
+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.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
+import org.apache.commons.lang3.*
+
+
+@RunWith(MockitoJUnitRunner.class)
+class DoUpdateNetworkInstanceTest  {
+
+	@Rule
+	public WireMockRule wireMockRule = new WireMockRule(8090);
+
+		def utils = new MsoUtils()
+		String Prefix="UPDNETI_"
+
+		String jsonIncomingRequest =
+		"""{ "requestDetails": {
+	      "modelInfo": {
+			"modelType": "network",
+  			"modelCustomizationId": "f21df226-8093-48c3-be7e-0408fcda0422",
+  			"modelName": "CONTRAIL_EXTERNAL",
+  			"modelVersion": "1.0"
+		  },
+		  "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_MissingCloudRegion =
+		"""{ "requestDetails": {
+	      "modelInfo": {
+			"modelType": "network",
+  			"modelCustomizationId": "f21df226-8093-48c3-be7e-0408fcda0422",
+  			"modelName": "CONTRAIL_EXTERNAL",
+  			"modelVersion": "1.0"
+		  },
+		  "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>
+      <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+      <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <backout-on-failure>false</backout-on-failure>
+      <sdncVersion>1610</sdncVersion>
+   </network-inputs>
+   <network-params>
+      <param name="some_user_param1">someValue1</param>
+   </network-params>
+</network-request>"""
+
+
+String expectedNetworkRequestMissingCloudRegion =
+"""<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>networkId</network-id>
+      <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+      <network-type>CONTRAIL_EXTERNAL</network-type>
+      <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+      <aic-cloud-region>null</aic-cloud-region>
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <backout-on-failure>false</backout-on-failure>
+      <sdncVersion>null</sdncVersion>
+   </network-inputs>
+   <network-params/>
+</network-request>"""
+
+String expectedNetworkInputMissingCloudRegion =
+"""<network-inputs xmlns="http://www.w3.org/2001/XMLSchema">
+   <network-id>networkId</network-id>
+   <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+   <network-type>CONTRAIL_EXTERNAL</network-type>
+   <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+   <aic-cloud-region>null</aic-cloud-region>
+   <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <backout-on-failure>false</backout-on-failure>
+   <sdncVersion>null</sdncVersion>
+</network-inputs>"""
+
+	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>"""
+
+	  // expectedNetworkRequest
+	  String expectedNetworkRequest =
+  """<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>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>
+      <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+      <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <backout-on-failure>false</backout-on-failure>
+      <sdncVersion>1610</sdncVersion>
+   </network-inputs>
+   <network-params>
+      <param name="some_user_param1">someValue1</param>
+   </network-params>
+</network-request>"""
+
+String expectedNetworkInputs =
+"""<network-inputs xmlns="http://www.w3.org/2001/XMLSchema">
+   <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>
+   <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+   <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+   <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <backout-on-failure>false</backout-on-failure>
+   <sdncVersion>1610</sdncVersion>
+</network-inputs>"""
+
+String expectedVperNetworkRequest =
+"""<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>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>
+      <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+      <global-customer-id>globalId_45678905678</global-customer-id>
+      <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+      <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+      <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+      <backout-on-failure>false</backout-on-failure>
+      <failIfExist>false</failIfExist>
+      <networkModelInfo>
+         <modelName>CONTRAIL_EXTERNAL</modelName>
+         <modelUuid>sn5256d1-5a33-55df-13ab-12abad84e111</modelUuid>
+         <modelInvariantUuid>sn5256d1-5a33-55df-13ab-12abad84e764</modelInvariantUuid>
+         <modelVersion>1</modelVersion>
+         <modelCustomizationUuid>sn5256d1-5a33-55df-13ab-12abad84e222</modelCustomizationUuid>
+      </networkModelInfo>
+      <serviceModelInfo>
+         <modelName/>
+         <modelUuid/>
+         <modelInvariantUuid/>
+         <modelVersion/>
+         <modelCustomizationUuid/>
+      </serviceModelInfo>
+      <sdncVersion>1702</sdncVersion>
+   </network-inputs>
+   <network-params/>
+</network-request>"""
+
+String expectedVperNetworkInputs = 
+"""<network-inputs xmlns="http://www.w3.org/2001/XMLSchema">
+   <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>
+   <subscription-service-type>MSO-dev-service-type</subscription-service-type>
+   <global-customer-id>globalId_45678905678</global-customer-id>
+   <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+   <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <backout-on-failure>false</backout-on-failure>
+   <failIfExist>false</failIfExist>
+   <networkModelInfo>
+      <modelName>CONTRAIL_EXTERNAL</modelName>
+      <modelUuid>sn5256d1-5a33-55df-13ab-12abad84e111</modelUuid>
+      <modelInvariantUuid>sn5256d1-5a33-55df-13ab-12abad84e764</modelInvariantUuid>
+      <modelVersion>1</modelVersion>
+      <modelCustomizationUuid>sn5256d1-5a33-55df-13ab-12abad84e222</modelCustomizationUuid>
+   </networkModelInfo>
+   <serviceModelInfo>
+      <modelName/>
+      <modelUuid/>
+      <modelInvariantUuid/>
+      <modelVersion/>
+      <modelCustomizationUuid/>
+   </serviceModelInfo>
+   <sdncVersion>1702</sdncVersion>
+</network-inputs>"""
+
+String expectedNetworkInputsMissingNetworkId =
+"""<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>
+   <modelCustomizationId>f21df226-8093-48c3-be7e-0408fcda0422</modelCustomizationId>
+   <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
+   <tenant-id>7dd5365547234ee8937416c65507d266</tenant-id>
+   <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+   <backout-on-failure>false</backout-on-failure>
+   <sdncVersion>1610</sdncVersion>
+</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:modelCustomizationId></vnfreq:modelCustomizationId>
+      <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>"""
+
+
+  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-update</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 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>
+   <modelCustomizationUuid>sn5256d1-5a33-55df-13ab-12abad84e222</modelCustomizationUuid>
+   <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>
+   <skipAAI>true</skipAAI>
+   <backout>true</backout>
+   <failIfExists>false</failIfExists>
+   <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>
+   <modelCustomizationUuid/>
+   <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>
+   <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 =
+	  """<rollbackNetworkRequest>
+   <networkRollback>
+      <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>
+   </networkRollback>
+</rollbackNetworkRequest>"""
+
+	  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/v9">
+   <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>
+   </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>"""
+
+
+	  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://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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.mso/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="com:att: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://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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.mso/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.mso/workflow/sdnc/adapter/schema/v1"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:type="xs:string">&lt;output xmlns="com:att: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.mso/workflow/sdnc/adapter/schema/v1"
+                                                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                                                 xmlns="com:att: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="com:att:sdnctl:vnf"
+                                                 xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+                                                 xmlns:tag0="http://org.openecomp.mso/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="com:att: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 rollbackSDNCRequest =
+"""<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                  xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                  xmlns:sdncadapter="http://org.openecomp.mso/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>CreateNetworkInstance</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-information>
+         <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <ecomp-model-information>
+            <model-invariant-uuid>invariant-uuid</model-invariant-uuid>
+            <model-customization-uuid>customization-uuid</model-customization-uuid>
+            <model-uuid>uuid</model-uuid>
+            <model-version>version</model-version>
+            <model-name>CONTRAIL_EXTERNAL</model-name>
+         </ecomp-model-information>
+      </network-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 rollbackNetworkRequest =
+"""<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>
+      <networkCreated>true</networkCreated>
+      <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
+      <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+      <msoRequest>
+         <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
+         <serviceInstanceId/>
+      </msoRequest>
+   </rollback>
+</NetworkAdapter:rollbackNetwork>"""
+
+// - - - - - - - -
+
+
+	    @Before
+		public void init()
+		{
+			MockitoAnnotations.initMocks(this)
+
+		}
+
+		public void initializeVariables (Execution mockExecution) {
+
+			verify(mockExecution).setVariable(Prefix + "messageId", "")
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "")
+			verify(mockExecution).setVariable(Prefix + "networkRequest", "")
+			verify(mockExecution).setVariable(Prefix + "networkInputs", "")
+			verify(mockExecution).setVariable(Prefix + "networkOutputs", "")
+			verify(mockExecution).setVariable(Prefix + "requestId", "")
+			verify(mockExecution).setVariable(Prefix + "source", "")
+			verify(mockExecution).setVariable(Prefix + "networkId", "")
+
+			verify(mockExecution).setVariable(Prefix + "isPONR", false)
+
+			// AAI query Cloud Region
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionReturnCode","")
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionResponse","")
+			verify(mockExecution).setVariable(Prefix + "cloudRegionPo","")
+			verify(mockExecution).setVariable(Prefix + "cloudRegionSdnc","")
+			verify(mockExecution).setVariable(Prefix + "isCloudRegionGood", false)
+
+			// AAI query Id
+			verify(mockExecution).setVariable(Prefix + "queryIdAAIRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryIdAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiIdReturnCode", "")
+
+			// AAI query vpn binding
+			verify(mockExecution).setVariable(Prefix + "queryVpnBindingAAIRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryVpnBindingAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "vpnBindings", null)
+			verify(mockExecution).setVariable(Prefix + "vpnCount", 0)
+			verify(mockExecution).setVariable(Prefix + "routeCollection", "")
+
+			// AAI query network policy
+			verify(mockExecution).setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "networkPolicyUriList", null)
+			verify(mockExecution).setVariable(Prefix + "networkPolicyCount", 0)
+			verify(mockExecution).setVariable(Prefix + "networkCollection", "")
+
+			// AAI query route table reference
+			verify(mockExecution).setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
+			verify(mockExecution).setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "networkTableRefUriList", null)
+			verify(mockExecution).setVariable(Prefix + "networkTableRefCount", 0)
+			verify(mockExecution).setVariable(Prefix + "tableRefCollection", "")
+
+
+			// AAI requery Id
+			verify(mockExecution).setVariable(Prefix + "requeryIdAAIRequest","")
+			verify(mockExecution).setVariable(Prefix + "requeryIdAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiRequeryIdReturnCode", "")
+
+			// AAI update contrail
+			verify(mockExecution).setVariable(Prefix + "updateContrailAAIUrlRequest","")
+			verify(mockExecution).setVariable(Prefix + "updateContrailAAIPayloadRequest","")
+			verify(mockExecution).setVariable(Prefix + "updateContrailAAIResponse", "")
+			verify(mockExecution).setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
+
+			verify(mockExecution).setVariable(Prefix + "updateNetworkRequest", "")
+			verify(mockExecution).setVariable(Prefix + "updateNetworkResponse", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkRequest", "")
+			//verify(mockExecution).setVariable(Prefix + "rollbackNetworkResponse", "")
+			verify(mockExecution).setVariable(Prefix + "networkReturnCode", "")
+			//verify(mockExecution).setVariable(Prefix + "rollbackNetworkReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "isNetworkRollbackNeeded", false)
+
+			verify(mockExecution).setVariable(Prefix + "changeAssignSDNCRequest", "")
+			verify(mockExecution).setVariable(Prefix + "changeAssignSDNCResponse", "")
+			verify(mockExecution).setVariable(Prefix + "rollbackSDNCRequest", "")
+			//verify(mockExecution).setVariable(Prefix + "rollbackSDNCResponse", "")
+			verify(mockExecution).setVariable(Prefix + "sdncReturnCode", "")
+			//verify(mockExecution).setVariable(Prefix + "rollbackSDNCReturnCode", "")
+			verify(mockExecution).setVariable(Prefix + "isSdncRollbackNeeded", false)
+			verify(mockExecution).setVariable(Prefix + "sdncResponseSuccess", false)
+
+			verify(mockExecution).setVariable(Prefix + "isVnfBindingPresent", false)
+			verify(mockExecution).setVariable(Prefix + "Success", false)
+			verify(mockExecution).setVariable(Prefix + "serviceInstanceId", "")
+
+			verify(mockExecution).setVariable(Prefix + "isException", false)
+
+		}
+
+		@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("sdncVersion")).thenReturn("1610")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+			when(mockExecution.getVariable("disableRollback")).thenReturn("true")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.preProcessRequest(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			// Authentications
+			verify(mockExecution).setVariable("action", "UPDATE")
+			verify(mockExecution).setVariable(Prefix + "networkRequest", expectedNetworkRequest)
+			verify(mockExecution).setVariable(Prefix + "rollbackEnabled", false)
+			verify(mockExecution).setVariable(Prefix + "networkInputs", expectedNetworkInputs)
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable(Prefix + "networkOutputs", "")
+
+		}
+
+		@Test
+		//@Ignore
+		public void preProcessRequest_vPERNetworkRequest() {
+
+			def networkModelInfo = """{"modelUuid": "sn5256d1-5a33-55df-13ab-12abad84e111",
+                                     "modelName": "CONTRAIL_EXTERNAL",
+									 "modelType": "CONTRAIL_EXTERNAL",
+									 "modelVersion": "1",
+									 "modelCustomizationUuid": "sn5256d1-5a33-55df-13ab-12abad84e222",
+									 "modelInvariantUuid": "sn5256d1-5a33-55df-13ab-12abad84e764"
+									}""".trim()
+			
+			println "************ preProcessRequest_Payload ************* "
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("disableRollback")).thenReturn("true")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("networkId")).thenReturn("49c86598-f766-46f8-84f8-8d1c1b10f9b4")     // optional
+			when(mockExecution.getVariable("networkName")).thenReturn("MNS-25180-L-01-dmz_direct_net_1")        // optional
+			when(mockExecution.getVariable("productFamilyId")).thenReturn("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb")
+			when(mockExecution.getVariable("networkModelInfo")).thenReturn("CONTRAIL_EXTERNAL")
+			when(mockExecution.getVariable("lcpCloudRegionId")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable("tenantId")).thenReturn("7dd5365547234ee8937416c65507d266")
+			when(mockExecution.getVariable("failIfExists")).thenReturn("false")
+			when(mockExecution.getVariable("networkModelInfo")).thenReturn(networkModelInfo)
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1702")
+			when(mockExecution.getVariable("action")).thenReturn("UPDATE")
+			when(mockExecution.getVariable("subscriptionServiceType")).thenReturn("MSO-dev-service-type")
+			when(mockExecution.getVariable("globalSubscriberId")).thenReturn("globalId_45678905678")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_endpoint")).thenReturn("http://localhost:8090/SDNCAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_network_rest_endpoint")).thenReturn("http://localhost:8090/networks/NetworkAdapter")
+			when(mockExecution.getVariable("URN_mso_adapters_sdnc_resource_endpoint")).thenReturn("http://localhost:8090/SDNCAdapterRpc")
+			
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.preProcessRequest(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			// Authentications
+			verify(mockExecution).setVariable("action", "UPDATE")
+			verify(mockExecution).setVariable(Prefix + "networkRequest", expectedVperNetworkRequest)
+			verify(mockExecution).setVariable(Prefix + "rollbackEnabled", false)
+			verify(mockExecution).setVariable(Prefix + "networkInputs", expectedVperNetworkInputs)
+			verify(mockExecution).setVariable("BasicAuthHeaderValuePO", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable("BasicAuthHeaderValueSDNC", "Basic cGFzc3dvcmQ=")
+			verify(mockExecution).setVariable(Prefix + "networkOutputs", "")
+
+		}
+
+		@Test
+		//@Ignore
+		public void preProcessRequest_MissingNetworkId() {
+
+			println "************ preProcessRequest_MissingName() ************* "
+
+			WorkflowException missingNameWorkflowException = new WorkflowException("DoUpdateNetworkInstance", 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("sdncVersion")).thenReturn("1610")
+
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+			when(mockExecution.getVariable("disableRollback")).thenReturn("true")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			try {
+				DoUpdateNetworkInstance.preProcessRequest(mockExecution)
+			} catch (Exception ex) {
+				println " Test End - Handle catch-throw BpmnError()! "
+			}
+
+			verify(mockExecution, atLeast(1)).getVariable("isDebugLogEnabled")
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix + "")
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			verify(mockExecution).setVariable("action", "UPDATE")
+			verify(mockExecution).setVariable(Prefix + "networkRequest", expectedNetworkRequestMissingNetworkId)
+			verify(mockExecution).setVariable(Prefix + "rollbackEnabled", false)
+			verify(mockExecution).setVariable(Prefix + "networkInputs", expectedNetworkInputsMissingNetworkId)
+			verify(mockExecution).setVariable(Prefix + "messageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution).setVariable(Prefix + "source", "VID")
+			verify(mockExecution).setVariable(Prefix + "networkOutputs", "")
+
+			verify(mockExecution).setVariable(eq("WorkflowException"), refEq(missingNameWorkflowException))
+
+		}
+
+		@Test
+		//@Ignore
+		public void preProcessRequest_MissingCloudRegion() {
+
+			println "************ preProcessRequest_MissingCloudRegion() ************* "
+
+			WorkflowException missingCloudRegionWorkflowException = new WorkflowException("DoUpdateNetworkInstance", 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(Prefix + "messageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_rollback")).thenReturn("true")
+			when(mockExecution.getVariable("disableRollback")).thenReturn("true")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			try {
+				DoUpdateNetworkInstance.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", Prefix + "")
+
+			//verify variable initialization
+			initializeVariables(mockExecution)
+
+			verify(mockExecution).setVariable("action", "UPDATE")
+			verify(mockExecution).setVariable(Prefix + "networkRequest", expectedNetworkRequestMissingCloudRegion)
+			verify(mockExecution).setVariable(Prefix + "rollbackEnabled", false)
+			verify(mockExecution).setVariable(Prefix + "networkInputs", expectedNetworkInputMissingCloudRegion)
+			verify(mockExecution).setVariable(Prefix + "messageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			verify(mockExecution).setVariable(Prefix + "source", "VID")
+
+			verify(mockExecution).setVariable(eq("WorkflowException"), refEq(missingCloudRegionWorkflowException))
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareUpdateNetworkRequest() {
+
+			println "************ prepareNetworkRequest ************* "
+						ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedVperNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "requeryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable(Prefix + "cloudRegionPo")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("messageId_generated")
+			when(mockExecution.getVariable(Prefix + "source")).thenReturn("VID")
+			//when(mockExecution.getVariable(Prefix + "queryVpnBindingAAIResponse")).thenReturn(queryVpnBindingAAIResponse)
+			when(mockExecution.getVariable(Prefix + "routeCollection")).thenReturn("<routeTargets>13979:105757</routeTargets><routeTargets>13979:105757</routeTargets>")
+			when(mockExecution.getVariable(Prefix + "networkCollection")).thenReturn("<policyFqdns>GN_EVPN_Test</policyFqdns>")
+			when(mockExecution.getVariable(Prefix + "tableRefCollection")).thenReturn("<routeTableFqdns>refFQDN1</routeTableFqdns><routeTableFqdns>refFQDN2</routeTableFqdns>")
+			when(mockExecution.getVariable(Prefix + "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(Prefix + "rollbackEnabled")).thenReturn("true")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.prepareUpdateNetworkRequest(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+
+			verify(mockExecution).setVariable(Prefix + "updateNetworkRequest", updateNetworkRequest)
+
+		}
+
+
+		@Test
+		//@Ignore
+		public void prepareUpdateNetworkRequest_NoPhysicalname() {
+
+			println "************ prepareNetworkRequest ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(NetworkRequest_noPhysicalName)
+			when(mockExecution.getVariable(Prefix + "requeryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable(Prefix + "cloudRegionPo")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("messageId_generated")
+			when(mockExecution.getVariable(Prefix + "source")).thenReturn("VID")
+			//when(mockExecution.getVariable(Prefix + "queryVpnBindingAAIResponse")).thenReturn(queryVpnBindingAAIResponse)
+			when(mockExecution.getVariable(Prefix + "routeCollection")).thenReturn("<routeTargets>13979:105757</routeTargets><routeTargets>13979:105757</routeTargets>")
+			when(mockExecution.getVariable(Prefix + "networkCollection")).thenReturn("<policyFqdns>GN_EVPN_Test</policyFqdns>")
+			when(mockExecution.getVariable(Prefix + "tableRefCollection")).thenReturn("")
+			when(mockExecution.getVariable(Prefix + "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(Prefix + "rollbackEnabled")).thenReturn("true")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.prepareUpdateNetworkRequest(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+
+			verify(mockExecution).setVariable(Prefix + "updateNetworkRequest", updateNetworkRequest_noPhysicalName)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareSDNCRequest() {
+
+			println "************ prepareSDNCRequest ************* "
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:8090/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)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.prepareSDNCRequest(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "changeAssignSDNCRequest", changeAssignSDNCRequest)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareSDNCRollbackRequest() {
+
+			println "************ prepareSDNCRollbackRequest ************* "
+
+
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "cloudRegionSdnc")).thenReturn("RDM2WAGPLCP")
+			when(mockExecution.getVariable(Prefix + "serviceInstanceId")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
+			when(mockExecution.getVariable(Prefix + "changeAssignSDNCResponse")).thenReturn(assignResponse)
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("testMessageId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://localhost:8090/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)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.prepareSDNCRollbackRequest(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "rollbackSDNCRequest", sdncRollbackRequest)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkId_200() {
+
+			println "************ callRESTQueryAAINetworkId ************* "
+
+			WireMock.reset();
+			MockGetNetworkByIdWithDepth("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", "1");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			when(mockExecution.getVariable("URN_mso_workflow_DoUpdateNetworkInstance_aai_l3_network_uri")).thenReturn("/aai/v9/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.callRESTQueryAAINetworkId(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "queryIdAAIRequest", "http://localhost:8090/aai/v9/network/l3-networks/l3-network/49c86598-f766-46f8-84f8-8d1c1b10f9b4"+"?depth=1")
+			verify(mockExecution).setVariable(Prefix + "aaiIdReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAICloudRegion30_200() {
+
+			println "************ callRESTQueryAAICloudRegion30_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion30_AAIResponse_Success.xml", "RDM2WAGPLCP");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.callRESTQueryAAICloudRegion(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionRequest", "http://localhost:8090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/RDM2WAGPLCP")
+			verify(mockExecution, atLeast(2)).setVariable(Prefix + "queryCloudRegionReturnCode", "200")
+			verify(mockExecution).setVariable(Prefix + "isCloudRegionGood", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAICloudRegion25_200() {
+
+			println "************ callRESTQueryAAICloudRegion25_200 ************* "
+
+			WireMock.reset();
+		    MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.callRESTQueryAAICloudRegion(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionRequest", "http://localhost:8090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/RDM2WAGPLCP")
+			verify(mockExecution, atLeast(2)).setVariable(Prefix + "queryCloudRegionReturnCode", "200")
+			verify(mockExecution).setVariable(Prefix + "isCloudRegionGood", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAICloudRegion_NotFound() {
+
+			println "************ callRESTQueryAAICloudRegionFake ************* "
+
+			WireMock.reset();
+			MockGetNetworkCloudRegion_404("MDTWNJ21");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable(Prefix + "networkInputs")).thenReturn(vnfRequestFakeRegion)
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.callRESTQueryAAICloudRegion(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "queryCloudRegionRequest", "http://localhost:8090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/MDTWNJ21")
+			verify(mockExecution, atLeast(1)).setVariable(Prefix + "queryCloudRegionReturnCode", "404")
+			verify(mockExecution).setVariable(Prefix + "cloudRegionPo", "MDTWNJ21")
+			verify(mockExecution).setVariable(Prefix + "cloudRegionSdnc", "AAIAIC25")
+			verify(mockExecution).setVariable(Prefix + "isCloudRegionGood", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkVpnBinding_200() {
+
+			println "************ callRESTQueryAAINetworkVpnBinding_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkVpnBinding("UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+			MockGetNetworkVpnBinding("UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", "c980a6ef-3b88-49f0-9751-dbad8608d0a6");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "requeryIdAAIResponse")).thenReturn(queryIdAIIResponse) // v6
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.callRESTQueryAAINetworkVpnBinding(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "vpnCount", 2)
+			verify(mockExecution).setVariable(Prefix + "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(Prefix + "queryVpnBindingAAIRequest", "http://localhost:8090/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017?depth=all")
+			verify(mockExecution, atLeast(2)).setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkVpnBinding_TestScenario01_200() {
+
+			println "************ callRESTQueryAAINetworkVpnBinding_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkVpnBinding("UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "requeryIdAAIResponse")).thenReturn(queryIdAIIResponseTestScenario01)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.callRESTQueryAAINetworkVpnBinding(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "vpnCount", 1)
+			verify(mockExecution).setVariable(Prefix + "vpnBindings", ['/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/'])
+			// the last vpnBinding value is saved.
+			verify(mockExecution).setVariable(Prefix + "queryVpnBindingAAIRequest", "http://localhost:8090/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017?depth=all")
+			verify(mockExecution).setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkVpnBinding_200_URN_Uri() {
+
+			println "************ callRESTQueryAAINetworkVpnBinding_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkVpnBinding("UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+			MockGetNetworkVpnBinding("UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", "c980a6ef-3b88-49f0-9751-dbad8608d0a6");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "requeryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.callRESTQueryAAINetworkVpnBinding(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "vpnCount", 2)
+			verify(mockExecution).setVariable(Prefix + "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(Prefix + "queryVpnBindingAAIRequest", "http://localhost:8090/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017?depth=all")
+			verify(mockExecution, atLeast(2)).setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkVpnBinding_NotPresent() {
+
+			println "************ callRESTQueryAAINetworkVpnBinding_NotPresent ************* "
+
+			WireMock.reset();
+			MockGetNetworkVpnBinding("UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+
+			ExecutionEntity mockExecution = setupMock()
+			// Initialize prerequisite variables
+
+			when(mockExecution.getVariable(Prefix + "requeryIdAAIResponse")).thenReturn(queryIdAIIResponseVpnNotPresent)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			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_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.callRESTQueryAAINetworkVpnBinding(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
+			verify(mockExecution).setVariable(Prefix + "vpnCount", 0)
+			verify(mockExecution).setVariable(Prefix + "queryVpnBindingAAIResponse", aaiVpnResponseStub)
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkTableRef_200() {
+
+			println "************ callRESTQueryAAINetworkTableRef_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkTableReference("UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", "refFQDN1");
+			MockGetNetworkTableReference("UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", "refFQDN2");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "requeryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			when(mockExecution.getVariable("URN_mso_workflow_default_aai_network_table_reference_uri")).thenReturn("")
+			when(mockExecution.getVariable("URN_mso_workflow_DoUpdateNetworkInstance_aai_route_table_reference_uri")).thenReturn("/aai/v8/network/route-table-references/route-table-reference")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.callRESTQueryAAINetworkTableRef(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "networkTableRefCount", 2)
+			verify(mockExecution).setVariable(Prefix + "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(Prefix + "queryNetworkTableRefAAIRequest", "http://localhost:8090/aai/v8/network/route-table-references/route-table-reference/refFQDN1?depth=all")
+			verify(mockExecution, atLeast(2)).setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
+
+		}
+
+		@Test
+		//@Ignore
+		public void callRESTQueryAAINetworkPolicy_200() {
+
+			println "************ callRESTQueryAAINetworkPolicy_200 ************* "
+
+			WireMock.reset();
+			MockGetNetworkPolicy("UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml", "cee6d136-e378-4678-a024-2cd15f0ee0cg");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "requeryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			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("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.callRESTQueryAAINetworkPolicy(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "networkPolicyCount", 1)
+			verify(mockExecution).setVariable(Prefix + "networkPolicyUriList", ['/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg'])
+			// the last vpnBinding value is saved.
+			verify(mockExecution).setVariable(Prefix + "queryNetworkPolicyAAIRequest", "http://localhost:8090/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg?depth=all")
+			verify(mockExecution).setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
+
+		}
+
+
+		@Test
+		//@Ignore
+		public void callRESTReQueryAAINetworkId_200() {
+
+			println "************ callRESTReQueryAAINetworkId ************* "
+
+			WireMock.reset();
+			MockGetNetworkByIdWithDepth("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", "1");
+
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "changeAssignSDNCResponse")).thenReturn(sdncAdapterWorkflowFormattedResponse)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			when(mockExecution.getVariable("URN_mso_workflow_DoUpdateNetworkInstance_aai_l3_network_uri")).thenReturn("/aai/v9/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.callRESTReQueryAAINetworkId(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "requeryIdAAIRequest", "http://localhost:8090/aai/v9/network/l3-networks/l3-network/49c86598-f766-46f8-84f8-8d1c1b10f9b4"+"?depth=1")
+			verify(mockExecution).setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
+
+		}
+
+
+		@Test
+		//@Ignore
+		public void callRESTUpdateContrailAAINetworkREST_200() {
+
+			println "************ callRESTUpdateContrailAAINetwork ************* "
+
+			WireMock.reset();
+			MockPutNetworkIdWithDepth("UpdateNetworkV2/updateNetwork_updateContrail_AAIResponse_Success.xml", "49c86598-f766-46f8-84f8-8d1c1b10f9b4", "1");
+			
+			ExecutionEntity mockExecution = setupMock()
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable(Prefix + "changeAssignSDNCResponse")).thenReturn(sdncAdapterWorkflowFormattedResponse)
+			when(mockExecution.getVariable(Prefix + "requeryIdAAIResponse")).thenReturn(queryIdAIIResponse)
+			when(mockExecution.getVariable(Prefix + "updateNetworkResponse")).thenReturn(updateNetworkResponseREST)
+			when(mockExecution.getVariable(Prefix + "messageId")).thenReturn("e8ebf6a0-f8ea-4dc0-8b99-fe98a87722d6")
+			when(mockExecution.getVariable("URN_aai_endpoint")).thenReturn("http://localhost:8090")
+			when(mockExecution.getVariable("URN_mso_workflow_DoUpdateNetworkInstance_aai_l3_network_uri")).thenReturn("/aai/v9/network/l3-networks/l3-network")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_namespace")).thenReturn('http://org.openecomp.aai.inventory/')
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			when(mockExecution.getVariable("URN_aai_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.callRESTUpdateContrailAAINetwork(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "updateContrailAAIUrlRequest", "http://localhost:8090/aai/v9/network/l3-networks/l3-network/49c86598-f766-46f8-84f8-8d1c1b10f9b4"+"?depth=1")
+			verify(mockExecution).setVariable(Prefix + "updateContrailAAIPayloadRequest", updateContrailAAIPayloadRequest)
+			verify(mockExecution).setVariable(Prefix + "aaiUpdateContrailReturnCode", "200")
+			//verify(mockExecution).setVariable(Prefix + "updateContrailAAIResponse", updateContrailAAIResponse)
+			verify(mockExecution).setVariable(Prefix + "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(Prefix + "updateNetworkResponse")).thenReturn(updateNetworkResponseREST)
+			when(mockExecution.getVariable(Prefix + "networkReturnCode")).thenReturn('200')
+
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.validateUpdateNetworkResponse(mockExecution)
+
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			verify(mockExecution).setVariable(Prefix + "updateNetworkResponse", updateNetworkResponseREST)
+			verify(mockExecution).setVariable(Prefix + "isNetworkRollbackNeeded", true)
+			verify(mockExecution).setVariable(Prefix + "rollbackNetworkRequest", updateRollbackNetworkRequest)
+
+		}
+
+		@Test
+		//@Ignore
+		public void validateUpdateNetworkResponseREST_Error() {
+
+			println "************ validateNetworkResponse ************* "
+
+			WorkflowException workflowException = new WorkflowException("DoUpdateNetworkInstance", 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(Prefix + "updateNetworkResponse")).thenReturn(networkException500)
+			when(mockExecution.getVariable(Prefix + "networkReturnCode")).thenReturn('500')
+
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			try {
+				DoUpdateNetworkInstance.validateUpdateNetworkResponse(mockExecution)
+			} catch (Exception ex) {
+				println " Test End - Handle catch-throw BpmnError()! "
+			}
+
+			verify(mockExecution).setVariable("prefix", Prefix + "")
+			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(Prefix + "changeAssignSDNCResponse")).thenReturn(sdncAdapterWorkflowResponse)
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable("SDNCA_SuccessIndicator")).thenReturn(true)
+			when(mockExecution.getVariable(Prefix + "sdncReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "isResponseGood")).thenReturn(true)
+
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			try {
+			  DoUpdateNetworkInstance.validateSDNCResponse(mockExecution)
+			  verify(mockExecution).setVariable(Prefix + "isSdncRollbackNeeded", true)
+			  verify(mockExecution).setVariable(Prefix + "rollbackSDNCRequest", "")
+
+			} catch (Exception ex) {
+				println " Graceful Exit - " + ex.getMessage()
+			}
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+			//verify(mockExecution).setVariable(Prefix + "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(Prefix + "changeAssignSDNCResponse")).thenReturn(sdncAdapterWorkflowResponse_Error)
+			when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
+			when(mockExecution.getVariable("SDNCA_SuccessIndicator")).thenReturn(false)
+			when(mockExecution.getVariable(Prefix + "sdncReturnCode")).thenReturn("200")
+			when(mockExecution.getVariable(Prefix + "isResponseGood")).thenReturn(true)
+
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			try {
+				DoUpdateNetworkInstance.validateSDNCResponse(mockExecution)
+			} catch (Exception ex) {
+				println " Graceful Exit! - " + ex.getMessage()
+			}
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+			// verify set prefix = Prefix + ""
+			//verify(mockExecution).setVariable(Prefix + "sdncResponseSuccess", false)
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareRollbackData() {
+
+			println "************ prepareRollbackData() ************* "
+
+
+
+			WorkflowException workflowException = new WorkflowException("DoUpdateNetworkInstance", 2500, "Received error from Network Adapter: JBWEB000065: HTTP Status 500.")
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn(rollbackSDNCRequest)
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn(rollbackNetworkRequest)
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.prepareRollbackData(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+		}
+
+		@Test
+		//@Ignore
+		public void postProcessResponse() {
+
+			println "************ postProcessResponse() ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable(Prefix + "isException")).thenReturn(false)
+			when(mockExecution.getVariable("sdncVersion")).thenReturn("1610")
+			when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn(rollbackSDNCRequest)
+			when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn(rollbackSDNCRequest)
+			when(mockExecution.getVariable(Prefix + "networkRequest")).thenReturn(expectedNetworkRequest)
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("requestId")
+
+			// preProcessRequest(Execution execution)
+			DoUpdateNetworkInstance DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+			DoUpdateNetworkInstance.postProcessResponse(mockExecution)
+
+			verify(mockExecution, atLeast(3)).getVariable("isDebugLogEnabled")
+			verify(mockExecution, atLeast(3)).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "Success", true)
+
+		}
+
+		private ExecutionEntity setupMock() {
+
+			ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
+			when(mockProcessDefinition.getKey()).thenReturn("DoUpdateNetworkInstance")
+			RepositoryService mockRepositoryService = mock(RepositoryService.class)
+			when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
+			when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DoUpdateNetworkInstance")
+			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("DoUpdateNetworkInstance")
+			when(mockExecution.getProcessInstanceId()).thenReturn("DoUpdateNetworkInstance")
+			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/UpdateNetworkInstanceTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateNetworkInstanceTest.groovy
new file mode 100644
index 0000000..e987d59
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateNetworkInstanceTest.groovy
@@ -0,0 +1,368 @@
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import static org.mockito.Mockito.*
+
+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.Ignore
+import org.junit.Rule
+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.MsoUtils
+import org.openecomp.mso.bpmn.core.WorkflowException
+
+import com.github.tomakehurst.wiremock.junit.WireMockRule
+import org.apache.commons.lang3.*
+
+
+@RunWith(MockitoJUnitRunner.class)
+class UpdateNetworkInstanceTest  {
+
+	@Rule
+	public WireMockRule wireMockRule = new WireMockRule(8090);
+
+		String Prefix="UPDNI_"
+		def utils = new MsoUtils()
+
+		String createDBRequestError =
+"""<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 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>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>5300</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>VID</source>
+   </request-info>
+   <aetgt:status-message>Network has been updated successfully.</aetgt:status-message>
+   <aetgt:mso-bpel-name>BPMN Network action: UPDATE</aetgt:mso-bpel-name>
+</aetgt:MsoCompletionRequest>"""
+
+
+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"
+			   }
+            ]
+		  }
+  }}"""
+
+	    @Before
+		public void init()
+		{
+			MockitoAnnotations.initMocks(this)
+
+		}
+
+		public void initializeVariables(Execution mockExecution) {
+
+			verify(mockExecution).setVariable(Prefix + "source", "")
+			verify(mockExecution).setVariable(Prefix + "Success", false)
+
+			verify(mockExecution).setVariable(Prefix + "CompleteMsoProcessRequest", "")
+			verify(mockExecution).setVariable(Prefix + "FalloutHandlerRequest", "")
+
+		}
+
+		@Test
+		//@Ignore
+		public void preProcessRequest() {
+
+			println "************ preProcessRequest() ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("bpmnRequest")).thenReturn(jsonIncomingRequest)
+
+			when(mockExecution.getVariable("URN_mso_adapters_db_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstance UpdateNetworkInstance = new UpdateNetworkInstance()
+			UpdateNetworkInstance.preProcessRequest(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+			initializeVariables(mockExecution)
+			//verify(mockExecution).setVariable(Prefix + "Success", false)
+
+		}
+
+
+		@Test
+		//@Ignore
+		public void getNetworkModelInfo() {
+
+			println "************ getNetworkModelInfo() ************* "
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstance UpdateNetworkInstance = new UpdateNetworkInstance()
+			UpdateNetworkInstance.getNetworkModelInfo(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+		}
+
+		@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)
+			UpdateNetworkInstance UpdateNetworkInstance = new UpdateNetworkInstance()
+			UpdateNetworkInstance.sendSyncResponse(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable("UpdateNetworkInstanceResponseCode", "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")
+
+			UpdateNetworkInstance UpdateNetworkInstance = new UpdateNetworkInstance()
+			UpdateNetworkInstance.sendSyncError(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable("UpdateNetworkInstanceResponseCode", "500")
+
+		}
+
+		@Test
+		//@Ignore
+		public void prepareDBRequestError() {
+
+			println "************ prepareDBRequestError ************* "
+
+			WorkflowException sndcWorkflowException = new WorkflowException("UpdateNetworkInstance", 500, "Received error from SDN-C: No availability zone available")
+
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(sndcWorkflowException)
+			//when(mockExecution.getVariable("msoRequestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable(Prefix + "requestId")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable("networkId")).thenReturn("")
+			when(mockExecution.getVariable("networkName")).thenReturn("")
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+
+			when(mockExecution.getVariable("URN_mso_adapters_db_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
+			when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+			
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstance UpdateNetworkInstance = new UpdateNetworkInstance()
+			UpdateNetworkInstance.prepareDBRequestError(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "createDBRequest", createDBRequestError)
+
+		}
+
+
+		@Test
+		//@Ignore
+		public void prepareCompletion() {
+
+			println "************ postProcessResponse ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("mso-request-id")).thenReturn("88f65519-9a38-4c4b-8445-9eb4a5a5af56")
+			when(mockExecution.getVariable(Prefix + "dbReturnCode")).thenReturn("200")
+
+			// postProcessResponse(Execution execution)
+			UpdateNetworkInstance UpdateNetworkInstance = new UpdateNetworkInstance()
+			UpdateNetworkInstance.prepareCompletion(mockExecution)
+
+			// check the sequence of variable invocation
+			//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
+			//preDebugger.printInvocations(mockExecution)
+
+			verify(mockExecution).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "Success", true)
+			verify(mockExecution).setVariable(Prefix + "CompleteMsoProcessRequest", completeMsoProcessRequest)
+
+		}
+
+		@Test
+		//@Ignore
+		public void buildErrorResponse() {
+
+			println "************ buildErrorResponse ************* "
+
+
+			WorkflowException sndcWorkflowException = new WorkflowException("UpdateNetworkInstance", 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("mso-request-id")).thenReturn("b69c9054-da09-4a2c-adf5-51042b62bfac")
+			//when(mockExecution.getVariable("WorkflowException")).thenReturn(sndcWorkflowException)
+			when(mockExecution.getVariable("WorkflowException")).thenReturn(sndcWorkflowException)
+
+			// buildErrorResponse(Execution execution)
+			UpdateNetworkInstance UpdateNetworkInstance = new UpdateNetworkInstance()
+			UpdateNetworkInstance.buildErrorResponse(mockExecution)
+
+			verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
+			verify(mockExecution).setVariable(Prefix + "FalloutHandlerRequest", falloutHandlerRequest)
+
+			//MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+			//debugger.printInvocations(mockExecution)
+
+		}
+
+		@Test
+		//@Ignore
+		public void postProcessResponse() {
+
+			println "************ postProcessResponse() ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+			when(mockExecution.getVariable("CMSO_ResponseCode")).thenReturn("200")
+
+			// postProcessResponse(Execution execution)
+			UpdateNetworkInstance UpdateNetworkInstance = new UpdateNetworkInstance()
+			UpdateNetworkInstance.postProcessResponse(mockExecution)
+
+			//verify(mockExecution).getVariable("isDebugLogEnabled")
+			//verify(mockExecution).setVariable("prefix", Prefix)
+
+			verify(mockExecution).setVariable(Prefix + "Success", true)
+
+		}
+
+		@Test
+		//@Ignore
+		public void processRollbackData() {
+
+			println "************ callDBCatalog() ************* "
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			// Initialize prerequisite variables
+			when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+
+			// preProcessRequest(Execution execution)
+			UpdateNetworkInstance UpdateNetworkInstance = new UpdateNetworkInstance()
+			UpdateNetworkInstance.processRollbackData(mockExecution)
+
+			verify(mockExecution).getVariable("isDebugLogEnabled")
+			verify(mockExecution).setVariable("prefix", Prefix)
+
+		}
+
+		private ExecutionEntity setupMock() {
+
+			ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
+			when(mockProcessDefinition.getKey()).thenReturn("UpdateNetworkInstance")
+			RepositoryService mockRepositoryService = mock(RepositoryService.class)
+			when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
+			when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("UpdateNetworkInstance")
+			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("UpdateNetworkInstance")
+			when(mockExecution.getProcessInstanceId()).thenReturn("UpdateNetworkInstance")
+			when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
+			when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
+
+			return mockExecution
+		}
+
+}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateGenericALaCarteServiceInstanceTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateGenericALaCarteServiceInstanceTest.java
new file mode 100644
index 0000000..8419e19
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateGenericALaCarteServiceInstanceTest.java
@@ -0,0 +1,109 @@
+package org.openecomp.mso.bpmn.infrastructure;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+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.MockGetCustomer;
+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.MockNodeQueryServiceInstanceByName;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutServiceInstance;
+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 cases for CreateGenericALaCarteServiceInstance.bpmn
+ */
+public class CreateGenericALaCarteServiceInstanceTest extends WorkflowTest {
+
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public CreateGenericALaCarteServiceInstanceTest() throws IOException {
+		callbacks.put("assign", FileUtil.readResourceFile("__files/VfModularity/SDNCSITopologyAssignCallback.xml"));
+	}
+
+	/**
+	 * Sunny day VID scenario.
+	 *
+	 * @throws Exception
+	 */
+	//@Ignore // File not found - unable to run the test.  Also, Stubs need updating..
+	@Test
+	@Deployment(resources = {
+			"process/CreateGenericALaCarteServiceInstance.bpmn",
+			"subprocess/DoCreateServiceInstance.bpmn",
+			"subprocess/DoCreateServiceInstanceRollback.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericPutService.bpmn",
+			"subprocess/GenericGetService.bpmn",
+			"subprocess/CompleteMsoProcess.bpmn",
+			"subprocess/FalloutHandler.bpmn" })
+	public void sunnyDayAlaCarte() throws Exception {
+
+		logStart();
+
+		//AAI
+		MockGetCustomer("MCBH-1610", "CreateServiceInstance/createServiceInstance_queryGlobalCustomerId_AAIResponse_Success.xml");
+		MockPutServiceInstance("MCBH-1610", "viprsvc", "RaaTest-1-id", "");
+		MockGetServiceInstance("MCBH-1610", "viprsvc", "RaaTest-1-id", "GenericFlows/getServiceInstance.xml");
+		MockNodeQueryServiceInstanceByName("RAATest-1", "");
+		MockNodeQueryServiceInstanceById("RaaTest-1-id", "");
+		//SDNC
+		mockSDNCAdapter(200);
+		//DB
+		mockUpdateRequestDB(200, "DBUpdateResponse.xml");
+
+
+		String businessKey = UUID.randomUUID().toString();
+
+		//String createVfModuleRequest = FileUtil.readResourceFile("__files/SIRequest.json");
+
+		Map<String, String> variables = setupVariables();
+		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "CreateGenericALaCarteServiceInstance", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+		String workflowResp = BPMNUtil.getVariable(processEngineRule, "CreateGenericALaCarteServiceInstance", "WorkflowResponse");
+		//assertNotNull(workflowResp);
+		System.out.println("Workflow (Synch) Response:\n" + workflowResp);
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "CreateGenericALaCarteServiceInstance", "WorkflowException");
+		String completionReq = BPMNUtil.getVariable(processEngineRule, "CreateGenericALaCarteServiceInstance", "completionRequest");
+		System.out.println("completionReq:\n" + completionReq);
+		System.out.println("workflowException:\n" + workflowException);
+		assertNotNull(completionReq);
+		assertEquals(null, workflowException);
+
+
+		//injectSDNCCallbacks(callbacks, "assign");
+
+		logEnd();
+	}
+
+	// Success Scenario
+	private Map<String, String> setupVariables() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("isDebugLogEnabled", "true");
+		variables.put("bpmnRequest", getRequest());
+		variables.put("mso-request-id", "RaaCSIRequestId-1");
+		variables.put("serviceInstanceId","RaaTest-1-id");
+		return variables;
+	}
+
+	public String getRequest() {
+		String request = "{\"requestDetails\":{\"modelInfo\":{\"modelType\":\"service\",\"modelInvariantUuid\":\"uuid-miu-svc-011-abcdef\",\"modelVersionUuid\":\"ASDC_TOSCA_UUID\",\"modelName\":\"SIModelName1\",\"modelVersion\":\"2\"},\"subscriberInfo\":{\"globalSubscriberId\":\"MCBH-1610\",\"subscriberName\":\"Kaneohe\"},\"requestInfo\":{\"instanceName\":\"RAATest-1\",\"source\":\"VID\",\"suppressRollback\":\"true\",\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"mdt1\",\"tenantId\":\"8b1df54faa3b49078e3416e21370a3ba\"},\"requestParameters\":{\"subscriptionServiceType\":\"viprsvc\",\"aLaCarte\":\"false\",\"userParams\":[]}}}";
+		return request;
+	}
+
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateNetworkInstanceTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateNetworkInstanceTest.java
new file mode 100644
index 0000000..30cd4a5
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/CreateNetworkInstanceTest.java
@@ -0,0 +1,645 @@
+package org.openecomp.mso.bpmn.infrastructure;
+
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.*;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.MockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseNetworkAdapter.MockNetworkAdapterPost;
+import static org.openecomp.mso.bpmn.mock.StubResponseNetworkAdapter.MockNetworkAdapterRestRollbackDelete;
+// new mock methods
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapterTopology;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter_500;
+import org.openecomp.mso.bpmn.mock.SDNCAdapterNetworkTopologyMockTransformer;
+
+import static org.openecomp.mso.bpmn.common.BPMNUtil.executeAsyncWorkflow;
+import static org.openecomp.mso.bpmn.common.BPMNUtil.getVariable;
+import static org.junit.Assert.assertEquals;
+
+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.WorkflowTest;
+import org.openecomp.mso.bpmn.common.WorkflowTestTransformer;
+import org.openecomp.mso.bpmn.common.SDNCAdapterCallbackRule;
+import com.github.tomakehurst.wiremock.extension.ResponseTransformer;
+
+/**
+ * Unit test cases for CreateNetworkInstance.bpmn
+ *
+ */
+public class CreateNetworkInstanceTest 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 CreateNetworkInstance.bpmn
+	 *  - String input & String response
+	 */
+
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/CreateNetworkInstance.bpmn",
+							 "subprocess/DoCreateNetworkInstance.bpmn",
+							 "subprocess/DoCreateNetworkInstanceRollback.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/GenericGetService.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceCreateNetworkInstance_vIPER_Success1() throws Exception {
+
+		System.out.println("-----------------------------------------------------------------");
+		System.out.println("    Success vIPER 1 - CreateNetworkInstance flow Started!       ");
+		System.out.println("-----------------------------------------------------------------");
+
+		// setup simulators
+		mockSDNCAdapterTopology("CreateNetworkV2mock/sdncCreateNetworkTopologyRsrcAssignResponse.xml", "SvcAction>assign");
+		mockSDNCAdapterTopology("CreateNetworkV2mock/sdncCreateNetworkTopologySimResponse.xml", "SvcAction>activate");
+		MockNetworkAdapterPost("CreateNetworkV2/createNetworkResponse_Success.xml", "createNetworkRequest");
+		MockGetNetworkByName("MNS-25180-L-01-dmz_direct_net_1", "CreateNetworkV2/createNetwork_queryName_AAIResponse_Success.xml");
+		MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+		MockGetNetworkByIdWithDepth("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_Success.xml", "1");
+		MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+		MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "c980a6ef-3b88-49f0-9751-dbad8608d0a6");
+		MockGetNetworkPolicy("CreateNetworkV2/createNetwork_queryNetworkPolicy_AAIResponse_Success.xml", "cee6d136-e378-4678-a024-2cd15f0ee0cg");
+		MockGetNetworkTableReference("CreateNetworkV2/createNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", "refFQDN1");
+		MockGetNetworkTableReference("CreateNetworkV2/createNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", "refFQDN2");
+		MockPutNetworkIdWithDepth("CreateNetworkV2/createNetwork_updateContrail_AAIResponse_Success.xml", "49c86598-f766-46f8-84f8-8d1c1b10f9b4", "1");
+		MockUpdateRequestDB("DBUpdateResponse.xml");
+		//MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "CreateNetworkV2/createNetwork_queryInstance_Success.xml", "v8");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "CreateNetworkV2/createNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariables1();
+		//WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		System.out.println("----------------------------------------------------------");
+		System.out.println("- got workflow response -");
+		System.out.println("----------------------------------------------------------");
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("true", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_Success"));
+	    assertEquals("true", getVariable(processEngineRule, "DoCreateNetworkInstance", "CRENWKI_Success"));
+	    Assert.assertNotNull("CRENI_CompleteMsoProcessRequest - ", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_CompleteMsoProcessRequest"));
+
+		String workflowResp = BPMNUtil.getVariable(processEngineRule, "CreateNetworkInstance", "WorkflowResponse");
+		Assert.assertNotNull(workflowResp);
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("   Success vIPER 1 - CreateNetworkInstance flow Completed      ");
+		System.out.println("----------------------------------------------------------");
+
+	}
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/CreateNetworkInstance.bpmn",
+			 				 "subprocess/DoCreateNetworkInstance.bpmn",
+							 "subprocess/DoCreateNetworkInstanceRollback.bpmn",
+			 				 "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceCreateNetworkInstance_vIPER_Success2() throws Exception {
+
+		System.out.println("----------------------------------------------------------------");
+		System.out.println("  Success viPER 2 - CreateNetworkInstance flow Started!      ");
+		System.out.println("----------------------------------------------------------------");
+
+		// setup simulators
+		mockSDNCAdapterTopology("CreateNetworkV2mock/sdncCreateNetworkTopologyRsrcAssignResponse.xml", "SvcAction>assign");
+		mockSDNCAdapterTopology("CreateNetworkV2mock/sdncCreateNetworkTopologySimResponse.xml", "SvcAction>activate");
+		MockNetworkAdapterPost("CreateNetworkV2/createNetworkResponse_Success.xml", "createNetworkRequest");
+		MockGetNetworkByName_404("CreateNetworkV2/createNetwork_queryName_AAIResponse_Success.xml", "myOwn_Network");
+		MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+		MockGetNetworkByIdWithDepth("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_Success.xml", "1");
+		MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+		MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "c980a6ef-3b88-49f0-9751-dbad8608d0a6");
+		MockGetNetworkPolicy("CreateNetworkV2/createNetwork_queryNetworkPolicy_AAIResponse_Success.xml", "cee6d136-e378-4678-a024-2cd15f0ee0cg");
+		MockGetNetworkTableReference("CreateNetworkV2/createNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", "refFQDN1");
+		MockGetNetworkTableReference("CreateNetworkV2/createNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", "refFQDN2");
+		MockPutNetworkIdWithDepth("CreateNetworkV2/createNetwork_updateContrail_AAIResponse_Success.xml", "49c86598-f766-46f8-84f8-8d1c1b10f9b4", "1");
+		MockUpdateRequestDB("DBUpdateResponse.xml");
+		//MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "CreateNetworkV2/createNetwork_queryInstance_Success.xml", "v8");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "CreateNetworkV2/createNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariables2();
+		//WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("true", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_Success"));
+	    assertEquals("true", getVariable(processEngineRule, "DoCreateNetworkInstance", "CRENWKI_Success"));
+	    Assert.assertNotNull("CRENI_CompleteMsoProcessRequest - ", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_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>CREATE</action>"  + '\n'
+	    	  + "      <source>VID</source>"  + '\n'
+	    	  + "   </request-info>"  + '\n'
+	    	  + "   <aetgt:status-message>Network has been created successfully.</aetgt:status-message>"  + '\n'
+	    	  + "   <aetgt:mso-bpel-name>BPMN Network action: CREATE</aetgt:mso-bpel-name>" + '\n'
+	    	  + "</aetgt:MsoCompletionRequest>";
+
+	    Assert.assertEquals(completeMsoProcessRequest, getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_CompleteMsoProcessRequest"));
+
+		System.out.println("---------------------------------------------------------");
+		System.out.println("  Success viPER 2 - CreateNetworkInstance flow Completed     ");
+		System.out.println("---------------------------------------------------------");
+
+	}
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/CreateNetworkInstance.bpmn",
+                             "subprocess/DoCreateNetworkInstance.bpmn",
+							 "subprocess/DoCreateNetworkInstanceRollback.bpmn",
+			 			     "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceCreateNetworkInstance_VID_1610_Network_SDNC_Rollback() throws Exception {
+
+		System.out.println("--------------------------------------------------------------------------");
+		System.out.println("    Network and SDNC Rollback - CreateNetworkInstance flow Started!       ");
+		System.out.println("--------------------------------------------------------------------------");
+
+		// setup simulators
+		mockSDNCAdapterTopology("CreateNetworkV2mock/sdncCreateNetworkTopologySimResponse.xml", "SvcAction>assign");
+		mockSDNCAdapterTopology("CreateNetworkV2mock/sdncCreateNetworkTopologySimResponse.xml", "SvcAction>rollback");
+		MockNetworkAdapterPost("CreateNetworkV2/createNetworkResponse_Success.xml", "createNetworkRequest");
+		MockGetNetworkByName("MNS-25180-L-01-dmz_direct_net_1", "CreateNetworkV2/createNetwork_queryName_AAIResponse_Success.xml");
+		MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+		MockGetNetworkByIdWithDepth("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_Success.xml", "1");
+		MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+		MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "c980a6ef-3b88-49f0-9751-dbad8608d0a6");
+		MockGetNetworkPolicy("CreateNetworkV2/createNetwork_queryNetworkPolicy_AAIResponse_Success.xml", "cee6d136-e378-4678-a024-2cd15f0ee0cg");
+		MockGetNetworkTableReference("CreateNetworkV2/createNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", "refFQDN1");
+		MockGetNetworkTableReference("CreateNetworkV2/createNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", "refFQDN2");
+		MockUpdateRequestDB("DBUpdateResponse.xml");
+		//MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "CreateNetworkV2/createNetwork_queryInstance_Success.xml", "v8");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "CreateNetworkV2/createNetwork_queryInstance_Success.xml");
+		MockNetworkAdapterRestRollbackDelete("deleteNetworkResponse_Success.xml","49c86598-f766-46f8-84f8-8d1c1b10f9b4");
+
+		Map<String, String> variables = setupVariablesVID1();
+		executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		//WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_Success"));
+	    assertEquals("false", getVariable(processEngineRule, "DoCreateNetworkInstance", "CRENWKI_Success"));
+	    Assert.assertNotNull("CRENI_FalloutHandlerRequest - ", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_FalloutHandlerRequest"));
+
+		System.out.println("--------------------------------------------------------------------");
+		System.out.println(" Network and SCNC Rollback - CreateNetworkInstance flow Completed   ");
+		System.out.println("--------------------------------------------------------------------");
+
+	}
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/CreateNetworkInstance.bpmn",
+                             "subprocess/DoCreateNetworkInstance.bpmn",
+							 "subprocess/DoCreateNetworkInstanceRollback.bpmn",
+			 			     "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceCreateNetworkInstance_vIPER_1702_Network_SDNC_Rollback() throws Exception {
+
+		System.out.println("--------------------------------------------------------------------------");
+		System.out.println("    Network and SDNC Rollback - CreateNetworkInstance flow Started!       ");
+		System.out.println("--------------------------------------------------------------------------");
+
+		// setup simulators
+		mockSDNCAdapterTopology("CreateNetworkV2mock/sdncCreateNetworkTopologyRsrcAssignResponse.xml", "SvcAction>assign");
+		mockSDNCAdapterTopology("CreateNetworkV2mock/sdncCreateNetworkTopologySimResponse.xml", "SvcAction>unassign");
+		mockSDNCAdapterTopology("CreateNetworkV2mock/sdncCreateNetworkTopologySimResponse.xml", "SvcAction>activate");
+		mockSDNCAdapterTopology("CreateNetworkV2mock/sdncCreateNetworkTopologySimResponse.xml", "SvcAction>deactivate");
+		MockNetworkAdapterPost("CreateNetworkV2/createNetworkResponse_Success.xml", "createNetworkRequest");
+		MockGetNetworkByName("MNS-25180-L-01-dmz_direct_net_1", "CreateNetworkV2/createNetwork_queryName_AAIResponse_Success.xml");
+		MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+		MockGetNetworkByIdWithDepth("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_Success.xml", "1");
+		MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+		MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "c980a6ef-3b88-49f0-9751-dbad8608d0a6");
+		MockGetNetworkPolicy("CreateNetworkV2/createNetwork_queryNetworkPolicy_AAIResponse_Success.xml", "cee6d136-e378-4678-a024-2cd15f0ee0cg");
+		MockGetNetworkTableReference("CreateNetworkV2/createNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", "refFQDN1");
+		MockGetNetworkTableReference("CreateNetworkV2/createNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", "refFQDN2");
+		MockUpdateRequestDB("DBUpdateResponse.xml");
+		//MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "CreateNetworkV2/createNetwork_queryInstance_Success.xml", "v8");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "CreateNetworkV2/createNetwork_queryInstance_Success.xml");
+		MockNetworkAdapterRestRollbackDelete("deleteNetworkResponse_Success.xml","49c86598-f766-46f8-84f8-8d1c1b10f9b4");		
+
+		Map<String, String> variables = setupVariables1();
+		executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		//WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_Success"));
+	    assertEquals("false", getVariable(processEngineRule, "DoCreateNetworkInstance", "CRENWKI_Success"));
+	    Assert.assertNotNull("CRENI_FalloutHandlerRequest - ", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_FalloutHandlerRequest"));
+
+		System.out.println("--------------------------------------------------------------------");
+		System.out.println(" Network and SCNC Rollback - CreateNetworkInstance flow Completed   ");
+		System.out.println("--------------------------------------------------------------------");
+
+	}
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/CreateNetworkInstance.bpmn",
+                             "subprocess/DoCreateNetworkInstance.bpmn",
+							 "subprocess/DoCreateNetworkInstanceRollback.bpmn",
+			                 "subprocess/GenericGetService.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceCreateNetworkInstance_sdncFailure() throws Exception {
+
+		System.out.println("----------------------------------------------------------------");
+		System.out.println("        SNDC Failure - CreateNetworkInstance flow Started!      ");
+		System.out.println("----------------------------------------------------------------");
+
+		// setup simulators
+		mockSDNCAdapter_500("SvcAction>query");
+		MockGetNetworkByName_404("CreateNetworkV2/createNetwork_queryName_AAIResponse_Success.xml", "myOwn_Network");
+		MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+		MockUpdateRequestDB("DBUpdateResponse.xml");
+		//MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "CreateNetworkV2/createNetwork_queryInstance_Success.xml", "v8");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "CreateNetworkV2/createNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariables2();
+		//WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_Success"));
+	    assertEquals("false", getVariable(processEngineRule, "DoCreateNetworkInstance", "CRENWKI_Success"));
+	    Assert.assertNotNull("CRENI_FalloutHandlerRequest - ", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_FalloutHandlerRequest"));
+
+		System.out.println("---------------------------------------------------------");
+		System.out.println("     SNDC Failure - CreateNetworkInstance flow Completed ");
+		System.out.println("---------------------------------------------------------");
+
+	}
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/CreateNetworkInstance.bpmn",
+							 "subprocess/DoCreateNetworkInstance.bpmn",
+							 "subprocess/DoCreateNetworkInstanceRollback.bpmn",
+							 "subprocess/GenericGetService.bpmn",
+							 "subprocess/FalloutHandler.bpmn",
+							 "subprocess/CompleteMsoProcess.bpmn",
+							 "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceCreateNetworkInstance_queryServiceInstance404() throws Exception {
+
+		System.out.println("----------------------------------------------------------------------------------");
+		System.out.println(" Query ServiceIntance Not found - CreateNetworkInstance flow Started! ");
+		System.out.println("----------------------------------------------------------------------------------");
+	
+		//setup simulators
+		mockSDNCAdapter_500("SvcAction>query");
+		MockGetNetworkByName_404("CreateNetworkV2/createNetwork_queryName_AAIResponse_Success.xml", "myOwn_Network");
+		MockUpdateRequestDB("DBUpdateResponse.xml");
+		MockNodeQueryServiceInstanceById_404("f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+	
+		Map<String, String> variables = setupVariables2();
+		//WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+	
+		assertEquals("false", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_Success"));
+		assertEquals("false", getVariable(processEngineRule, "DoCreateNetworkInstance", "CRENWKI_Success"));
+		Assert.assertNotNull("CRENI_FalloutHandlerRequest - ", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_FalloutHandlerRequest"));
+	
+		System.out.println("---------------------------------------------------------------------------------");
+		System.out.println(" Query ServiceIntance Not found - CreateNetworkInstance flow Completed ");
+		System.out.println("---------------------------------------------------------------------------------");
+
+	}	
+	
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/CreateNetworkInstance.bpmn",
+							 "subprocess/DoCreateNetworkInstance.bpmn",
+							 "subprocess/DoCreateNetworkInstanceRollback.bpmn",
+							 "subprocess/GenericGetService.bpmn",
+							 "subprocess/FalloutHandler.bpmn",
+							 "subprocess/CompleteMsoProcess.bpmn",
+            				 "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceCreateNetworkInstance_VID_Success1() throws Exception {
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("  Success VID1 - CreateNetworkInstance flow Started!      ");
+		System.out.println("----------------------------------------------------------");
+
+		// setup simulators
+		mockSDNCAdapterTopology("CreateNetworkV2mock/sdncCreateNetworkTopologySimResponse.xml", "SvcAction>assign");
+		MockNetworkAdapterPost("CreateNetworkV2/createNetworkResponse_Success.xml", "createNetworkRequest");
+		MockGetNetworkByName("MNS-25180-L-01-dmz_direct_net_1", "CreateNetworkV2/createNetwork_queryName_AAIResponse_Success.xml");
+		MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+		MockGetNetworkByIdWithDepth("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "CreateNetworkV2/createNetwork_queryNetworkId_AAIResponse_Success.xml", "1");
+		MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+		MockGetNetworkVpnBinding("CreateNetworkV2/createNetwork_queryVpnBinding_AAIResponse_Success.xml", "c980a6ef-3b88-49f0-9751-dbad8608d0a6");
+		MockGetNetworkPolicy("CreateNetworkV2/createNetwork_queryNetworkPolicy_AAIResponse_Success.xml", "cee6d136-e378-4678-a024-2cd15f0ee0cg");
+		MockGetNetworkTableReference("CreateNetworkV2/createNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", "refFQDN1");
+		MockGetNetworkTableReference("CreateNetworkV2/createNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", "refFQDN2");
+		MockPutNetworkIdWithDepth("CreateNetworkV2/createNetwork_updateContrail_AAIResponse_Success.xml", "49c86598-f766-46f8-84f8-8d1c1b10f9b4", "1");
+		MockUpdateRequestDB("DBUpdateResponse.xml");
+		//MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "CreateNetworkV2/createNetwork_queryInstance_Success.xml", "v8");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "CreateNetworkV2/createNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariablesVID1();
+		//WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		executeAsyncWorkflow(processEngineRule, "CreateNetworkInstance", variables);
+		System.out.println("----------------------------------------------------------");
+		System.out.println("- got workflow response -");
+		System.out.println("----------------------------------------------------------");
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("true", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_Success"));
+	    Assert.assertNotNull("CRENI_CompleteMsoProcessRequest - ", getVariable(processEngineRule, "CreateNetworkInstance", "CRENI_CompleteMsoProcessRequest"));
+
+		String workflowResp = BPMNUtil.getVariable(processEngineRule, "CreateNetworkInstance", "WorkflowResponse");
+		Assert.assertNotNull(workflowResp);
+
+		System.out.println("-----------------------------------------------------------");
+		System.out.println("  Success VID1 - CreateNetworkInstanceInfra flow Completed ");
+		System.out.println("-----------------------------------------------------------");
+
+	}
+
+	// *****************
+	// Utility Section
+	// *****************
+
+	String networkModelInfo =
+		       "  {\"modelUuid\": \"mod-inst-uuid-123\", " + '\n' +
+               "   \"modelName\": \"mod_inst_z_123\", " + '\n' +
+		       "   \"modelVersion\": \"mod-inst-uuid-123\", " + '\n' +
+		       "   \"modelCustomizationUuid\": \"z_network_123\", " + '\n' +
+		       "   \"modelInvariantUuid\": \"mod-invar-uuid-123\" " + '\n' +
+		       "  }";
+
+	String serviceModelInfo =
+		       "  {\"modelUuid\": \"36a3a8ea-49a6-4ac8-b06c-89a54544b9b6\", " + '\n' +
+               "   \"modelName\": \"HNGW Protected OAM\", " + '\n' +
+		       "   \"modelVersion\": \"1.0\", " + '\n' +
+		       "   \"modelInvariantUuid\": \"fcc85cb0-ad74-45d7-a5a1-17c8744fdb71\" " + '\n' +
+		       "  }";
+
+	// Success Scenario
+	private Map<String, String> setupVariables1() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("testMessageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56");
+		variables.put("msoRequestId", "testRequestId");
+		variables.put("requestId", "testRequestId");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("networkId", "networkId");
+		variables.put("networkName", "MNS-25180-L-01-dmz_direct_net_1");
+		variables.put("lcpCloudRegionId", "RDM2WAGPLCP");
+		variables.put("tenantId", "7dd5365547234ee8937416c65507d266");
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		variables.put("disableRollback", "false"); // macro
+		variables.put("failIfExists", "false");
+		variables.put("sdncVersion", "1702");
+		variables.put("subscriptionServiceType", "MSO-dev-service-type");
+		variables.put("globalSubscriberId", "globalId_45678905678");
+		variables.put("networkModelInfo", networkModelInfo);
+		variables.put("serviceModelInfo", serviceModelInfo);
+
+
+		return variables;
+
+	}
+
+	// Success Scenario 2
+	private Map<String, String> setupVariables2() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("testMessageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56");
+		variables.put("msoRequestId", "testRequestId");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("networkId", "networkId");
+		variables.put("networkName", "myOwn_Network");  // Name Not found in AA&I
+		variables.put("lcpCloudRegionId", "RDM2WAGPLCP");
+		variables.put("tenantId", "7dd5365547234ee8937416c65507d266");
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		variables.put("disableRollback", "false");  // 1702
+		variables.put("failIfExists", "false");
+		//variables.put("sdncVersion", "1702");
+		variables.put("sdncVersion", "1707");
+		variables.put("subscriptionServiceType", "MSO-dev-service-type");
+		variables.put("globalSubscriberId", "globalId_45678905678");
+		variables.put("networkModelInfo", networkModelInfo);
+		variables.put("serviceModelInfo", serviceModelInfo);
+
+		return variables;
+
+	}
+
+	// Active Scenario
+	private Map<String, String> setupVariablesActive() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("testMessageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56");
+		variables.put("msoRequestId", "testRequestId");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("networkId", "networkId");
+		variables.put("networkName", "MNS-25180-L-01-dmz_direct_net_2");   // Unique name for Active
+		variables.put("lcpCloudRegionId", "RDM2WAGPLCP");
+		variables.put("tenantId", "7dd5365547234ee8937416c65507d266");
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		variables.put("suppressRollback", "false");
+		variables.put("disableRollback", "false");
+		variables.put("failIfExists", "false");
+		variables.put("sdncVersion", "1702");
+		variables.put("subscriptionServiceType", "MSO-dev-service-type");
+		variables.put("globalSubscriberId", "globalId_45678905678");
+		variables.put("networkModelInfo", networkModelInfo);
+		variables.put("serviceModelInfo", serviceModelInfo);
+
+		return variables;
+
+	}
+
+	// Missing Name Scenario
+	private Map<String, String> setupVariablesMissingName() {
+		Map<String, String> variables = new HashMap<String, String>();
+		//variables.put("bpmnRequest", getCreateNetworkRequestMissingName());
+		variables.put("testMessageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56");
+		variables.put("msoRequestId", "testRequestId");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("networkId", "networkId");
+		// variables.put("networkName", "MNS-25180-L-01-dmz_direct_net_2");  // Missing 'name' variable
+		// variables.put("networkName", "");                                 // Missing 'value' of name variable
+		variables.put("modelName", "CONTRAIL_EXTERNAL");
+		variables.put("cloudConfiguration", "RDM2WAGPLCP");
+		variables.put("tenantId", "7dd5365547234ee8937416c65507d266");
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		variables.put("suppressRollback", "true");
+		variables.put("failIfExists", "false");
+
+		return variables;
+
+	}
+
+	// SDNC Rollback Scenario
+	private Map<String, String> setupVariablesSDNCRollback() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("testMessageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56");
+		variables.put("msoRequestId", "testRequestId");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("networkId", "networkId");
+		variables.put("networkName", "MNS-25180-L-01-dmz_direct_net_3");  // Unique name for Rollback
+		variables.put("modelName", "CONTRAIL_EXTERNAL");
+		variables.put("cloudConfiguration", "RDM2WAGPLCP");
+		variables.put("tenantId", "7dd5365547234ee8937416c65507d266");
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		variables.put("suppressRollback", "true");
+		variables.put("disableRollback", "false");
+
+		return variables;
+
+	}
+
+	// old
+	public String getCreateNetworkRequestActive() {
+
+		String request =
+				"{ \"requestDetails\": { " + '\n' +
+				"      \"modelInfo\": { " + '\n' +
+				"         \"modelType\": \"modelType\", " + '\n' +
+				"         \"modelId\": \"modelId\", " + '\n' +
+				"         \"modelCustomizationUuid\": \"modelCustUuid\", " + '\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\": \"false\" ," + '\n' +
+				"          \"productFamilyId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestParameters\": { " + '\n' +
+				"          \"userParams\": [] " + '\n' +
+				"      }	" + '\n' +
+			    " } " + '\n' +
+			    "}";
+
+		return request;
+
+	}
+
+	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;
+	}
+
+
+	// VID json input
+	private Map<String, String> setupVariablesVID1() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("bpmnRequest", getCreateNetworkRequestVID1());
+		variables.put("mso-request-id", "testRequestId");
+		//variables.put("msoRequestId", "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", "networkId");
+		variables.put("serviceType", "vMOG");
+		variables.put("vfModuleType", "");
+		variables.put("networkType", "modelName");
+
+		return variables;
+
+	}
+
+	public String getCreateNetworkRequestVID1() {
+
+		String request =
+				"{ \"requestDetails\": { " + '\n' +
+				"      \"modelInfo\": { " + '\n' +
+				"         \"modelType\": \"modelType\", " + '\n' +
+				"         \"modelCustomizationId\": \"f21df226-8093-48c3-be7e-0408fcda0422\", " + '\n' +
+				"         \"modelName\": \"CONTRAIL_EXTERNAL\", " + '\n' +
+				"         \"modelVersion\": \"1.0\" " + '\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\": \"false\" ," + '\n' +
+				"          \"productFamilyId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestParameters\": { " + '\n' +
+				"          \"backoutOnFailure\": false, " + '\n' +
+				"          \"serviceId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\", " + '\n' +
+				"          \"userParams\": [] " + '\n' +
+				"      }	" + '\n' +
+			    " } " + '\n' +
+			    "}";
+
+		return request;
+	}
+
+}
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
index e70f48d..d361d1e 100644
--- 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
@@ -20,6 +20,10 @@
 
 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.openecomp.mso.bpmn.mock.StubResponseAAI.MockDeleteVolumeGroupById;
 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById;
 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetVolumeGroupByName;
@@ -27,6 +31,7 @@
 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 static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockPutVNFVolumeGroupRollback;
 
 import java.io.IOException;
 import java.util.HashMap;
@@ -34,10 +39,12 @@
 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;
+import org.openecomp.mso.bpmn.mock.StubResponseAAI;
 
 public class CreateVfModuleVolumeInfraV1Test extends WorkflowTest {
 
@@ -48,6 +55,8 @@
 	public CreateVfModuleVolumeInfraV1Test() throws IOException {
 		callbacks.put("volumeGroupCreate", FileUtil.readResourceFile(
 				"__files/CreateVfModuleVolumeInfraV1/CreateVfModuleVolumeCallbackResponse.xml"));
+		callbacks.put("volumeGroupDelete", FileUtil.readResourceFile(
+				"__files/DeleteVfModuleVolumeInfraV1/DeleteVfModuleVolumeCallbackResponse.xml"));
 		callbacks.put("volumeGroupException", FileUtil.readResourceFile(
 				"__files/CreateVfModuleVolumeInfraV1/CreateVfModuleCallbackException.xml"));
 		callbacks.put("volumeGroupRollback", FileUtil.readResourceFile(
@@ -58,9 +67,10 @@
 	 * Happy path scenario for VID
 	 *****************************/
 	@Test
+	//@Ignore
 	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
 			"subprocess/GenericGetService.bpmn",
-			"subprocess/DoCreateVfModuleVolumeV1.bpmn",
+			"subprocess/DoCreateVfModuleVolumeV2.bpmn",
             "subprocess/FalloutHandler.bpmn",
             "subprocess/CompleteMsoProcess.bpmn",
             "subprocess/VnfAdapterRestV1.bpmn"})
@@ -100,9 +110,61 @@
 	}
 	
 	/**
+	 * Fail - trigger rollback
+	 *****************************/
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
+			"subprocess/GenericGetService.bpmn",
+			"subprocess/DoCreateVfModuleVolumeV2.bpmn",
+			"subprocess/DoCreateVfModuleVolumeRollback.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/VnfAdapterRestV1.bpmn"})
+	public void TestRollback() 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);
+		mockPostVNFVolumeGroup(202);
+		mockPutVNFVolumeGroupRollback("TEST-VOLUME-GROUP-ID-0123", 202);
+		MockDeleteVolumeGroupById("AAIAIC25", "8424bb3c-c3e7-4553-9662-469649ed9379", "1460134360", 202);
+		StubResponseAAI.MockGetVolumeGroupByName_404("AAIAIC25", "TEST-MSOTESTVOL101a-vSAMP12_base_vol_module-0");
+		StubResponseAAI.MockGetVolumeGroupByName("AAIAIC25", "MSOTESTVOL101a-vSAMP12_base_vol_module-0", "CreateVfModuleVolumeInfraV1/createVfModuleVolume_queryVolumeName_AAIResponse_Success.xml", 200);
+		StubResponseAAI.MockDeleteVolumeGroup("AAIAIC25", "8424bb3c-c3e7-4553-9662-469649ed9379", "1460134360");
+		
+		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");
+		injectVNFRestCallbacks(callbacks, "volumeGroupDelete");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "CVMVINFRAV1_SuccessIndicator", false);
+		
+		logEnd();
+	}
+	
+	/**
 	 * Happy path scenario for VID
 	 *****************************/
 	@Test
+	@Ignore
 	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
 			"subprocess/GenericGetService.bpmn",
 			"subprocess/DoCreateVfModuleVolumeV1.bpmn",
@@ -145,7 +207,7 @@
 	 *Vnf Create fail
 	 *****************************/
 	@Test
-	//@Ignore
+	@Ignore
 	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
 			"subprocess/GenericGetService.bpmn",
 			"subprocess/DoCreateVfModuleVolumeV1.bpmn",
@@ -193,7 +255,7 @@
 	 * Error scenario - vnf not found
 	 ********************************/
 	@Test
-	//@Ignore
+	@Ignore
 	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
 			"subprocess/GenericGetService.bpmn",
 			"subprocess/DoCreateVfModuleVolumeV1.bpmn",
@@ -233,7 +295,7 @@
 	 * Error scenario - error in validation
 	 **************************************/
 	@Test
-	//@Ignore
+	@Ignore
 	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
 			"subprocess/GenericGetService.bpmn",
 			"subprocess/DoCreateVfModuleVolumeV1.bpmn",
@@ -270,7 +332,7 @@
 	 * Error scenario - service instance not found
 	 *********************************************/
 	@Test
-	//@Ignore
+	@Ignore
 	@Deployment(resources = {"process/CreateVfModuleVolumeInfraV1.bpmn",
 			"subprocess/GenericGetService.bpmn",
 			"subprocess/DoCreateVfModuleVolumeV1.bpmn",
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
index 80c1e8c..4870522 100644
--- 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
@@ -44,6 +44,7 @@
 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.BPMNUtil;
 import org.openecomp.mso.bpmn.common.WorkflowTest;
@@ -134,6 +135,7 @@
 	}
 
 	@Test
+	@Ignore
 	@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{
 
@@ -151,6 +153,7 @@
 	}
 
 	@Test
+	@Ignore
 	@Deployment(resources = {"subprocess/DoCreateVnf.bpmn", 
 							"subprocess/GenericGetService.bpmn", 
 							"subprocess/GenericGetVnf.bpmn", 
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteGenericALaCarteServiceInstanceTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteGenericALaCarteServiceInstanceTest.java
new file mode 100644
index 0000000..d9e882b
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteGenericALaCarteServiceInstanceTest.java
@@ -0,0 +1,91 @@
+package org.openecomp.mso.bpmn.infrastructure;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+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.MockDeleteServiceInstance;
+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.StubResponseDatabase.mockUpdateRequestDB;
+
+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.BPMNUtil;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+
+/**
+ * Unit test cases for DelServiceInstance.bpmn
+ */
+public class DeleteGenericALaCarteServiceInstanceTest extends WorkflowTest {
+
+	public DeleteGenericALaCarteServiceInstanceTest() throws IOException {
+	}
+
+	/**
+	 * Sunny day VID scenario.
+	 *
+	 * @throws Exception
+	 */
+    @Ignore // IGNORED FOR 1710 MERGE TO ONAP
+	@Test
+	@Deployment(resources = {
+			"process/DeleteGenericALaCarteServiceInstance.bpmn",
+			"subprocess/DoDeleteServiceInstance.bpmn",
+			"subprocess/GenericDeleteService.bpmn",
+			"subprocess/GenericGetService.bpmn",
+			"subprocess/CompleteMsoProcess.bpmn",
+			"subprocess/FalloutHandler.bpmn" })
+	public void sunnyDayAlaCarte() throws Exception {
+
+		logStart();
+
+		//AAI
+		MockDeleteServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "");
+		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getSINoRelations.xml");
+		MockNodeQueryServiceInstanceById("MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getSIUrlById.xml");
+		//DB
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		String businessKey = UUID.randomUUID().toString();
+
+		Map<String, String> variables = setupVariables();
+		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "DeleteGenericALaCarteServiceInstance", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+		String workflowResp = BPMNUtil.getVariable(processEngineRule, "DeleteGenericALaCarteServiceInstance", "WorkflowResponse");
+		//assertNotNull(workflowResp);
+		System.out.println("Workflow (Synch) Response:\n" + workflowResp);
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DeleteGenericALaCarteServiceInstance", "WorkflowException");
+		String completionReq = BPMNUtil.getVariable(processEngineRule, "DeleteGenericALaCarteServiceInstance", "completionRequest");
+		System.out.println("completionReq:\n" + completionReq);
+		System.out.println("workflowException:\n" + workflowException);
+		assertNotNull(completionReq);
+		assertEquals(null, workflowException);
+
+		logEnd();
+	}
+
+	// Success Scenario
+	private Map<String, String> setupVariables() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("isDebugLogEnabled", "true");
+		variables.put("bpmnRequest", getRequest());
+		variables.put("mso-request-id", "RaaTestRequestId-1");
+		variables.put("serviceInstanceId","MIS%252F1604%252F0026%252FSW_INTERNET");
+		return variables;
+	}
+
+	public String getRequest() {
+		String request = "{\"requestDetails\":{\"modelInfo\":{\"modelType\":\"service\",\"modelInvariantUuid\":\"uuid-miu-svc-011-abcdef\",\"modelUuid\":\"ASDC_TOSCA_UUID\",\"modelName\":\"SIModelName1\",\"modelVersion\":\"2\"},\"subscriberInfo\":{\"globalSubscriberId\":\"SDN-ETHERNET-INTERNET\",\"subscriberName\":\"\"},\"requestInfo\":{\"instanceName\":\"1604-MVM-26\",\"source\":\"VID\",\"suppressRollback\":\"true\",\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"mdt1\",\"tenantId\":\"8b1df54faa3b49078e3416e21370a3ba\"},\"requestParameters\":{\"subscriptionServiceType\":\"123456789\",\"aLaCarte\":\"false\",\"userParams\":\"somep\"}}}";
+		return request;
+	}
+
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteNetworkInstanceTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteNetworkInstanceTest.java
new file mode 100644
index 0000000..0da2526
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DeleteNetworkInstanceTest.java
@@ -0,0 +1,321 @@
+package org.openecomp.mso.bpmn.infrastructure;
+
+import static org.openecomp.mso.bpmn.common.BPMNUtil.executeAsyncWorkflow;
+import static org.openecomp.mso.bpmn.common.BPMNUtil.getVariable;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetCloudRegion;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetNetworkByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseNetworkAdapter.MockNetworkAdapter;
+import static org.openecomp.mso.bpmn.mock.StubResponseNetworkAdapter.MockNetworkAdapterContainingRequest;
+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.mock.SDNCAdapterNetworkTopologyMockTransformer;
+
+import com.github.tomakehurst.wiremock.extension.ResponseTransformer;
+
+
+/**
+ * Unit test cases for DeleteNetworkInstance.bpmn
+ *
+ */
+//@Ignore
+public class DeleteNetworkInstanceTest 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 DeleteNetworkInstance.bpmn
+	 *  - String input & String response
+	 */
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/DeleteNetworkInstance.bpmn",
+							 "subprocess/DoDeleteNetworkInstance.bpmn",
+							 "subprocess/DoDeleteNetworkInstanceRollback.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceDeleteNetworkInstance_VID_Success() throws Exception {
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("      Success VID - DeleteNetworkInstance flow Started!   ");
+		System.out.println("----------------------------------------------------------");
+
+		// setup simulators
+		mockSDNCAdapterTopology("DeleteNetworkV2mock/sdncDeleteNetworkTopologySimResponse.xml", "SvcAction>delete");
+		MockNetworkAdapter("bdc5efe8-404a-409b-85f6-0dcc9eebae30", 200, "deleteNetworkResponse_Success.xml");
+		MockGetNetworkByIdWithDepth("bdc5efe8-404a-409b-85f6-0dcc9eebae30", "DeleteNetworkV2/deleteNetworkAAIResponse_Success.xml", "1");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "DeleteNetworkV2/cloudRegion30_AAIResponse_Success.xml");
+
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("mso-request-id", "testRequestId");
+		variables.put("requestId", "testRequestId");
+		variables.put("isBaseVfModule", "true");
+		variables.put("recipeTimeout", "0");
+		variables.put("requestAction", "DELETE");
+		variables.put("serviceInstanceId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		variables.put("vnfId", "");
+		variables.put("vfModuleId", "");
+		variables.put("volumeGroupId", "");
+		variables.put("networkId", "bdc5efe8-404a-409b-85f6-0dcc9eebae30");
+		variables.put("serviceType", "MOG");
+		variables.put("vfModuleType", "");
+		variables.put("networkType", "modelName");
+		variables.put("bpmnRequest", getDeleteNetworkInstanceInfraRequest());
+
+		executeAsyncWorkflow(processEngineRule, "DeleteNetworkInstance", variables);
+
+	    Assert.assertNotNull("DELNI_CompleteMsoProcessRequest - ", getVariable(processEngineRule, "DeleteNetworkInstance", "DELNI_CompleteMsoProcessRequest"));
+	    Assert.assertEquals("true", getVariable(processEngineRule, "DeleteNetworkInstance", "DELNI_Success"));
+
+		String workflowResp = BPMNUtil.getVariable(processEngineRule, "DeleteNetworkInstance", "WorkflowResponse");
+		Assert.assertNotNull(workflowResp);
+		System.out.println("DeleteNetworkInstanceTest.shouldInvokeServiceDeleteNetworkInstance_Success() WorkflowResponse:\n" + workflowResp);
+
+	    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>DELETE</action>"  + '\n'
+	    	  + "      <source>VID</source>"  + '\n'
+	    	  + "   </request-info>"  + '\n'
+	    	  + "   <aetgt:status-message>Network has been deleted successfully.</aetgt:status-message>"  + '\n'
+	    	  + "   <aetgt:mso-bpel-name>BPMN Network action: DELETE</aetgt:mso-bpel-name>" + '\n'
+	    	  + "</aetgt:MsoCompletionRequest>";
+
+	    Assert.assertEquals(completeMsoProcessRequest, getVariable(processEngineRule, "DeleteNetworkInstance", "DELNI_CompleteMsoProcessRequest"));
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("     Success VID - DeleteNetworkInstance flow Completed   ");
+		System.out.println("----------------------------------------------------------");
+
+
+	}
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/DeleteNetworkInstance.bpmn",
+							 "subprocess/DoDeleteNetworkInstance.bpmn",
+							 //"subprocess/DoDeleteNetworkInstanceRollback.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceDeleteNetworkInstance_vIPER_Success() throws Exception {
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("      Success vIPER - DeleteNetworkInstance flow Started! ");
+		System.out.println("----------------------------------------------------------");
+
+		// setup simulators
+		mockSDNCAdapterTopology("DeleteNetworkV2mock/sdncDeleteNetworkTopologySimResponse.xml", "SvcAction>unassign");
+		mockSDNCAdapterTopology("DeleteNetworkV2mock/sdncDeleteNetworkTopologySimResponse.xml", "SvcAction>deactivate");
+		MockNetworkAdapter("bdc5efe8-404a-409b-85f6-0dcc9eebae30", 200, "deleteNetworkResponse_Success.xml");
+		MockGetNetworkByIdWithDepth("bdc5efe8-404a-409b-85f6-0dcc9eebae30", "DeleteNetworkV2/deleteNetworkAAIResponse_Success.xml", "1");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "DeleteNetworkV2/cloudRegion30_AAIResponse_Success.xml");
+
+		String networkModelInfo = "  {\"modelName\": \"modelName\", " + '\n' +
+		                          "   \"networkType\": \"modelName\" }";
+
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("testMessageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56");
+		variables.put("msoRequestId", "testRequestId");
+		variables.put("requestId", "testRequestId");
+		variables.put("serviceInstanceId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		variables.put("networkId", "bdc5efe8-404a-409b-85f6-0dcc9eebae30");
+		variables.put("networkName", "HSL_direct_net_2");
+		variables.put("lcpCloudRegionId", "RDM2WAGPLCP");
+		variables.put("tenantId", "88a6ca3ee0394ade9403f075db23167e");
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		variables.put("disableRollback", "false");  // 1702
+		variables.put("failIfExists", "false");
+		//variables.put("sdncVersion", "1702");
+		variables.put("sdncVersion", "1707");
+		variables.put("subscriptionServiceType", "MSO-dev-service-type");
+		variables.put("networkModelInfo", networkModelInfo);
+
+		executeAsyncWorkflow(processEngineRule, "DeleteNetworkInstance", variables);
+
+	    Assert.assertNotNull("DELNI_CompleteMsoProcessRequest - ", getVariable(processEngineRule, "DeleteNetworkInstance", "DELNI_CompleteMsoProcessRequest"));
+	    Assert.assertEquals("true", getVariable(processEngineRule, "DeleteNetworkInstance", "DELNI_Success"));
+
+		String workflowResp = BPMNUtil.getVariable(processEngineRule, "DeleteNetworkInstance", "WorkflowResponse");
+		Assert.assertNotNull(workflowResp);
+		System.out.println("DeleteNetworkInstanceTest.shouldInvokeServiceDeleteNetworkInstance_vIPER_Success() WorkflowResponse:\n" + workflowResp);
+
+	    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>DELETE</action>"  + '\n'
+	    	  + "      <source>VID</source>"  + '\n'
+	    	  + "   </request-info>"  + '\n'
+	    	  + "   <aetgt:status-message>Network has been deleted successfully.</aetgt:status-message>"  + '\n'
+	    	  + "   <aetgt:mso-bpel-name>BPMN Network action: DELETE</aetgt:mso-bpel-name>" + '\n'
+	    	  + "</aetgt:MsoCompletionRequest>";
+
+	    Assert.assertEquals(completeMsoProcessRequest, getVariable(processEngineRule, "DeleteNetworkInstance", "DELNI_CompleteMsoProcessRequest"));
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("     Success VID - DeleteNetworkInstance flow Completed   ");
+		System.out.println("----------------------------------------------------------");
+
+
+	}
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/DeleteNetworkInstance.bpmn",
+						 	 "subprocess/DoDeleteNetworkInstance.bpmn",
+						 	 "subprocess/DoDeleteNetworkInstanceRollback.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceDeleteNetworkInstanceInfra_vIPER_Rollback() throws Exception {
+        // Rollback is not Applicable for DeleteNetwork (no requirements). Rollback should not be invoked.
+		System.out.println("----------------------------------------------------------");
+		System.out.println("      Rollback - DeleteNetworkInstance flow Started!      ");
+		System.out.println("----------------------------------------------------------");
+
+		// setup simulatores
+		mockSDNCAdapter("/SDNCAdapter", "SvcAction>unassign", 500, "");
+		mockSDNCAdapterTopology("DeleteNetworkV2mock/sdncDeleteNetworkTopologySimResponse.xml", "SvcAction>deactivate");
+		mockSDNCAdapterTopology("CreateNetworkV2mock/sdncCreateNetworkTopologySimResponse.xml", "SvcAction>activate");
+		MockNetworkAdapter("bdc5efe8-404a-409b-85f6-0dcc9eebae30", 200, "deleteNetworkResponse_Success.xml");
+		MockNetworkAdapterContainingRequest("createNetworkRequest", 200, "CreateNetworkV2/createNetworkResponse_Success.xml");
+		MockGetNetworkByIdWithDepth	("bdc5efe8-404a-409b-85f6-0dcc9eebae30", "DeleteNetworkV2/deleteNetworkAAIResponse_Success.xml", "1");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockGetCloudRegion("RDM2WAGPLCP", 200, "DeleteNetworkV2/cloudRegion30_AAIResponse_Success.xml");
+
+		String networkModelInfo = "  {\"modelCustomizationId\": \"uuid-nrc-001-1234\", " + '\n' +
+                "   \"modelInvariantId\": \"was-ist-das-001-1234\" }";
+
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("testMessageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56");
+		variables.put("msoRequestId", "testRequestId");
+		variables.put("requestId", "testRequestId");
+		variables.put("serviceInstanceId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		variables.put("networkId", "bdc5efe8-404a-409b-85f6-0dcc9eebae30");
+		variables.put("networkName", "HSL_direct_net_2");
+		variables.put("lcpCloudRegionId", "RDM2WAGPLCP");
+		variables.put("tenantId", "88a6ca3ee0394ade9403f075db23167e");
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		variables.put("disableRollback", "false");  // 1702
+		variables.put("failIfExists", "false");
+		variables.put("sdncVersion", "1702");
+		variables.put("subscriptionServiceType", "MSO-dev-service-type");
+		variables.put("networkModelInfo", networkModelInfo);
+
+		executeAsyncWorkflow(processEngineRule, "DeleteNetworkInstance", variables);
+		//WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "DeleteNetworkInstance", variables);
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+		String workflowResp = BPMNUtil.getVariable(processEngineRule, "DeleteNetworkInstance", "WorkflowResponse");
+		Assert.assertNotNull(workflowResp);
+
+		Assert.assertNotNull("DELNI_FalloutHandlerRequest - ", getVariable(processEngineRule, "DeleteNetworkInstance", "DELNI_FalloutHandlerRequest"));
+	    Assert.assertEquals("false", getVariable(processEngineRule, "DeleteNetworkInstance", "DELNI_Success"));
+	    Assert.assertEquals("false", BPMNUtil.getVariable(processEngineRule, "DoDeleteNetworkInstance", "DELNWKI_Success"));
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("     Rollback - DeleteNetworkInstanceModular flow Completed     ");
+		System.out.println("----------------------------------------------------------");
+
+
+	}
+
+
+	// *****************
+	// Utility Section
+	// *****************
+
+	public String getDeleteNetworkInstanceInfraRequest() {
+
+		String request =
+				"{ \"requestDetails\": { " + '\n' +
+				"      \"modelInfo\": { " + '\n' +
+				"         \"modelType\": \"modelType\", " + '\n' +
+				"         \"modelCustomizationId\": \"f21df226-8093-48c3-be7e-0408fcda0422\", " + '\n' +
+				"         \"modelName\": \"CONTRAIL_EXTERNAL\", " + '\n' +
+				"         \"modelVersion\": \"1.0\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"cloudConfiguration\": { " + '\n' +
+				"          \"lcpCloudRegionId\": \"RDM2WAGPLCP\", " + '\n' +
+				"          \"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestInfo\": { " + '\n' +
+				"          \"instanceName\": \"HSL_direct_net_2\", " + '\n' +
+				"          \"source\": \"VID\", " + '\n' +
+				"          \"suppressRollback\": \"false\", " + '\n' +
+				"          \"callbackUrl\": \"\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestParameters\": { " + '\n' +
+				"          \"backoutOnFailure\": true, " + '\n' +
+				"          \"serviceId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\", " + '\n' +
+				"          \"userParams\": {} " + '\n' +
+				"      }	" + '\n' +
+			    " } " + '\n' +
+			    "}";
+		return request;
+
+	}
+
+
+	public String getDeleteNetworkInstanceInfraRequest_MissingId() {
+
+		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\": \"HSL_direct_net_2\", " + '\n' +
+				"          \"source\": \"VID\", " + '\n' +
+				"          \"callbackUrl\": \"\" " + '\n' +
+				"      }, " + '\n' +
+				"      \"requestParameters\": { " + '\n' +
+				"          \"backoutOnFailure\": true, " + '\n' +
+				"          \"serviceId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\", " + '\n' +
+				"          \"userParams\": [] " + '\n' +
+				"      }	" + '\n' +
+			    " } " + '\n' +
+			    "}";
+		return request;
+
+	}
+
+}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateSIRollbackTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateSIRollbackTest.java
new file mode 100644
index 0000000..f2c9680
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateSIRollbackTest.java
@@ -0,0 +1,179 @@
+package org.openecomp.mso.bpmn.infrastructure;
+
+import static org.junit.Assert.assertEquals;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDeleteServiceInstance;
+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.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.core.RollbackData;
+
+/**
+ * Unit test cases for DoCreateServiceInstanceRollback.bpmn
+ */
+public class DoCreateSIRollbackTest extends WorkflowTest {
+	private static final String EOL = "\n";
+	private final CallbackSet callbacks = new CallbackSet();
+	private final String sdncAdapterCallback =
+			"<output xmlns=\"com:att:sdnctl:l3api\">" + EOL +
+			"  <svc-request-id>((REQUEST-ID))</svc-request-id>" + EOL +
+			"  <ack-final-indicator>Y</ack-final-indicator>" + EOL +
+			"</output>" + EOL;
+		
+	public DoCreateSIRollbackTest() throws IOException {
+		callbacks.put("deactivate", sdncAdapterCallback);
+		callbacks.put("delete", sdncAdapterCallback);
+	}
+		
+	/**
+	 * Sunny day VID scenario.
+	 *
+	 * @throws Exception
+	 */
+	//@Ignore // File not found - unable to run the test.  Also, Stubs need updating..
+	@Test
+	@Deployment(resources = {
+			"subprocess/DoCreateServiceInstanceRollback.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericDeleteService.bpmn",
+			"subprocess/GenericGetService.bpmn",
+			"subprocess/CompleteMsoProcess.bpmn",
+			"subprocess/FalloutHandler.bpmn" })
+	public void sunnyDay() throws Exception {
+
+		logStart();
+
+		//AAI
+		MockDeleteServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "");
+		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getSINoRelations.xml");
+		MockNodeQueryServiceInstanceById("MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getSIUrlById.xml");
+		//SDNC
+		mockSDNCAdapter(200);
+		//DB
+		mockUpdateRequestDB(200, "DBUpdateResponse.xml");
+		String businessKey = UUID.randomUUID().toString();
+
+		Map<String, Object> variables =  new HashMap<String, Object>();
+		setupVariables(variables);
+		invokeSubProcess("DoCreateServiceInstanceRollback", businessKey, variables);
+		injectSDNCCallbacks(callbacks, "deactivate");
+		injectSDNCCallbacks(callbacks, "delete");
+		waitForProcessEnd(businessKey, 10000);
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DoCreateServiceInstanceRollback", "WorkflowException");
+		System.out.println("workflowException:\n" + workflowException);
+		assertEquals(null, workflowException);
+
+		logEnd();
+	}
+
+	// Success Scenario
+	private void setupVariables(Map<String, Object> variables) {
+		variables.put("isDebugLogEnabled", "true");
+		variables.put("msoRequestId", "RaaTestRequestId-1");
+		variables.put("mso-request-id", "RaaTestRequestId-1");
+		variables.put("serviceInstanceId","MIS%252F1604%252F0026%252FSW_INTERNET");
+		
+		RollbackData rollbackData = new RollbackData();
+
+		rollbackData.put("SERVICEINSTANCE", "serviceInstanceId", "MIS%252F1604%252F0026%252FSW_INTERNET");
+		rollbackData.put("SERVICEINSTANCE", "globalCustomerId", "SDN-ETHERNET-INTERNET");
+		rollbackData.put("SERVICEINSTANCE", "serviceSubscriptionType", "123456789");
+		rollbackData.put("SERVICEINSTANCE", "disablerollback", "false");
+		rollbackData.put("SERVICEINSTANCE", "rollbackAAI", "true");
+		rollbackData.put("SERVICEINSTANCE", "rollbackSDNC", "true");
+		
+		String req =  "<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5=\"http://org.openecomp/mso/request/types/v1\"" + EOL +
+				 "xmlns:sdncadapter=\"http://org.openecomp.mso/workflow/sdnc/adapter/schema/v1\" " + EOL +
+				 "xmlns:sdncadapterworkflow=\"http://org.openecomp/mso/workflow/schema/v1\">" + EOL +
+				 	"<sdncadapter:RequestHeader>" + EOL + 
+					"<sdncadapter:RequestId>b043d290-140d-4a38-a9b6-95d3b8bd27d4</sdncadapter:RequestId>" + EOL + 
+					"<sdncadapter:SvcInstanceId>MIS%252F1604%252F0026%252FSW_INTERNET</sdncadapter:SvcInstanceId>" + EOL + 
+					"<sdncadapter:SvcAction>deactivate</sdncadapter:SvcAction>" + EOL + 
+					"<sdncadapter:SvcOperation>service-topology-operation</sdncadapter:SvcOperation>" + EOL + 
+					"<sdncadapter:CallbackUrl>http://localhost:8080/mso/SDNCAdapterCallbackService</sdncadapter:CallbackUrl>" + EOL + 
+					"</sdncadapter:RequestHeader>" + EOL + 
+					"<sdncadapterworkflow:SDNCRequestData>" + EOL + 
+					"<request-information>" + EOL + 
+					"<request-id>RaaTestRequestId-1</request-id>" + EOL + 
+					"<source>MSO</source>" + EOL + 
+					"<notification-url/>" + EOL + 
+					"<order-number/>" + EOL + 
+					"<order-version/>" + EOL + 
+					"<request-action>DeleteServiceInstance</request-action>" + EOL + 
+					"</request-information>" + EOL + 
+					"<service-information>" + EOL + 
+					"<service-id/>" + EOL + 
+					"<subscription-service-type>123456789</subscription-service-type>" + EOL + 
+					"<ecomp-model-information>" + EOL + 
+					"<model-invariant-uuid/>" + EOL + 
+					"<model-uuid/>" + EOL + 
+					"<model-version/>" + EOL + 
+					"<model-name/>" + EOL + 
+					"</ecomp-model-information>" + EOL + 
+					"<service-instance-id>MIS%252F1604%252F0026%252FSW_INTERNET</service-instance-id>" + EOL + 
+					"<subscriber-name/>" + EOL + 
+					"<global-customer-id>SDN-ETHERNET-INTERNET</global-customer-id>" + EOL + 
+					"</service-information>" + EOL + 
+					"<service-request-input>" + EOL + 
+					"<service-instance-name/>" + EOL + 
+					"</service-request-input>" + EOL + 
+					"</sdncadapterworkflow:SDNCRequestData>" + EOL + 
+					"</sdncadapterworkflow:SDNCAdapterWorkflowRequest>";
+		
+		String req1 = "<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5=\"http://org.openecomp/mso/request/types/v1\"" + EOL +
+				 "xmlns:sdncadapter=\"http://org.openecomp.mso/workflow/sdnc/adapter/schema/v1\" " + EOL +
+				 "xmlns:sdncadapterworkflow=\"http://org.openecomp/mso/workflow/schema/v1\">" + EOL +
+				 "<sdncadapter:RequestHeader>" + EOL +
+				"<sdncadapter:RequestId>bca4fede-0804-4c13-af69-9e80b378150f</sdncadapter:RequestId>" + EOL +
+				"<sdncadapter:SvcInstanceId>MIS%252F1604%252F0026%252FSW_INTERNET</sdncadapter:SvcInstanceId>" + EOL + 
+				"<sdncadapter:SvcAction>delete</sdncadapter:SvcAction>" + EOL + 
+				"<sdncadapter:SvcOperation>service-topology-operation</sdncadapter:SvcOperation>" + EOL + 
+				"<sdncadapter:CallbackUrl>http://localhost:8080/mso/SDNCAdapterCallbackService</sdncadapter:CallbackUrl>" + EOL + 
+				"</sdncadapter:RequestHeader>" + EOL + 
+				"<sdncadapterworkflow:SDNCRequestData>" + EOL + 
+				"<request-information>" + EOL + 
+				"<request-id>RaaTestRequestId-1</request-id>" + EOL + 
+				"<source>MSO</source>" + EOL + 
+				"<notification-url/>" + EOL + 
+				"<order-number/>" + EOL + 
+				"<order-version/>" + EOL + 
+				"<request-action>DeleteServiceInstance</request-action>" + EOL + 
+				"</request-information>" + EOL + 
+				"<service-information>" + EOL + 
+				"<service-id/>" + EOL + 
+				"<subscription-service-type>123456789</subscription-service-type>" + EOL + 
+				"<ecomp-model-information>" + EOL + 
+				"<model-invariant-uuid/>" + EOL + 
+				"<model-uuid/>" + EOL + 
+				"<model-version/>" + EOL + 
+				"<model-name/>" + EOL + 
+				"</ecomp-model-information>" + EOL + 
+				"<service-instance-id>MIS%252F1604%252F0026%252FSW_INTERNET</service-instance-id>" + EOL + 
+				"<subscriber-name/>" + EOL + 
+				"<global-customer-id>SDN-ETHERNET-INTERNET</global-customer-id>" + EOL + 
+				"</service-information>" + EOL + 
+				"<service-request-input>" + EOL + 
+				"<service-instance-name/>" + EOL + 
+				"</service-request-input>" + EOL + 
+				"</sdncadapterworkflow:SDNCRequestData>" + EOL + 
+				"</sdncadapterworkflow:SDNCAdapterWorkflowRequest>";
+								
+		rollbackData.put("SERVICEINSTANCE", "sdncDeactivate", req);
+						
+		rollbackData.put("SERVICEINSTANCE", "sdncDelete",req1); 
+		variables.put("rollbackData",rollbackData);
+				
+	}
+}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateServiceInstanceTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateServiceInstanceTest.java
new file mode 100644
index 0000000..359a372
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateServiceInstanceTest.java
@@ -0,0 +1,98 @@
+package org.openecomp.mso.bpmn.infrastructure;
+
+import static org.junit.Assert.assertEquals;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetCustomer;
+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.MockNodeQueryServiceInstanceByName;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutServiceInstance;
+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;
+
+/**
+ * Unit test cases for DoCreateServiceInstance.bpmn
+ */
+public class DoCreateServiceInstanceTest extends WorkflowTest {
+	private static final String EOL = "\n";
+	private final CallbackSet callbacks = new CallbackSet();
+	private final String sdncAdapterCallback =
+			"<output xmlns=\"com:att:sdnctl:l3api\">" + EOL +
+			"  <svc-request-id>((REQUEST-ID))</svc-request-id>" + EOL +
+			"  <ack-final-indicator>Y</ack-final-indicator>" + EOL +
+			"</output>" + EOL;
+		
+	public DoCreateServiceInstanceTest() throws IOException {
+		callbacks.put("assign", sdncAdapterCallback);
+	}
+		
+	/**
+	 * Sunny day VID scenario.
+	 *
+	 * @throws Exception
+	 */
+	//@Ignore // File not found - unable to run the test.  Also, Stubs need updating..
+	@Test
+	@Deployment(resources = {
+			"subprocess/DoCreateServiceInstance.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericGetService.bpmn",
+			"subprocess/GenericPutService.bpmn",
+			"subprocess/CompleteMsoProcess.bpmn",
+			"subprocess/DoCreateServiceInstanceRollback.bpmn",
+			"subprocess/FalloutHandler.bpmn" })
+	public void sunnyDay() throws Exception {
+
+		logStart();
+
+		//AAI
+		MockGetCustomer("MCBH-1610", "CreateServiceInstance/createServiceInstance_queryGlobalCustomerId_AAIResponse_Success.xml");
+		MockPutServiceInstance("MCBH-1610", "viprsvc", "RaaTest-si-id", "");
+		MockGetServiceInstance("MCBH-1610", "viprsvc", "RaaTest-si-id", "GenericFlows/getServiceInstance.xml");
+		MockNodeQueryServiceInstanceByName("RAATest-si", "");
+		
+		MockNodeQueryServiceInstanceById("RaaTest-si-id", "");
+		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getSINoRelations.xml");
+		MockNodeQueryServiceInstanceById("MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getSIUrlById.xml");
+		//SDNC
+		mockSDNCAdapter(200);
+		//DB
+		mockUpdateRequestDB(200, "DBUpdateResponse.xml");
+		String businessKey = UUID.randomUUID().toString();
+
+		Map<String, Object> variables =  new HashMap<String, Object>();
+		setupVariables(variables);
+		invokeSubProcess("DoCreateServiceInstance", businessKey, variables);
+		injectSDNCCallbacks(callbacks, "assign");
+		waitForProcessEnd(businessKey, 10000);
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DoCreateServiceInstance", "WorkflowException");
+		System.out.println("workflowException:\n" + workflowException);
+		assertEquals(null, workflowException);
+
+		logEnd();
+	}
+
+	// Success Scenario
+	private void setupVariables(Map<String, Object> variables) {
+		variables.put("mso-request-id", "RaaDSITest1");
+		variables.put("isDebugLogEnabled", "true");
+		variables.put("msoRequestId", "RaaDSITestRequestId-1");
+		variables.put("serviceInstanceId","RaaTest-si-id");
+		variables.put("serviceModelInfo", "{\"modelType\":\"service\",\"modelInvariantUuid\":\"uuid-miu-svc-011-abcdef\",\"modelVersionUuid\":\"ASDC_TOSCA_UUID\",\"modelName\":\"SIModelName1\",\"modelVersion\":\"2\"}");
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		variables.put("globalSubscriberId", "MCBH-1610");
+		variables.put("subscriptionServiceType", "viprsvc");
+		variables.put("instanceName", "RAATest-1");
+	}
+}
\ No newline at end of file
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
index 5b0d4c7..ea46bfe 100644
--- 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
@@ -136,7 +136,8 @@
 		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);
+		variables.put("rollbackData", rollbackData);
+		variables.put("sdncVersion", "1702");
 		invokeSubProcess("DoCreateVfModuleRollback", businessKey, variables);
 
 		// "changedelete" operation not required for deleting a Vf Module
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
index fc4816c..565ef02 100644
--- 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
@@ -22,8 +22,11 @@
 
 
 import static org.openecomp.mso.bpmn.common.BPMNUtil.getRawVariable;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockAAIVfModule;
 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.MockPatchGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;
 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;
@@ -38,10 +41,8 @@
 
 import org.camunda.bpm.engine.test.Deployment;
 import org.junit.Assert;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.openecomp.mso.bpmn.common.WorkflowTest;
-import org.openecomp.mso.bpmn.common.WorkflowTest.CallbackSet;
 import org.openecomp.mso.bpmn.mock.FileUtil;
 
 /**
@@ -56,6 +57,12 @@
 			"__files/VfModularity/SDNCTopologyAssignCallback.xml"));
 		callbacks.put("query", FileUtil.readResourceFile(
 			"__files/VfModularity/SDNCTopologyQueryCallback.xml"));
+		callbacks.put("queryVnf", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyQueryCallbackVnf.xml"));
+		callbacks.put("queryModuleNoVnf", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyQueryCallbackVfModuleNoVnf.xml"));
+		callbacks.put("queryModule", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyQueryCallbackVfModule.xml"));
 		callbacks.put("activate", FileUtil.readResourceFile(
 			"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
 		callbacks.put("vnfCreate", FileUtil.readResourceFile(
@@ -66,10 +73,11 @@
 	 * Test the sunny day scenario.
 	 */
 	@Test	
-	@Ignore
+	
 	@Deployment(resources = {
 			"subprocess/DoCreateVfModule.bpmn",
 			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericGetVnf.bpmn",
 			"subprocess/VnfAdapterRestV1.bpmn",
 			"subprocess/ConfirmVolumeGroupTenant.bpmn",
 			"subprocess/ConfirmVolumeGroupName.bpmn",
@@ -82,6 +90,54 @@
 		
 		logStart();
 		
+		MockAAIVfModule();
+		MockPatchGenericVnf("skask");
+		MockPatchVfModuleId("skask", ".*");
+		mockSDNCAdapter("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, "queryVnf");
+		injectSDNCCallbacks(callbacks, "assign, queryModuleNoVnf");
+		injectVNFRestCallbacks(callbacks, "vnfCreate");
+		injectSDNCCallbacks(callbacks, "activate");
+
+		waitForProcessEnd(businessKey, 10000);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		Assert.assertTrue((boolean) getRawVariable(processEngineRule, "DoCreateVfModule", "DCVFM_SuccessIndicator"));
+		
+		logEnd();
+	}
+	
+	/**
+	 * Test the sunny day scenario with 1702 SDNC interaction.
+	 */
+	@Test	
+	
+	@Deployment(resources = {
+			"subprocess/DoCreateVfModule.bpmn",
+			"subprocess/GenericGetVnf.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_1702() throws IOException {
+		
+		logStart();
+		
 		MockGetGenericVnfByIdWithPriority("skask", ".*", 200, "VfModularity/VfModule-new.xml", 5);
 		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
 		MockPutVfModuleIdNoResponse("skask", "PCRF", ".*");
@@ -91,11 +147,72 @@
 		mockSDNCAdapter("/SDNCAdapter", "SvcAction>query", 200, "VfModularity/StandardSDNCSynchResponse.xml");
 		mockVNFPost("", 202, "skask");
 		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockPatchGenericVnf("skask");
+		MockPatchVfModuleId("skask", ".*");
 		
 		String businessKey = UUID.randomUUID().toString();
 		//RuntimeService runtimeService = processEngineRule.getRuntimeService();				
 		
 		Map<String, Object> variables = setupVariablesSunnyDayBuildingBlocks();
+		variables.put("sdncVersion", "1702");
+		//runtimeService.startProcessInstanceByKey("DoCreateVfModule", variables);
+		invokeSubProcess("DoCreateVfModule", businessKey, variables);
+		
+		
+		injectSDNCCallbacks(callbacks, "assign, queryModule");
+		injectVNFRestCallbacks(callbacks, "vnfCreate");
+		injectSDNCCallbacks(callbacks, "activate");
+
+		waitForProcessEnd(businessKey, 10000);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		Assert.assertTrue((boolean) getRawVariable(processEngineRule, "DoCreateVfModule", "DCVFM_SuccessIndicator"));
+		
+		logEnd();
+	}
+	
+	/**
+	 * Test the sunny day scenario.
+	 */
+	@Test	
+	
+	@Deployment(resources = {
+			"subprocess/DoCreateVfModule.bpmn",
+			"subprocess/GenerateVfModuleName.bpmn",
+			"subprocess/GenericGetVnf.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_withVfModuleNameGeneration() 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");
+		MockAAIVfModule();
+		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");
+		MockPatchGenericVnf("skask");
+		MockPatchVfModuleId("skask", ".*");
+		
+		String businessKey = UUID.randomUUID().toString();
+		//RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		
+		Map<String, Object> variables = setupVariablesSunnyDayBuildingBlocks();
+		variables.put("vfModuleName", null);
+		variables.put("vfModuleLabel", "MODULELABEL");
+		variables.put("sdncVersion", "1702");
 		//runtimeService.startProcessInstanceByKey("DoCreateVfModule", variables);
 		invokeSubProcess("DoCreateVfModule", businessKey, variables);
 		
@@ -111,11 +228,19 @@
 		logEnd();
 	}
 	
+	
 	private Map<String, Object> setupVariablesSunnyDayBuildingBlocks() {
 		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("msoRequestId", "testRequestId");		
 		variables.put("isBaseVfModule", false);
 		variables.put("isDebugLogEnabled", "true");
 		variables.put("disableRollback", "true");
@@ -123,6 +248,7 @@
 		//variables.put("requestAction", "CREATE_VF_MODULE");
 		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
 		variables.put("vnfId", "skask");
+		variables.put("vnfName", "vnfname");
 		variables.put("vfModuleName", "PCRF::module-0-2");
 		variables.put("vnfType", "vSAMP12");
 		variables.put("vfModuleId", "");
@@ -131,20 +257,40 @@
 		variables.put("vfModuleType", "");
 		variables.put("isVidRequest", "true");
 		variables.put("asdcServiceModelVersion", "1.0");
+		variables.put("usePreload", true);
 					
-		String vfModuleModelInfo = "{" + "\"modelInfo\": { "+ "\"modelType\": \"vfModule\"," +
-			"\"modelInvariantId\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," + 
-			"\"modelNameVersionId\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+		String vfModuleModelInfo = "{ "+ "\"modelType\": \"vfModule\"," +
+			"\"modelInvariantUuid\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," + 
+			"\"modelUuid\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +
 			"\"modelName\": \"STMTN5MMSC21-MMSC::model-1-0\"," +
 			"\"modelVersion\": \"1\"," + 
-			"\"modelCustomizationId\": \"MODEL-123\"" + "}}";
+			"\"modelCustomizationUuid\": \"MODEL-123\"" + "}";
 		variables.put("vfModuleModelInfo", vfModuleModelInfo);
 		
-		String cloudConfiguration = "{" + "\"cloudConfiguration\": { " + 
-				"\"lcpCloudRegionId\": \"MDTWNJ21\"," +		
-				"\"tenantId\": \"fba1bd1e195a404cacb9ce17a9b2b421\"" + "}}";
-		variables.put("cloudConfiguration", cloudConfiguration);
+		variables.put("sdncVersion", "1707");
+		
+		variables.put("lcpCloudRegionId", "MDTWNJ21");
+		variables.put("tenantId", "fba1bd1e195a404cacb9ce17a9b2b421");		
+		
+		String serviceModelInfo = "{ "+ "\"modelType\": \"service\"," +
+				"\"modelInvariantUuid\": \"aa5256d2-5a33-55df-13ab-12abad84e7ff\"," + 
+				"\"modelUuid\": \"bb6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"SVC-STMTN5MMSC21-MMSC::model-1-0\"," +
+				"\"modelVersion\": \"1\"," + 
+				 "}";
+		variables.put("serviceModelInfo", serviceModelInfo);
+			
+		String vnfModelInfo = "{ "+ "\"modelType\": \"vnf\"," +
+					"\"modelInvariantUuid\": \"445256d2-5a33-55df-13ab-12abad84e7ff\"," + 
+					"\"modelUuid\": \"f26478e5-ea33-3346-ac12-ab121484a3fe\"," +
+					"\"modelName\": \"VNF-STMTN5MMSC21-MMSC::model-1-0\"," +
+					"\"modelVersion\": \"1\"," + 
+					"\"modelCustomizationUuid\": \"VNF-MODEL-123\"" + "}";
+		variables.put("vnfModelInfo", vnfModelInfo);
+		
+		variables.put("vnfQueryPath", "/restconf/vnfQueryPath");
+		
 		return variables;
 		
 	}
-}
+}
\ No newline at end of file
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
deleted file mode 100644
index c7a112d..0000000
--- a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVfModuleVolumeV1Test.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*- 
- * ============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/DoCreateVfModuleVolumeV2Test.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVfModuleVolumeV2Test.java
new file mode 100644
index 0000000..3b1f4b8
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVfModuleVolumeV2Test.java
@@ -0,0 +1,220 @@
+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.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.core.WorkflowException;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+@Ignore
+public class DoCreateVfModuleVolumeV2Test extends WorkflowTest {
+	
+	public static final String _prefix = "CVFMODVOL2_";
+	
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public DoCreateVfModuleVolumeV2Test() 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
+	//@Ignore 
+	@Deployment(resources = {"subprocess/DoCreateVfModuleVolumeV2.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/vnfAdapterRestV1.bpmn",
+            "subprocess/DoCreateVfModuleVolumeRollback.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("volumeGroupId", "TEST-VOLUME-VOLUME-GROUP-ID-0123");
+		testVariables.put("vnfId", "TEST-VNF-ID-0123");
+		testVariables.put("lcpCloudRegionId", "AAIAIC25");
+		testVariables.put("test-volume-group-name", "MSOTESTVOL101a-vSAMP12_base_vol_module-01");
+		testVariables.put("test-volume-group-id", "TEST-VOLUME-GROUP-ID-0123");
+		//testVariables.put("DoCreateVfModuleVolumeV1Request", createVfModuleVolRequest);
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("DoCreateVfModuleVolumeV2", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		
+		injectVNFRestCallbacks(callbacks, "volumeGroupCreate");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "DCVFMODVOLV2_SuccessIndicator", true);
+		
+		logEnd();
+	}
+	
+	@Test
+//	@Ignore
+	@Deployment(resources = {"subprocess/DoCreateVfModuleVolumeV2.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/vnfAdapterRestV1.bpmn",
+            "subprocess/DoCreateVfModuleVolumeRollback.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("DCVFMODVOLV2_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);
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("DoCreateVfModuleVolumeV2", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		
+		//injectVNFRestCallbacks(callbacks, "volumeGroupCreate");
+		
+		waitForProcessEnd(businessKey, 100000);
+		WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, "SavedWorkflowException1");
+		Assert.assertTrue(wfe.getErrorCode() == 2500);
+		Assert.assertTrue(wfe.getErrorMessage().startsWith("Generic vnf null was not found in AAI. Return code: 404."));
+		checkVariable(businessKey, "DCVFMODVOLV2_SuccessIndicator", false);
+		
+		logEnd();
+	}
+	
+	/**
+	 * Will trigger AAI create rollback
+	 * @throws Exception
+	 */
+	@Test
+//	@Ignore
+	@Deployment(resources = {"subprocess/DoCreateVfModuleVolumeV2.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/vnfAdapterRestV1.bpmn",
+            "subprocess/DoCreateVfModuleVolumeRollback.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("DCVFMODVOLV2_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);
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("DoCreateVfModuleVolumeV2", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		
+		//injectVNFRestCallbacks(callbacks, "volumeGroupCreate");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "DCVFMODVOLV2_SuccessIndicator", false);
+		
+		logEnd();
+	}
+	
+	/**
+	 * Will trigger AAI create rollback
+	 * @throws Exception
+	 */
+	@Test
+//	@Ignore
+	@Deployment(resources = {"subprocess/DoCreateVfModuleVolumeV2.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/vnfAdapterRestV1.bpmn",
+            "subprocess/DoCreateVfModuleVolumeRollback.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("DCVFMODVOLV2_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);
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("DoCreateVfModuleVolumeV2", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		
+		// VNF callback not needed fort this failure scenario
+//		injectVNFRestCallbacks(callbacks, "volumeGroupCreate,volumeGroupRollback");
+		
+		waitForProcessEnd(businessKey, 100000);
+		WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, "SavedWorkflowException1");
+		Assert.assertTrue(wfe.getErrorCode() == 2500);
+		Assert.assertTrue(wfe.getErrorMessage().startsWith("Generic vnf null was not found in AAI. Return code: 404."));
+		checkVariable(businessKey, "DCVFMODVOLV2_SuccessIndicator", false);
+		
+		logEnd();
+	}		
+
+	/**
+	 * Will trigger not trigger rollback
+	 * @throws Exception
+	 */
+	@Test
+//	@Ignore
+	@Deployment(resources = {"subprocess/DoCreateVfModuleVolumeV2.bpmn",
+            "subprocess/FalloutHandler.bpmn",
+            "subprocess/CompleteMsoProcess.bpmn",
+            "subprocess/vnfAdapterRestV1.bpmn",
+            "subprocess/DoCreateVfModuleVolumeRollback.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("DCVFMODVOLV2_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);
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("DoCreateVfModuleVolumeV2", "v1", businessKey, createVfModuleVolRequest, testVariables);
+		
+		// VNF callback not needed fort this failure scenario
+//		injectVNFRestCallbacks(callbacks, "volumeGroupCreate");
+		
+		waitForProcessEnd(businessKey, 100000);
+		WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, "SavedWorkflowException1");
+		Assert.assertTrue(wfe.getErrorCode() == 2500);
+		Assert.assertTrue(wfe.getErrorMessage().startsWith("Generic vnf null was not found in AAI. Return code: 404."));
+		checkVariable(businessKey, "DCVFMODVOLV2_SuccessIndicator", false);
+		
+		logEnd();
+	}		
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVnfAndModulesRollbackTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVnfAndModulesRollbackTest.java
new file mode 100644
index 0000000..fb065ab
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVnfAndModulesRollbackTest.java
@@ -0,0 +1,405 @@
+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.post;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+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.MockGetGenericVnfById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByName;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutVfModuleId;
+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.mockVNFDelete;
+import static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockVfModuleDelete;
+
+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.core.RollbackData;
+import org.openecomp.mso.bpmn.core.WorkflowException;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit test for DoCreateVnfAndModulesRollback.bpmn.
+ */
+public class DoCreateVnfAndModulesRollbackTest 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=\"com:att:sdnctl:l3api\">" + EOL +
+		"  <svc-request-id>{{REQUEST-ID}}</svc-request-id>" + EOL +
+		"  <ack-final-indicator>Y</ack-final-indicator>" + EOL +
+		"</output>" + EOL;
+
+	public DoCreateVnfAndModulesRollbackTest() throws IOException {
+		callbacks.put("sdncChangeDelete", sdncAdapterDeleteCallback);
+		callbacks.put("sdncDelete", sdncAdapterDeleteCallback);
+		callbacks.put("vnfDelete", vnfAdapterDeleteCallback);
+		callbacks.put("vnfDeleteFail", vnfAdapterDeleteCallbackFail);
+		callbacks.put("deactivate", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("unassign", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+	}
+
+	@Test
+	@Ignore
+	@Deployment(resources = {
+			"subprocess/DoCreateVnfAndModulesRollback.bpmn",
+			"subprocess/DoCreateVfModuleRollback.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/DeleteAAIVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn",
+			"subprocess/GenericGetVnf.bpmn",
+			"subprocess/GenericDeleteVnf.bpmn",
+			"subprocess/DoDeleteVnf.bpmn"
+		})
+	public void  TestDoCreateVnfAndModulesRollbackSuccess_BaseOnly() {
+		// 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://org.openecomp/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://org.openecomp/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+		logStart();
+		mockSDNCAdapter("/SDNCAdapter", "SvcAction>changedelete", 200, "DeleteGenericVNFV1/sdncAdapterResponse.xml");
+		mockSDNCAdapter("/SDNCAdapter", "SvcAction>delete", 200, "DeleteGenericVNFV1/sdncAdapterResponse.xml");
+		mockVNFDelete(".*", "/.*", 202);
+		mockVfModuleDelete("78987");
+		MockPatchVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		MockPatchGenericVnf("a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		MockGetGenericVnfByName("STMTN5MMSC21", "DoCreateVfModule_getVnfResponse.xml");
+		MockGetGenericVnfById("/a27ce5a9-29c4-4c22-a017-6615ac73c721.*", "DoCreateVfModule_getVnfResponse.xml", 200);
+		MockPutVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		MockDeleteGenericVnf("a27ce5a9-29c4-4c22-a017-6615ac73c721", "0000021");
+		MockDeleteVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73", "0000073", 200);
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		RollbackData rollbackData = new RollbackData();
+
+		rollbackData.put("VFMODULE_BASE", "source", "PORTAL");
+		rollbackData.put("VFMODULE_BASE", "vnfid", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		rollbackData.put("VFMODULE_BASE", "vnfname", "STMTN5MMSC21");
+		rollbackData.put("VFMODULE_BASE", "vnftype", "asc_heat-int");
+		rollbackData.put("VFMODULE_BASE", "vfmoduleid", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		rollbackData.put("VFMODULE_BASE", "vfmodulename", "STMTN5MMSC21-MMSC::module-0-0");
+		rollbackData.put("VFMODULE_BASE", "tenantid", "fba1bd1e195a404cacb9ce17a9b2b421");
+		rollbackData.put("VFMODULE_BASE", "aiccloudregion", "RDM2WAGPLCP");
+		rollbackData.put("VFMODULE_BASE", "heatstackid", "thisisaheatstack");
+		rollbackData.put("VFMODULE_BASE", "contrailNetworkPolicyFqdn0", "MSOTest:DefaultPolicyFQDN1");
+		rollbackData.put("VFMODULE_BASE", "contrailNetworkPolicyFqdn1", "MSOTest:DefaultPolicyFQDN2");
+		rollbackData.put("VFMODULE_BASE", "oamManagementV6Address", "2000:abc:bce:1111");
+		rollbackData.put("VFMODULE_BASE", "oamManagementV4Address", "127.0.0.1");
+
+		rollbackData.put("VFMODULE_BASE", "rollbackPrepareUpdateVfModule", "true");
+		rollbackData.put("VFMODULE_BASE", "rollbackVnfAdapterCreate", "true");
+		rollbackData.put("VFMODULE_BASE", "rollbackUpdateAAIVfModule", "true");
+		rollbackData.put("VFMODULE_BASE", "rollbackSDNCRequestActivate", "true");
+		rollbackData.put("VFMODULE_BASE", "rollbackCreateAAIVfModule", "true");
+		rollbackData.put("VFMODULE_BASE", "rollbackCreateNetworkPoliciesAAI", "true");
+		rollbackData.put("VFMODULE_BASE", "rollbackUpdateVnfAAI", "true");
+
+		rollbackData.put("VNF", "vnfId", "testVnfId123");
+
+		rollbackData.put("VNFANDMODULES", "numOfCreatedAddOnModules", "0");
+
+		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_BASE", "msorequestid", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		rollbackData.put("VFMODULE_BASE", "serviceinstanceid", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+
+		variables.put("rollbackData", rollbackData);
+		invokeSubProcess("DoCreateVnfAndModulesRollback", businessKey, variables);
+
+		// "changedelete" operation not required for deleting a Vf Module
+//		injectSDNCCallbacks(callbacks, "sdncChangeDelete");
+		injectVNFRestCallbacks(callbacks, "vnfDelete");
+		//waitForRunningProcessCount("DoCreateVnfAndModulesRollback", 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();
+	}
+
+	@Test
+	@Deployment(resources = {
+			"subprocess/DoCreateVnfAndModulesRollback.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/DeleteAAIVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericGetVnf.bpmn",
+			"subprocess/GenericDeleteVnf.bpmn",
+			"subprocess/DoDeleteVnf.bpmn"
+		})
+	public void  TestDoCreateVnfAndModulesRollbackSuccess_vnfOnly() {
+		// 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://org.openecomp/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://org.openecomp/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+		logStart();
+		MockGetGenericVnfById("testVnfId123.*", "GenericFlows/getGenericVnfByNameResponse.xml");
+		MockDeleteGenericVnf("testVnfId123", "testReVer123");
+		MockDoDeleteVfModule_SDNCSuccess();
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		RollbackData rollbackData = new RollbackData();
+
+		rollbackData.put("VNF", "vnfId", "testVnfId123");
+		rollbackData.put("VNF", "rollbackVnfCreate", "true");
+		rollbackData.put("VNF", "rollbackSDNCAssign", "true");
+		rollbackData.put("VNF", "rollbackSDNCActivate", "true");
+		rollbackData.put("VNFANDMODULES", "numOfCreatedAddOnModules", "0");
+
+
+		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("rollbackData", rollbackData);
+		variables.put("sdncVersion", "1707");
+		invokeSubProcess("DoCreateVnfAndModulesRollback", businessKey, variables);
+
+		// "changedelete" operation not required for deleting a Vf Module
+//		injectSDNCCallbacks(callbacks, "sdncChangeDelete");
+
+		//waitForRunningProcessCount("DoCreateVnfAndModulesRollback", 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();
+	}
+
+	@Test
+	@Ignore
+	@Deployment(resources = {
+			"subprocess/DoCreateVnfAndModulesRollback.bpmn",
+			"subprocess/DoCreateVfModuleRollback.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIVfModule.bpmn",
+			"subprocess/UpdateAAIGenericVnf.bpmn",
+			"subprocess/DeleteAAIVfModule.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn",
+			"subprocess/GenericGetVnf.bpmn",
+			"subprocess/GenericDeleteVnf.bpmn",
+			"subprocess/DoDeleteVnf.bpmn"
+		})
+	public void  TestDoCreateVnfAndModulesRollbackSuccess_AddOn() {
+		// 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://org.openecomp/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://org.openecomp/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+		logStart();
+		mockSDNCAdapter("/SDNCAdapter", "SvcAction>changedelete", 200, "DeleteGenericVNFV1/sdncAdapterResponse.xml");
+		mockSDNCAdapter("/SDNCAdapter", "SvcAction>delete", 200, "DeleteGenericVNFV1/sdncAdapterResponse.xml");
+		mockVNFDelete(".*", "/.*", 202);
+		mockVfModuleDelete("78987");
+		MockGetGenericVnfByName("STMTN5MMSC21", "DoCreateVfModule_getVnfResponse.xml");
+		MockGetGenericVnfById("/a27ce5a9-29c4-4c22-a017-6615ac73c721", "DoCreateVfModule_getVnfResponse.xml", 200);
+		MockGetGenericVnfByIdWithDepth("a27ce5a9-29c4-4c22-a017-6615ac73c721", 1, "DoCreateVfModuleRollback/GenericVnf.xml");
+		MockPatchVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		MockPatchGenericVnf("a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		MockPutVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		MockDeleteGenericVnf("a27ce5a9-29c4-4c22-a017-6615ac73c721", "0000021");
+		MockDeleteVfModuleId("", "", "", 200);
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		RollbackData rollbackData = new RollbackData();
+	
+		rollbackData.put("VFMODULE_BASE", "source", "PORTAL");
+		rollbackData.put("VFMODULE_BASE", "vnfid", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		rollbackData.put("VFMODULE_BASE", "vnfname", "STMTN5MMSC21");
+		rollbackData.put("VFMODULE_BASE", "vnftype", "asc_heat-int");
+		rollbackData.put("VFMODULE_BASE", "vfmoduleid", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		rollbackData.put("VFMODULE_BASE", "vfmodulename", "STMTN5MMSC21-MMSC::module-0-0");
+		rollbackData.put("VFMODULE_BASE", "tenantid", "fba1bd1e195a404cacb9ce17a9b2b421");
+		rollbackData.put("VFMODULE_BASE", "aiccloudregion", "RDM2WAGPLCP");
+		rollbackData.put("VFMODULE_BASE", "heatstackid", "thisisaheatstack");
+		rollbackData.put("VFMODULE_BASE", "contrailNetworkPolicyFqdn0", "MSOTest:DefaultPolicyFQDN1");
+		rollbackData.put("VFMODULE_BASE", "contrailNetworkPolicyFqdn1", "MSOTest:DefaultPolicyFQDN2");
+		rollbackData.put("VFMODULE_BASE", "oamManagementV6Address", "2000:abc:bce:1111");
+		rollbackData.put("VFMODULE_BASE", "oamManagementV4Address", "127.0.0.1");
+		rollbackData.put("VFMODULE_BASE", "rollbackPrepareUpdateVfModule", "true");
+		rollbackData.put("VFMODULE_BASE", "rollbackVnfAdapterCreate", "true");
+		rollbackData.put("VFMODULE_BASE", "rollbackUpdateAAIVfModule", "true");
+		rollbackData.put("VFMODULE_BASE", "rollbackSDNCRequestActivate", "true");
+		rollbackData.put("VFMODULE_BASE", "rollbackCreateAAIVfModule", "true");
+		rollbackData.put("VFMODULE_BASE", "rollbackCreateNetworkPoliciesAAI", "true");
+		rollbackData.put("VFMODULE_BASE", "rollbackUpdateVnfAAI", "true");
+		rollbackData.put("VFMODULE_BASE", "msorequestid", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		rollbackData.put("VFMODULE_BASE", "serviceinstanceid", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+	
+	
+		rollbackData.put("VFMODULE_ADDON_1", "source", "PORTAL");
+		rollbackData.put("VFMODULE_ADDON_1", "vnfid", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		rollbackData.put("VFMODULE_ADDON_1", "vnfname", "STMTN5MMSC21");
+		rollbackData.put("VFMODULE_ADDON_1", "vnftype", "asc_heat-int");
+		rollbackData.put("VFMODULE_ADDON_1", "vfmoduleid", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		rollbackData.put("VFMODULE_ADDON_1", "vfmodulename", "STMTN5MMSC21-MMSC::module-0-0");
+		rollbackData.put("VFMODULE_ADDON_1", "tenantid", "fba1bd1e195a404cacb9ce17a9b2b421");
+		rollbackData.put("VFMODULE_ADDON_1", "aiccloudregion", "RDM2WAGPLCP");
+		rollbackData.put("VFMODULE_ADDON_1", "heatstackid", "thisisaheatstack");
+		rollbackData.put("VFMODULE_ADDON_1", "contrailNetworkPolicyFqdn0", "MSOTest:DefaultPolicyFQDN1");
+		rollbackData.put("VFMODULE_ADDON_1", "contrailNetworkPolicyFqdn1", "MSOTest:DefaultPolicyFQDN2");
+		rollbackData.put("VFMODULE_ADDON_1", "oamManagementV6Address", "2000:abc:bce:1111");
+		rollbackData.put("VFMODULE_ADDON_1", "oamManagementV4Address", "127.0.0.1");
+		rollbackData.put("VFMODULE_ADDON_1", "rollbackPrepareUpdateVfModule", "true");
+		rollbackData.put("VFMODULE_ADDON_1", "rollbackVnfAdapterCreate", "true");
+		rollbackData.put("VFMODULE_ADDON_1", "rollbackUpdateAAIVfModule", "true");
+		rollbackData.put("VFMODULE_ADDON_1", "rollbackSDNCRequestActivate", "true");
+		rollbackData.put("VFMODULE_ADDON_1", "rollbackCreateAAIVfModule", "true");
+		rollbackData.put("VFMODULE_ADDON_1", "rollbackCreateNetworkPoliciesAAI", "true");
+		rollbackData.put("VFMODULE_ADDON_1", "rollbackUpdateVnfAAI", "true");
+		rollbackData.put("VFMODULE_ADDON_1", "msorequestid", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		rollbackData.put("VFMODULE_ADDON_1", "serviceinstanceid", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+	
+		rollbackData.put("VNF", "vnfId", "testVnfId123");
+	
+		rollbackData.put("VNFANDMODULES", "numOfCreatedAddOnModules", "1");
+	
+		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("rollbackData", rollbackData);
+		invokeSubProcess("DoCreateVnfAndModulesRollback", businessKey, variables);
+	
+		// "changedelete" operation not required for deleting a Vf Module
+	//	injectSDNCCallbacks(callbacks, "sdncChangeDelete");
+		injectVNFRestCallbacks(callbacks, "vnfDelete");
+		injectVNFRestCallbacks(callbacks, "vnfDelete");
+		//waitForRunningProcessCount("DoCreateVnfAndModulesRollback", 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();
+	}
+	
+	public static void MockDoDeleteVfModule_SDNCSuccess() {
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>deactivate"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>unassign"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));
+	}
+
+
+}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVnfAndModulesTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVnfAndModulesTest.java
new file mode 100644
index 0000000..3c10872
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoCreateVnfAndModulesTest.java
@@ -0,0 +1,354 @@
+package org.openecomp.mso.bpmn.infrastructure;
+
+import static org.junit.Assert.assertEquals;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockAAIVfModule;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDBUpdateVfModule;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById_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.MockPatchGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockSDNCAdapterVfModule;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockVNFAdapterRestVfModule;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+
+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.Ignore;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.BPMNUtil;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.core.domain.ModelInfo;
+import org.openecomp.mso.bpmn.core.domain.ModuleResource;
+import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition;
+import org.openecomp.mso.bpmn.core.domain.VnfResource;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit Test for the DoCreateVnfAndModules Flow
+ *
+ */
+public class DoCreateVnfAndModulesTest extends WorkflowTest {
+
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public DoCreateVnfAndModulesTest() throws IOException {	
+
+		callbacks.put("assign", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyAssignCallback.xml"));
+		callbacks.put("activate", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("query", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyQueryCallback.xml"));
+		callbacks.put("queryVnf", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyQueryCallbackVnf.xml"));
+		callbacks.put("queryModuleNoVnf", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyQueryCallbackVfModuleNoVnf.xml"));
+		callbacks.put("queryModule", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyQueryCallbackVfModule.xml"));
+		callbacks.put("vnfCreate", FileUtil.readResourceFile(
+				"__files/VfModularity/VNFAdapterRestCreateCallback.xml"));
+	}
+
+	@Test
+    @Ignore // IGNORED FOR 1710 MERGE TO ONAP
+	@Deployment(resources = {"subprocess/GenericGetService.bpmn",
+			"subprocess/GenericGetVnf.bpmn",
+			"subprocess/GenericPutVnf.bpmn", 
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/DoCreateVnf.bpmn",
+			"subprocess/GenerateVfModuleName.bpmn",
+			"subprocess/DoCreateVfModule.bpmn",
+			"subprocess/DoCreateVnfAndModules.bpmn",					
+			"subprocess/GenericGetVnf.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",
+			"subprocess/DoCreateVnfAndModulesRollback.bpmn"})
+	public void testDoCreateVnfAndModulesBaseOnly_success() throws Exception{
+		
+		MockNodeQueryServiceInstanceById("MIS%2F1604%2F0026%2FSW_INTERNET", "GenericFlows/getSIUrlByIdVipr.xml");
+		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
+		MockGetGenericVnfById_404("testVnfId");
+		MockPutGenericVnf(".*");
+		MockAAIVfModule();
+		MockPatchGenericVnf("skask");
+		MockPatchVfModuleId("skask", ".*");
+		mockSDNCAdapter("VfModularity/StandardSDNCSynchResponse.xml");		
+		MockVNFAdapterRestVfModule();
+		MockDBUpdateVfModule();	
+		
+		mockSDNCAdapter("VfModularity/StandardSDNCSynchResponse.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		setVariablesSuccess(variables, "", "testRequestId123", "MIS%2F1604%2F0026%2FSW_INTERNET");
+		invokeSubProcess("DoCreateVnfAndModules", businessKey, variables);
+
+		injectSDNCCallbacks(callbacks, "assign");
+		injectSDNCCallbacks(callbacks, "query");
+		injectSDNCCallbacks(callbacks, "activate");
+		injectSDNCCallbacks(callbacks, "queryVnf");
+		injectSDNCCallbacks(callbacks, "assign, queryModuleNoVnf");
+		injectVNFRestCallbacks(callbacks, "vnfCreate");
+		injectSDNCCallbacks(callbacks, "activate");
+		waitForProcessEnd(businessKey, 10000);
+
+		Assert.assertTrue(isProcessEnded(businessKey));
+		assertVariables("true", "true", "false", "true", "Success", null);
+
+	}
+	
+	@Test
+    @Ignore // IGNORED FOR 1710 MERGE TO ONAP
+	@Deployment(resources = {"subprocess/GenericGetService.bpmn",
+			"subprocess/GenericGetVnf.bpmn",
+			"subprocess/GenericPutVnf.bpmn", 
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/DoCreateVnf.bpmn",
+			"subprocess/GenerateVfModuleName.bpmn",
+			"subprocess/DoCreateVfModule.bpmn",
+			"subprocess/DoCreateVnfAndModules.bpmn",					
+			"subprocess/GenericGetVnf.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",
+			"subprocess/DoCreateVnfAndModulesRollback.bpmn"})
+	public void testDoCreateVnfAndModulesWithAddon_success() throws Exception{
+		
+		MockNodeQueryServiceInstanceById("MIS%2F1604%2F0026%2FSW_INTERNET", "GenericFlows/getSIUrlByIdVipr.xml");
+		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
+		MockGetGenericVnfById_404("testVnfId");
+		MockPutGenericVnf(".*");
+		MockAAIVfModule();
+		MockPatchGenericVnf("skask");
+		MockPatchVfModuleId("skask", ".*");
+		mockSDNCAdapter("VfModularity/StandardSDNCSynchResponse.xml");		
+		MockVNFAdapterRestVfModule();
+		MockDBUpdateVfModule();	
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		mockSDNCAdapter("VfModularity/StandardSDNCSynchResponse.xml");
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		setVariablesAddonSuccess(variables, "", "testRequestId123", "MIS%2F1604%2F0026%2FSW_INTERNET");
+		invokeSubProcess("DoCreateVnfAndModules", businessKey, variables);
+
+		injectSDNCCallbacks(callbacks, "assign");
+		injectSDNCCallbacks(callbacks, "query");
+		injectSDNCCallbacks(callbacks, "activate");
+		injectSDNCCallbacks(callbacks, "queryVnf");
+		injectSDNCCallbacks(callbacks, "assign, queryModuleNoVnf");
+		injectVNFRestCallbacks(callbacks, "vnfCreate");
+		injectSDNCCallbacks(callbacks, "activate");
+		injectSDNCCallbacks(callbacks, "queryVnf");
+		injectSDNCCallbacks(callbacks, "assign, queryModuleNoVnf");
+		injectVNFRestCallbacks(callbacks, "vnfCreate");
+		injectSDNCCallbacks(callbacks, "activate");
+		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 siFound = BPMNUtil.getVariable(processEngineRule, "DoCreateVnf", "GENGS_FoundIndicator");
+		String siSucc = BPMNUtil.getVariable(processEngineRule, "DoCreateVnf", "GENGS_SuccessIndicator");
+		String vnfFound = BPMNUtil.getVariable(processEngineRule, "DoCreateVnf", "GENGV_FoundIndicator");
+		String vnfSucc = BPMNUtil.getVariable(processEngineRule, "DoCreateVnf", "GENGV_SuccessIndicator");
+		String response = BPMNUtil.getVariable(processEngineRule, "DoCreateVnf", "WorkflowResponse");
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DoCreateVnf", "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("mso-request-id", requestId);
+		variables.put("requestId", requestId);
+		variables.put("msoRequestId", requestId);
+		variables.put("serviceInstanceId",siId);		
+		variables.put("disableRollback", "true");		
+		//variables.put("testVnfId","testVnfId123");
+		variables.put("vnfType", "STMTN");
+		
+		String serviceModelInfo = "{ "+ "\"modelType\": \"service\"," +
+				"\"modelInvariantUuid\": \"995256d2-5a33-55df-13ab-12abad84e7ff\"," +
+				"\"modelUuid\": \"ab6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"ServicevSAMP12\"," +
+				"\"modelVersion\": \"1.0\"," +
+				"}";
+		variables.put("serviceModelInfo", serviceModelInfo);
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		String vnfModelInfo = "{" + "\"modelType\": \"vnf\"," +
+				"\"modelInvariantUuid\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," +
+				"\"modelUuid\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"vSAMP12\"," +
+				"\"modelVersion\": \"1.0\"," + 
+				"\"modelCustomizationUuid\": \"MODEL-ID-1234\"" + "}";
+		variables.put("vnfModelInfo", vnfModelInfo);
+
+		String cloudConfiguration = "{" + "\"cloudConfiguration\": { " +
+				"\"lcpCloudRegionId\": \"mdt1\"," +
+				"\"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\"" + "}}";
+		variables.put("cloudConfiguration", cloudConfiguration);
+		variables.put("sdncVersion", "1707");
+		variables.put("globalSubscriberId", "subscriber123");
+		
+		try {
+			String serviceDecomposition = FileUtil.readResourceFile("__files/VIPR/serviceDecompositionATMFW.json");
+			ServiceDecomposition sd = new ServiceDecomposition();
+			ModelInfo serviceModel = new ModelInfo();
+			serviceModel.setModelName("servicewithVNFs");
+			sd.setModelInfo(serviceModel);			
+			VnfResource vr = new VnfResource();
+			ModelInfo mvr = new ModelInfo();
+			mvr.setModelName("vSAMP12");
+			mvr.setModelInstanceName("v123");
+			mvr.setModelInvariantUuid("");
+			mvr.setModelVersion("1.0");
+			mvr.setModelCustomizationUuid("MODEL-ID-1234");
+			vr.setModelInfo(mvr);
+			vr.constructVnfType("vnf1");			
+			vr.setNfType("somenftype");
+			vr.setNfRole("somenfrole");
+			vr.setNfFunction("somenffunction");
+			vr.setNfNamingCode("somenamingcode");	
+			ModuleResource mr = new ModuleResource();
+			ModelInfo mvmr = new ModelInfo();
+			mvmr.setModelInvariantUuid("ff5256d2-5a33-55df-13ab-12abad84e7ff");
+			mvmr.setModelName("STMTN5MMSC21-MMSC::model-1-0");
+			mvmr.setModelVersion("1");
+			mvmr.setModelCustomizationUuid("MODEL-123");
+			mr.setModelInfo(mvmr);
+			mr.setIsBase(true);
+			mr.setVfModuleLabel("MODULELABEL");
+			vr.addVfModule(mr);
+			sd.addVnfResource(vr);			
+			
+			variables.put("serviceDecomposition", sd);
+			variables.put("isTest", true);
+		} catch(Exception e) {
+			
+		}
+		
+	}
+		
+	private void setVariablesAddonSuccess(Map<String, Object> variables, String request, String requestId, String siId) {
+		variables.put("isDebugLogEnabled", "true");		
+		variables.put("mso-request-id", requestId);
+		variables.put("requestId", requestId);
+		variables.put("msoRequestId", requestId);
+		variables.put("serviceInstanceId",siId);		
+		variables.put("disableRollback", "true");		
+		//variables.put("testVnfId","testVnfId123");
+		variables.put("vnfType", "STMTN");
+		
+		String serviceModelInfo = "{ "+ "\"modelType\": \"service\"," +
+				"\"modelInvariantUuid\": \"995256d2-5a33-55df-13ab-12abad84e7ff\"," +
+				"\"modelUuid\": \"ab6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"ServicevSAMP12\"," +
+				"\"modelVersion\": \"1.0\"," +
+				"}";
+		variables.put("serviceModelInfo", serviceModelInfo);
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		String vnfModelInfo = "{" + "\"modelType\": \"vnf\"," +
+				"\"modelInvariantUuid\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," +
+				"\"modelUuid\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"vSAMP12\"," +
+				"\"modelVersion\": \"1.0\"," + 
+				"\"modelCustomizationUuid\": \"MODEL-ID-1234\"" + "}";
+		variables.put("vnfModelInfo", vnfModelInfo);
+
+		String cloudConfiguration = "{" + "\"cloudConfiguration\": { " +
+				"\"lcpCloudRegionId\": \"mdt1\"," +
+				"\"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\"" + "}}";
+		variables.put("cloudConfiguration", cloudConfiguration);
+		variables.put("sdncVersion", "1707");
+		variables.put("globalSubscriberId", "subscriber123");
+		
+		try {
+			String serviceDecomposition = FileUtil.readResourceFile("__files/VIPR/serviceDecompositionATMFW.json");
+			ServiceDecomposition sd = new ServiceDecomposition();
+			ModelInfo serviceModel = new ModelInfo();
+			serviceModel.setModelName("servicewithVNFs");
+			sd.setModelInfo(serviceModel);
+			VnfResource vr = new VnfResource();
+			ModelInfo mvr = new ModelInfo();
+			mvr.setModelName("vSAMP12");
+			mvr.setModelInstanceName("v123");
+			mvr.setModelInvariantUuid("");
+			mvr.setModelVersion("1.0");
+			mvr.setModelCustomizationUuid("MODEL-ID-1234");
+			vr.setModelInfo(mvr);
+			vr.setNfType("somenftype");
+			vr.setNfRole("somenfrole");
+			vr.setNfFunction("somenffunction");
+			vr.setNfNamingCode("somenamingcode");	
+			ModuleResource mr = new ModuleResource();
+			ModelInfo mvmr = new ModelInfo();
+			mvmr.setModelInvariantUuid("ff5256d2-5a33-55df-13ab-12abad84e7ff");
+			mvmr.setModelName("STMTN5MMSC21-MMSC::model-1-0");
+			mvmr.setModelVersion("1");
+			mvmr.setModelCustomizationUuid("MODEL-123");
+			mr.setModelInfo(mvmr);
+			mr.setIsBase(true);
+			mr.setVfModuleLabel("MODULELABEL");
+			vr.addVfModule(mr);
+			ModuleResource mr1 = new ModuleResource();
+			ModelInfo mvmr1 = new ModelInfo();
+			mvmr1.setModelInvariantUuid("ff5256d2-5a33-55df-13ab-12abad84e7ff");
+			mvmr1.setModelName("STMTN5MMSC21-MMSC::model-1-0");
+			mvmr1.setModelVersion("1");
+			mvmr1.setModelCustomizationUuid("MODEL-123");
+			mr1.setModelInfo(mvmr1);
+			mr1.setIsBase(false);
+			mr1.setVfModuleLabel("MODULELABEL");
+			mr1.setInitialCount(1);
+			vr.addVfModule(mr1);				
+			
+			sd.addVnfResource(vr);			
+			
+			variables.put("serviceDecomposition", sd);
+			variables.put("isTest", true);
+		} catch(Exception e) {
+			
+			
+			
+		}
+	}
+}
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
index b161d05..4d2b512 100644
--- 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
@@ -102,11 +102,11 @@
 		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\"," +
+				"\"modelInvariantUuid\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," +
+				"\"modelUuid\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +
 				"\"modelName\": \"vSAMP12\"," +
 				"\"modelVersion\": \"1.0\"," +
-				"\"modelCustomizationId\": \"MODEL-ID-1234\"," +
+				"\"modelCustomizationUuid\": \"MODEL-ID-1234\"," +
 				"}";
 		variables.put("vnfModelInfo", vnfModelInfo);
 
@@ -114,6 +114,15 @@
 				"\"lcpCloudRegionId\": \"mdt1\"," +
 				"\"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\"" + "}";
 		variables.put("cloudConfiguration", cloudConfiguration);
+		
+		String serviceModelInfo = "{ "+ "\"modelType\": \"service\"," +
+				"\"modelInvariantUuid\": \"995256d2-5a33-55df-13ab-12abad84e7ff\"," +
+				"\"modelUuid\": \"ab6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"ServicevSAMP12\"," +
+				"\"modelVersion\": \"1.0\"," +
+				"}";
+		variables.put("serviceModelInfo", serviceModelInfo);
+		variables.put("globalSubscriberId", "MSO-1610");
 	}
 
 }
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteServiceInstanceTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteServiceInstanceTest.java
new file mode 100644
index 0000000..3aefb6a
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteServiceInstanceTest.java
@@ -0,0 +1,88 @@
+package org.openecomp.mso.bpmn.infrastructure;
+
+import static org.junit.Assert.assertEquals;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDeleteServiceInstance;
+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.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;
+
+/**
+ * Unit test cases for DoDeleteServiceInstance.bpmn
+ */
+public class DoDeleteServiceInstanceTest extends WorkflowTest {
+
+	private final CallbackSet callbacks = new CallbackSet();
+	private static final String EOL = "\n";
+	private final String sdncAdapterCallback =
+			"<output xmlns=\"com:att:sdnctl:l3api\">" + EOL +
+			"  <svc-request-id>((REQUEST-ID))</svc-request-id>" + EOL +
+			"  <ack-final-indicator>Y</ack-final-indicator>" + EOL +
+			"</output>" + EOL;
+		
+	public DoDeleteServiceInstanceTest() throws IOException {
+		callbacks.put("deactivate", sdncAdapterCallback);
+		callbacks.put("delete", sdncAdapterCallback);
+	}
+		
+	/**
+	 * Sunny day VID scenario.
+	 *
+	 * @throws Exception
+	 */
+	//@Ignore // File not found - unable to run the test.  Also, Stubs need updating..
+	@Test
+	@Deployment(resources = {
+			"subprocess/DoDeleteServiceInstance.bpmn",
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericDeleteService.bpmn",
+			"subprocess/GenericGetService.bpmn",
+			"subprocess/CompleteMsoProcess.bpmn",
+			"subprocess/FalloutHandler.bpmn" })
+	public void sunnyDay() throws Exception {
+
+		logStart();
+
+		//AAI
+		MockDeleteServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "", 204);
+		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getSINoRelations.xml");
+		MockNodeQueryServiceInstanceById("MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getSIUrlById.xml");
+		//SDNC
+		mockSDNCAdapter(200);
+		//DB
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		String businessKey = UUID.randomUUID().toString();
+
+		Map<String, Object> variables =  new HashMap<String, Object>();
+		setupVariables(variables);
+		invokeSubProcess("DoDeleteServiceInstance", businessKey, variables);
+		injectSDNCCallbacks(callbacks, "deactivate");
+		injectSDNCCallbacks(callbacks, "delete");
+		waitForProcessEnd(businessKey, 10000);
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DoDeleteServiceInstance", "WorkflowException");
+		System.out.println("workflowException:\n" + workflowException);
+		assertEquals(null, workflowException);
+
+		logEnd();
+	}
+
+	// Success Scenario
+	private void setupVariables(Map<String, Object> variables) {
+		variables.put("isDebugLogEnabled", "true");
+		variables.put("msoRequestId", "RaaDDSIRequestId-1");
+		variables.put("mso-request-id", "RaaDDSIRequestId-1");
+		variables.put("serviceInstanceId","MIS%252F1604%252F0026%252FSW_INTERNET");
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVfModuleFromVnfTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVfModuleFromVnfTest.java
new file mode 100644
index 0000000..a1f6655
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVfModuleFromVnfTest.java
@@ -0,0 +1,157 @@
+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.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.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.Test;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.core.WorkflowException;
+
+public class DoDeleteVfModuleFromVnfTest 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=\"com:att:sdnctl:l3api\">" + EOL +
+		"  <svc-request-id>{{REQUEST-ID}}</svc-request-id>" + EOL +
+		"  <ack-final-indicator>Y</ack-final-indicator>" + EOL +
+		"</output>" + EOL;
+	
+	public DoDeleteVfModuleFromVnfTest() throws IOException {
+		callbacks.put("deactivate", sdncAdapterDeleteCallback);
+		callbacks.put("unassign", sdncAdapterDeleteCallback);
+		callbacks.put("vnfDelete", vnfAdapterDeleteCallback);
+		callbacks.put("vnfDeleteFail", vnfAdapterDeleteCallbackFail);
+	}
+	
+	private final String wfeString = "WorkflowException";
+
+	@Test
+	@Deployment(resources = {
+			"subprocess/DoDeleteVfModuleFromVnf.bpmn",			
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/VnfAdapterRestV1.bpmn",
+			"subprocess/DeleteAAIVfModule.bpmn"
+		})
+	public void  TestDoDeleteVfModuleFromVnfSuccess() {
+		// 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://org.openecomp/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://org.openecomp/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+		logStart();
+		MockDoDeleteVfModule_SDNCSuccess();
+		MockDoDeleteVfModule_DeleteVNFSuccess();
+		MockAAIGenericVnfSearch();	
+		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("msoRequestId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("serviceInstanceId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("vnfId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("vfModuleId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		variables.put("lcpCloudRegionId", "RDM2WAGPLCP");
+		variables.put("tenantId", "fba1bd1e195a404cacb9ce17a9b2b421");
+		variables.put("sdncVersion", "1707");
+		
+		invokeSubProcess("DoDeleteVfModuleFromVnf", businessKey, variables);
+
+		injectSDNCCallbacks(callbacks, "deactivate");
+		injectVNFRestCallbacks(callbacks, "vnfDelete");
+		//waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);
+		injectSDNCCallbacks(callbacks, "unassign");
+
+		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();
+	}
+
+	
+	// start of mocks used locally and by other VF Module unit tests
+	
+
+	
+	public static void MockDoDeleteVfModule_SDNCSuccess() {
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>deactivate"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>unassign"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));
+	}
+
+	
+	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")));
+	}
+
+	
+}
\ No newline at end of file
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
index a3165f7..3e1c498 100644
--- 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
@@ -43,6 +43,7 @@
 import org.junit.Test;
 import org.openecomp.mso.bpmn.common.WorkflowTest;
 import org.openecomp.mso.bpmn.core.WorkflowException;
+import org.openecomp.mso.bpmn.mock.FileUtil;
 
 /**
  * Unit test for DoDeleteVfModule.bpmn.
@@ -77,7 +78,8 @@
 	public DoDeleteVfModuleTest() throws IOException {
 		callbacks.put("sdncChangeDelete", sdncAdapterDeleteCallback);
 		callbacks.put("sdncDelete", sdncAdapterDeleteCallback);
-		callbacks.put("vnfDelete", vnfAdapterDeleteCallback);
+		callbacks.put("vnfDelete", FileUtil.readResourceFile(
+				"__files/DeleteVfModuleCallbackResponse.xml"));
 		callbacks.put("vnfDeleteFail", vnfAdapterDeleteCallbackFail);
 	}
 	
@@ -182,12 +184,13 @@
 		variables.put("vfModuleName", "STMTN5MMSC21-MMSC::module-0-0");
 		variables.put("sdncVersion", "1610");
 		variables.put("isVidRequest", "true");
+		variables.put("retainResources", false);
 		String vfModuleModelInfo = "{" + "\"modelType\": \"vnf\"," +
-				"\"modelInvariantId\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," + 
-				"\"modelNameVersionId\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelInvariantUuid\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," + 
+				"\"modelUuid\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +
 				"\"modelName\": \"vSAMP12\"," +
 				"\"modelVersion\": \"1.0\"," + 
-				"\"modelCustomizationId\": \"MODEL-ID-1234\"," + 
+				"\"modelCustomizationUuid\": \"MODEL-ID-1234\"," + 
 				"}";
 		variables.put("vfModuleModelInfo", vfModuleModelInfo);
 			
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVfModuleVolumeV2Test.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVfModuleVolumeV2Test.java
new file mode 100644
index 0000000..0104310
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVfModuleVolumeV2Test.java
@@ -0,0 +1,198 @@
+/*-
+ * ============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.MockGetNetworkCloudRegion;
+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 static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockVfModuleDelete;
+
+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.core.WorkflowException;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+public class DoDeleteVfModuleVolumeV2Test extends WorkflowTest {
+
+	private final CallbackSet callbacks = new CallbackSet();
+	
+	public DoDeleteVfModuleVolumeV2Test() throws IOException {
+		callbacks.put("volumeGroupDelete", FileUtil.readResourceFile(
+				"__files/DeleteVfModuleVolumeInfraV1/DeleteVfModuleVolumeCallbackResponse.xml"));
+	}
+
+	@Test
+	//@Ignore 
+	@Deployment(resources = {"subprocess/DoDeleteVfModuleVolumeV2.bpmn", "subprocess/VnfAdapterRestV1.bpmn"})
+	public void happyPath() throws Exception {
+
+		logStart();
+		
+		MockGetNetworkCloudRegion("MDTWNJ21", "CreateNetworkV2/cloudRegion30_AAIResponse_Success.xml");
+		MockGetVolumeGroupById("RDM2WAGPLCP", "78987", "DeleteVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml");
+		MockDeleteVolumeGroupById("RDM2WAGPLCP", "78987", "0000020", 200);
+		mockPutVNFVolumeGroup("78987", 202);
+		mockVfModuleDelete("78987");
+		MockDeleteVolumeGroupById("AAIAIC25", "78987", "0000020", 200);
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		MockGetVolumeGroupById("AAIAIC25", "78987", "VfModularity/VolumeGroup.xml");
+		String businessKey = UUID.randomUUID().toString();
+
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("mso-request-id", "TEST-REQUEST-ID-0123");
+		testVariables.put("msoRequestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("isDebugLogEnabled", "true");
+		//testVariables.put("lcpCloudRegionId", "MDTWNJ21");
+		//testVariables.put("tenantId", "fba1bd1e195a404cacb9ce17a9b2b421");
+		testVariables.put("volumeGroupId", "78987");
+		testVariables.put("serviceInstanceId", "test-service-instance-id-0123");
+		
+		String cloudConfiguration = "{" + 
+				"\"lcpCloudRegionId\": \"MDTWNJ21\"," +		
+				"\"tenantId\": \"fba1bd1e195a404cacb9ce17a9b2b421\"" + "}";
+		testVariables.put("cloudConfiguration", cloudConfiguration);
+		
+		invokeSubProcess("DoDeleteVfModuleVolumeV2", businessKey, testVariables);
+
+		injectVNFRestCallbacks(callbacks, "volumeGroupDelete");
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "wasDeleted", "true");
+		
+		logEnd();
+	}
+
+
+	@Test
+	//@Ignore 
+	@Deployment(resources = {"subprocess/DoDeleteVfModuleVolumeV2.bpmn", "subprocess/VnfAdapterRestV1.bpmn"})
+	public void testVolumeGroupInUse() throws Exception {
+
+		logStart();
+		MockGetNetworkCloudRegion("MDTWNJ21", "CreateNetworkV2/cloudRegion30_AAIResponse_Success.xml");
+		MockGetVolumeGroupById("RDM2WAGPLCP", "78987", "DeleteVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_HasVfModRelationship.xml");
+		MockDeleteVolumeGroupById("RDM2WAGPLCP", "78987", "0000020", 200);
+		mockVfModuleDelete("78987");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		String businessKey = UUID.randomUUID().toString();
+
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("mso-request-id", "TEST-REQUEST-ID-0123");
+		testVariables.put("msoRequestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("isDebugLogEnabled", "true");
+		testVariables.put("volumeGroupId", "78987");
+		testVariables.put("serviceInstanceId", "test-service-instance-id-0123");
+		
+		String cloudConfiguration = "{" + 
+				"\"lcpCloudRegionId\": \"MDTWNJ21\"," +		
+				"\"tenantId\": \"fba1bd1e195a404cacb9ce17a9b2b421\"" + "}";
+		testVariables.put("cloudConfiguration", cloudConfiguration);
+		
+		invokeSubProcess("DoDeleteVfModuleVolumeV2", businessKey, testVariables);
+
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "wasDeleted", "false");
+		WorkflowException msoException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
+		System.out.println("WorkflowException - Code: " + msoException.getErrorCode() + " Message: " + msoException.getErrorMessage());
+		
+		
+		logEnd();
+	}
+
+	@Test
+	//@Ignore 
+	@Deployment(resources = {"subprocess/DoDeleteVfModuleVolumeV2.bpmn", "subprocess/VnfAdapterRestV1.bpmn"})
+	public void testTenantIdMismatch() throws Exception {
+
+		logStart();
+		MockGetNetworkCloudRegion("MDTWNJ21", "CreateNetworkV2/cloudRegion30_AAIResponse_Success.xml");
+		MockGetVolumeGroupById("RDM2WAGPLCP", "78987", "DeleteVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml");
+		MockDeleteVolumeGroupById("RDM2WAGPLCP", "78987", "0000020", 200);
+		mockVfModuleDelete("78987", 404);
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		String businessKey = UUID.randomUUID().toString();
+
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("mso-request-id", "TEST-REQUEST-ID-0123");
+		testVariables.put("msoRequestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("isDebugLogEnabled", "true");
+		testVariables.put("volumeGroupId", "78987");
+		testVariables.put("serviceInstanceId", "test-service-instance-id-0123");
+		
+		String cloudConfiguration = "{" + 
+				"\"lcpCloudRegionId\": \"MDTWNJ21\"," +		
+				"\"tenantId\": \"fba1bd1e195a404cacb9ce17a9b2b421xxx\"" + "}";
+		testVariables.put("cloudConfiguration", cloudConfiguration);
+		
+		invokeSubProcess("DoDeleteVfModuleVolumeV2", businessKey, testVariables);
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "wasDeleted", "false");
+		WorkflowException msoException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
+		System.out.println("WorkflowException - Code: " + msoException.getErrorCode() + " Message: " + msoException.getErrorMessage());
+		
+		
+		logEnd();
+	}
+	
+	@Test
+	//@Ignore 
+	@Deployment(resources = {"subprocess/DoDeleteVfModuleVolumeV2.bpmn", "subprocess/VnfAdapterRestV1.bpmn"})
+	public void testVnfAdapterCallfail() throws Exception {
+
+		logStart();
+		MockGetNetworkCloudRegion("MDTWNJ21", "CreateNetworkV2/cloudRegion30_AAIResponse_Success.xml");
+		MockGetVolumeGroupById("RDM2WAGPLCP", "78987", "DeleteVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml");
+		MockDeleteVolumeGroupById("RDM2WAGPLCP", "78987", "0000020", 200);
+		mockVfModuleDelete("78987", 404);
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		String businessKey = UUID.randomUUID().toString();
+
+		Map<String, Object> testVariables = new HashMap<String, Object>();
+		testVariables.put("mso-request-id", "TEST-REQUEST-ID-0123");
+		testVariables.put("msoRequestId", "TEST-REQUEST-ID-0123");
+		testVariables.put("isDebugLogEnabled", "true");
+		testVariables.put("volumeGroupId", "78987");
+		testVariables.put("serviceInstanceId", "test-service-instance-id-0123");
+		
+		String cloudConfiguration = "{" + 
+				"\"lcpCloudRegionId\": \"MDTWNJ21\"," +		
+				"\"tenantId\": \"fba1bd1e195a404cacb9ce17a9b2b421\"" + "}";
+		testVariables.put("cloudConfiguration", cloudConfiguration);
+		
+		invokeSubProcess("DoDeleteVfModuleVolumeV2", businessKey, testVariables);
+		
+		waitForProcessEnd(businessKey, 100000);
+		checkVariable(businessKey, "wasDeleted", "false");
+		WorkflowException msoException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
+		System.out.println("WorkflowException - Code: " + msoException.getErrorCode() + " Message: " + msoException.getErrorMessage());
+		
+		logEnd();
+	}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVnfAndModulesTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVnfAndModulesTest.java
new file mode 100644
index 0000000..585c26d
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoDeleteVnfAndModulesTest.java
@@ -0,0 +1,190 @@
+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.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
+import static org.junit.Assert.assertEquals;
+import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIDeleteVfModule;
+import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIGenericVnfSearch;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDeleteGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById;
+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.Ignore;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.BPMNUtil;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+public class DoDeleteVnfAndModulesTest 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;
+
+	public DoDeleteVnfAndModulesTest () throws IOException {
+		callbacks.put("deactivate", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("unassign", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("vnfDelete", vnfAdapterDeleteCallback);
+
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/DoDeleteVnfAndModules.bpmn", "subprocess/SDNCAdapterV1.bpmn", "subprocess/GenericGetVnf.bpmn", "subprocess/GenericDeleteVnf.bpmn", "subprocess/DoDeleteVnf.bpmn", "subprocess/DoDeleteVfModule.bpmn"})
+	public void testDoDeleteVnfAndModules_successVnfOnly() throws Exception{
+		MockGetGenericVnfById("testVnfId123.*", "GenericFlows/getGenericVnfByNameResponse.xml");
+		MockDeleteGenericVnf("testVnfId123", "testReVer123");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		mockSDNCAdapter(200);
+
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		setVariablesVnfOnly(variables);
+		invokeSubProcess("DoDeleteVnfAndModules", businessKey, variables);
+		
+		injectSDNCCallbacks(callbacks, "deactivate");
+		injectSDNCCallbacks(callbacks, "unassign");
+
+		waitForProcessEnd(businessKey, 10000);
+
+		Assert.assertTrue(isProcessEnded(businessKey));		
+
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnfAndModules", "WorkflowException");
+		
+		assertEquals(null, workflowException);
+	}
+
+	
+	private void setVariablesVnfOnly(Map<String, Object> variables) {
+		variables.put("mso-request-id", "testRequestId123");		
+		variables.put("isDebugLogEnabled", "true");
+		variables.put("vnfId","testVnfId123");
+		variables.put("serviceInstanceId", "MIS%2F1604%2F0026%2FSW_INTERNET");
+		//variables.put("vnfName", "testVnfName123");
+		variables.put("disableRollback", "true");
+		variables.put("msoRequestId", "testVnfId123");
+		variables.put("testVnfId","testVnfId123");
+		//variables.put("vnfType", "STMTN");
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		String vnfModelInfo = "{ "+ "\"modelType\": \"vnf\"," +
+				"\"modelInvariantUuid\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," +
+				"\"modelUuid\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"vSAMP12\"," +
+				"\"modelVersion\": \"1.0\"," +
+				"\"modelCustomizationUuid\": \"MODEL-ID-1234\"," +
+				"}";
+		//variables.put("vnfModelInfo", vnfModelInfo);
+
+		variables.put("lcpCloudRegionId", "mdt1");
+		variables.put("tenantId", "88a6ca3ee0394ade9403f075db23167e");		
+		
+		String serviceModelInfo = "{ "+ "\"modelType\": \"service\"," +
+				"\"modelInvariantUuid\": \"995256d2-5a33-55df-13ab-12abad84e7ff\"," +
+				"\"modelUuid\": \"ab6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"ServicevSAMP12\"," +
+				"\"modelVersion\": \"1.0\"," +
+				"}";
+		//variables.put("serviceModelInfo", serviceModelInfo);
+		variables.put("globalSubscriberId", "MSO-1610");
+		variables.put("sdncVersion", "1707");
+		
+	}
+	
+	@Test	
+	@Deployment(resources = {"subprocess/DoDeleteVnfAndModules.bpmn", "subprocess/SDNCAdapterV1.bpmn", "subprocess/GenericGetVnf.bpmn", "subprocess/GenericDeleteVnf.bpmn", "subprocess/DoDeleteVnf.bpmn", "subprocess/DoDeleteVfModuleFromVnf.bpmn", "subprocess/VnfAdapterRestV1.bpmn", "subprocess/DeleteAAIVfModule.bpmn"})
+	public void testDoDeleteVnfAndModules_successVnfAndModules() throws Exception{
+		MockAAIGenericVnfSearch();
+		MockGetGenericVnfById("testVnfId123.*", "GenericFlows/getGenericVnfByNameResponse.xml");
+		MockDeleteGenericVnf("testVnfId123", "testReVer123");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		mockSDNCAdapter(200);
+		MockDoDeleteVfModule_SDNCSuccess();
+		MockDoDeleteVfModule_DeleteVNFSuccess();
+		MockAAIDeleteVfModule();
+
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		setVariablesVnfAndModules(variables);
+		invokeSubProcess("DoDeleteVnfAndModules", businessKey, variables);
+		
+		injectSDNCCallbacks(callbacks, "deactivate");
+		injectSDNCCallbacks(callbacks, "deactivate");
+		injectVNFRestCallbacks(callbacks, "vnfDelete");
+		injectSDNCCallbacks(callbacks, "unassign");
+		MockGetGenericVnfById("a27ce5a9-29c4-4c22-a017-6615ac73c721", "GenericFlows/getGenericVnfByNameResponse.xml");
+		injectSDNCCallbacks(callbacks, "unassign");
+		//MockGetGenericVnfById("a27ce5a9-29c4-4c22-a017-6615ac73c721", "GenericFlows/getGenericVnfByNameResponse.xml");
+
+		waitForProcessEnd(businessKey, 10000);
+
+		Assert.assertTrue(isProcessEnded(businessKey));		
+
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnfAndModules", "WorkflowException");
+		
+		assertEquals(null, workflowException);
+	}
+
+	
+	private void setVariablesVnfAndModules(Map<String, Object> variables) {
+		variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");		
+		variables.put("isDebugLogEnabled", "true");
+		variables.put("vnfId","a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("serviceInstanceId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+				
+		variables.put("msoRequestId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		//variables.put("testVnfId","testVnfId123");
+		
+		variables.put("lcpCloudRegionId", "RDM2WAGPLCP");
+		variables.put("tenantId", "fba1bd1e195a404cacb9ce17a9b2b421");
+		
+		variables.put("sdncVersion", "1707");
+		
+	}
+	
+
+	public static void MockDoDeleteVfModule_SDNCSuccess() {
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>deactivate"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>unassign"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));
+	}
+
+	
+	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")));
+	}
+}
\ No newline at end of file
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
index bba6f62..fa0bc49 100644
--- 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
@@ -22,10 +22,19 @@
 
 
 
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+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.StubResponseAAI.MockAAIVfModule;
 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.MockPatchGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;
 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;
@@ -41,7 +50,6 @@
 import org.junit.Ignore;
 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;
 
 /**
@@ -112,5 +120,125 @@
 		
 		logEnd();
 	}
+	
+	/**
+	 * Test the happy path through the flow with Building Blocks interface.
+	 */
+	@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 happyPathBB() throws IOException {
+		
+		logStart();
+		
+		MockAAIVfModule();
+		MockPatchGenericVnf("skask");
+		MockPatchVfModuleId("skask", ".*");
+		MockSDNCAdapterVfModule();
+		MockVNFAdapterRestVfModule();
+		
+		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("msoRequestId", "DEV-VF-0011");
+		variables.put("isBaseVfModule", "false");
+		variables.put("isDebugLogEnabled", "true");
+		variables.put("disableRollback", "true");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("vnfId", "skask");
+		variables.put("vfModuleId", "supercool");
+		variables.put("vnfType", "pcrf-capacity");
+		variables.put("isVidRequest", "true");
+		variables.put("volumeGroupId", "78987");
+		variables.put("usePreload", true);
+		
+		variables.put("sdncVersion", "1702");
+		
+		variables.put("lcpCloudRegionId", "MDTWNJ21");
+		variables.put("tenantId", "fba1bd1e195a404cacb9ce17a9b2b421");
+		
+		String vfModuleModelInfo = "{ "+ "\"modelType\": \"vfModule\"," +
+				"\"modelInvariantUuid\": \"introvert\"," + 
+				"\"modelUuid\": \"3.14\"," +
+				"\"modelName\": \"STMTN5MMSC21-MMSC::model-1-0\"," +
+				"\"modelVersion\": \"1\"," + 
+				"\"modelCustomizationUuid\": \"MODEL-123\"" + "}";
+		variables.put("vfModuleModelInfo", vfModuleModelInfo);
+		
+		String vnfModelInfo = "{ "+ "\"modelType\": \"vnf\"," +
+				"\"modelInvariantUuid\": \"introvert\"," + 
+				"\"modelUuid\": \"3.14\"," +
+				"\"modelName\": \"VNF-STMTN5MMSC21-MMSC::model-1-0\"," +
+				"\"modelVersion\": \"1\"," + 
+				"\"modelCustomizationUuid\": \"VNF-MODEL-123\"" + "}";
+	variables.put("vnfModelInfo", vnfModelInfo);
+		
+		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();
+	}
+	
+	// start of mocks used locally and by other VF Module unit tests
+	public static void MockSDNCAdapterVfModule() {
+		// simplified the implementation to return "success" for all requests
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+//			.withRequestBody(containing("SvcInstanceId><"))
+			.willReturn(aResponse()
+				.withStatus(200)
+				.withHeader("Content-Type", "text/xml")
+				.withBodyFile("VfModularity/StandardSDNCSynchResponse.xml")));
+//		stubFor(post(urlEqualTo("/SDNCAdapter"))
+//				.withRequestBody(containing("vnf-type>STMTN"))
+//				.willReturn(aResponse()
+//					.withStatus(200)
+//					.withHeader("Content-Type", "text/xml")
+//					.withBodyFile("VfModularity/StandardSDNCSynchResponse.xml")));
+//		stubFor(post(urlEqualTo("/SDNCAdapter"))
+//				.withRequestBody(containing("SvcAction>query"))
+//				.willReturn(aResponse()
+//					.withStatus(200)
+//					.withHeader("Content-Type", "text/xml")
+//					.withBodyFile("VfModularity/StandardSDNCSynchResponse.xml")));
+	}
+
+	public static void MockVNFAdapterRestVfModule() {
+		stubFor(put(urlEqualTo("/vnfs/v1/vnfs/skask/vf-modules/supercool"))
+			.willReturn(aResponse()
+				.withStatus(202)
+				.withHeader("Content-Type", "application/xml")));
+		stubFor(post(urlMatching("/vnfs/v1/vnfs/.*/vf-modules"))
+				.willReturn(aResponse()
+					.withStatus(202)
+					.withHeader("Content-Type", "application/xml")));
+		stubFor(post(urlEqualTo("/vnfs/v1/vnfs/skask/vf-modules"))
+			.willReturn(aResponse()
+				.withStatus(202)
+				.withHeader("Content-Type", "application/xml")));
+		stubFor(put(urlEqualTo("/vnfs/v1/volume-groups/78987"))
+			.willReturn(aResponse()
+				.withStatus(202)
+				.withHeader("Content-Type", "application/xml")));
+	}
 }
 
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoUpdateVnfAndModulesTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoUpdateVnfAndModulesTest.java
new file mode 100644
index 0000000..b7650af
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/DoUpdateVnfAndModulesTest.java
@@ -0,0 +1,206 @@
+package org.openecomp.mso.bpmn.infrastructure;
+
+import static org.junit.Assert.assertEquals;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockAAIVfModule;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDBUpdateVfModule;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById_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.MockPatchGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockSDNCAdapterVfModule;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;
+import static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockVNFPut;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockVNFAdapterRestVfModule;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+
+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.Ignore;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.BPMNUtil;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.core.domain.ModelInfo;
+import org.openecomp.mso.bpmn.core.domain.ModuleResource;
+import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition;
+import org.openecomp.mso.bpmn.core.domain.VnfResource;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit Test for the DoUpdateVnfAndModules Flow
+ *
+ */
+public class DoUpdateVnfAndModulesTest extends WorkflowTest {
+
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public DoUpdateVnfAndModulesTest() throws IOException {	
+
+		callbacks.put("changeassign", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyChangeAssignCallback.xml"));
+		callbacks.put("activate", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("query", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyQueryCallback.xml"));		
+		callbacks.put("vnfUpdate", FileUtil.readResourceFile(
+				"__files/VfModularity/VNFAdapterRestUpdateCallback.xml"));
+	}
+
+	@Test
+	
+	@Deployment(resources = {			
+			"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/PrepareUpdateAAIVfModule.bpmn",
+			"subprocess/DoUpdateVfModule.bpmn",
+			"subprocess/DoUpdateVnfAndModules.bpmn",		
+			"subprocess/VnfAdapterRestV1.bpmn",
+			"subprocess/ConfirmVolumeGroupTenant.bpmn",		
+			"subprocess/UpdateAAIVfModule.bpmn",			
+			"subprocess/UpdateAAIGenericVnf.bpmn"})
+	public void testDoUpdateVnfAndModules_success() throws Exception{
+		
+		MockNodeQueryServiceInstanceById("MIS%2F1604%2F0026%2FSW_INTERNET", "GenericFlows/getSIUrlByIdVipr.xml");
+		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
+		//MockGetGenericVnfById_404("testVnfId");
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+		MockPutGenericVnf(".*");
+		MockAAIVfModule();
+		MockPatchGenericVnf("skask");
+		MockPatchVfModuleId("skask", ".*");
+		mockSDNCAdapter("VfModularity/StandardSDNCSynchResponse.xml");	
+		mockVNFPut("skask", "/supercool", 202);
+		mockVNFPut("skask", "/lukewarm", 202);
+		MockVNFAdapterRestVfModule();
+		MockDBUpdateVfModule();	
+		
+		mockSDNCAdapter("VfModularity/StandardSDNCSynchResponse.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		setVariablesSuccess(variables, "", "testRequestId123", "MIS%2F1604%2F0026%2FSW_INTERNET");
+		invokeSubProcess("DoUpdateVnfAndModules", businessKey, variables);
+
+		injectSDNCCallbacks(callbacks, "changeassign, query");
+		injectVNFRestCallbacks(callbacks, "vnfUpdate");
+		injectSDNCCallbacks(callbacks, "activate");
+		injectSDNCCallbacks(callbacks, "changeassign, query");
+		injectVNFRestCallbacks(callbacks, "vnfUpdate");
+		injectSDNCCallbacks(callbacks, "activate");
+		waitForProcessEnd(businessKey, 10000);
+
+		Assert.assertTrue(isProcessEnded(businessKey));
+		assertVariables("2", "200", null);
+
+	}
+	
+	
+
+	private void assertVariables(String exModuleCount, String exVnfFound, String exWorkflowException) {
+
+		String moduleCount = BPMNUtil.getVariable(processEngineRule, "DoUpdateVnfAndModules", "DUVAM_moduleCount");		
+		String vnfFound = BPMNUtil.getVariable(processEngineRule, "DoUpdateVnfAndModules", "DUVAM_queryAAIVfModuleResponseCode");		
+		String workflowException = BPMNUtil.getVariable(processEngineRule, "DoUpdateVnfAndModules", "SavedWorkflowException1");
+		
+		assertEquals(exModuleCount, moduleCount);
+		assertEquals(exVnfFound, vnfFound);		
+		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("msoRequestUdid", 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("requestId", requestId);
+		variables.put("msoRequestId", requestId);
+		variables.put("serviceInstanceId",siId);		
+		variables.put("disableRollback", "true");		
+		//variables.put("testVnfId","testVnfId123");
+		variables.put("vnfType", "STMTN");
+		variables.put("vnfId", "skask");
+		variables.put("tenantId", "88a6ca3ee0394ade9403f075db23167e");
+		variables.put("lcpCloudRegionId", "mdt1");
+		
+		String serviceModelInfo = "{ "+ "\"modelType\": \"service\"," +
+				"\"modelInvariantUuid\": \"995256d2-5a33-55df-13ab-12abad84e7ff\"," +
+				"\"modelUuid\": \"ab6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"ServicevSAMP12\"," +
+				"\"modelVersion\": \"1.0\"," +
+				"}";
+		variables.put("serviceModelInfo", serviceModelInfo);
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		String vnfModelInfo = "{" + "\"modelType\": \"vnf\"," +
+				"\"modelInvariantUuid\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," +
+				"\"modelUuid\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +
+				"\"modelName\": \"vSAMP12\"," +
+				"\"modelVersion\": \"1.0\"," + 
+				"\"modelCustomizationUuid\": \"MODEL-ID-1234\"" + "}";
+		variables.put("vnfModelInfo", vnfModelInfo);
+
+		String cloudConfiguration = "{" + "\"cloudConfiguration\": { " +
+				"\"lcpCloudRegionId\": \"mdt1\"," +
+				"\"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\"" + "}}";
+		variables.put("cloudConfiguration", cloudConfiguration);
+		variables.put("sdncVersion", "1702");
+		variables.put("globalSubscriberId", "subscriber123");
+		variables.put("asdcServiceModelVersion", "serviceVersion01");
+		
+		try {						
+			VnfResource vr = new VnfResource();
+			ModelInfo mvr = new ModelInfo();
+			mvr.setModelName("vSAMP12");
+			mvr.setModelInstanceName("v123");
+			mvr.setModelInvariantUuid("extrovert");
+			mvr.setModelVersion("1.0");
+			mvr.setModelCustomizationUuid("MODEL-ID-1234");
+			vr.setModelInfo(mvr);
+			vr.constructVnfType("vnf1");			
+			vr.setNfType("somenftype");
+			vr.setNfRole("somenfrole");
+			vr.setNfFunction("somenffunction");
+			vr.setNfNamingCode("somenamingcode");	
+			ModuleResource mr = new ModuleResource();
+			ModelInfo mvmr = new ModelInfo();
+			mvmr.setModelInvariantUuid("introvert");
+			mvmr.setModelName("STMTN5MMSC21-MMSC::model-1-0");
+			mvmr.setModelVersion("1");
+			mvmr.setModelCustomizationUuid("MODEL-123");
+			mr.setModelInfo(mvmr);
+			mr.setIsBase(true);
+			mr.setVfModuleLabel("MODULELABEL");
+			vr.addVfModule(mr);
+			ModuleResource mr1 = new ModuleResource();
+			ModelInfo mvmr1 = new ModelInfo();
+			mvmr1.setModelInvariantUuid("extrovert");
+			mvmr1.setModelName("SECONDMODELNAME");
+			mvmr1.setModelVersion("1");
+			mvmr1.setModelCustomizationUuid("MODEL-123");
+			mr1.setModelInfo(mvmr1);
+			mr1.setIsBase(false);
+			mr1.setVfModuleLabel("MODULELABEL1");
+			vr.addVfModule(mr1);			
+			variables.put("vnfResourceDecomposition", vr);
+			variables.put("isTest", true);
+		} catch(Exception e) {
+			
+		}
+		
+	}
+		
+	
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/ReplaceVnfInfraTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/ReplaceVnfInfraTest.java
new file mode 100644
index 0000000..acccbf5
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/ReplaceVnfInfraTest.java
@@ -0,0 +1,259 @@
+/*- 
+ * ============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.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.MockAAIDeleteVfModule;
+import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIGenericVnfSearch;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockAAIVfModule;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDBUpdateVfModule;
+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.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.MockGetServiceInstance;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetPserverByVnfId;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfsByVnfId;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;
+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.StubResponseAAI.MockVNFAdapterRestVfModule;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockSetInMaintFlagByVnfId;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.MockGetServiceResourcesCatalogData;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponsePolicy.MockPolicyAbort;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;
+import static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockVNFPut;
+import static org.openecomp.mso.bpmn.mock.StubResponsePolicy.MockPolicySkip;
+
+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 UpdateVnfInfra.bpmn
+ */
+public class ReplaceVnfInfraTest 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;
+
+	public ReplaceVnfInfraTest() throws IOException {
+		callbacks.put("deactivate", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("unassign", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("vnfDelete", vnfAdapterDeleteCallback);
+		callbacks.put("changeassign", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyChangeAssignCallback.xml"));
+		callbacks.put("activate", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("query", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyQueryCallback.xml"));		
+		callbacks.put("vnfUpdate", FileUtil.readResourceFile(
+				"__files/VfModularity/VNFAdapterRestUpdateCallback.xml"));
+	}
+	
+	/**
+	 * Sunny day scenario.
+	 * 
+	 * @throws Exception
+	 */
+	@Test	
+    @Ignore
+	@Deployment(resources = {
+		"process/ReplaceVnfInfra.bpmn",		
+		"subprocess/DoDeleteVfModule.bpmn",
+		"subprocess/DoDeleteVnfAndModules.bpmn",
+		"subprocess/DeleteAAIVfModule.bpmn",
+		"subprocess/PrepareUpdateAAIVfModule.bpmn",
+		"subprocess/ConfirmVolumeGroupTenant.bpmn",
+		"subprocess/SDNCAdapterV1.bpmn",
+		"subprocess/DoDeleteVnfAndModules.bpmn",
+		"subprocess/GenericDeleteVnf.bpmn", 
+		"subprocess/DoDeleteVnf.bpmn", 
+		"subprocess/DoDeleteVfModule.bpmn",
+		"subprocess/VnfAdapterRestV1.bpmn",
+		"subprocess/UpdateAAIGenericVnf.bpmn",
+		"subprocess/UpdateAAIVfModule.bpmn",
+		"subprocess/GenericGetService.bpmn",
+		"subprocess/GenericGetVnf.bpmn",
+		"subprocess/GenericPutVnf.bpmn",
+		"subprocess/DoCreateVnf.bpmn",
+		"subprocess/GenerateVfModuleName.bpmn",
+		"subprocess/DoCreateVfModule.bpmn",
+		"subprocess/DoCreateVnfAndModules.bpmn",					
+		"subprocess/ConfirmVolumeGroupName.bpmn",
+		"subprocess/CreateAAIVfModule.bpmn",
+		"subprocess/CreateAAIVfModuleVolumeGroup.bpmn",
+		"subprocess/CompleteMsoProcess.bpmn",
+		"subprocess/FalloutHandler.bpmn",
+		"subprocess/DoCreateVnfAndModulesRollback.bpmn",
+		"subprocess/BuildingBlock/DecomposeService.bpmn",
+		"subprocess/BuildingBlock/RainyDayHandler.bpmn",
+		"subprocess/BuildingBlock/ManualHandling.bpmn"
+		
+		})
+	public void sunnyDay() throws Exception {
+				
+		logStart();
+		MockAAIGenericVnfSearch();
+		MockGetGenericVnfById("testVnfId123.*", "GenericFlows/getGenericVnfByNameResponse.xml");
+		MockDeleteGenericVnf("testVnfId123", "testReVer123");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		mockSDNCAdapter(200);
+		MockDoDeleteVfModule_SDNCSuccess();
+		MockDoDeleteVfModule_DeleteVNFSuccess();
+		MockAAIDeleteVfModule();		
+		
+		MockNodeQueryServiceInstanceById("MIS%2F1604%2F0026%2FSW_INTERNET", "GenericFlows/getSIUrlByIdVipr.xml");
+		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
+		//MockGetGenericVnfById_404("testVnfId");
+		MockGetServiceResourcesCatalogData("995256d2-5a33-55df-13ab-12abad84e7ff", "1.0", "VIPR/getCatalogServiceResourcesDataForReplaceVnfInfra.json");
+		//MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+		//MockPutGenericVnf(".*");
+		MockAAIVfModule();
+		MockPatchGenericVnf("a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		MockPatchVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", ".*");
+		//mockSDNCAdapter("VfModularity/StandardSDNCSynchResponse.xml");	
+		//mockVNFPut("skask", "/supercool", 202);
+		//mockVNFPut("skask", "/lukewarm", 202);
+		//MockVNFAdapterRestVfModule();
+		//MockDBUpdateVfModule();	
+		//MockGetPserverByVnfId("skask", "AAI/AAI_pserverByVnfId.json", 200);
+		//MockGetGenericVnfsByVnfId("skask", "AAI/AAI_genericVnfsByVnfId.json", 200);
+		MockSetInMaintFlagByVnfId("skask", 200);
+		MockPolicySkip();
+		
+		//mockSDNCAdapter("VfModularity/StandardSDNCSynchResponse.xml");
+		//mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		
+		String businessKey = UUID.randomUUID().toString();
+		String updaetVnfRequest =
+			FileUtil.readResourceFile("__files/InfrastructureFlows/ReplaceVnf_VID_request.json");
+		
+		Map<String, Object> variables = setupVariablesSunnyDayVID();
+		
+		
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("ReplaceVnfInfra",
+			"v1", businessKey, updaetVnfRequest, variables);
+		
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 10000);
+		
+		String responseBody = response.getResponse();
+		System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		//injectSDNCCallbacks(callbacks, "deactivate");
+		//injectSDNCCallbacks(callbacks, "deactivate");
+		injectVNFRestCallbacks(callbacks, "vnfDelete");
+		//injectSDNCCallbacks(callbacks, "unassign");
+		MockGetGenericVnfById("a27ce5a9-29c4-4c22-a017-6615ac73c721", "GenericFlows/getGenericVnfByNameResponse.xml");
+		injectSDNCCallbacks(callbacks, "unassign");
+		
+		
+		injectSDNCCallbacks(callbacks, "changeassign, query");
+		injectVNFRestCallbacks(callbacks, "vnfUpdate");
+		injectSDNCCallbacks(callbacks, "activate");
+		injectSDNCCallbacks(callbacks, "changeassign, query");
+		injectVNFRestCallbacks(callbacks, "vnfUpdate");
+		injectSDNCCallbacks(callbacks, "activate");
+		
+		// TODO add appropriate assertions
+
+		waitForProcessEnd(businessKey, 10000);
+		checkVariable(businessKey, "ReplaceVfModuleInfraSuccessIndicator", 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("isDebugLogEnabled", "true");				
+				variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+				variables.put("vnfId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+				variables.put("vnfType", "vSAMP12");					
+				variables.put("serviceType", "MOG");	
+						
+				return variables;
+				
+			}
+	
+	public static void MockDoDeleteVfModule_SDNCSuccess() {
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>deactivate"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));
+		stubFor(post(urlEqualTo("/SDNCAdapter"))
+				  .withRequestBody(containing("SvcAction>unassign"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));
+	}
+
+	
+	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")));
+	}
+	
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateNetworkInstanceTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateNetworkInstanceTest.java
new file mode 100644
index 0000000..39cdd72
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateNetworkInstanceTest.java
@@ -0,0 +1,468 @@
+package org.openecomp.mso.bpmn.infrastructure;
+
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.*;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.MockUpdateRequestDB;
+import static org.openecomp.mso.bpmn.mock.StubResponseNetworkAdapter.MockNetworkAdapterRestPut;
+import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapterTopology;
+import static org.openecomp.mso.bpmn.common.BPMNUtil.executeAsyncWorkflow;
+import static org.openecomp.mso.bpmn.common.BPMNUtil.getVariable;
+import static org.junit.Assert.assertEquals;
+
+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.WorkflowTest;
+import org.openecomp.mso.bpmn.common.WorkflowTestTransformer;
+import org.openecomp.mso.bpmn.common.SDNCAdapterCallbackRule;
+import org.openecomp.mso.bpmn.mock.SDNCAdapterNetworkTopologyMockTransformer;
+
+import com.github.tomakehurst.wiremock.extension.ResponseTransformer;
+
+/**
+ * Unit test cases for DoUpdateNetworkInstance.bpmn
+ *
+ */
+public class UpdateNetworkInstanceTest 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 DoUpdateNetworkInstance.bpmn
+	 *  - String input & String response
+	 */
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/UpdateNetworkInstance.bpmn",
+							 "subprocess/DoUpdateNetworkInstance.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/GenericGetService.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstance_SuccessVID1() throws Exception {
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("            Success1 - UpdateNetworkInstance flow Started!       ");
+		System.out.println("----------------------------------------------------------");
+
+		// setup simulators
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>changeassign");
+		MockNetworkAdapterRestPut("UpdateNetworkV2/updateNetworkResponse_Success.xml", "49c86598-f766-46f8-84f8-8d1c1b10f9b4");
+		MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+		MockGetNetworkByIdWithDepth("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", "1");
+		MockPutNetworkIdWithDepth("UpdateNetworkV2/updateNetwork_updateContrail_AAIResponse_Success.xml", "49c86598-f766-46f8-84f8-8d1c1b10f9b4", "1");
+		MockGetNetworkVpnBinding("UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+		MockGetNetworkVpnBinding("UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", "c980a6ef-3b88-49f0-9751-dbad8608d0a6");
+		MockGetNetworkPolicy("UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml", "cee6d136-e378-4678-a024-2cd15f0ee0cg");
+		MockGetNetworkTableReference("UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", "refFQDN1");
+		MockGetNetworkTableReference("UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", "refFQDN2");
+		MockUpdateRequestDB("DBUpdateResponse.xml");
+		//MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml", "v8");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariablesVID1();
+		//WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstance", variables);
+		executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstance", variables);
+		System.out.println("----------------------------------------------------------");
+		System.out.println("- got workflow response -");
+		System.out.println("----------------------------------------------------------");
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("true", getVariable(processEngineRule, "UpdateNetworkInstance", "UPDNI_Success"));
+	    Assert.assertNotNull("UPDNI_CompleteMsoProcessRequest - ", getVariable(processEngineRule, "UpdateNetworkInstance", "UPDNI_CompleteMsoProcessRequest"));
+
+		String workflowResp = BPMNUtil.getVariable(processEngineRule, "UpdateNetworkInstance", "WorkflowResponse");
+		Assert.assertNotNull(workflowResp);
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("     Success1 - UpdateNetworkInstance flow Completed      ");
+		System.out.println("----------------------------------------------------------");
+
+	}
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/UpdateNetworkInstance.bpmn",
+			                 "subprocess/DoUpdateNetworkInstance.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/GenericGetService.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstance_SuccessVIPER1() throws Exception {
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("            Success2 - UpdateNetworkInstance flow Started!      ");
+		System.out.println("----------------------------------------------------------");
+
+		// setup simulators
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>changeassign");
+		MockNetworkAdapterRestPut("UpdateNetworkV2/updateNetworkResponse_Success.xml", "49c86598-f766-46f8-84f8-8d1c1b10f9b4");
+		MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+		MockGetNetworkByIdWithDepth("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", "1");
+		MockPutNetworkIdWithDepth("UpdateNetworkV2/updateNetwork_updateContrail_AAIResponse_Success.xml", "49c86598-f766-46f8-84f8-8d1c1b10f9b4", "1");
+		MockGetNetworkVpnBinding("UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+		MockGetNetworkVpnBinding("UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", "c980a6ef-3b88-49f0-9751-dbad8608d0a6");
+		MockGetNetworkPolicy("UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml", "cee6d136-e378-4678-a024-2cd15f0ee0cg");
+		MockGetNetworkTableReference("UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", "refFQDN1");
+		MockGetNetworkTableReference("UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", "refFQDN2");
+		MockUpdateRequestDB("DBUpdateResponse.xml");
+		//MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml", "v8");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariablesVIPER1();
+		//WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstance", variables);
+		executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstance", variables);
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("true", getVariable(processEngineRule, "UpdateNetworkInstance", "UPDNI_Success"));
+	    Assert.assertNotNull("UPDNI_CompleteMsoProcessRequest - ", getVariable(processEngineRule, "UpdateNetworkInstance", "UPDNI_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:status-message>Network has been updated successfully.</aetgt:status-message>" + '\n'
+	    	  + "   <aetgt:mso-bpel-name>BPMN Network action: UPDATE</aetgt:mso-bpel-name>" + '\n'
+	    	  + "</aetgt:MsoCompletionRequest>";
+
+	    Assert.assertEquals(completeMsoProcessRequest, getVariable(processEngineRule, "UpdateNetworkInstance", "UPDNI_CompleteMsoProcessRequest"));
+
+		System.out.println("----------------------------------------------------------");
+		System.out.println("     Success2 - UpdateNetworkInstance flow Completed     ");
+		System.out.println("----------------------------------------------------------");
+
+	}
+
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/UpdateNetworkInstance.bpmn",
+            				 "subprocess/DoUpdateNetworkInstance.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/GenericGetService.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstance_MissingNetworkId() throws Exception {
+
+		System.out.println("--------------------------------------------------------------------");
+		System.out.println("     Missing networkId - UpdateNetworkInstance flow Started!   ");
+		System.out.println("--------------------------------------------------------------------");
+
+		// setup simulators
+		MockUpdateRequestDB("DBUpdateResponse.xml");
+		//MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml", "v8");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariablesMissingNetworkId();
+		//WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstance", variables);
+		executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstance", variables);
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "UpdateNetworkInstance", "UPDNI_Success"));
+	    Assert.assertNotNull("UPDNI_FalloutHandlerRequest - ", getVariable(processEngineRule, "UpdateNetworkInstance", "UPDNI_FalloutHandlerRequest"));
+
+	    String falloutHandlerActual = getVariable(processEngineRule, "UpdateNetworkInstance", "UPDNI_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>7000</aetgt:ErrorCode>" + "\n" +
+"						</aetgt:WorkflowException>" + "\n" +
+"					</aetgt:FalloutHandlerRequest>";
+
+		assertEquals("Response", falloutHandlerExpected, falloutHandlerActual);
+
+		System.out.println("------------------------------------------------------------------");
+		System.out.println("    Missing networkId - UpdateNetworkInstance flow Completed ");
+		System.out.println("------------------------------------------------------------------");
+
+	}
+
+
+	@Test
+	//@Ignore
+	@Deployment(resources = {"process/UpdateNetworkInstance.bpmn",
+		     				 "subprocess/DoUpdateNetworkInstance.bpmn",
+		     				 "subprocess/DoUpdateNetworkInstanceRollback.bpmn",
+			                 "subprocess/FalloutHandler.bpmn",
+	                         "subprocess/CompleteMsoProcess.bpmn",
+	                         "subprocess/GenericGetService.bpmn",
+	                         "subprocess/SDNCAdapterV1.bpmn"})
+
+	public void shouldInvokeServiceUpdateNetworkInstance_Network_SDNC_Rollback() throws Exception {
+
+		System.out.println("---------------------------------------------------------------");
+		System.out.println("    Network and SDNC Rollback - UpdateNetworkInstance flow Started!       ");
+		System.out.println("---------------------------------------------------------------");
+
+		// setup simulators
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>changeassign");
+		mockSDNCAdapterTopology("UpdateNetworkV2mock/sdncUpdateNetworkTopologySimResponse.xml", "SvcAction>rollback");
+		MockNetworkAdapterRestPut("UpdateNetworkV2/updateNetworkResponse_Success.xml", "49c86598-f766-46f8-84f8-8d1c1b10f9b4");
+		MockGetNetworkCloudRegion("CreateNetworkV2/cloudRegion25_AAIResponse_Success.xml", "RDM2WAGPLCP");
+		MockGetNetworkByIdWithDepth("49c86598-f766-46f8-84f8-8d1c1b10f9b4", "UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_Success.xml", "1");
+		MockGetNetworkVpnBinding("UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", "85f015d0-2e32-4c30-96d2-87a1a27f8017");
+		MockGetNetworkVpnBinding("UpdateNetworkV2/updateNetwork_queryVpnBinding_AAIResponse_Success.xml", "c980a6ef-3b88-49f0-9751-dbad8608d0a6");
+		MockGetNetworkPolicy("UpdateNetworkV2/updateNetwork_queryNetworkPolicy_AAIResponse_Success.xml", "cee6d136-e378-4678-a024-2cd15f0ee0cg");
+		MockGetNetworkTableReference("UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml", "refFQDN1");
+		MockGetNetworkTableReference("UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml", "refFQDN2");
+		MockUpdateRequestDB("DBUpdateResponse.xml");
+		//MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml", "v8");
+		MockNodeQueryServiceInstanceById("f70e927b-6087-4974-9ef8-c5e4d5847ca4", "UpdateNetworkV2/updateNetwork_queryInstance_Success.xml");
+
+		Map<String, String> variables = setupVariablesVID1();
+		//WorkflowResponse workflowResponse = executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstance", variables);
+		executeAsyncWorkflow(processEngineRule, "UpdateNetworkInstance", variables);
+		//waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+
+	    assertEquals("false", getVariable(processEngineRule, "UpdateNetworkInstance", "UPDNI_Success"));
+	    Assert.assertNotNull("UPDNI_FalloutHandlerRequest - ", getVariable(processEngineRule, "UpdateNetworkInstance", "UPDNI_FalloutHandlerRequest"));
+
+		System.out.println("---------------------------------------------------------------------");
+		System.out.println(" Network and SCNC Rollback - UpdateNetworkInstance flow Completed   ");
+		System.out.println("---------------------------------------------------------------------");
+
+	}
+
+	// *****************
+	// Utility Section
+	// *****************
+
+	String networkModelInfo =
+		       "  {\"modelUuid\": \"mod-inst-uuid-123\", " + '\n' +
+            "   \"modelName\": \"mod_inst_z_123\", " + '\n' +
+		       "   \"modelVersion\": \"1.0\", " + '\n' +
+		       "   \"modelCustomizationUuid\": \"mod-inst-uuid-123\", " + '\n' +
+		       "   \"modelInvariantUuid\": \"mod-invar-uuid-123\" " + '\n' +
+		       "  }";
+
+	String serviceModelInfo =
+		       "  {\"modelUuid\": \"36a3a8ea-49a6-4ac8-b06c-89a54544b9b6\", " + '\n' +
+            "   \"modelName\": \"HNGW Protected OAM\", " + '\n' +
+		       "   \"modelVersion\": \"1.0\", " + '\n' +
+		       "   \"modelInvariantUuid\": \"fcc85cb0-ad74-45d7-a5a1-17c8744fdb71\" " + '\n' +
+		       "  }";
+
+	// Success Scenario
+	private Map<String, String> setupVariablesVID1() {
+		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", "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 getCreateNetworkRequest1() {
+
+		String request =
+				"{ \"requestDetails\": { " + '\n' +
+				"      \"modelInfo\": { " + '\n' +
+				"         \"modelType\": \"modelType\", " + '\n' +
+				"         \"modelCustomizationId\": \"f21df226-8093-48c3-be7e-0408fcda0422\", " + '\n' +
+				"         \"modelName\": \"CONTRAIL_EXTERNAL\", " + '\n' +
+				"         \"modelVersion\": \"1.0\" " + '\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\": \"false\" ," + '\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;
+	}
+
+	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;
+
+	}
+
+	// Success Scenario
+	private Map<String, String> setupVariablesVIPER1() {
+		Map<String, String> variables = new HashMap<String, String>();
+		variables.put("testMessageId", "88f65519-9a38-4c4b-8445-9eb4a5a5af56");
+		variables.put("msoRequestId", "testRequestId");
+		variables.put("requestId", "testRequestId");
+		variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+		variables.put("networkId", "49c86598-f766-46f8-84f8-8d1c1b10f9b4");
+		variables.put("networkName", "MNS-25180-L-01-dmz_direct_net_1");
+		variables.put("lcpCloudRegionId", "RDM2WAGPLCP");
+		variables.put("tenantId", "88a6ca3ee0394ade9403f075db23167e");
+		variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
+		variables.put("disableRollback", "false"); // macro
+		variables.put("failIfExists", "false");
+		//variables.put("sdncVersion", "1702");
+		variables.put("sdncVersion", "1707");
+		variables.put("subscriptionServiceType", "MSO-dev-service-type");
+		variables.put("globalSubscriberId", "globalId_45678905678");
+		variables.put("networkModelInfo", networkModelInfo);
+		variables.put("serviceModelInfo", serviceModelInfo);
+		return variables;
+
+	}
+
+	// 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;
+
+	}
+
+	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/UpdateVfModuleInfraV2Test.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateVfModuleInfraV2Test.java
new file mode 100644
index 0000000..3997d0a
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateVfModuleInfraV2Test.java
@@ -0,0 +1,119 @@
+/*- 
+ * ============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.Ignore;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.WorkflowTest;
+import org.openecomp.mso.bpmn.common.WorkflowTest.CallbackSet;
+import org.openecomp.mso.bpmn.common.WorkflowTest.TestAsyncResponse;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit test cases for UpdateVfModuleV2.bpmn
+ */
+public class UpdateVfModuleInfraV2Test extends WorkflowTest {
+	
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public UpdateVfModuleInfraV2Test() 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
+	@Ignore // IGNORED FOR 1710 MERGE TO ONAP
+	@Deployment(resources = {
+		"process/UpdateVfModuleInfraV2.bpmn",
+		"subprocess/DoUpdateVfModule.bpmn",
+		"subprocess/CompleteMsoProcess.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();	
+		Map<String, Object> variables = setupVariablesSunnyDayVID();
+		
+		String updateVfModuleRequest =
+				FileUtil.readResourceFile("__files/InfrastructureFlows/UpdateVfModule_VID_request.json");
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("UpdateVfModuleInfraV2",
+				"v1", businessKey, updateVfModuleRequest, variables);
+			
+		WorkflowResponse response = receiveResponse(businessKey, asyncResponse, 10000);
+			
+		//String responseBody = response.getResponse();
+		//System.out.println("Workflow (Synch) Response:\n" + responseBody);
+		
+		//logEnd();
+	}
+	
+	// Active Scenario
+	private Map<String, Object> setupVariablesSunnyDayVID() {
+				Map<String, Object> variables = new HashMap<String, Object>();
+				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", "");	
+				variables.put("moduleUuid", "fe6985cd-ea33-3346-ac12-ab121484a3fe");
+				return variables;
+				
+	}
+	
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateVnfInfraTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateVnfInfraTest.java
new file mode 100644
index 0000000..496dab4
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/UpdateVnfInfraTest.java
@@ -0,0 +1,174 @@
+/*- 
+ * ============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.MockAAIVfModule;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDBUpdateVfModule;
+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.MockGetServiceInstance;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetPserverByVnfId;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfsByVnfId;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;
+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.StubResponseAAI.MockVNFAdapterRestVfModule;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockSetInMaintFlagByVnfId;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.MockGetServiceResourcesCatalogData;
+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 static org.openecomp.mso.bpmn.mock.StubResponsePolicy.MockPolicySkip;
+
+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 UpdateVnfInfra.bpmn
+ */
+public class UpdateVnfInfraTest extends WorkflowTest {
+	
+	private final CallbackSet callbacks = new CallbackSet();
+
+	public UpdateVnfInfraTest() throws IOException {
+		callbacks.put("changeassign", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyChangeAssignCallback.xml"));
+		callbacks.put("activate", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyActivateCallback.xml"));
+		callbacks.put("query", FileUtil.readResourceFile(
+				"__files/VfModularity/SDNCTopologyQueryCallback.xml"));		
+		callbacks.put("vnfUpdate", FileUtil.readResourceFile(
+				"__files/VfModularity/VNFAdapterRestUpdateCallback.xml"));
+	}
+	
+	/**
+	 * Sunny day scenario.
+	 * 
+	 * @throws Exception
+	 */
+	@Test	
+	@Ignore // IGNORED FOR 1710 MERGE TO ONAP
+	@Deployment(resources = {
+		"process/UpdateVnfInfra.bpmn",		
+		"subprocess/DoUpdateVfModule.bpmn",
+		"subprocess/DoUpdateVnfAndModules.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",
+		"subprocess/BuildingBlock/DecomposeService.bpmn",
+		"subprocess/BuildingBlock/RainyDayHandler.bpmn",
+		"subprocess/BuildingBlock/ManualHandling.bpmn"
+		
+		})
+	public void sunnyDay() throws Exception {
+				
+		logStart();
+		
+		MockNodeQueryServiceInstanceById("MIS%2F1604%2F0026%2FSW_INTERNET", "GenericFlows/getSIUrlByIdVipr.xml");
+		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
+		//MockGetGenericVnfById_404("testVnfId");
+		MockGetServiceResourcesCatalogData("995256d2-5a33-55df-13ab-12abad84e7ff", "1.0", "VIPR/getCatalogServiceResourcesDataForUpdateVnfInfra.json");
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+		MockPutGenericVnf(".*");
+		MockAAIVfModule();
+		MockPatchGenericVnf("skask");
+		MockPatchVfModuleId("skask", ".*");
+		mockSDNCAdapter("VfModularity/StandardSDNCSynchResponse.xml");	
+		mockVNFPut("skask", "/supercool", 202);
+		mockVNFPut("skask", "/lukewarm", 202);
+		MockVNFAdapterRestVfModule();
+		MockDBUpdateVfModule();	
+		MockGetPserverByVnfId("skask", "AAI/AAI_pserverByVnfId.json", 200);
+		MockGetGenericVnfsByVnfId("skask", "AAI/AAI_genericVnfsByVnfId.json", 200);
+		MockSetInMaintFlagByVnfId("skask", 200);
+		MockPolicySkip();
+		
+		mockSDNCAdapter("VfModularity/StandardSDNCSynchResponse.xml");
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		
+		String businessKey = UUID.randomUUID().toString();
+		String updaetVnfRequest =
+			FileUtil.readResourceFile("__files/InfrastructureFlows/UpdateVnf_VID_request.json");
+		
+		Map<String, Object> variables = setupVariablesSunnyDayVID();
+		
+		
+		TestAsyncResponse asyncResponse = invokeAsyncProcess("UpdateVnfInfra",
+			"v1", businessKey, updaetVnfRequest, 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");
+		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("isDebugLogEnabled", "true");				
+				variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");
+				variables.put("vnfId", "skask");
+				variables.put("vnfType", "vSAMP12");					
+				variables.put("serviceType", "MOG");	
+						
+				return variables;
+				
+			}
+	
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/AAI/AAI_genericVnfsByVnfId.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/AAI/AAI_genericVnfsByVnfId.json
new file mode 100644
index 0000000..c7361f8
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/AAI/AAI_genericVnfsByVnfId.json
@@ -0,0 +1,329 @@
+{
+  "vnf-id": "example-vnf-id-val-90603",
+  "vnf-name": "example-vnf-name-val-56838",
+  "vnf-name2": "example-vnf-name2-val-56319",
+  "vnf-type": "example-vnf-type-val-30533",
+  "service-id": "example-service-id-val-28290",
+  "regional-resource-zone": "example-regional-resource-zone-val-11059",
+  "prov-status": "example-prov-status-val-59777",
+  "operational-status": "example-operational-status-val-22513",
+  "in-maint": true,
+ 
+  "equipment-role": "example-equipment-role-val-23396",
+  "orchestration-status": "example-orchestration-status-val-59435",
+  "heat-stack-id": "example-heat-stack-id-val-96869",
+  "mso-catalog-key": "example-mso-catalog-key-val-30721",
+  "management-option": "example-management-option-val-61927",
+  "ipv4-oam-address": "example-ipv4-oam-address-val-23494",
+  "ipv4-loopback0-address": "example-ipv4-loopback0-address-val-87072",
+  "nm-lan-v6-address": "example-nm-lan-v6-address-val-91063",
+  "management-v6-address": "example-management-v6-address-val-80466",
+  "vcpu": 45837298,
+  "vcpu-units": "example-vcpu-units-val-86249",
+  "vmemory": 57288956,
+  "vmemory-units": "example-vmemory-units-val-13291",
+  "vdisk": 16937143,
+  "vdisk-units": "example-vdisk-units-val-73197",
+  
+  "is-closed-loop-disabled": true,
+  "summary-status": "example-summary-status-val-86438",
+  "encrypted-access-flag": true,
+  
+  
+  
+  
+  "model-invariant-id": "example-model-invariant-id-val-14704",
+  "model-version-id": "example-model-version-id-val-47847",
+  "model-customization-id": "example-model-customization-id-val-52688",
+  "widget-model-id": "example-widget-model-id-val-20939",
+  "widget-model-version": "example-widget-model-version-val-72210",
+  "as-number": "example-as-number-val-68358",
+  "regional-resource-subzone": "example-regional-resource-subzone-val-34391",
+  "nf-type": "example-nf-type-val-54866",
+  "nf-function": "example-nf-function-val-24790",
+  "nf-role": "example-nf-role-val-4780",
+  "nf-naming-code": "example-nf-naming-code-val-25118",
+  "selflink": "example-selflink-val-68404",
+  
+  
+ 
+ 
+  "l-interfaces": {
+    "l-interface": [
+      {
+        "interface-name": "example-interface-name-val-50593",
+        "interface-role": "example-interface-role-val-23375",
+        "v6-wan-link-ip": "example-v6-wan-link-ip-val-5921",
+        "selflink": "example-selflink-val-75663",
+        "interface-id": "example-interface-id-val-37465",
+        "macaddr": "example-macaddr-val-62657",
+        "network-name": "example-network-name-val-7252",
+        "management-option": "example-management-option-val-32963",
+        "interface-description": "example-interface-description-val-89453",
+        "is-port-mirrored": true,
+        "vlans": {
+          "vlan": [
+            {
+              "vlan-interface": "example-vlan-interface-val-16684",
+              "vlan-id-inner": 8602916,
+              "vlan-id-outer": 97348542,
+              "speed-value": "example-speed-value-val-90330",
+              "speed-units": "example-speed-units-val-15849",
+              "vlan-description": "example-vlan-description-val-46942",
+              "backdoor-connection": "example-backdoor-connection-val-78445",
+              
+              "orchestration-status": "example-orchestration-status-val-44994",
+              
+             
+             
+              "l3-interface-ipv4-address-list": [
+                {
+                  "l3-interface-ipv4-address": "example-l3-interface-ipv4-address-val-90277",
+                  "l3-interface-ipv4-prefix-length": 3364150,
+                  "vlan-id-inner": 44021171,
+                  "vlan-id-outer": 55708677,
+                  "is-floating": true,
+                  "neutron-network-id": "example-neutron-network-id-val-43267",
+                  "neutron-subnet-id": "example-neutron-subnet-id-val-62870"
+                }
+              ],
+              "l3-interface-ipv6-address-list": [
+                {
+                  "l3-interface-ipv6-address": "example-l3-interface-ipv6-address-val-45323",
+                  "l3-interface-ipv6-prefix-length": 56688923,
+                  "vlan-id-inner": 5703071,
+                  "vlan-id-outer": 86682265,
+                  "is-floating": true,
+                  "neutron-network-id": "example-neutron-network-id-val-28366",
+                  "neutron-subnet-id": "example-neutron-subnet-id-val-53034"
+                }
+              ]
+            }
+          ]
+        },
+        "sriov-vfs": {
+          "sriov-vf": [
+            {
+              "pci-id": "example-pci-id-val-4720",
+              "vf-vlan-filter": "example-vf-vlan-filter-val-42594",
+              "vf-mac-filter": "example-vf-mac-filter-val-13375",
+              "vf-vlan-strip": true,
+              "vf-vlan-anti-spoof-check": true,
+              "vf-mac-anti-spoof-check": true,
+              "vf-mirrors": "example-vf-mirrors-val-6057",
+              "vf-broadcast-allow": true,
+              "vf-unknown-multicast-allow": true,
+              "vf-unknown-unicast-allow": true,
+              "vf-insert-stag": true,
+              "vf-link-status": "example-vf-link-status-val-81448",
+              "neutron-network-id": "example-neutron-network-id-val-9504"
+            }
+          ]
+        },
+        "l-interfaces": {
+          "l-interface": [
+            {
+              "interface-name": "example-interface-name-val-16738",
+              "interface-role": "example-interface-role-val-13943",
+              "v6-wan-link-ip": "example-v6-wan-link-ip-val-63173",
+              "selflink": "example-selflink-val-43085",
+              "interface-id": "example-interface-id-val-51379",
+              "macaddr": "example-macaddr-val-16195",
+              "network-name": "example-network-name-val-45683",
+              "management-option": "example-management-option-val-78983",
+              "interface-description": "example-interface-description-val-34414",
+              "is-port-mirrored": true
+            }
+          ]
+        },
+        "l3-interface-ipv4-address-list": [
+          {
+            "l3-interface-ipv4-address": "example-l3-interface-ipv4-address-val-99078",
+            "l3-interface-ipv4-prefix-length": 55755841,
+            "vlan-id-inner": 81525473,
+            "vlan-id-outer": 90908072,
+            "is-floating": true,
+            "neutron-network-id": "example-neutron-network-id-val-47919",
+            "neutron-subnet-id": "example-neutron-subnet-id-val-84236"
+          }
+        ],
+        "l3-interface-ipv6-address-list": [
+          {
+            "l3-interface-ipv6-address": "example-l3-interface-ipv6-address-val-21939",
+            "l3-interface-ipv6-prefix-length": 50057584,
+            "vlan-id-inner": 75774660,
+            "vlan-id-outer": 4421090,
+            "is-floating": true,
+            "neutron-network-id": "example-neutron-network-id-val-46377",
+            "neutron-subnet-id": "example-neutron-subnet-id-val-16585"
+          }
+        ]
+      }
+    ]
+  },
+  "lag-interfaces": {
+    "lag-interface": [
+      {
+        "interface-name": "example-interface-name-val-39234",
+        "interface-description": "example-interface-description-val-1037",
+        "speed-value": "example-speed-value-val-1929",
+        "speed-units": "example-speed-units-val-74937",
+        "interface-id": "example-interface-id-val-91265",
+        "interface-role": "example-interface-role-val-19613",
+       
+       
+        "l-interfaces": {
+          "l-interface": [
+            {
+              "interface-name": "example-interface-name-val-10722",
+              "interface-role": "example-interface-role-val-95194",
+              "v6-wan-link-ip": "example-v6-wan-link-ip-val-24328",
+              "selflink": "example-selflink-val-24987",
+              "interface-id": "example-interface-id-val-75726",
+              "macaddr": "example-macaddr-val-36940",
+              "network-name": "example-network-name-val-65359",
+              "management-option": "example-management-option-val-49521",
+              "interface-description": "example-interface-description-val-70528",
+              "is-port-mirrored": true,
+              "vlans": {
+                "vlan": [
+                  {
+                    "vlan-interface": "example-vlan-interface-val-70827",
+                    "vlan-id-inner": 55659612,
+                    "vlan-id-outer": 90335612,
+                    "speed-value": "example-speed-value-val-54761",
+                    "speed-units": "example-speed-units-val-91398",
+                    "vlan-description": "example-vlan-description-val-17018",
+                    "backdoor-connection": "example-backdoor-connection-val-4021",
+                    
+                    "orchestration-status": "example-orchestration-status-val-18315",
+                    
+                  
+                    "l3-interface-ipv4-address-list": [
+                      {
+                        "l3-interface-ipv4-address": "example-l3-interface-ipv4-address-val-59336",
+                        "l3-interface-ipv4-prefix-length": 57636053,
+                        "vlan-id-inner": 34068397,
+                        "vlan-id-outer": 48570286,
+                        "is-floating": true,
+                        "neutron-network-id": "example-neutron-network-id-val-69862",
+                        "neutron-subnet-id": "example-neutron-subnet-id-val-75795"
+                      }
+                    ],
+                    "l3-interface-ipv6-address-list": [
+                      {
+                        "l3-interface-ipv6-address": "example-l3-interface-ipv6-address-val-15038",
+                        "l3-interface-ipv6-prefix-length": 42694503,
+                        "vlan-id-inner": 15929806,
+                        "vlan-id-outer": 87413856,
+                        "is-floating": true,
+                        "neutron-network-id": "example-neutron-network-id-val-52519",
+                        "neutron-subnet-id": "example-neutron-subnet-id-val-24471"
+                      }
+                    ]
+                  }
+                ]
+              },
+              "sriov-vfs": {
+                "sriov-vf": [
+                  {
+                    "pci-id": "example-pci-id-val-44669",
+                    "vf-vlan-filter": "example-vf-vlan-filter-val-53436",
+                    "vf-mac-filter": "example-vf-mac-filter-val-71902",
+                    "vf-vlan-strip": true,
+                    "vf-vlan-anti-spoof-check": true,
+                    "vf-mac-anti-spoof-check": true,
+                    "vf-mirrors": "example-vf-mirrors-val-54963",
+                    "vf-broadcast-allow": true,
+                    "vf-unknown-multicast-allow": true,
+                    "vf-unknown-unicast-allow": true,
+                    "vf-insert-stag": true,
+                    "vf-link-status": "example-vf-link-status-val-1546",
+                    "neutron-network-id": "example-neutron-network-id-val-92159"
+                  }
+                ]
+              },
+              "l-interfaces": {
+                "l-interface": [
+                  {
+                    "interface-name": "example-interface-name-val-9327",
+                    "interface-role": "example-interface-role-val-21859",
+                    "v6-wan-link-ip": "example-v6-wan-link-ip-val-21445",
+                    "selflink": "example-selflink-val-6085",
+                    "interface-id": "example-interface-id-val-39854",
+                    "macaddr": "example-macaddr-val-14433",
+                    "network-name": "example-network-name-val-3722",
+                    "management-option": "example-management-option-val-64739",
+                    "interface-description": "example-interface-description-val-5814",
+                    "is-port-mirrored": true
+                    
+                   
+                    
+                  }
+                ]
+              },
+              "l3-interface-ipv4-address-list": [
+                {
+                  "l3-interface-ipv4-address": "example-l3-interface-ipv4-address-val-64531",
+                  "l3-interface-ipv4-prefix-length": 66545882,
+                  "vlan-id-inner": 12194134,
+                  "vlan-id-outer": 29589286,
+                  "is-floating": true,
+                  "neutron-network-id": "example-neutron-network-id-val-91108",
+                  "neutron-subnet-id": "example-neutron-subnet-id-val-56984"
+                }
+              ],
+              "l3-interface-ipv6-address-list": [
+                {
+                  "l3-interface-ipv6-address": "example-l3-interface-ipv6-address-val-37408",
+                  "l3-interface-ipv6-prefix-length": 5116459,
+                  "vlan-id-inner": 39229896,
+                  "vlan-id-outer": 15091934,
+                  "is-floating": true,
+                  "neutron-network-id": "example-neutron-network-id-val-87700",
+                  "neutron-subnet-id": "example-neutron-subnet-id-val-37352"
+                }
+              ]
+            }
+          ]
+        }
+      }
+    ]
+  },
+  "vf-modules": {
+    "vf-module": [
+      {
+        "vf-module-id": "example-vf-module-id-val-56249",
+        "vf-module-name": "example-vf-module-name-val-18987",
+        "heat-stack-id": "example-heat-stack-id-val-80110",
+        "orchestration-status": "example-orchestration-status-val-8226",
+        "is-base-vf-module": true,
+        "model-invariant-id": "example-model-invariant-id-val-5071",
+        "model-version-id": "example-model-version-id-val-80793",
+        "model-customization-id": "example-model-customization-id-val-83277",
+        "widget-model-id": "example-widget-model-id-val-99814",
+        "widget-model-version": "example-widget-model-version-val-22799",
+        "contrail-service-instance-fqdn": "example-contrail-service-instance-fqdn-val-52133",
+        "module-index": 1933,
+        "selflink": "example-selflink-val-69992"
+      }
+    ]
+  },
+  "licenses": {
+    "license": [
+      {
+        "group-uuid": "example-group-uuid-val-73012",
+        "resource-uuid": "example-resource-uuid-val-80045"
+      }
+    ]
+  },
+  "entitlements": {
+    "entitlement": [
+      {
+        "group-uuid": "example-group-uuid-val-14874",
+        "resource-uuid": "example-resource-uuid-val-49146"
+      }
+    ]
+  }
+
+}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/AAI/AAI_pserverByVnfId.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/AAI/AAI_pserverByVnfId.json
new file mode 100644
index 0000000..1059d8c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/AAI/AAI_pserverByVnfId.json
@@ -0,0 +1,72 @@
+    {
+       
+       "result":  [{   
+            
+        "hostname": "8862-PserverHOSTNAME-LB1113",
+        "equipType": "JUNIPER UCPE", 
+        "equipVendor": "JUNIPER", 
+        "equipModel": "QFX51010-PNF",        
+        "ipv4OamAddress": "190.8.5.199",
+        "serialNumber": "VX986001PNF",
+        "pserverId": "5715CE4F-8600-58E103FE60C79",
+        "internetTopology": "WAN",
+        "inMaint": false,
+        "resourceVersion": "1500495668780",
+        "pserverName2": "test81600",
+        "relationshipList": {
+          "relationship": [
+            {
+              "relatedTo": "vserver",
+              "relatedLink": "/aai/v10/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant/8862-tenantl-LB1113/vservers/vserver/8862-Lvserver-LB1113",
+              "relationshipData": [
+                {
+                  "relationshipKey": "cloud-region.cloud-owner",
+                  "relationshipValue": "att-aic"
+                },
+                {
+                  "relationshipKey": "cloud-region.cloud-region-id",
+                  "relationshipValue": "AAIAIC25"
+                },
+                {
+                  "relationshipKey": "tenant.tenant-id",
+                  "relationshipValue": "8862-tenantl-LB1113"
+                },
+                {
+                  "relationshipKey": "vserver.vserver-id",
+                  "relationshipValue": "8862-Lvserver-LB1113"
+                }
+              ],
+              "relatedToProperty": [
+                {
+                  "propertyKey": "vserver.vserver-name",
+                  "propertyValue": "hjZAYKyl5LO"
+                }
+              ]
+            }
+          ]
+        },
+        "pinterfaces": {
+          "pinterface": [
+            {
+              "interfaceName": "ge-0/5/8",
+              "speedValue": "1",
+              "speedUnits": "GBPS",
+              "resourceVersion": "1500495668784",
+              "inMaint": false
+            },
+            {
+              "interfaceName": "ge-1/5/8",
+              "speedValue": "1",
+              "speedUnits": "GBPS",
+              "resourceVersion": "1500495668788",
+              "inMaint": false
+            }
+          ]
+        }
+      }
+      
+     
+   
+   ]
+}    
+ 
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2mock/sdncCreateNetworkTopologyRsrcAssignResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2mock/sdncCreateNetworkTopologyRsrcAssignResponse.xml
new file mode 100644
index 0000000..e6af141
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2mock/sdncCreateNetworkTopologyRsrcAssignResponse.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+	xmlns:v1="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+	<soapenv:Header />
+	<soapenv:Body>
+	<v1:SDNCAdapterCallback>		
+      <SDNCAdapterCallbackRequest xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+        <CallbackHeader>
+         <RequestId>79ec9006-3695-4fcc-93a8-be6f9e248beb</RequestId>
+         <ResponseCode>200</ResponseCode>
+         <ResponseMessage>OK</ResponseMessage>
+       </CallbackHeader>
+       <RequestData xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">&lt;output xmlns="com:att:sdnctl:generic-resource"&gt;&lt;response-message&gt;&lt;/response-message&gt;&lt;svc-request-id&gt;79ec9006-3695-4fcc-93a8-be6f9e248beb&lt;/svc-request-id&gt;&lt;service-response-information&gt;&lt;instance-id&gt;f805ec2b-b4d8-473e-8325-67f110139e5d&lt;/instance-id&gt;&lt;/service-response-information&gt;&lt;response-code&gt;200&lt;/response-code&gt;&lt;network-response-information&gt;&lt;instance-id&gt;49c86598-f766-46f8-84f8-8d1c1b10f9b4&lt;/instance-id&gt;&lt;object-path&gt;restconf/config/GENERIC-RESOURCE-API:services/service/f805ec2b-b4d8-473e-8325-67f110139e5d/service-data/networks/network/f7e4db56-aab5-4065-8e65-cec1cd1de24f&lt;/object-path&gt;&lt;/network-response-information&gt;&lt;ack-final-indicator&gt;Y&lt;/ack-final-indicator&gt;&lt;/output&gt;</RequestData>
+      </SDNCAdapterCallbackRequest>	
+	</v1:SDNCAdapterCallback>	      
+	</soapenv:Body>
+</soapenv:Envelope>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2mock/sdncCreateNetworkTopologySimResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2mock/sdncCreateNetworkTopologySimResponse.xml
new file mode 100644
index 0000000..40bb93b
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateNetworkV2mock/sdncCreateNetworkTopologySimResponse.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+	xmlns:v1="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+	<soapenv:Header />
+	<soapenv:Body>
+		<v1:SDNCAdapterCallback>	
+			<SDNCAdapterCallbackRequest xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+			 <CallbackHeader>
+			   <RequestId>testRequestId</RequestId>
+			   <ResponseCode>200</ResponseCode>
+			   <ResponseMessage>OK</ResponseMessage> 
+			 </CallbackHeader>
+			 <RequestData xmlns:xs="http://www.w3.org/2001/XMLSchema" 
+			           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+			           xsi:type="xs:string">&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;output xmlns="com:att:sdnctl:vnf"&gt;&lt;svc-request-id&gt;19174929-3809-49ca-89eb-17f84a035389&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;HSL_direct_net_2&lt;/service-instance-id&gt;&lt;subscriber-name&gt;notsurewecare&lt;/subscriber-name&gt;&lt;/service-information&gt;&lt;/output&gt;</RequestData>
+			</SDNCAdapterCallbackRequest>
+		</v1:SDNCAdapterCallback>			
+	</soapenv:Body>
+</soapenv:Envelope>
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
index 91048ec..5a7ef5e 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request.json
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/createVfModuleVolume_VID_request.json
@@ -2,11 +2,11 @@
 	"requestDetails": {
 		"modelInfo": {
 			"modelType": "volumeGroup",
-			"modelId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+			"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 			"modelName": "vSAMP12::base::module-0",
 			"modelVersion": "1",
-			"modelCustomizationId": "ee6478e5-ea33-3346-ac12-ab121484a3fe"
+			"modelCustomizationUuid": "ee6478e5-ea33-3346-ac12-ab121484a3fe"
 		},
 		"cloudConfiguration": {
 			"lcpCloudRegionId": "mdt1",
@@ -23,8 +23,8 @@
 					"instanceId": "{service-instance-id}",
 					"modelInfo": {
 						"modelType": "service",
-						"modelId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelInvariantUuid": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+						"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "Test",
 						"modelVersion": "2.0"
 					}
@@ -34,11 +34,11 @@
 					"instanceId": "{vnf-instance-id}",
 					"modelInfo": {
 						"modelType": "vnf",
-						"modelId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelInvariantUuid": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+						"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "vSAMP12",
 						"modelVersion": "1",
-						"modelCustomizationName": "vSAMP12"
+						"modelInstanceName": "vSAMP12"
 					}
 				}
 			}
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
index 72e4183..de99a6d 100644
--- 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
@@ -3,7 +3,7 @@
 		"modelInfo": {
 			"modelType": "volumeGroup",
 			"modelId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 			"modelName": "vSAMP12::base::module-0",
 			"modelVersion": "1"
 		},
@@ -23,7 +23,7 @@
 					"modelInfo": {
 						"modelType": "service",
 						"modelId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "{parent service model name}",
 						"modelVersion": "1"
 					}
@@ -34,7 +34,7 @@
 					"modelInfo": {
 						"modelType": "vnf",
 						"modelId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "Test/vSAMP12",
 						"modelVersion": "1"
 					}
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
index cb20a41..8d9efb3 100644
--- 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
@@ -29,6 +29,7 @@
 		 <heat-stack-id/>
 		 <vnf-type>simple_cinder_master</vnf-type>
 		 <orchestration-status>Pending</orchestration-status>
+		 <vf-module-model-customization-id>ee6478e5-ea33-3346-ac12-ab121484a3fe</vf-module-model-customization-id>
 		 <resource-version>1460134360</resource-version>
 		 <relationship-list>
 			<relationship>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_HasVfModRelationship.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_HasVfModRelationship.xml
new file mode 100644
index 0000000..8d9c5c0
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_HasVfModRelationship.xml
@@ -0,0 +1,62 @@
+<volume-group xmlns="http://com.att.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.att.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.att.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.att.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-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>vf-module.vf-module-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/CreateVfModule_VID_request.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModule_VID_request.json
index 1b56dbd..d1e5ee1 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModule_VID_request.json
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModule_VID_request.json
@@ -2,8 +2,8 @@
 "requestDetails": {
 "modelInfo": {
 "modelType": "vfModule",
-"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 "modelName": "STMTN5MMSC21-MMSC::model-1-0",
 "modelVersion": "1",
 "modelCustomizationUuid": "ee6478e5-ea33-3346-ac12-ab121484a3fe"
@@ -28,8 +28,8 @@
 "instanceName": "MSOTESTVOL103a-vSAMP12_base_module-0_vol",
 "modelInfo": {
 "modelType": "volumeGroup",
-"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 "modelName": "vSAMP12..base..module-0",
 "modelVersion": "1"
 }
@@ -40,8 +40,8 @@
 "instanceId": "123456",
 "modelInfo": {
 "modelType": "service",
-"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 "modelName": "SERVICE_MODEL_NAME",
 "modelVersion": "1.0"
 }
@@ -53,11 +53,11 @@
 "instanceName": "skask-test",
 "modelInfo": {
 "modelType": "vnf",
-"modelInvariantId": "skask",
-"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "skask",
+"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 "modelName": "vSAMP12",
 "modelVersion": "1.0",
-"modelCustomizationName": "vSAMP12 1"
+"modelInstanceName": "vSAMP12 1"
 }
 }
 }
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModule_VID_request_noPreloads.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModule_VID_request_noPreloads.json
index f8cac48..55dc313 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModule_VID_request_noPreloads.json
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/CreateVfModule_VID_request_noPreloads.json
@@ -2,8 +2,8 @@
 "requestDetails": {
 "modelInfo": {
 "modelType": "vfModule",
-"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 "modelName": "STMTN5MMSC21-MMSC::model-1-0",
 "modelVersion": "1",
 "modelCustomizationUuid": "ee6478e5-ea33-3346-ac12-ab121484a3fe"
@@ -28,8 +28,8 @@
 "instanceName": "MSOTESTVOL103a-vSAMP12_base_module-0_vol",
 "modelInfo": {
 "modelType": "volumeGroup",
-"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 "modelName": "vSAMP12..base..module-0",
 "modelVersion": "1"
 }
@@ -40,8 +40,8 @@
 "instanceId": "123456",
 "modelInfo": {
 "modelType": "service",
-"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 "modelName": "SERVICE_MODEL_NAME",
 "modelVersion": "1.0"
 }
@@ -53,11 +53,11 @@
 "instanceName": "skask-test",
 "modelInfo": {
 "modelType": "vnf",
-"modelInvariantId": "skask",
-"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "skask",
+"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 "modelName": "vSAMP12",
 "modelVersion": "1.0",
-"modelCustomizationName": "vSAMP12 1"
+"modelInstanceName": "vSAMP12 1"
 }
 }
 }
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DBUpdateResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DBUpdateResponse.xml
new file mode 100644
index 0000000..40e2344
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DBUpdateResponse.xml
@@ -0,0 +1,4 @@
+
+
+<ns2:updateRequestResponse xmlns:ns2="http://org.openecomp/requestsdb"
+                           xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"/>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2mock/sdncDeleteNetworkTopologySimResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2mock/sdncDeleteNetworkTopologySimResponse.xml
new file mode 100644
index 0000000..8ec4f52
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2mock/sdncDeleteNetworkTopologySimResponse.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+	xmlns:v1="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+	<soapenv:Header />
+	<soapenv:Body>
+		<v1:SDNCAdapterCallback>	
+			<SDNCAdapterCallbackRequest xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+			 <CallbackHeader>
+			   <RequestId>19174929-3809-49ca-89eb-17f84a035389</RequestId>
+			   <ResponseCode>200</ResponseCode>
+			   <ResponseMessage>OK</ResponseMessage> 
+			 </CallbackHeader>
+			 <RequestData xmlns:xs="http://www.w3.org/2001/XMLSchema" 
+			           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+			           xsi:type="xs:string">&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;output xmlns="com:att:sdnctl:vnf"&gt;&lt;svc-request-id&gt;19174929-3809-49ca-89eb-17f84a035389&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;bdc5efe8-404a-409b-85f6-0dcc9eebae30&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;HSL_direct_net_2&lt;/service-instance-id&gt;&lt;subscriber-name&gt;notsurewecare&lt;/subscriber-name&gt;&lt;/service-information&gt;&lt;/output&gt;</RequestData>
+			</SDNCAdapterCallbackRequest>
+		</v1:SDNCAdapterCallback>			
+	</soapenv:Body>
+</soapenv:Envelope>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2mock/sdncDeleteNetworkTopologySimResponse_noExtraTag.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2mock/sdncDeleteNetworkTopologySimResponse_noExtraTag.xml
new file mode 100644
index 0000000..f180e61
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteNetworkV2mock/sdncDeleteNetworkTopologySimResponse_noExtraTag.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+	xmlns:v1="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+	<soapenv:Header />
+	<soapenv:Body>
+			<SDNCAdapterCallbackRequest xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+			 <CallbackHeader>
+			   <RequestId>19174929-3809-49ca-89eb-17f84a035389</RequestId>
+			   <ResponseCode>200</ResponseCode>
+			   <ResponseMessage>OK</ResponseMessage> 
+			 </CallbackHeader>
+			 <RequestData xmlns:xs="http://www.w3.org/2001/XMLSchema" 
+			           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+			           xsi:type="xs:string">&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;output xmlns="com:att:sdnctl:vnf"&gt;&lt;svc-request-id&gt;19174929-3809-49ca-89eb-17f84a035389&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;bdc5efe8-404a-409b-85f6-0dcc9eebae30&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;HSL_direct_net_2&lt;/service-instance-id&gt;&lt;subscriber-name&gt;notsurewecare&lt;/subscriber-name&gt;&lt;/service-information&gt;&lt;/output&gt;</RequestData>
+			</SDNCAdapterCallbackRequest>
+	</soapenv:Body>
+</soapenv:Envelope>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteVfModuleCallbackResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteVfModuleCallbackResponse.xml
new file mode 100644
index 0000000..74a3beb
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DeleteVfModuleCallbackResponse.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<deleteVfModuleResponse>
+    <messageId>86651f79-057e-4245-8f5f-174db3cef553-1502888133261</messageId>
+    <vfModuleDeleted>true</vfModuleDeleted>
+    <vfModuleId>20928949-5230-495d-86a6-f3690b9b5d60</vfModuleId>
+    <vfModuleOutputs>
+        <entry>
+            <key>shared_private_network_id</key>
+            <value>bcd04543-b3d7-4c64-a910-1735b875ebb2</value>
+        </entry>
+        <entry>
+            <key>server1_port</key>
+            <value>d1605e82-50ba-4544-9f8d-a8a37b678046</value>
+        </entry>
+        <entry>
+            <key>vnf_id</key>
+            <value>7da56895-6be1-4bec-856b-525e0e573199</value>
+        </entry>
+    </vfModuleOutputs>
+    <vnfId>7da56895-6be1-4bec-856b-525e0e573199</vnfId>
+</deleteVfModuleResponse>
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
index 35ba121..c6cc1ca 100644
--- 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
@@ -2,7 +2,7 @@
 	"requestDetails": {
 		"modelInfo": {
 			"modelType": "volumeGroup",
-			"modelInvariantId": "0b01b8c2-8416-11e6-ae22-56b6b6499611",
+			"modelInvariantUuid": "0b01b8c2-8416-11e6-ae22-56b6b6499611",
 			"modelName": "vSAMP12::base::module-0",
 			"modelVersion": "1.0"
 		},
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
index 5ff965f..5a05061 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_VID_request.json
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModuleVolumeV1/createVfModuleVolume_VID_request.json
@@ -3,7 +3,7 @@
 		"modelInfo": {
 			"modelType": "volumeGroup",
 			"modelId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 			"modelName": "vSAMP12::base::module-0",
 			"modelVersion": "1"
 		},
@@ -23,7 +23,7 @@
 					"modelInfo": {
 						"modelType": "service",
 						"modelId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "{parent service model name}",
 						"modelVersion": "1"
 					}
@@ -34,7 +34,7 @@
 					"modelInfo": {
 						"modelType": "vnf",
 						"modelId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "Test/vSAMP12",
 						"modelVersion": "1"
 					}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModule_getVnfResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModule_getVnfResponse.xml
new file mode 100644
index 0000000..021a8a7
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/DoCreateVfModule_getVnfResponse.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/GenericFlows/getSINoRelations.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getSINoRelations.xml
new file mode 100644
index 0000000..adb7aab
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getSINoRelations.xml
@@ -0,0 +1,6 @@
+<service-instance>
+             <service-instance-id>MIS/1604/0026/SW_INTERNET</service-instance-id>
+             <resource-version>123456789</resource-version>
+             <relationship-list/> 
+         	<metadata/> 
+</service-instance>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getSIUrlByIdVipr.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getSIUrlByIdVipr.xml
new file mode 100644
index 0000000..80b0359
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/GenericFlows/getSIUrlByIdVipr.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<search-results xmlns="http://org.openecomp.aai.inventory/v8">
+   <result-data>
+      <resource-type>service-instance</resource-type>
+      <resource-link>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/aa8428ac-7dd2-441f-aa3e-e175802574fb</resource-link>
+   </result-data>
+</search-results>
\ 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
index 2b9c287..3595c25 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/CreateVnfInfraRequest.json
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/CreateVnfInfraRequest.json
@@ -2,11 +2,12 @@
   "requestDetails": {
       "modelInfo": {
         "modelType": "vnf",
-         "modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
-         "modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+         "modelInvariantUuid": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+         "modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
          "modelName": "vSAMP12",
          "modelVersion": "1.0",
-         "modelCustomizationName": "vSAMP12 1"
+         "modelInstanceName": "vSAMP12 1",
+         "modelCustomizationUuid": "customizationId123"
       },
       "cloudConfiguration": {
           "lcpCloudRegionId": "mdt1",
@@ -24,8 +25,8 @@
                "instanceId": "{serviceInstanceId}",
                "modelInfo": {
                   "modelType": "service",
-                  "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-                  "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+                  "modelInvariantUuid": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+                  "modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
                   "modelName": "{parent service model name}",
                   "modelVersion": "1.0"
                }
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/DeleteVnfInfraRequestCascadeDelete.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/DeleteVnfInfraRequestCascadeDelete.json
index f90b967..e8d9fc2 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/DeleteVnfInfraRequestCascadeDelete.json
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/DeleteVnfInfraRequestCascadeDelete.json
@@ -2,11 +2,11 @@
   "requestDetails": {
       "modelInfo": {
         "modelType": "vnf",
-         "modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
-         "modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+         "modelInvariantUuid": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+         "modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
          "modelName": "vSAMP12",
          "modelVersion": "1.0",
-         "modelCustomizationName": "vSAMP12 1"
+         "modelInstanceName": "vSAMP12 1"
       },
       "cloudConfiguration": {
           "lcpCloudRegionId": "mdt1",
@@ -24,8 +24,8 @@
                "instanceId": "{serviceInstanceId}",
                "modelInfo": {
                   "modelType": "service",
-                  "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-                  "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+                  "modelInvariantUuid": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+                  "modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
                   "modelName": "{parent service model name}",
                   "modelVersion": "1.0"
                }
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/ReplaceVnf_VID_request.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/ReplaceVnf_VID_request.json
new file mode 100644
index 0000000..7c97172
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/ReplaceVnf_VID_request.json
@@ -0,0 +1,49 @@
+{
+"requestDetails": {
+"modelInfo": {
+"modelType": "vnf",
+"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelName": "vSAMP12",
+"modelVersion": "1.0",
+"modelCustomizationUuid": "MODEL-ID-1234"
+},
+"cloudConfiguration": {
+"lcpCloudRegionId": "mdt1",
+"tenantId": "88a6ca3ee0394ade9403f075db23167e"
+},
+"requestInfo": {
+"instanceName": "STMTN",
+"instanceId": "a27ce5a9-29c4-4c22-a017-6615ac73c721",
+"source": "VID",
+"suppressRollback": true
+},
+"relatedInstanceList": [
+{
+"relatedInstance": {
+"instanceId": "MIS%2F1604%2F0026%2FSW_INTERNET",
+"modelInfo": {
+"modelType": "service",
+"modelInvariantUuid": "995256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "ab6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelName": "ServicevSAMP12",
+"modelVersion": "1.0"
+}
+}
+}
+],
+"requestParameters": {
+"usePreload": false,
+"userParams" : [
+	{
+		"name" : "someUserParam",
+		"value" : "someValue"
+	},
+	{ 
+		"name": "sgi_protected_subnet_id", 
+		"value": "thisissomefakevalue" 
+	}
+]
+}
+}
+}
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
index e3556e7..c40a99e 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/UpdateVfModule_VID_request.json
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/UpdateVfModule_VID_request.json
@@ -2,11 +2,11 @@
 "requestDetails": {
 "modelInfo": {
 "modelType": "vfModule",
-"modelInvariantId": "introvert",
-"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "introvert",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 "modelName": "STMTN5MMSC21-MMSC::model-1-0",
 "modelVersion": "1",
-"modelCustomizationId": "MODEL12345"
+"modelCustomizationUuid": "MODEL12345"
 },
 "cloudConfiguration": {
 "lcpCloudRegionId": "MDTWNJ21",
@@ -24,8 +24,8 @@
 "instanceId": "123456",
 "modelInfo": {
 "modelType": "service",
-"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 "modelName": "SERVICE_MODEL_NAME",
 "modelVersion": "1.0"
 }
@@ -36,16 +36,26 @@
 "instanceId": "skask",
 "modelInfo": {
 "modelType": "vnf",
-"modelInvariantId": "skask",
-"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+"modelInvariantUuid": "skask",
+"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 "modelName": "vSAMP12",
 "modelVersion": "1.0",
-"modelCustomizationName": "vSAMP12 1"
+"modelInstanceName": "vSAMP12 1"
 }
 }
 }
 ],
 "requestParameters": {
-"userParams": {}
+"usePreload": false,
+"userParams" : [
+	{
+		"name" : "someUserParam",
+		"value" : "someValue"
+	},
+	{ 
+		"name": "sgi_protected_subnet_id", 
+		"value": "thisissomefakevalue" 
+	}
+]
 }
 }
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/UpdateVnf_VID_request.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/UpdateVnf_VID_request.json
new file mode 100644
index 0000000..cdeaf92
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/InfrastructureFlows/UpdateVnf_VID_request.json
@@ -0,0 +1,49 @@
+{
+"requestDetails": {
+"modelInfo": {
+"modelType": "vnf",
+"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelName": "vSAMP12",
+"modelVersion": "1.0",
+"modelCustomizationUuid": "MODEL-ID-1234"
+},
+"cloudConfiguration": {
+"lcpCloudRegionId": "mdt1",
+"tenantId": "88a6ca3ee0394ade9403f075db23167e"
+},
+"requestInfo": {
+"instanceName": "STMTN",
+"instanceId": "skask",
+"source": "VID",
+"suppressRollback": true
+},
+"relatedInstanceList": [
+{
+"relatedInstance": {
+"instanceId": "MIS%2F1604%2F0026%2FSW_INTERNET",
+"modelInfo": {
+"modelType": "service",
+"modelInvariantUuid": "995256d2-5a33-55df-13ab-12abad84e7ff",
+"modelUuid": "ab6478e5-ea33-3346-ac12-ab121484a3fe",
+"modelName": "ServicevSAMP12",
+"modelVersion": "1.0"
+}
+}
+}
+],
+"requestParameters": {
+"usePreload": false,
+"userParams" : [
+	{
+		"name" : "someUserParam",
+		"value" : "someValue"
+	},
+	{ 
+		"name": "sgi_protected_subnet_id", 
+		"value": "thisissomefakevalue" 
+	}
+]
+}
+}
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/Policy/policyAbortResponse.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/Policy/policyAbortResponse.json
new file mode 100644
index 0000000..c315b1e
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/Policy/policyAbortResponse.json
@@ -0,0 +1 @@
+{"decision":"PERMIT","details":"Abort"}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/Policy/policySkipResponse.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/Policy/policySkipResponse.json
new file mode 100644
index 0000000..7cbdebb
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/Policy/policySkipResponse.json
@@ -0,0 +1 @@
+{"decision":"PERMIT","details":"Skip"}
\ 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
index 244a51e..c48c6a6 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/queryVolumeId_AAIResponse_Success.xml
@@ -9,7 +9,7 @@
 	<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>
+			<related-link>/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>
@@ -29,7 +29,7 @@
 		</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>
+			<related-link>/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>
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
index 8ab460e..603c1f4 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/updateVfModuleVolume_VID_request.json
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/UpdateVfModuleVolumeInfraV1/updateVfModuleVolume_VID_request.json
@@ -2,8 +2,8 @@
 	"requestDetails": {
 		"modelInfo": {
 			"modelType": "volumeGroup",
-			"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+			"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 			"modelName": "vSAMP12::base::module-0",
 			"modelVersion": "1"
 		},
@@ -22,8 +22,8 @@
 					"instanceId": "{service-instance-id}",
 					"modelInfo": {
 						"modelType": "service",
-						"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelInvariantUuid": "ff3514e3-5a33-55df-13ab-12abad84e7ff",
+						"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "Test",
 						"modelVersion": "2.0"
 					}
@@ -33,11 +33,11 @@
 					"instanceId": "{vnf-instance-id}",
 					"modelInfo": {
 						"modelType": "vnf",
-						"modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelInvariantUuid": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+						"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "Test/vSAMP12",
 						"modelVersion": "1",
-						"modelCustomizationName": "vSAMP12"
+						"modelInstanceName": "vSAMP12"
 					}
 				}
 			}
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
index 963e2dd..f32ba29 100644
--- 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
@@ -2,8 +2,8 @@
 	"requestDetails": {
 		"modelInfo": {
 			"modelType": "volumeGroup",
-			"modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
-			"modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelInvariantUuid": "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+			"modelUuid": "fe6478e5-ea33-3346-ac12-ab121484a3fe",
 			"modelName": "vSAMP12::base::module-0",
 			"modelVersion": "1"
 		},
@@ -22,8 +22,8 @@
 					"instanceId": "{service-instance-id}",
 					"modelInfo": {
 						"modelType": "service",
-						"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff-x",
-						"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
+						"modelInvariantUuid": "ff3514e3-5a33-55df-13ab-12abad84e7ff-x",
+						"modelUuid": "fe6985cd-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "Test",
 						"modelVersion": "2.0"
 					}
@@ -33,11 +33,11 @@
 					"instanceId": "{vnf-instance-id}",
 					"modelInfo": {
 						"modelType": "vnf",
-						"modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
-						"modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
+						"modelInvariantUuid": "ff5256d1-5a33-55df-13ab-12abad84e7ff",
+						"modelUuid": "fe6478e4-ea33-3346-ac12-ab121484a3fe",
 						"modelName": "Test/vSAMP12",
 						"modelVersion": "1",
-						"modelCustomizationName": "vSAMP12"
+						"modelInstanceName": "vSAMP12"
 					}
 				}
 			}
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
index 58b8708..85773cd 100644
--- 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
@@ -5,8 +5,8 @@
    <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>
+   <model-invariant-id>ff5256d2-5a33-55df-13ab-12abad84e7ff</model-invariant-id>
+   <model-version-id>1.0</model-version-id>
    <relationship-list>
       <relationship>
          <related-to>volume-group</related-to>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VIPR/getCatalogServiceResourcesDataForReplaceVnfInfra.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VIPR/getCatalogServiceResourcesDataForReplaceVnfInfra.json
new file mode 100644
index 0000000..9126442
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VIPR/getCatalogServiceResourcesDataForReplaceVnfInfra.json
@@ -0,0 +1,93 @@
+{ "serviceResources"    : {
+	"modelInfo"       : {
+		"modelName"          : "MSO Test Network",
+		"modelUuid"          : "aed5a5b7-20d3-44f7-90a3-ddbd16f14d1e",
+		"modelInvariantUuid" : "52b49b5d-3086-4ffd-b5e6-1b1e5e7e062f",
+		"modelVersion"       : null
+	},
+	"serviceVnfs": [
+		{ "modelInfo"                    : {
+			"modelName"              : "vHNF for DHV Test",
+			"modelUuid"              : "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+			"modelInvariantUuid"     : "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+			"modelVersion"           : "1.0",
+			"modelCustomizationUuid" : "MODEL-ID-1234",
+			"modelInstanceName"      : "vHNF for DHV Test 17"
+			},
+		"toscaNodeType"            : null,
+		"nfFunction"           	: null,
+		"nfType"              		: null,
+		"nfRole"              		: "vSCP",
+		"nfNamingCode"         	: null,
+			"vfModules": [
+				{
+					"modelInfo"               : { 
+						"modelName"              : "VhnfForDhvTest..base_TEST..module-0",
+						"modelUuid"              : "ebc3d18c-3e62-4c24-bcd6-961e98701a0a",
+						"modelInvariantUuid"     : "introvert",
+						"modelVersion"           : "1",
+						"modelCustomizationUuid" : "1740536a-742e-40f5-b9c8-83918849a787"
+					},		"isBase"                 : true,
+					"vfModuleLabel"          : "base_TEST",
+					"initialCount"           : 1,
+					"hasVolumeGroup"           : true
+				}
+			]
+		}
+		],
+	"serviceNetworks": [
+			{
+			"modelInfo"                : {
+				"modelName"              : "CONTRAIL_BASIC",
+				"modelUuid"              : "fe5be3a6-dbe0-46d6-bcac-44dc841a7edc",
+				"modelInvariantUuid"     : "ab07fbd8-185a-45ac-be45-db3eb02e98d5",
+				"modelVersion"           : null,
+				"modelCustomizationUuid" : "0cb9b26a-9820-48a7-86e5-16c510e993d9",
+				"modelInstanceName"      : "CONTRAIL_BASIC 5"
+		},
+			"toscaNodeType"            : null,
+			"networkType"              : null,
+			"networkTechnology"        : null,
+			"networkRole"              : null,
+			"networkScope"             : null
+		}
+		],
+	"serviceAllottedResources": [
+			{
+			"modelInfo"       : {
+				"modelName"              : "IP_MUX_Demux",
+				"modelUuid"              : "64a1a718-556b-48ce-b3b7-ed3237ccc94f",
+				"modelInvariantUuid"     : "f110ef53-a0a6-4d72-ab91-fd88a835e8c4",
+				"modelVersion"           : "2.0",
+				"modelCustomizationUuid" : "4bab0880-2f06-4aeb-87cb-3734c8e8bf93",
+				"modelInstanceName"      : "Pri_IP_MUX_Demux 1"
+			},
+			"toscaNodeType"              : null,
+			"allottedResourceType"              : "ContrailRoute",
+			"allottedResourceRole"              : null,
+			"providingServiceModelInvariantUuid"              : null,
+			"nfFunction"              : null,
+			"nfType"              : null,
+			"nfRole"              : null,
+			"nfNamingCode"              : null
+		},
+				{
+			"modelInfo"       : {
+				"modelName"              : "Service_Admin",
+				"modelUuid"              : "73501e03-ee76-4509-a8ce-96d2a9f33ee9",
+				"modelInvariantUuid"     : "462edf71-1a3c-487b-bf55-497460ab7de3",
+				"modelVersion"           : "2.0",
+				"modelCustomizationUuid" : "a896ffad-c8f9-404e-a527-7a8d0cc99ce6",
+				"modelInstanceName"      : "Pri_Service_Admin 5"
+			},
+			"toscaNodeType"              : null,
+			"allottedResourceType"              : "SecurityZone",
+			"allottedResourceRole"              : null,
+			"providingServiceModelInvariantUuid"              : null,
+			"nfFunction"              : null,
+			"nfType"              : null,
+			"nfRole"              : null,
+			"nfNamingCode"              : null
+		}
+		]
+	}}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VIPR/getCatalogServiceResourcesDataForUpdateVnfInfra.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VIPR/getCatalogServiceResourcesDataForUpdateVnfInfra.json
new file mode 100644
index 0000000..eac0957
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VIPR/getCatalogServiceResourcesDataForUpdateVnfInfra.json
@@ -0,0 +1,105 @@
+{ "serviceResources"    : {
+	"modelInfo"       : {
+		"modelName"          : "MSO Test Network",
+		"modelUuid"          : "aed5a5b7-20d3-44f7-90a3-ddbd16f14d1e",
+		"modelInvariantUuid" : "52b49b5d-3086-4ffd-b5e6-1b1e5e7e062f",
+		"modelVersion"       : null
+	},
+	"serviceVnfs": [
+		{ "modelInfo"                    : {
+			"modelName"              : "vHNF for DHV Test",
+			"modelUuid"              : "7097d8bb-f6ad-4cf7-866e-6a04c8f1b332",
+			"modelInvariantUuid"     : "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+			"modelVersion"           : "2.0",
+			"modelCustomizationUuid" : "da86dd87-43c5-458c-b226-5315b7be9ad5",
+			"modelInstanceName"      : "vHNF for DHV Test 17"
+			},
+		"toscaNodeType"            : null,
+		"nfFunction"           	: null,
+		"nfType"              		: null,
+		"nfRole"              		: "vSCP",
+		"nfNamingCode"         	: null,
+			"vfModules": [
+				{
+					"modelInfo"               : { 
+						"modelName"              : "VhnfForDhvTest..base_TEST..module-0",
+						"modelUuid"              : "ebc3d18c-3e62-4c24-bcd6-961e98701a0a",
+						"modelInvariantUuid"     : "introvert",
+						"modelVersion"           : "1",
+						"modelCustomizationUuid" : "1740536a-742e-40f5-b9c8-83918849a787"
+					},		"isBase"                 : true,
+					"vfModuleLabel"          : "base_TEST",
+					"initialCount"           : 1,
+					"hasVolumeGroup"           : true
+				},
+				{
+					"modelInfo"               : { 
+						"modelName"              : "VhnfForDhvTest..base_TEST..module-1",
+						"modelUuid"              : "ebc3d18c-3e62-4c24-bcd6-961e98701a0b",
+						"modelInvariantUuid"     : "extrovert",
+						"modelVersion"           : "1",
+						"modelCustomizationUuid" : "1740536a-742e-40f5-b9c8-83918849a788"
+					},		"isBase"                 : false,
+					"vfModuleLabel"          : "addon_TEST",
+					"initialCount"           : 1,
+					"hasVolumeGroup"           : true
+				}
+			]
+		}
+		],
+	"serviceNetworks": [
+			{
+			"modelInfo"                : {
+				"modelName"              : "CONTRAIL_BASIC",
+				"modelUuid"              : "fe5be3a6-dbe0-46d6-bcac-44dc841a7edc",
+				"modelInvariantUuid"     : "ab07fbd8-185a-45ac-be45-db3eb02e98d5",
+				"modelVersion"           : null,
+				"modelCustomizationUuid" : "0cb9b26a-9820-48a7-86e5-16c510e993d9",
+				"modelInstanceName"      : "CONTRAIL_BASIC 5"
+		},
+			"toscaNodeType"            : null,
+			"networkType"              : null,
+			"networkTechnology"        : null,
+			"networkRole"              : null,
+			"networkScope"             : null
+		}
+		],
+	"serviceAllottedResources": [
+			{
+			"modelInfo"       : {
+				"modelName"              : "IP_MUX_Demux",
+				"modelUuid"              : "64a1a718-556b-48ce-b3b7-ed3237ccc94f",
+				"modelInvariantUuid"     : "f110ef53-a0a6-4d72-ab91-fd88a835e8c4",
+				"modelVersion"           : "2.0",
+				"modelCustomizationUuid" : "4bab0880-2f06-4aeb-87cb-3734c8e8bf93",
+				"modelInstanceName"      : "Pri_IP_MUX_Demux 1"
+			},
+			"toscaNodeType"              : null,
+			"allottedResourceType"              : "ContrailRoute",
+			"allottedResourceRole"              : null,
+			"providingServiceModelInvariantUuid"              : null,
+			"nfFunction"              : null,
+			"nfType"              : null,
+			"nfRole"              : null,
+			"nfNamingCode"              : null
+		},
+				{
+			"modelInfo"       : {
+				"modelName"              : "Service_Admin",
+				"modelUuid"              : "73501e03-ee76-4509-a8ce-96d2a9f33ee9",
+				"modelInvariantUuid"     : "462edf71-1a3c-487b-bf55-497460ab7de3",
+				"modelVersion"           : "2.0",
+				"modelCustomizationUuid" : "a896ffad-c8f9-404e-a527-7a8d0cc99ce6",
+				"modelInstanceName"      : "Pri_Service_Admin 5"
+			},
+			"toscaNodeType"              : null,
+			"allottedResourceType"              : "SecurityZone",
+			"allottedResourceRole"              : null,
+			"providingServiceModelInvariantUuid"              : null,
+			"nfFunction"              : null,
+			"nfType"              : null,
+			"nfRole"              : null,
+			"nfNamingCode"              : null
+		}
+		]
+	}}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VIPR/serviceDecompositionATMFW.json b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VIPR/serviceDecompositionATMFW.json
new file mode 100644
index 0000000..94c1152
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VIPR/serviceDecompositionATMFW.json
@@ -0,0 +1,110 @@
+{
+"serviceResources" : {
+    "modelInfo" : {
+      "modelName" : "CMW_Service",
+      "modelUuid" : "",
+      "modelInvariantId" : "cmw-123-456-789",
+      "modelVersion" : "",
+      "modelCustomizationUuid" : "",
+      "modelInstanceName" : "",
+      "modelCustomizationName" : "",
+      "modelVersionId" : "Cmw_123",
+      "modelType" : ""
+    },
+    "serviceInstanceData" : {
+      "instanceId" : "ff5256d2-5a33-55df-13ab-12abad84e7ff"
+    },
+    "serviceNetworks" : [ {
+      "modelInfo" : {
+        "modelName" : "CONTRAIL30_BASIC",
+        "modelUuid" : "",
+        "modelInvariantId" : "not yet implemented",
+        "modelVersion" : "1.0",
+        "modelCustomizationUuid" : "z_network_123",
+        "modelInstanceName" : "",
+        "modelCustomizationName" : "",
+        "modelVersionId" : "mod-inst-uuid-123",
+        "modelType" : "network"
+      },
+      "instanceData" : { },
+      "networkType" : "CONTRAIL30_BASIC"
+    } ],
+    "serviceVnfs" : [ {
+      "modelInfo" : {
+        "modelName" : "vSAMP12",
+        "modelUuid" : "",
+        "modelInvariantId" : "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+        "modelVersion" : "1.0",
+        "modelCustomizationUuid" : "ff5256d2-5a33-55df-13ab-12abad84e7ff",
+        "modelInstanceName" : "",
+        "modelCustomizationName" : "",
+        "modelVersionId" : "fe6478e5-ea33-3346-ac12-ab121484a3fe",
+        "modelType" : "vnf"
+      },
+      "instanceData" : { },
+      "vfModules" : [ {
+        "modelInfo" : {
+          "modelName" : "vSAMP12::base::module-0",
+          "modelUuid" : "",
+          "modelInvariantId" : "miu-1001",
+          "modelVersion" : "1",
+          "modelCustomizationUuid" : "1001",
+          "modelInstanceName" : "",
+          "modelCustomizationName" : "",
+          "modelVersionId" : "",
+          "modelType" : "vfModule"
+        },
+        "instanceData" : { },
+        "hasVolumeGroup" : false,
+        "isBase" : true,
+        "initialCount" : 1
+      }, {
+        "modelInfo" : {
+          "modelName" : "base::module-0",
+          "modelUuid" : "",
+          "modelInvariantId" : "miu-1002",
+          "modelVersion" : "1",
+          "modelCustomizationUuid" : "1002",
+          "modelInstanceName" : "",
+          "modelCustomizationName" : "",
+          "modelVersionId" : "",
+          "modelType" : "vfModule"
+        },
+        "instanceData" : { },
+        "hasVolumeGroup" : false,
+        "isBase" : true,
+        "initialCount" : 1
+      }, {
+        "modelInfo" : {
+          "modelName" : "vSAMP12DEV::base::module-0",
+          "modelUuid" : "",
+          "modelInvariantId" : "miu-1003",
+          "modelVersion" : "1",
+          "modelCustomizationUuid" : "f86e8800-7629-427f-b284-3dbfd04db01f",
+          "modelInstanceName" : "",
+          "modelCustomizationName" : "",
+          "modelVersionId" : "",
+          "modelType" : "vfModule"
+        },
+        "instanceData" : { },
+        "hasVolumeGroup" : false,
+        "isBase" : true,
+        "initialCount" : 0
+      } ]
+    } ],
+    "serviceAllottedResources" : [ {
+      "modelInfo" : {
+        "modelName" : "Bruce Wayne",
+        "modelUuid" : "",
+        "modelInvariantId" : "not yet implemented",
+        "modelVersion" : "1.0",
+        "modelCustomizationUuid" : "ar-mod-custid-456-456",
+        "modelInstanceName" : "Clark Kent",
+        "modelCustomizationName" : "",
+        "modelVersionId" : "123-123",
+        "modelType" : "allottedResource"
+      },
+      "instanceData" : { }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/DBUpdateResponse.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/DBUpdateResponse.xml
index 110e432..7c30f75 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/DBUpdateResponse.xml
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/DBUpdateResponse.xml
@@ -1,4 +1,4 @@
 
 
-<ns2:updateRequestResponse xmlns:ns2="http://com.att.mso/requestsdb"
+<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/VfModularity/GenerateVfModuleName_AAIResponse_Success.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/GenerateVfModuleName_AAIResponse_Success.xml
index 1814735..fe87471 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/GenerateVfModuleName_AAIResponse_Success.xml
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/GenerateVfModuleName_AAIResponse_Success.xml
@@ -1,4 +1,4 @@
-<generic-vnf xmlns="http://com.att.aai.inventory/v7">
+<generic-vnf xmlns="http://org.openecomp.aai.inventory/v7">
 	<vnf-id>12345678-f41f-4822-9323-b75962763d74</vnf-id>
 	<vnf-name>STMTN5MMSC20</vnf-name>
 	<vnf-type>pcrf-capacity</vnf-type>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/GenericVnf.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/GenericVnf.xml
index 85427e2..4712a5a 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/GenericVnf.xml
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/GenericVnf.xml
@@ -1,4 +1,4 @@
-<generic-vnf xmlns="http://com.att.aai.inventory/v7">
+<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>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallback.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallback.xml
index 27cab6b..10af29a 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallback.xml
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallback.xml
@@ -6,7 +6,7 @@
 		<sdnc-request-header>
 			<svc-request-id>9ddf628a-9eca-430e-8974-22d520a31be1</svc-request-id>
 			<svc-action>assign</svc-action>
-			<svc-notification-url>https://msojra.infra.aic.att.net:8443/adapters/rest/SDNCNotify</svc-notification-url>
+			<svc-notification-url>https://msojra.infra.aic.net:8443/adapters/rest/SDNCNotify</svc-notification-url>
 		</sdnc-request-header>
 		<service-information>
 			<subscriber-name>notsurewecare</subscriber-name>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVfModule.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVfModule.xml
index be6f973..f96a073 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVfModule.xml
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVfModule.xml
@@ -20,7 +20,7 @@
 		</service-information>
 		<sdnc-request-header>
 			<svc-request-id>5e168556-a5c6-4813-bff3-cc03007afbbc</svc-request-id>
-			<svc-notification-url>http://mtanjv9moja01-eth1-0.aic.cip.att.com:8080/adapters/rest/SDNCNotify</svc-notification-url>
+			<svc-notification-url>http://mtanjv9moja01-eth1-0.aic.cip.com:8080/adapters/rest/SDNCNotify</svc-notification-url>
 			<svc-action>assign</svc-action>
 		</sdnc-request-header>
 		<vnf-request-information>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVfModuleNoVnf.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVfModuleNoVnf.xml
new file mode 100644
index 0000000..50a71c1
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVfModuleNoVnf.xml
@@ -0,0 +1,81 @@
+<output xmlns="com:att:sdnctl:vnf">
+<vf-module-topology xmlns="com:att:sdnctl:generic-resource">
+	<vf-module-topology-identifier>
+		<vf-module-id>0725b072-b854-4705-bf8e-c1a1eb08651e</vf-module-id>
+		<vf-module-type>vSAMP10aDEV::base::module-0</vf-module-type>
+		<vf-module-name>zmtn6nf-code-111_base_0</vf-module-name>
+	</vf-module-topology-identifier>
+	<ecomp-model-information>
+		<model-name>vSAMP10aDEV::base::module-0</model-name>
+		<model-customization-uuid>819ef122-ca19-4141-a61e-62922f8fc279</model-customization-uuid>
+		<model-version>ff2ae348-214a-11e7-93ae-92361f002673</model-version>
+		<model-invariant-uuid>3a97db99-c4bb-498a-a13a-38f65f1ced3d</model-invariant-uuid>
+		<model-uuid>ff2ae348-214a-11e7-93ae-92361f002673</model-uuid>
+	</ecomp-model-information>
+	<tenant>19123c2924c648eb8e42a3c1f14b7682</tenant>
+	<aic-cloud-region>mtn6</aic-cloud-region>
+	<aic-clli>AUSTTXGR</aic-clli>		
+			<vf-module-parameters>
+				<param>
+					<name>image</name>
+					<value>Ubuntu_Perf</value>
+				</param>
+				<param>
+					<name>flavor</name>
+					<value>m1.small</value>
+				</param>
+			</vf-module-parameters>
+			<vf-module-assignments>				
+			<vms>
+				<vm>
+					<vm-type>cm</vm-type>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01MCM001</vm-name>
+					</vm-names>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01OAM002</vm-name>
+					</vm-names>
+					<vm-count>1</vm-count>
+					<vm-networks>
+						<network-role>mog_cor_B</network-role>
+						<network-ips>
+							<ip-address>107.224.36.249</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.224.36.250</ip-address>
+						</network-ips>
+						<network-ips-v6>
+							<ip-address-ipv6>2606:ae00:2e01:800::67</ip-address-ipv6>
+						</network-ips-v6>
+						<use-dhcp>N</use-dhcp>
+						<floating-ip>107.224.41.252</floating-ip>
+						<floating-ip-v6>2001:1890:1001:2B32::29:C</floating-ip-v6>
+					</vm-networks>
+					<vm-networks>
+						<network-role>mog_oam</network-role>
+						<network-ips>
+							<ip-address>107.239.167.250</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.239.167.251</ip-address>
+						</network-ips>
+						<network-ips-v6>
+							<ip-address-ipv6>aa::aa::aa::aa::aa::aa</ip-address-ipv6>							
+						</network-ips-v6>
+						<network-ips-v6>
+							<ip-address-ipv6>bb::bb::bb::bb::bb::bb</ip-address-ipv6>
+						</network-ips-v6>
+						<interface-route-prefixes>							
+							<interface-route-prefix-cidr>1.2.3.4/26</interface-route-prefix-cidr>
+						</interface-route-prefixes>
+						<interface-route-prefixes>							
+							<interface-route-prefix-cidr>2002::/64</interface-route-prefix-cidr>
+						</interface-route-prefixes>
+						<use-dhcp>N</use-dhcp>
+						<floating-ip-v6>1111:1890:1001:2B32::29:D</floating-ip-v6>
+					</vm-networks>
+				</vm>
+				</vms>
+			</vf-module-assignments>				
+</vf-module-topology>
+</output>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVnf.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVnf.xml
new file mode 100644
index 0000000..bc2c7b9
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVnf.xml
@@ -0,0 +1,82 @@
+<output xmlns="com:att:sdnctl:vnf">
+<vnf-topology xmlns="com:att:sdnctl:generic-resource">
+	<vnf-topology-identifier-structure>
+		<nf-type>nf-type-1</nf-type>
+		<vnf-name>zmtn6nf-code-111</vnf-name>
+		<nf-role>nf-role-1</nf-role>
+		<nf-function>nf-function-1</nf-function>
+		<nf-code>nf-code-1</nf-code>
+		<vnf-id>eac30f85-f61f-4c5f-862e-2c62f9e135de</vnf-id>
+		<vnf-type>null</vnf-type>
+	</vnf-topology-identifier-structure>
+	<ecomp-model-information>
+		<model-name>vSAMP10a_macro</model-name>
+		<model-customization-uuid>819ef122-ca19-4141-a61e-62922f8fc279</model-customization-uuid>
+		<model-version>1.0</model-version>
+		<model-invariant-uuid>ef176121-f02c-4dd3-927c-22131d48446b</model-invariant-uuid>
+		<model-uuid>ff2ae348-214a-11e7-93ae-92361f002672</model-uuid>
+	</ecomp-model-information>
+	<vnf-resource-assignments>			
+			<vnf-networks>
+					<network-role>mog_exn</network-role>
+					<network-id>03dbd833-785c-40c0-bf32-37594b5334bc</network-id>
+					<network-name>MNS-25180-P-VNNYCA01_exn_protected_net_1</network-name>
+					<contrail-network-fqdn/>
+					<subnet-id/>
+					<neutron-id>6f82d234-41a4-48e9-a9e8-415667a72929</neutron-id>
+					<sriov-vlan-filter-list>
+						<sriov-vlan-filter>filter1</sriov-vlan-filter>
+					</sriov-vlan-filter-list>
+					<sriov-vlan-filter-list>
+						<sriov-vlan-filter>filter2</sriov-vlan-filter>                         
+                     </sriov-vlan-filter-list>
+				</vnf-networks>
+				<vnf-networks>
+					<network-role>mog_oam</network-role>
+					<network-id>3f181cde-9380-4c20-9d3a-e1a4ee74f994</network-id>
+					<network-name>MNS-25180-P-VNNYCA01_oam_protected_net_1</network-name>
+					<contrail-network-fqdn/>
+					<subnet-id/>
+					<neutron-id>713b6770-13fa-4949-8dbb-a1288c5e5932</neutron-id>
+				</vnf-networks>
+				<vnf-networks>
+					<network-role>mog_cor_B</network-role>
+					<network-id>821a550a-3f50-4725-995b-f212d5caec7c</network-id>
+					<network-name>MNS-25180-P-VNNYCA01_cor_direct_net_1</network-name>
+					<contrail-network-fqdn/>
+					<subnet-id/>
+					<neutron-id>18926e56-12b6-4a4d-98b6-37e0c05626ee</neutron-id>
+				</vnf-networks>
+				<vnf-networks>
+					<network-role>mog_cor_A</network-role>
+					<network-id>3dabf5c0-cffb-420c-8960-8499c74eb25f</network-id>
+					<network-name>MNS-25180-P-VNNYCA01_cor_direct_net_2</network-name>
+					<contrail-network-fqdn/>
+					<subnet-id/>
+					<neutron-id>35530b29-a4de-48ff-a014-111110ccc652</neutron-id>
+				</vnf-networks>
+				<vnf-networks>
+					<network-role>mog_gn</network-role>
+					<network-id>3ce97321-6e7f-49af-bd12-f833e377c310</network-id>
+					<network-name>MNS-25180-P-VNNYCA01_gn_direct_net_1</network-name>
+					<contrail-network-fqdn/>
+					<subnet-id/>
+					<neutron-id>32bfdd2c-28e1-4895-87a6-373bf12c3129</neutron-id>
+				</vnf-networks>
+				<vnf-networks>
+					<network-role>mog_dmz</network-role>
+					<network-id>d43ca910-02a5-47dc-8510-100a68a3c9e0</network-id>
+					<network-name>MNS-25180-P-VNNYCA01_dmz_protected_net_1</network-name>
+					<contrail-network-fqdn/>
+					<subnet-id/>
+					<neutron-id>cb9500fb-943f-412e-aea6-458711564a75</neutron-id>
+				</vnf-networks>
+				<availability-zones>
+					<availability-zone>nova</availability-zone>
+				</availability-zones>				
+			</vnf-resource-assignments>
+			<tenant>19123c2924c648eb8e42a3c1f14b7682</tenant>
+	<aic-cloud-region>mtn6</aic-cloud-region>
+	<aic-clli>AUSTTXGR</aic-clli>
+</vnf-topology>
+</output>
\ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-lukewarm.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-lukewarm.xml
index 8de2f95..8db8610 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-lukewarm.xml
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-lukewarm.xml
@@ -1,4 +1,4 @@
-<vf-module xmlns="http://com.att.aai.inventory/v7">
+<vf-module xmlns="http://org.openecomp.aai.inventory/v7">
 	<vf-module-id>lukewarm</vf-module-id>
 	<vf-module-name>PCRF::module-1</vf-module-name>
 	<heat-stack-id>slowburn</heat-stack-id>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-new.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-new.xml
index e72d23d..10e85c0 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-new.xml
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-new.xml
@@ -1,4 +1,4 @@
-<vf-module xmlns="http://com.att.aai.inventory/v7">
+<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>
 	<model-invariant-id>00000000-0000-0000-0000-000000000000</model-invariant-id>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-supercool.xml b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-supercool.xml
index 15a84aa..4e7d567 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-supercool.xml
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VfModularity/VfModule-supercool.xml
@@ -1,4 +1,4 @@
-<vf-module xmlns="http://com.att.aai.inventory/v7">
+<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>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/resources/mso.bpmn.urn.properties b/bpmn/MSOInfrastructureBPMN/src/test/resources/mso.bpmn.urn.properties
index b14d495..8a557c4 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/resources/mso.bpmn.urn.properties
+++ b/bpmn/MSOInfrastructureBPMN/src/test/resources/mso.bpmn.urn.properties
@@ -9,10 +9,12 @@
 mso.csi.usrname=mso
 mso.msoKey=07a7159d3bf51a0e53be7a8f89699be7
 
+mso.healthcheck.log.debug=false
+
 mso.adapters.completemsoprocess.endpoint=http://localhost:28090/CompleteMsoProcess
 mso.workflow.message.endpoint=http://localhost:8080/mso/WorkflowMessage
-mso.catalog.db.endpoint=http://localhost:8090
-mso.adapters.db.endpoint=http://localhost:28090/dbadapters/RequestsDbAdapter
+mso.adapters.db.endpoint=http://localhost:28090/dbadapters/MsoRequestsDbAdapter
+mso.openecomp.adapters.db.endpoint=http://localhost:28090/dbadapters/RequestsDbAdapter
 mso.adapters.db.auth=757A94191D685FD2092AC1490730A4FC
 
 mso.adapters.network.endpoint=http://localhost:28090/networks/NetworkAdapter
@@ -24,6 +26,7 @@
 
 aai.auth=757A94191D685FD2092AC1490730A4FC
 
+mso.default.adapter.namespace=http://org.openecomp.mso
 mso.adapters.sdnc.endpoint=http://localhost:28090/SDNCAdapter
 mso.adapters.sdnc.rest.endpoint=http://localhost:28090/SDNCAdapter/v1/sdnc
 mso.adapters.sdnc.timeout=PT60S
@@ -38,7 +41,7 @@
 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.catalog.db.endpoint=http://localhost:28090
 
 mso.adapters.tenant.endpoint=http://localhost:28090/tenantAdapterMock
 mso.adapters.vnf-async.endpoint=http://localhost:28090/vnfs/VnfAdapterAsync
@@ -84,4 +87,31 @@
 log.debug.GenericGetService=true
 log.debug.sdncAdapter=true
 log.debug.UpdateNetworkInstanceInfra=true
-log.debug.VnfAdapterRestV1=true
\ No newline at end of file
+log.debug.VnfAdapterRestV1=true
+log.debug.CreateNetworkInstance=true
+log.debug.DoCreateNetworkInstance=true
+log.debug.DoCreateNetworkInstanceRollback=true
+log.debug.DeleteNetworkInstance=true
+log.debug.DoDeleteNetworkInstance=true
+log.debug.DoDeleteNetworkInstanceRollback=true
+log.debug.UpdateNetworkInstance=true
+log.debug.DoUpdateNetworkInstance=true
+log.debug.DoUpdateNetworkInstanceRollback=true
+log.debug.CreateVnfInfra=true
+log.debug.DoCreateVnf=true
+
+policy.client.auth=Basic bTAzNzQzOnBvbGljeVIwY2sk
+policy.auth=Basic dGVzdHBkcDphbHBoYTEyMw==
+policy.environment=TEST
+policy.endpoint=http://localhost:28090/pdp/api/getDecision
+
+appc.topic.read=APPC-CL-FUSION-LCM-RESPONSE
+appc.topic.read.timeout=60000
+appc.client.response.timeout=3600000
+appc.topic.write=APPC-CL-FUSION-LCM
+appc.pool.members=uebsb91bodc.it.openecomp.org:3904,uebsb92bodc.it.openecomp.org:3904,uebsb93bodc.it.openecomp.org:3904
+appc.client.key=iaEMAfjsVsZnraBP
+appc.client.secret=wcivUjsjXzmGFBfxMmyJu9dz
+
+
+
