diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/AaiUtilTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/AaiUtilTest.groovy
index 7d698f8..914725c 100644
--- a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/AaiUtilTest.groovy
+++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/AaiUtilTest.groovy
@@ -1,318 +1,306 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common.scripts;
-
-import static org.junit.Assert.*;
-import static org.mockito.Mockito.*
-
-import org.openecomp.mso.rest.HttpHeader
-import org.mockito.MockitoAnnotations
-import org.mockito.runners.MockitoJUnitRunner
-import org.mockito.internal.debugging.MockitoDebuggerImpl
-import org.junit.Before
-import org.openecomp.mso.bpmn.common.scripts.AaiUtil;
-import org.junit.Rule;
-import org.junit.Test
-import org.junit.Ignore
-import org.junit.runner.RunWith
-import org.junit.Before;
-import org.junit.Test;
-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
-
-@RunWith(MockitoJUnitRunner.class)
-class AaiUtilTest extends MsoGroovyTest {
-	
-	@Test
-	public void testGetVersionDefault() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def version = aaiUtil.getVersion(mockExecution, 'l3-network', 'CreateAAIVfModule')
-		assertEquals('8', version)
-	}
-	
-	@Test
-	public void testGetVersionResourceSpecific() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_l3_network_version")).thenReturn('7')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def version = aaiUtil.getVersion(mockExecution, 'l3-network', 'CreateAAIVfModule')
-		assertEquals('7', version)
-	}
-
-	@Test
-	public void testGetVersionFlowSpecific() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_custom_CreateAAIVfModule_aai_version")).thenReturn('6')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_l3_network_version")).thenReturn('7')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def version = aaiUtil.getVersion(mockExecution, 'l3-network', 'CreateAAIVfModule')
-		assertEquals('6', version)
-	}
-
-	@Test(expected=java.lang.Exception.class)
-	public void testGetVersionNotDefined() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def version = aaiUtil.getVersion(mockExecution, 'l3-network', 'CreateAAIVfModule')
-	}
-	
-	@Test
-	public void testGetUriDefaultVersion() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_l3_network_uri")).thenReturn('/aai/v8/network/l3-networks/l3-network')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-								
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getUri(mockExecution, 'l3-network')
-		assertEquals('/aai/v8/network/l3-networks/l3-network', uri)
-	}
-	
-	@Test
-	public void testGetUriFlowAndResourceSpecific() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_CreateAAIVfModule_aai_l3_network_uri")).thenReturn('/aai/v6/network/l3-networks/l3-network')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_l3_network_uri")).thenReturn('/aai/v8/network/l3-networks/l3-network')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-								
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getUri(mockExecution, 'l3-network')
-		assertEquals('/aai/v6/network/l3-networks/l3-network', uri)
-	}
-	
-	@Test
-	public void testGetNetworkGenericVnfEndpoint() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_generic_vnf_uri")).thenReturn('/aai/v8/network/generic-vnfs/generic-vnf')
-		when(mockExecution.getVariable('URN_aai_endpoint')).thenReturn('http://localhost:28090')
-		
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def endpoint = aaiUtil.getNetworkGenericVnfEndpoint(mockExecution)
-		assertEquals('http://localhost:28090/aai/v8/network/generic-vnfs/generic-vnf', endpoint)
-	}
-	
-	@Test
-	public void testGetNetworkGenericVnfUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_generic_vnf_uri")).thenReturn('/aai/v8/network/generic-vnfs/generic-vnf')
-				
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getNetworkGenericVnfUri(mockExecution)
-		assertEquals('/aai/v8/network/generic-vnfs/generic-vnf', uri)
-	}
-	
-	@Test
-	public void testGetNetworkVpnBindingUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		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')
-		
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getNetworkVpnBindingUri(mockExecution)
-		assertEquals('/aai/v8/network/vpn-bindings/vpn-binding', uri)
-	}
-
-	@Test
-	public void testGetNetworkPolicyUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		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')
-								
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getNetworkPolicyUri(mockExecution)
-		assertEquals('/aai/v8/network/network-policies/network-policy', uri)
-	}
-	
-	@Test
-	public void testGetNetworkTableReferencesUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_route_table_reference_uri")).thenReturn('/aai/v8/network/route-table-references/route-table-reference')
-
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getNetworkTableReferencesUri(mockExecution)
-		assertEquals('/aai/v8/network/route-table-references/route-table-reference', uri)
-	}
-	
-	@Test
-	public void testGetNetworkVceUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_vce_uri")).thenReturn('/aai/v8/network/vces/vce')
-
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getNetworkVceUri(mockExecution)
-		assertEquals('/aai/v8/network/vces/vce', uri)
-	}
-	
-	@Test
-	public void testGetNetworkL3NetworkUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		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')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getNetworkL3NetworkUri(mockExecution)
-		assertEquals('/aai/v8/network/l3-networks/l3-network', uri)
-	}
-	
-	@Test
-	public void testGetBusinessCustomerUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_customer_uri")).thenReturn('/aai/v8/business/customers/customer')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getBusinessCustomerUri(mockExecution)
-		assertEquals('/aai/v8/business/customers/customer', uri)
-	}
-	
-	@Test
-	public void testGetCloudInfrastructureCloudRegionEndpoint() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		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_aai_endpoint')).thenReturn('http://localhost:28090')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(mockExecution)
-		assertEquals('http://localhost:28090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic', uri)
-	}
-	
-	@Test
-	public void testGetCloudInfrastructureCloudRegionUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		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')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getCloudInfrastructureCloudRegionUri(mockExecution)
-		assertEquals('/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic', uri)
-	}
-	
-	@Test
-	public void testGetCloudInfrastructureVolumeGroupUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_volume_group_uri")).thenReturn('/aai/v8/cloud-infrastructure/volume-groups/volume-group')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getCloudInfrastructureVolumeGroupUri(mockExecution)
-		assertEquals('/aai/v8/cloud-infrastructure/volume-groups/volume-group', uri)
-	}
-	
-	@Test
-	public void testGetCloudInfrastructureTenantUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_tenant_uri")).thenReturn('/aai/v8/cloud-infrastructure/tenants/tenant')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getCloudInfrastructureTenantUri(mockExecution)
-		assertEquals('/aai/v8/cloud-infrastructure/tenants/tenant', uri)
-	}
-	
-	@Test
-	public void testGetSearchNodesQueryUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_nodes_query_uri")).thenReturn('/aai/v8/search/nodes-query')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getSearchNodesQueryUri(mockExecution)
-		assertEquals('/aai/v8/search/nodes-query', uri)
-	}
-	
-	@Test
-	public void testGetSearchNodesQueryEndpoint() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_nodes_query_uri")).thenReturn('/aai/v8/search/nodes-query')
-		when(mockExecution.getVariable('URN_aai_endpoint')).thenReturn('http://localhost:28090')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getSearchNodesQueryEndpoint(mockExecution)
-		assertEquals('http://localhost:28090/aai/v8/search/nodes-query', uri)
-	}
-	
-	@Test
-	public void testGetSearchGenericQueryUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
-		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_generic_query_uri")).thenReturn('/aai/v8/search/generic-query')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def uri = aaiUtil.getSearchGenericQueryUri(mockExecution)
-		assertEquals('/aai/v8/search/generic-query', uri)
-	}
-	
-	@Test
-	public void testGetNamespaceFromUri() {
-		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-		CreateAAIVfModule myproc = new CreateAAIVfModule()
-		AaiUtil aaiUtil = new AaiUtil(myproc)
-		def ns = aaiUtil.getNamespaceFromUri('/aai/v6/search/generic-query')
-		assertEquals('http://org.openecomp.aai.inventory/v6', ns)
-	}
-	
-}
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common.scripts;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*
+
+import org.openecomp.mso.rest.HttpHeader
+import org.mockito.MockitoAnnotations
+import org.mockito.runners.MockitoJUnitRunner
+import org.mockito.internal.debugging.MockitoDebuggerImpl
+import org.junit.Before
+import org.openecomp.mso.bpmn.common.scripts.AaiUtil;
+import org.junit.Rule;
+import org.junit.Test
+import org.junit.Ignore
+import org.junit.runner.RunWith
+import org.junit.Before;
+import org.junit.Test;
+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
+
+@RunWith(MockitoJUnitRunner.class)
+class AaiUtilTest extends MsoGroovyTest {
+	
+	@Test
+	public void testGetVersionDefault() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def version = aaiUtil.getVersion(mockExecution, 'l3-network', 'CreateAAIVfModule')
+		assertEquals('8', version)
+	}
+	
+	@Test
+	public void testGetVersionResourceSpecific() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_l3_network_version")).thenReturn('7')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def version = aaiUtil.getVersion(mockExecution, 'l3-network', 'CreateAAIVfModule')
+		assertEquals('7', version)
+	}
+
+	@Test
+	public void testGetVersionFlowSpecific() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_custom_CreateAAIVfModule_aai_version")).thenReturn('6')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_l3_network_version")).thenReturn('7')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def version = aaiUtil.getVersion(mockExecution, 'l3-network', 'CreateAAIVfModule')
+		assertEquals('6', version)
+	}
+
+	@Test(expected=java.lang.Exception.class)
+	public void testGetVersionNotDefined() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def version = aaiUtil.getVersion(mockExecution, 'l3-network', 'CreateAAIVfModule')
+	}
+	
+	@Test
+	public void testGetUriDefaultVersion() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_l3_network_uri")).thenReturn('/aai/v8/network/l3-networks/l3-network')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+								
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getUri(mockExecution, 'l3-network')
+		assertEquals('/aai/v8/network/l3-networks/l3-network', uri)
+	}
+	
+	@Test
+	public void testGetUriFlowAndResourceSpecific() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_CreateAAIVfModule_aai_l3_network_uri")).thenReturn('/aai/v6/network/l3-networks/l3-network')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_l3_network_uri")).thenReturn('/aai/v8/network/l3-networks/l3-network')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+								
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getUri(mockExecution, 'l3-network')
+		assertEquals('/aai/v6/network/l3-networks/l3-network', uri)
+	}
+	
+	@Test
+	public void testGetNetworkGenericVnfEndpoint() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_generic_vnf_uri")).thenReturn('/aai/v8/network/generic-vnfs/generic-vnf')
+		when(mockExecution.getVariable('URN_aai_endpoint')).thenReturn('http://localhost:28090')
+		
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def endpoint = aaiUtil.getNetworkGenericVnfEndpoint(mockExecution)
+		assertEquals('http://localhost:28090/aai/v8/network/generic-vnfs/generic-vnf', endpoint)
+	}
+	
+	@Test
+	public void testGetNetworkGenericVnfUri() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_generic_vnf_uri")).thenReturn('/aai/v8/network/generic-vnfs/generic-vnf')
+				
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getNetworkGenericVnfUri(mockExecution)
+		assertEquals('/aai/v8/network/generic-vnfs/generic-vnf', uri)
+	}
+	
+	@Test
+	public void testGetNetworkVpnBindingUri() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		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')
+		
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getNetworkVpnBindingUri(mockExecution)
+		assertEquals('/aai/v8/network/vpn-bindings/vpn-binding', uri)
+	}
+
+	@Test
+	public void testGetNetworkPolicyUri() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		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')
+								
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getNetworkPolicyUri(mockExecution)
+		assertEquals('/aai/v8/network/network-policies/network-policy', uri)
+	}
+	
+	@Test
+	public void testGetNetworkTableReferencesUri() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_route_table_reference_uri")).thenReturn('/aai/v8/network/route-table-references/route-table-reference')
+
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getNetworkTableReferencesUri(mockExecution)
+		assertEquals('/aai/v8/network/route-table-references/route-table-reference', uri)
+	}
+	
+	@Test
+	public void testGetNetworkVceUri() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_vce_uri")).thenReturn('/aai/v8/network/vces/vce')
+
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getNetworkVceUri(mockExecution)
+		assertEquals('/aai/v8/network/vces/vce', uri)
+	}
+	
+	@Test
+	public void testGetNetworkL3NetworkUri() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		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')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getNetworkL3NetworkUri(mockExecution)
+		assertEquals('/aai/v8/network/l3-networks/l3-network', uri)
+	}
+	
+	@Test
+	public void testGetBusinessCustomerUri() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_customer_uri")).thenReturn('/aai/v8/business/customers/customer')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getBusinessCustomerUri(mockExecution)
+		assertEquals('/aai/v8/business/customers/customer', uri)
+	}
+	
+	@Test
+	public void testGetCloudInfrastructureCloudRegionEndpoint() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		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_aai_endpoint')).thenReturn('http://localhost:28090')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(mockExecution)
+		assertEquals('http://localhost:28090/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic', uri)
+	}
+	
+	@Test
+	public void testGetCloudInfrastructureCloudRegionUri() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		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')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getCloudInfrastructureCloudRegionUri(mockExecution)
+		assertEquals('/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic', uri)
+	}
+	
+	@Test
+	public void testGetCloudInfrastructureTenantUri() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_tenant_uri")).thenReturn('/aai/v8/cloud-infrastructure/tenants/tenant')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getCloudInfrastructureTenantUri(mockExecution)
+		assertEquals('/aai/v8/cloud-infrastructure/tenants/tenant', uri)
+	}
+	
+	@Test
+	public void testGetSearchNodesQueryUri() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_nodes_query_uri")).thenReturn('/aai/v8/search/nodes-query')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getSearchNodesQueryUri(mockExecution)
+		assertEquals('/aai/v8/search/nodes-query', uri)
+	}
+	
+	@Test
+	public void testGetSearchNodesQueryEndpoint() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_nodes_query_uri")).thenReturn('/aai/v8/search/nodes-query')
+		when(mockExecution.getVariable('URN_aai_endpoint')).thenReturn('http://localhost:28090')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getSearchNodesQueryEndpoint(mockExecution)
+		assertEquals('http://localhost:28090/aai/v8/search/nodes-query', uri)
+	}
+	
+	@Test
+	public void testGetSearchGenericQueryUri() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		when(mockExecution.getVariable("URN_mso_workflow_global_default_aai_version")).thenReturn('8')
+		when(mockExecution.getVariable("URN_mso_workflow_default_aai_v8_generic_query_uri")).thenReturn('/aai/v8/search/generic-query')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def uri = aaiUtil.getSearchGenericQueryUri(mockExecution)
+		assertEquals('/aai/v8/search/generic-query', uri)
+	}
+	
+	@Test
+	public void testGetNamespaceFromUri() {
+		ExecutionEntity mockExecution = setupMock('CreateAAIVfModule')
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
+		CreateAAIVfModule myproc = new CreateAAIVfModule()
+		AaiUtil aaiUtil = new AaiUtil(myproc)
+		def ns = aaiUtil.getNamespaceFromUri('/aai/v6/search/generic-query')
+		assertEquals('http://org.openecomp.aai.inventory/v6', ns)
+	}
+	
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/ExceptionUtilTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/ExceptionUtilTest.groovy
index 98bbe71..a011ebb 100644
--- a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/ExceptionUtilTest.groovy
+++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/ExceptionUtilTest.groovy
@@ -1,190 +1,66 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common.scripts
-
-import org.junit.Assert
-import org.junit.runner.RunWith;
-import org.mockito.runners.MockitoJUnitRunner;
-
-
-import org.junit.Ignore;
-
-import static org.mockito.Mockito.*
-
-import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
-import org.junit.Before
-import org.junit.runner.RunWith
-import org.mockito.MockitoAnnotations
-import org.mockito.internal.debugging.MockitoDebuggerImpl
-import org.mockito.runners.MockitoJUnitRunner
-import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil;
-@RunWith(MockitoJUnitRunner.class)
-import org.junit.Test
-
-
-
-class ExceptionUtilTest {
-
-
-	@Before
-	public void init()
-	{
-		MockitoAnnotations.initMocks(this)
-	}
-
-	@Test
-	public void testErrorMessageDetails() {
-
-
-
-		String restFault = """
-				<Fault>
-<requestError>
-<serviceException>
-<messageId>SVC3002</messageId>
-<text>Error writing output performing %1 on %2 (msg=%3) (ec=%4)</text>
-<variables>
-<variable>PUTcustomer</variable>
-<variable>SubName01</variable>
-<variable>Unexpected error reading/updating database:Adding this property for key [service-instance-id] and value [USSTU2CFCNC0101UJZZ01] violates a uniqueness constraint [service-instance-id]</variable>
-<variable>ERR.5.4.5105</variable>
-</variables>
-</serviceException>
-</requestError>
-</Fault>
-			"""
-		def errorString = """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
-				<aetgt:ErrorMessage>Received error from A&amp;AI (Error writing output performing PUTcustomer on SubName01 (msg=Unexpected error reading/updating database:Adding this property for key [service-instance-id] and value [USSTU2CFCNC0101UJZZ01] violates a uniqueness constraint [service-instance-id]) (ec=ERR.5.4.5105))</aetgt:ErrorMessage>
-				<aetgt:ErrorCode>5000</aetgt:ErrorCode>
-			</aetgt:WorkflowException>""" as String
-
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-
-		ExceptionUtil util = new ExceptionUtil()
-		Assert.assertEquals(errorString, util.MapAAIExceptionToWorkflowExceptionOld(restFault, mockExecution))
-	}
-
-
-	@Test
-	public void testErrorMessage() {
-		String restFault = """
-				<rest:RESTFault xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
-				errorType="transport">
-				<rest:errorCode>500</rest:errorCode>
-				<rest:message>HTTP method: GET Internal Server Error </rest:message>
-				</rest:RESTFault>
-			"""
-		def errorString = """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
-					<aetgt:ErrorMessage>Received error from A&amp;AI (HTTP method: GET Internal Server Error)</aetgt:ErrorMessage>
-					<aetgt:ErrorCode>5000</aetgt:ErrorCode>
-				</aetgt:WorkflowException>""" as String
-
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-		when(mockExecution.getVariable("prefix")).thenReturn("test_")
-		when(mockExecution.getVariable("test_ErrorResponse")).thenReturn("HTTP method: GET Internal Server Error")
-
-		ExceptionUtil util = new ExceptionUtil()
-		String msg = "HTTP method: GET Internal Server Error"
-		Assert.assertEquals(errorString, util.MapAAIExceptionToWorkflowExceptionOld(restFault, mockExecution))
-	}
-
-	@Test
-	public void testBadResponseErrorMessage() {
-		String restFault = "asfafasfasfd"
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-		when(mockExecution.getVariable("prefix")).thenReturn("test_")
-		when(mockExecution.getVariable("test_ErrorResponse")).thenReturn(null)
-		ExceptionUtil util = new ExceptionUtil()
-		String expected = "<aetgt:WorkflowException xmlns:aetgt=\"http://org.openecomp/mso/workflow/schema/v1\">"+
-		"\n					<aetgt:ErrorMessage>Received error from A&amp;AI ()</aetgt:ErrorMessage>"+
-		"\n					<aetgt:ErrorCode>5000</aetgt:ErrorCode>"+
-	"\n				</aetgt:WorkflowException>";
-		Assert.assertEquals(expected,util.MapAAIExceptionToWorkflowExceptionOld(restFault, mockExecution))
-	}
-
-	@Test
-	public void testMapErrorCode5010(){
-		String msg = "Connect to njcdtl20ew2988:8070  failed: Connection refused: connect"
-		ExceptionUtil util = new ExceptionUtil()
-		Assert.assertEquals("5010",util.MapErrorCode(msg))
-	}
-
-	@Test
-	public void testMapErrorCode5020(){
-		String msg = "Connection timed out"
-		ExceptionUtil util = new ExceptionUtil()
-		Assert.assertEquals("5020",util.MapErrorCode(msg))
-	}
-
-	@Test
-	public void testMapCategoryToErrorCode5100 () {
-		String errorCategory = "OPENSTACK"
-		ExceptionUtil util = new ExceptionUtil()
-		Assert.assertEquals('5100', util.MapCategoryToErrorCode(errorCategory))
-	}
-
-	@Test
-	public void testMapCategoryToErrorCode5110 () {
-		String errorCategory = "IO"
-		ExceptionUtil util = new ExceptionUtil()
-		Assert.assertEquals('5110', util.MapCategoryToErrorCode(errorCategory))
-	}
-
-	@Test
-	public void testMapCategoryToErrorCode7020 () {
-		String errorCategory = "USERDATA"
-		ExceptionUtil util = new ExceptionUtil()
-		Assert.assertEquals('7020', util.MapCategoryToErrorCode(errorCategory))
-	}
-
-	@Test
-	@Ignore
-	public void testMapAdapterExecptionToWorkflowException_UserDataErrorMessage () {
-		String response = """<ns2:TenantException xmlns:ns2=\"http://org.openecomp.mso/tenant\"><category>USERDATA</category><message>Cloud Site [CHCGILNE001] not found</message></ns2:TenantException>""" as String
-		String expected = """WorkflowException[processKey=ExceptionUtil,errorCode=7020,errorMessage=Received error from Tenant Adapter: Cloud Site [CHCGILNE001] not found]""" as String
-
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-		when(mockExecution.getVariable("prefix")).thenReturn("test_")
-		when(mockExecution.getVariable("testProcessKey")).thenReturn("ExceptionUtil")
-
-		ExceptionUtil util = new ExceptionUtil()
-		String actual = util.MapAdapterExecptionToWorkflowException(response, mockExecution, "Tenant Adapter")
-
-		verify(mockExecution).setVariable("WorkflowException",expected)
-	}
-
-	@Test
-	@Ignore
-	public void testMapAdapterExecptionToWorkflowException_IOErrorMessage () {
-		String response = """<ns2:TenantException xmlns:ns2=\"http://org.openecomp.mso/tenant\"><category>IO</category><message>[TokenAuth] Connect to test.aic.cip.att.com:5000 [test.aic.cip.att.com/300.200.100.100] failed: Connection refused</message></ns2:TenantException>""" as String
-		String expected = """WorkflowException[processKey=ExceptionUtil,errorCode=5110,errorMessage=Could not communicate with Platform Orchestrator]""" as String
-
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-		when(mockExecution.getVariable("prefix")).thenReturn("test_")
-		when(mockExecution.getVariable("testProcessKey")).thenReturn("ExceptionUtil")
-
-		ExceptionUtil util = new ExceptionUtil()
-		String actual = util.MapAdapterExecptionToWorkflowException(response, mockExecution, "Tenant Adapter")
-
-		verify(mockExecution).setVariable("WorkflowException",expected)
-	}
-
-}
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common.scripts
+
+import org.junit.Assert
+import org.junit.runner.RunWith;
+import org.mockito.runners.MockitoJUnitRunner;
+
+
+import org.junit.Ignore;
+
+import static org.mockito.Mockito.*
+
+import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
+import org.junit.Before
+import org.junit.runner.RunWith
+import org.mockito.MockitoAnnotations
+import org.mockito.internal.debugging.MockitoDebuggerImpl
+import org.mockito.runners.MockitoJUnitRunner
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil;
+@RunWith(MockitoJUnitRunner.class)
+import org.junit.Test
+
+
+
+class ExceptionUtilTest {
+
+
+	@Before
+	public void init()
+	{
+		MockitoAnnotations.initMocks(this)
+	}
+
+	@Test
+	public void testMapErrorCode5010(){
+		String msg = "Connect to njcdtl20ew2988:8070  failed: Connection refused: connect"
+		ExceptionUtil util = new ExceptionUtil()
+		Assert.assertEquals("5010",util.MapErrorCode(msg))
+	}
+
+	@Test
+	public void testMapErrorCode5020(){
+		String msg = "Connection timed out"
+		ExceptionUtil util = new ExceptionUtil()
+		Assert.assertEquals("5020",util.MapErrorCode(msg))
+	}
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/FalloutHandlerTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/FalloutHandlerTest.groovy
index 7f691ca..fcc55d0 100644
--- a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/FalloutHandlerTest.groovy
+++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/FalloutHandlerTest.groovy
@@ -1,311 +1,311 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common.scripts
-
-import org.junit.runner.RunWith;
-import static org.mockito.Mockito.*
-import static org.junit.Assert.*;
-
-import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor;
-import org.mockito.MockitoAnnotations
-import org.mockito.runners.MockitoJUnitRunner
-import org.openecomp.mso.bpmn.common.scripts.MsoUtils;
-import org.openecomp.mso.bpmn.common.scripts.FalloutHandler;
-
-@RunWith(MockitoJUnitRunner.class)
-class FalloutHandlerTest {
-	
-	public MsoUtils utils = new MsoUtils()
-	
-	@Before
-	public void init() {
-		MockitoAnnotations.initMocks(this)
-	}
-
-	private String falloutHandlerRequest = """
-				<sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:ns7="http://org.openecomp/mso/request/types/v1">
-						<ns7:request-information>
-							<ns7:request-id>uCPE1020_STUW105_5002</ns7:request-id>
-							<ns7:request-action>Layer3ServiceActivateRequest</ns7:request-action>
-							<ns7:request-sub-action>CANCEL</ns7:request-sub-action>
-							<ns7:source>OMX</ns7:source>
-							<ns7:order-number>10205000</ns7:order-number>
-							<ns7:order-version>1</ns7:order-version>
-						</ns7:request-information>
-						<sdncadapterworkflow:WorkflowException>
-							<sdncadapterworkflow:ErrorMessage>Some Error Message - Fallout Handler</sdncadapterworkflow:ErrorMessage>
-							<sdncadapterworkflow:ErrorCode>Some Error Code - Fallout Handler</sdncadapterworkflow:ErrorCode>
-							<sdncadapterworkflow:SourceSystemErrorCode>Some Source System Error Code- Fallout Handler</sdncadapterworkflow:SourceSystemErrorCode>
-						</sdncadapterworkflow:WorkflowException>
-				</sdncadapterworkflow:FalloutHandlerRequest>
-		"""
-
-	private String falloutHandlerResponse = """<workflow:FalloutHandlerResponse xmlns:workflow="http://org.openecomp/mso/workflow/schema/v1">
-  <workflow:out>Fallout Handler Failed</workflow:out>
-</workflow:FalloutHandlerResponse>"""
-
-	@Test
-	public void testPreProcessRequest() {
-
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-
-		when(mockExecution.getVariable("FalloutHandlerRequest")).thenReturn(falloutHandlerRequest)
-		when(mockExecution.getVariable("URN_mso_adapters_db_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC");
-		when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7");
-
-		FalloutHandler falloutHandler = new FalloutHandler()
-		falloutHandler.preProcessRequest(mockExecution)
-
-		/* Initialize all the process request variables in this block */
-		verify(mockExecution).setVariable("prefix","FH_")
-		//verify(mockExecution).setVariable("getLayer3ServiceDetailsV1Response","")
-
-		//These variables are form the input Message to the BPMN
-		verify(mockExecution).setVariable("FH_request_id","")
-		verify(mockExecution).setVariable("FH_request_action","")
-		verify(mockExecution).setVariable("FH_notification-url","")
-		verify(mockExecution).setVariable("FH_mso-bpel-name","")
-		verify(mockExecution).setVariable("FH_ErrorCode", "")
-		verify(mockExecution).setVariable("FH_ErrorMessage", "")
-
-		verify(mockExecution).setVariable("FH_notification-url-Ok", false)
-		verify(mockExecution).setVariable("FH_request_id-Ok", false)
-
-		//These variables are for Get Mso Aai Password Adapter
-		verify(mockExecution).setVariable("FH_deliveryStatus", true)
-
-		//update Response Status to pending ...Adapter variables
-		verify(mockExecution).setVariable("FH_updateResponseStatusPayload", null)
-		verify(mockExecution).setVariable("FH_updateResponseStatusResponse", null)
-
-		//update Request Gamma ...Adapter variables
-		verify(mockExecution).setVariable("FH_updateRequestGammaPayload", "")
-		verify(mockExecution).setVariable("FH_updateRequestGammaResponse", null)
-		verify(mockExecution).setVariable("FH_updateRequestGammaResponseCode", null)
-
-		//update Request Infra ...Adapter variables
-		verify(mockExecution).setVariable("FH_updateRequestInfraPayload", "")
-		verify(mockExecution).setVariable("FH_updateRequestInfraResponse", null)
-		verify(mockExecution).setVariable("FH_updateRequestInfraResponseCode", null)
-
-		//assign False to success variable
-		verify(mockExecution).setVariable("FH_success", true)
-
-		//Set notify status to Failed variable
-		verify(mockExecution).setVariable("FH_NOTIFY_STATUS", "SUCCESS")
-
-		//Set DB update variable
-		verify(mockExecution).setVariable("FH_updateRequestPayload", "")
-		verify(mockExecution).setVariable("FH_updateRequestResponse", null)
-		verify(mockExecution).setVariable("FH_updateRequestResponseCode", null)
-
-		//Auth variables
-		verify(mockExecution).setVariable("BasicAuthHeaderValue","")
-
-		//Response variables
-		verify(mockExecution).setVariable("FalloutHandlerResponse","")
-		verify(mockExecution).setVariable("FH_ErrorResponse", null)
-		verify(mockExecution).setVariable("FH_ResponseCode", "")
-
-		verify(mockExecution).setVariable("FH_request_id-Ok",true)
-		verify(mockExecution).setVariable("FH_request_id","uCPE1020_STUW105_5002")
-		verify(mockExecution).setVariable("FH_request_action","Layer3ServiceActivateRequest")
-		verify(mockExecution).setVariable("FH_source","OMX")
-		verify(mockExecution).setVariable("FH_ErrorCode","Some Error Code - Fallout Handler")
-		verify(mockExecution).setVariable("FH_ErrorMessage","Some Error Message - Fallout Handler")
-
-	}
-
-	@Test
-	public void testpostProcessResponse(){
-
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
-		when(mockExecution.getVariable("FH_success")).thenReturn(false)
-
-		FalloutHandler falloutHandler = new FalloutHandler()
-		falloutHandler.postProcessResponse(mockExecution)
-
-		// Capture the arguments to setVariable
-		ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
-		ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
-		
-		verify(mockExecution, times(4)).setVariable(captor1.capture(), captor2.capture())
-		List<String> arg2List = captor2.getAllValues()
-		String payloadResponseActual = arg2List.get(1)
-		
-		assertEquals(falloutHandlerResponse.replaceAll("\\s+", ""), payloadResponseActual.replaceAll("\\s+", ""))
-		
-		verify(mockExecution).setVariable("FH_ResponseCode","500")
-	}
-
-	private String updateRequestPayload = """
-			<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://org.openecomp.mso/requestsdb">
-			<soapenv:Header/>
-			<soapenv:Body>
-			   <req:updateRequest>
-				  <requestId>testReqId</requestId>
-				  <lastModifiedBy>BPEL</lastModifiedBy>
-				  <finalErrorMessage>ErrorMessage</finalErrorMessage>
-				  <finalErrorCode>ErrorCode</finalErrorCode>
-				  <status>FAILED</status>
-				  <responseStatus>NotifyStatus</responseStatus>
-			   </req:updateRequest>
-			</soapenv:Body>
-		 </soapenv:Envelope>
-		"""
-	
-		@Test
-		public void testupdateRequestPayload(){
-	
-			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-			when(mockExecution.getVariable("FH_request_id")).thenReturn("testReqId")
-			when(mockExecution.getVariable("FH_ErrorMessage")).thenReturn("ErrorMessage")
-			when(mockExecution.getVariable("FH_ErrorCode")).thenReturn("ErrorCode")
-			when(mockExecution.getVariable("FH_NOTIFY_STATUS")).thenReturn("NotifyStatus")
-	
-			FalloutHandler falloutHandler = new FalloutHandler()
-			falloutHandler.updateRequestPayload(mockExecution)
-			
-			// Capture the arguments to setVariable
-			ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
-			ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
-			
-			verify(mockExecution, times(1)).setVariable(captor1.capture(), captor2.capture())
-			List<String> arg2List = captor2.getAllValues()
-			String payloadRequestActual = arg2List.get(0)
-			
-			assertEquals(updateRequestPayload.replaceAll("\\s+", ""), payloadRequestActual.replaceAll("\\s+", ""))
-		}
-		
-		private String updateRequestInfraPayload = """
-							<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://org.openecomp.mso/requestsdb">
-							   <soapenv:Header/>
-							   <soapenv:Body>
-							      <req:updateInfraRequest>
-							         <requestId>testReqId</requestId>
-							         <lastModifiedBy>BPEL</lastModifiedBy>
-									 <statusMessage>ErrorMessage</statusMessage>
-									 <requestStatus>FAILED</requestStatus>
-									 <progress>100</progress>
-							      </req:updateInfraRequest>
-							   </soapenv:Body>
-							</soapenv:Envelope>
-			"""
-		
-			@Test
-			public void testupdateRequestInfraPayload(){
-		
-				ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-				when(mockExecution.getVariable("FH_request_id")).thenReturn("testReqId")
-				when(mockExecution.getVariable("FH_ErrorMessage")).thenReturn("ErrorMessage")
-		
-				FalloutHandler falloutHandler = new FalloutHandler()
-				falloutHandler.updateRequestInfraPayload(mockExecution)
-				
-				// Capture the arguments to setVariable
-				ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
-				ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
-				
-				verify(mockExecution, times(1)).setVariable(captor1.capture(), captor2.capture())
-				List<String> arg2List = captor2.getAllValues()
-				String payloadRequestActual = arg2List.get(0)
-		
-				assertEquals(updateRequestInfraPayload.replaceAll("\\s+", ""), payloadRequestActual.replaceAll("\\s+", ""))
-			}
-			
-			private String updateRequestGammaPayload = """
-			<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://org.openecomp.mso/requestsdb">
-			<soapenv:Header/>
-			<soapenv:Body>
-			   <req:updateRequest>
-				  <requestId>testReqId</requestId>
-				  <lastModifiedBy>BPEL</lastModifiedBy>
-				  <finalErrorMessage>ErrorMessage</finalErrorMessage>
-				  <finalErrorCode>ErrorCode</finalErrorCode>
-				  <status>FAILED</status>
-			   </req:updateRequest>
-			</soapenv:Body>
-		 </soapenv:Envelope>
-		"""
-			
-		@Test
-		public void testupdateRequestGammaPayload(){
-	
-			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-			when(mockExecution.getVariable("FH_request_id")).thenReturn("testReqId")
-			when(mockExecution.getVariable("FH_ErrorMessage")).thenReturn("ErrorMessage")
-			when(mockExecution.getVariable("FH_ErrorCode")).thenReturn("ErrorCode")
-
-			FalloutHandler falloutHandler = new FalloutHandler()
-			falloutHandler.updateRequestGammaPayload(mockExecution)
-	
-			// Capture the arguments to setVariable
-			ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
-			ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
-			
-			verify(mockExecution, times(1)).setVariable(captor1.capture(), captor2.capture())
-			List<String> arg2List = captor2.getAllValues()
-			String payloadRequestActual = arg2List.get(0)
-			
-			assertEquals(updateRequestGammaPayload.replaceAll("\\s+", ""), payloadRequestActual.replaceAll("\\s+", ""))
-		}
-	
-		
-		String updateResponseStatusPayload = """
-			<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://org.openecomp.mso/requestsdb">
-			<soapenv:Header/>
-			<soapenv:Body>
-			   <req:updateResponseStatus>
-				  <requestId>testReqId</requestId>
-				  <lastModifiedBy>BPEL</lastModifiedBy>
-				  <responseStatus>SENDING_FINAL_NOTIFY</responseStatus>
-			   </req:updateResponseStatus>
-			</soapenv:Body>
-		 </soapenv:Envelope>
-		"""
-		
-		@Test
-		public void testupdateResponseStatusPayload(){
-	
-			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-			when(mockExecution.getVariable("FH_request_id")).thenReturn("testReqId")
-
-			FalloutHandler falloutHandler = new FalloutHandler()
-			falloutHandler.updateResponseStatusPayload(mockExecution)
-			
-			// Capture the arguments to setVariable
-			ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
-			ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
-			
-			verify(mockExecution, times(1)).setVariable(captor1.capture(), captor2.capture())
-			List<String> arg2List = captor2.getAllValues()
-			String payloadResponseActual = arg2List.get(0)
-	
-			assertEquals(updateResponseStatusPayload.replaceAll("\\s+", ""), payloadResponseActual.replaceAll("\\s+", ""))
-		}
-
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common.scripts
+
+import org.junit.runner.RunWith;
+import static org.mockito.Mockito.*
+import static org.junit.Assert.*;
+
+import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor;
+import org.mockito.MockitoAnnotations
+import org.mockito.runners.MockitoJUnitRunner
+import org.openecomp.mso.bpmn.common.scripts.MsoUtils;
+import org.openecomp.mso.bpmn.common.scripts.FalloutHandler;
+
+@RunWith(MockitoJUnitRunner.class)
+class FalloutHandlerTest {
+	
+	public MsoUtils utils = new MsoUtils()
+	
+	@Before
+	public void init() {
+		MockitoAnnotations.initMocks(this)
+	}
+
+	private String falloutHandlerRequest = """
+				<sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:ns7="http://org.openecomp/mso/request/types/v1">
+						<ns7:request-information>
+							<ns7:request-id>uCPE1020_STUW105_5002</ns7:request-id>
+							<ns7:request-action>Layer3ServiceActivateRequest</ns7:request-action>
+							<ns7:request-sub-action>CANCEL</ns7:request-sub-action>
+							<ns7:source>OMX</ns7:source>
+							<ns7:order-number>10205000</ns7:order-number>
+							<ns7:order-version>1</ns7:order-version>
+						</ns7:request-information>
+						<sdncadapterworkflow:WorkflowException>
+							<sdncadapterworkflow:ErrorMessage>Some Error Message - Fallout Handler</sdncadapterworkflow:ErrorMessage>
+							<sdncadapterworkflow:ErrorCode>Some Error Code - Fallout Handler</sdncadapterworkflow:ErrorCode>
+							<sdncadapterworkflow:SourceSystemErrorCode>Some Source System Error Code- Fallout Handler</sdncadapterworkflow:SourceSystemErrorCode>
+						</sdncadapterworkflow:WorkflowException>
+				</sdncadapterworkflow:FalloutHandlerRequest>
+		"""
+
+	private String falloutHandlerResponse = """<workflow:FalloutHandlerResponse xmlns:workflow="http://org.openecomp/mso/workflow/schema/v1">
+  <workflow:out>Fallout Handler Failed</workflow:out>
+</workflow:FalloutHandlerResponse>"""
+
+	@Test
+	public void testPreProcessRequest() {
+
+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+
+		when(mockExecution.getVariable("FalloutHandlerRequest")).thenReturn(falloutHandlerRequest)
+		when(mockExecution.getVariable("URN_mso_adapters_db_auth")).thenReturn("757A94191D685FD2092AC1490730A4FC");
+		when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7");
+
+		FalloutHandler falloutHandler = new FalloutHandler()
+		falloutHandler.preProcessRequest(mockExecution)
+
+		/* Initialize all the process request variables in this block */
+		verify(mockExecution).setVariable("prefix","FH_")
+		//verify(mockExecution).setVariable("getLayer3ServiceDetailsV1Response","")
+
+		//These variables are form the input Message to the BPMN
+		verify(mockExecution).setVariable("FH_request_id","")
+		verify(mockExecution).setVariable("FH_request_action","")
+		verify(mockExecution).setVariable("FH_notification-url","")
+		verify(mockExecution).setVariable("FH_mso-bpel-name","")
+		verify(mockExecution).setVariable("FH_ErrorCode", "")
+		verify(mockExecution).setVariable("FH_ErrorMessage", "")
+
+		verify(mockExecution).setVariable("FH_notification-url-Ok", false)
+		verify(mockExecution).setVariable("FH_request_id-Ok", false)
+
+		//These variables are for Get Mso Aai Password Adapter
+		verify(mockExecution).setVariable("FH_deliveryStatus", true)
+
+		//update Response Status to pending ...Adapter variables
+		verify(mockExecution).setVariable("FH_updateResponseStatusPayload", null)
+		verify(mockExecution).setVariable("FH_updateResponseStatusResponse", null)
+
+		//update Request Gamma ...Adapter variables
+		verify(mockExecution).setVariable("FH_updateRequestGammaPayload", "")
+		verify(mockExecution).setVariable("FH_updateRequestGammaResponse", null)
+		verify(mockExecution).setVariable("FH_updateRequestGammaResponseCode", null)
+
+		//update Request Infra ...Adapter variables
+		verify(mockExecution).setVariable("FH_updateRequestInfraPayload", "")
+		verify(mockExecution).setVariable("FH_updateRequestInfraResponse", null)
+		verify(mockExecution).setVariable("FH_updateRequestInfraResponseCode", null)
+
+		//assign False to success variable
+		verify(mockExecution).setVariable("FH_success", true)
+
+		//Set notify status to Failed variable
+		verify(mockExecution).setVariable("FH_NOTIFY_STATUS", "SUCCESS")
+
+		//Set DB update variable
+		verify(mockExecution).setVariable("FH_updateRequestPayload", "")
+		verify(mockExecution).setVariable("FH_updateRequestResponse", null)
+		verify(mockExecution).setVariable("FH_updateRequestResponseCode", null)
+
+		//Auth variables
+		verify(mockExecution).setVariable("BasicAuthHeaderValue","")
+
+		//Response variables
+		verify(mockExecution).setVariable("FalloutHandlerResponse","")
+		verify(mockExecution).setVariable("FH_ErrorResponse", null)
+		verify(mockExecution).setVariable("FH_ResponseCode", "")
+
+		verify(mockExecution).setVariable("FH_request_id-Ok",true)
+		verify(mockExecution).setVariable("FH_request_id","uCPE1020_STUW105_5002")
+		verify(mockExecution).setVariable("FH_request_action","Layer3ServiceActivateRequest")
+		verify(mockExecution).setVariable("FH_source","OMX")
+		verify(mockExecution).setVariable("FH_ErrorCode","Some Error Code - Fallout Handler")
+		verify(mockExecution).setVariable("FH_ErrorMessage","Some Error Message - Fallout Handler")
+
+	}
+
+	@Test
+	public void testpostProcessResponse(){
+
+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+		when(mockExecution.getVariable("FH_success")).thenReturn(false)
+
+		FalloutHandler falloutHandler = new FalloutHandler()
+		falloutHandler.postProcessResponse(mockExecution)
+
+		// Capture the arguments to setVariable
+		ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
+		ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
+		
+		verify(mockExecution, times(4)).setVariable(captor1.capture(), captor2.capture())
+		List<String> arg2List = captor2.getAllValues()
+		String payloadResponseActual = arg2List.get(1)
+		
+		assertEquals(falloutHandlerResponse.replaceAll("\\s+", ""), payloadResponseActual.replaceAll("\\s+", ""))
+		
+		verify(mockExecution).setVariable("FH_ResponseCode","500")
+	}
+
+	private String updateRequestPayload = """
+			<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://org.openecomp.mso/requestsdb">
+			<soapenv:Header/>
+			<soapenv:Body>
+			   <req:updateRequest>
+				  <requestId>testReqId</requestId>
+				  <lastModifiedBy>BPEL</lastModifiedBy>
+				  <finalErrorMessage>ErrorMessage</finalErrorMessage>
+				  <finalErrorCode>ErrorCode</finalErrorCode>
+				  <status>FAILED</status>
+				  <responseStatus>NotifyStatus</responseStatus>
+			   </req:updateRequest>
+			</soapenv:Body>
+		 </soapenv:Envelope>
+		"""
+	
+		@Test
+		public void testupdateRequestPayload(){
+	
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			when(mockExecution.getVariable("FH_request_id")).thenReturn("testReqId")
+			when(mockExecution.getVariable("FH_ErrorMessage")).thenReturn("ErrorMessage")
+			when(mockExecution.getVariable("FH_ErrorCode")).thenReturn("ErrorCode")
+			when(mockExecution.getVariable("FH_NOTIFY_STATUS")).thenReturn("NotifyStatus")
+	
+			FalloutHandler falloutHandler = new FalloutHandler()
+			falloutHandler.updateRequestPayload(mockExecution)
+			
+			// Capture the arguments to setVariable
+			ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
+			ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
+			
+			verify(mockExecution, times(1)).setVariable(captor1.capture(), captor2.capture())
+			List<String> arg2List = captor2.getAllValues()
+			String payloadRequestActual = arg2List.get(0)
+			
+			assertEquals(updateRequestPayload.replaceAll("\\s+", ""), payloadRequestActual.replaceAll("\\s+", ""))
+		}
+		
+		private String updateRequestInfraPayload = """
+							<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://org.openecomp.mso/requestsdb">
+							   <soapenv:Header/>
+							   <soapenv:Body>
+							      <req:updateInfraRequest>
+							         <requestId>testReqId</requestId>
+							         <lastModifiedBy>BPEL</lastModifiedBy>
+									 <statusMessage>ErrorMessage</statusMessage>
+									 <requestStatus>FAILED</requestStatus>
+									 <progress>100</progress>
+							      </req:updateInfraRequest>
+							   </soapenv:Body>
+							</soapenv:Envelope>
+			"""
+		
+			@Test
+			public void testupdateRequestInfraPayload(){
+		
+				ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+				when(mockExecution.getVariable("FH_request_id")).thenReturn("testReqId")
+				when(mockExecution.getVariable("FH_ErrorMessage")).thenReturn("ErrorMessage")
+		
+				FalloutHandler falloutHandler = new FalloutHandler()
+				falloutHandler.updateRequestInfraPayload(mockExecution)
+				
+				// Capture the arguments to setVariable
+				ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
+				ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
+				
+				verify(mockExecution, times(1)).setVariable(captor1.capture(), captor2.capture())
+				List<String> arg2List = captor2.getAllValues()
+				String payloadRequestActual = arg2List.get(0)
+		
+				assertEquals(updateRequestInfraPayload.replaceAll("\\s+", ""), payloadRequestActual.replaceAll("\\s+", ""))
+			}
+			
+			private String updateRequestGammaPayload = """
+			<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://org.openecomp.mso/requestsdb">
+			<soapenv:Header/>
+			<soapenv:Body>
+			   <req:updateRequest>
+				  <requestId>testReqId</requestId>
+				  <lastModifiedBy>BPEL</lastModifiedBy>
+				  <finalErrorMessage>ErrorMessage</finalErrorMessage>
+				  <finalErrorCode>ErrorCode</finalErrorCode>
+				  <status>FAILED</status>
+			   </req:updateRequest>
+			</soapenv:Body>
+		 </soapenv:Envelope>
+		"""
+			
+		@Test
+		public void testupdateRequestGammaPayload(){
+	
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			when(mockExecution.getVariable("FH_request_id")).thenReturn("testReqId")
+			when(mockExecution.getVariable("FH_ErrorMessage")).thenReturn("ErrorMessage")
+			when(mockExecution.getVariable("FH_ErrorCode")).thenReturn("ErrorCode")
+
+			FalloutHandler falloutHandler = new FalloutHandler()
+			falloutHandler.updateRequestGammaPayload(mockExecution)
+	
+			// Capture the arguments to setVariable
+			ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
+			ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
+			
+			verify(mockExecution, times(1)).setVariable(captor1.capture(), captor2.capture())
+			List<String> arg2List = captor2.getAllValues()
+			String payloadRequestActual = arg2List.get(0)
+			
+			assertEquals(updateRequestGammaPayload.replaceAll("\\s+", ""), payloadRequestActual.replaceAll("\\s+", ""))
+		}
+	
+		
+		String updateResponseStatusPayload = """
+			<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://org.openecomp.mso/requestsdb">
+			<soapenv:Header/>
+			<soapenv:Body>
+			   <req:updateResponseStatus>
+				  <requestId>testReqId</requestId>
+				  <lastModifiedBy>BPEL</lastModifiedBy>
+				  <responseStatus>SENDING_FINAL_NOTIFY</responseStatus>
+			   </req:updateResponseStatus>
+			</soapenv:Body>
+		 </soapenv:Envelope>
+		"""
+		
+		@Test
+		public void testupdateResponseStatusPayload(){
+	
+			ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+			when(mockExecution.getVariable("FH_request_id")).thenReturn("testReqId")
+
+			FalloutHandler falloutHandler = new FalloutHandler()
+			falloutHandler.updateResponseStatusPayload(mockExecution)
+			
+			// Capture the arguments to setVariable
+			ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class);
+			ArgumentCaptor<String> captor2 = ArgumentCaptor.forClass(String.class);
+			
+			verify(mockExecution, times(1)).setVariable(captor1.capture(), captor2.capture())
+			List<String> arg2List = captor2.getAllValues()
+			String payloadResponseActual = arg2List.get(0)
+	
+			assertEquals(updateResponseStatusPayload.replaceAll("\\s+", ""), payloadResponseActual.replaceAll("\\s+", ""))
+		}
+
 }
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/SDNCAdapterTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/SDNCAdapterTest.groovy
index f71e4d2..014dba6 100644
--- a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/SDNCAdapterTest.groovy
+++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/SDNCAdapterTest.groovy
@@ -1,948 +1,948 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common.scripts;
-
-import static org.mockito.Mockito.*
-
-import org.camunda.bpm.engine.ProcessEngineServices
-import org.camunda.bpm.engine.RepositoryService
-import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
-import org.camunda.bpm.engine.repository.ProcessDefinition
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.MockitoAnnotations
-import org.mockito.runners.MockitoJUnitRunner
-import org.mockito.internal.debugging.MockitoDebuggerImpl
-import org.openecomp.mso.bpmn.common.scripts.SDNCAdapter;
-
-import org.openecomp.mso.bpmn.mock.FileUtil
-
-@RunWith(MockitoJUnitRunner.class)
-public class SDNCAdapterTest {
-	
-	@Before
-	public void init()
-	{
-		MockitoAnnotations.initMocks(this)
-		System.setProperty("jboss.qualified.host.name","myhost.att.com")
-	}
-
-	
-	def workflowResponse = """<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>testRequestId</tag0:RequestId>
-         <tag0:ResponseCode>200</tag0:ResponseCode>
-         <tag0:ResponseMessage>OK</tag0:ResponseMessage>
-      </tag0:CallbackHeader>
-      <tag0:RequestData xsi:type="xs:string">				&lt;layer3-service-list xmlns="com:att:sdnctl:l3api"&gt;
-					&lt;service-instance-id&gt;FK/VLXM/003717//SW_INTERNET&lt;/service-instance-id&gt;
-					&lt;service-status&gt;
-						&lt;rpc-name&gt;service-configuration-operation&lt;/rpc-name&gt;
-						&lt;rpc-action&gt;activate&lt;/rpc-action&gt;
-						&lt;request-status&gt;synccomplete&lt;/request-status&gt;
-						&lt;final-indicator&gt;N&lt;/final-indicator&gt;
-						&lt;l3sdn-action&gt;Layer3ServiceActivateRequest&lt;/l3sdn-action&gt;
-						&lt;l3sdn-subaction&gt;SUPP&lt;/l3sdn-subaction&gt;
-						&lt;response-timestamp&gt;2015-04-28T21:32:11.386Z&lt;/response-timestamp&gt;
-					&lt;/service-status&gt;
-					&lt;service-data&gt;
-						&lt;internet-evc-access-information&gt;
-							&lt;ip-version&gt;ds&lt;/ip-version&gt;
-							&lt;internet-evc-speed-value&gt;8&lt;/internet-evc-speed-value&gt;
-							&lt;internet-evc-speed-units&gt;Mbps&lt;/internet-evc-speed-units&gt;
-						&lt;/internet-evc-access-information&gt;
-						&lt;vr-lan xmlns="com:att:sdnctl:l3api"&gt;
-							&lt;vr-lan-interface&gt;
-								&lt;static-routes&gt;
-									&lt;v6-static-routes&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-static-route-prefix&gt;2001:1890:12e3:2da::&lt;/v6-static-route-prefix&gt;
-										&lt;v6-static-route-prefix-length&gt;28&lt;/v6-static-route-prefix-length&gt;
-									&lt;/v6-static-routes&gt;
-									&lt;v4-static-routes&gt;
-										&lt;v4-static-route-prefix&gt;255.255.252.1&lt;/v4-static-route-prefix&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
-										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
-									&lt;/v4-static-routes&gt;
-									&lt;v6-static-routes&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-static-route-prefix&gt;2001:1890:12e3:2da::&lt;/v6-static-route-prefix&gt;
-										&lt;v6-static-route-prefix-length&gt;28&lt;/v6-static-route-prefix-length&gt;
-									&lt;/v6-static-routes&gt;
-									&lt;v4-static-routes&gt;
-										&lt;v4-static-route-prefix&gt;255.255.252.2&lt;/v4-static-route-prefix&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
-										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
-									&lt;/v4-static-routes&gt;
-									&lt;v4-static-routes&gt;
-										&lt;v4-static-route-prefix&gt;255.255.252.3&lt;/v4-static-route-prefix&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
-										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
-									&lt;/v4-static-routes&gt;
-								&lt;/static-routes&gt;
-								&lt;dhcp&gt;
-									&lt;v6-dhcp-server-enabled&gt;N&lt;/v6-dhcp-server-enabled&gt;
-									&lt;v4-dhcp-server-enabled&gt;Y&lt;/v4-dhcp-server-enabled&gt;
-									&lt;use-v6-default-pool&gt;N&lt;/use-v6-default-pool&gt;
-									&lt;excluded-v4-dhcp-addresses-from-default-pool&gt;
-									  &lt;excluded-v4-address&gt;192.168.1.7&lt;/excluded-v4-address&gt;
-									&lt;/excluded-v4-dhcp-addresses-from-default-pool&gt;
-									&lt;excluded-v4-dhcp-addresses-from-default-pool&gt;
-									  &lt;excluded-v4-address&gt;192.168.1.8&lt;/excluded-v4-address&gt;
-									&lt;/excluded-v4-dhcp-addresses-from-default-pool&gt;
-									&lt;v4-dhcp-pools&gt;
-										&lt;v4-dhcp-relay-next-hop-address&gt;1.1.1.1&lt;/v4-dhcp-relay-next-hop-address&gt;
-										&lt;v4-dhcp-pool-prefix-length&gt;28&lt;/v4-dhcp-pool-prefix-length&gt;
-										&lt;excluded-v4-addresses&gt;
-											&lt;excluded-v4-address&gt;192.168.1.5&lt;/excluded-v4-address&gt;
-										&lt;/excluded-v4-addresses&gt;
-										&lt;v4-dhcp-relay-gateway-address&gt;2.2.2.1&lt;/v4-dhcp-relay-gateway-address&gt;
-										&lt;excluded-v4-addresses&gt;
-											&lt;excluded-v4-address&gt;192.168.1.6&lt;/excluded-v4-address&gt;
-										&lt;/excluded-v4-addresses&gt;
-										&lt;v4-dhcp-pool-prefix&gt;192.155.2.3&lt;/v4-dhcp-pool-prefix&gt;
-									&lt;/v4-dhcp-pools&gt;
-									&lt;v4-dhcp-pools&gt;
-										&lt;v4-dhcp-relay-next-hop-address&gt;1.1.1.2&lt;/v4-dhcp-relay-next-hop-address&gt;
-										&lt;v4-dhcp-pool-prefix-length&gt;28&lt;/v4-dhcp-pool-prefix-length&gt;
-										&lt;excluded-v4-addresses&gt;
-											&lt;excluded-v4-address&gt;192.168.1.6&lt;/excluded-v4-address&gt;
-										&lt;/excluded-v4-addresses&gt;
-										&lt;v4-dhcp-relay-gateway-address&gt;2.2.2.2&lt;/v4-dhcp-relay-gateway-address&gt;
-										&lt;excluded-v4-addresses&gt;
-											&lt;excluded-v4-address&gt;192.168.1.7&lt;/excluded-v4-address&gt;
-										&lt;/excluded-v4-addresses&gt;
-										&lt;v4-dhcp-pool-prefix&gt;192.155.2.4&lt;/v4-dhcp-pool-prefix&gt;
-									&lt;/v4-dhcp-pools&gt;									
-									&lt;use-v4-default-pool&gt;Y&lt;/use-v4-default-pool&gt;
-									&lt;excluded-v6-dhcp-addresses-from-default-pool&gt;
-									  &lt;excluded-v6-address&gt;1:5&lt;/excluded-v6-address&gt;
-									&lt;/excluded-v6-dhcp-addresses-from-default-pool&gt;
-									&lt;excluded-v6-dhcp-addresses-from-default-pool&gt;
-									  &lt;excluded-v6-address&gt;1:6&lt;/excluded-v6-address&gt;
-									&lt;/excluded-v6-dhcp-addresses-from-default-pool&gt;
-									&lt;v6-dhcp-pools&gt;
-										&lt;v6-dhcp-relay-next-hop-address&gt;4:4&lt;/v6-dhcp-relay-next-hop-address&gt;
-										&lt;v6-dhcp-pool-prefix-length&gt;28&lt;/v6-dhcp-pool-prefix-length&gt;
-										&lt;excluded-v6-addresses&gt;
-											&lt;excluded-v6-address&gt;1:1&lt;/excluded-v6-address&gt;
-										&lt;/excluded-v6-addresses&gt;
-										&lt;v6-dhcp-relay-gateway-address&gt;3:3&lt;/v6-dhcp-relay-gateway-address&gt;
-										&lt;excluded-v6-addresses&gt;
-											&lt;excluded-v6-address&gt;2:2&lt;/excluded-v6-address&gt;
-										&lt;/excluded-v6-addresses&gt;
-										&lt;v6-dhcp-pool-prefix&gt;0:0&lt;/v6-dhcp-pool-prefix&gt;
-									&lt;/v6-dhcp-pools&gt;
-									&lt;v6-dhcp-pools&gt;
-										&lt;v6-dhcp-relay-next-hop-address&gt;4:4&lt;/v6-dhcp-relay-next-hop-address&gt;
-										&lt;v6-dhcp-pool-prefix-length&gt;28&lt;/v6-dhcp-pool-prefix-length&gt;
-										&lt;excluded-v6-addresses&gt;
-											&lt;excluded-v6-address&gt;1:1&lt;/excluded-v6-address&gt;
-										&lt;/excluded-v6-addresses&gt;
-										&lt;v6-dhcp-relay-gateway-address&gt;3:3&lt;/v6-dhcp-relay-gateway-address&gt;
-										&lt;excluded-v6-addresses&gt;
-											&lt;excluded-v6-address&gt;2:2&lt;/excluded-v6-address&gt;
-										&lt;/excluded-v6-addresses&gt;
-										&lt;v6-dhcp-pool-prefix&gt;0:0&lt;/v6-dhcp-pool-prefix&gt;
-									&lt;/v6-dhcp-pools&gt;									
-								&lt;/dhcp&gt;
-								&lt;firewall-lite&gt;
-									&lt;stateful-firewall-lite-v6-enabled&gt;N&lt;/stateful-firewall-lite-v6-enabled&gt;
-									&lt;stateful-firewall-lite-v4-enabled&gt;Y&lt;/stateful-firewall-lite-v4-enabled&gt;
-									&lt;v4-firewall-packet-filters&gt;
-									  &lt;v4-firewall-prefix&gt;0.0.0.1&lt;/v4-firewall-prefix&gt;
-									  &lt;v4-firewall-prefix-length&gt;1&lt;/v4-firewall-prefix-length&gt;
-									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
-									  &lt;udp-ports&gt;
-									    &lt;port-number&gt;1&lt;/port-number&gt;
-									  &lt;/udp-ports&gt;
-									  &lt;tcp-ports&gt;
-									    &lt;port-number&gt;1&lt;/port-number&gt;
-									  &lt;/tcp-ports&gt;
-									&lt;/v4-firewall-packet-filters&gt;
-									&lt;v4-firewall-packet-filters&gt;
-									  &lt;v4-firewall-prefix&gt;0.0.0.2&lt;/v4-firewall-prefix&gt;
-									  &lt;v4-firewall-prefix-length&gt;2&lt;/v4-firewall-prefix-length&gt;
-									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
-									  &lt;udp-ports&gt;
-									    &lt;port-number&gt;2&lt;/port-number&gt;
-									  &lt;/udp-ports&gt;
-									  &lt;tcp-ports&gt;
-									    &lt;port-number&gt;2&lt;/port-number&gt;
-									  &lt;/tcp-ports&gt;
-									&lt;/v4-firewall-packet-filters&gt;
-									&lt;v6-firewall-packet-filters&gt;
-									  &lt;v6-firewall-prefix&gt;:&lt;/v6-firewall-prefix&gt;
-									  &lt;v6-firewall-prefix-length&gt;0&lt;/v6-firewall-prefix-length&gt;
-									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
-									  &lt;udp-ports&gt;
-									    &lt;port-number&gt;3&lt;/port-number&gt;
-									  &lt;/udp-ports&gt;
-									  &lt;tcp-ports&gt;
-									    &lt;port-number&gt;3&lt;/port-number&gt;
-									  &lt;/tcp-ports&gt;
-									&lt;/v6-firewall-packet-filters&gt;
-									&lt;v6-firewall-packet-filters&gt;
-									  &lt;v6-firewall-prefix&gt;:&lt;/v6-firewall-prefix&gt;
-									  &lt;v6-firewall-prefix-length&gt;1&lt;/v6-firewall-prefix-length&gt;
-									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
-									  &lt;udp-ports&gt;
-									    &lt;port-number&gt;4&lt;/port-number&gt;
-									  &lt;/udp-ports&gt;
-									  &lt;tcp-ports&gt;
-									    &lt;port-number&gt;4&lt;/port-number&gt;
-									  &lt;/tcp-ports&gt;
-									&lt;/v6-firewall-packet-filters&gt;
-								&lt;/firewall-lite&gt;
-								&lt;pat&gt;
-									&lt;v4-pat-pools&gt;
-										&lt;v4-pat-pool-prefix&gt;192.168.1.44&lt;/v4-pat-pool-prefix&gt;
-										&lt;v4-pat-pool-next-hop-address&gt;192.168.1.5&lt;/v4-pat-pool-next-hop-address&gt;
-										&lt;v4-pat-pool-prefix-length&gt;0&lt;/v4-pat-pool-prefix-length&gt;
-									&lt;/v4-pat-pools&gt;
-									&lt;use-v4-default-pool&gt;Y&lt;/use-v4-default-pool&gt;
-									&lt;v4-pat-enabled&gt;N&lt;/v4-pat-enabled&gt;
-									&lt;v4-pat-pools&gt;
-										&lt;v4-pat-pool-prefix&gt;192.168.1.45&lt;/v4-pat-pool-prefix&gt;
-										&lt;v4-pat-pool-next-hop-address&gt;192.168.1.6&lt;/v4-pat-pool-next-hop-address&gt;
-										&lt;v4-pat-pool-prefix-length&gt;28&lt;/v4-pat-pool-prefix-length&gt;
-									&lt;/v4-pat-pools&gt;
-								&lt;/pat&gt;
-								&lt;nat&gt;
-								  &lt;v4-nat-enabled&gt;Y&lt;/v4-nat-enabled&gt;
-								  &lt;v4-nat-mapping-entries&gt;
-								    &lt;v4-nat-internal&gt;0.0.0.0&lt;/v4-nat-internal&gt;
-								    &lt;v4-nat-next-hop-address&gt;0.0.0.0&lt;/v4-nat-next-hop-address&gt;
-								    &lt;v4-nat-external&gt;0.0.0.0&lt;/v4-nat-external&gt;
-								  &lt;/v4-nat-mapping-entries&gt;
-								  &lt;v4-nat-mapping-entries&gt;
-								    &lt;v4-nat-internal&gt;0.0.0.1&lt;/v4-nat-internal&gt;
-								    &lt;v4-nat-next-hop-address&gt;0.0.0.1&lt;/v4-nat-next-hop-address&gt;
-								    &lt;v4-nat-external&gt;0.0.0.1&lt;/v4-nat-external&gt;
-								  &lt;/v4-nat-mapping-entries&gt;
-								&lt;/nat&gt;
-								&lt;vr-designation&gt;primary&lt;/vr-designation&gt;
-								&lt;v4-vce-loopback-address&gt;162.200.3.144&lt;/v4-vce-loopback-address&gt;
-								&lt;v6-vr-lan-prefix-length&gt;64&lt;/v6-vr-lan-prefix-length&gt;
-								&lt;v6-vce-wan-address&gt;2001:1890:12e3:2da::&lt;/v6-vce-wan-address&gt;
-								&lt;v6-vr-lan-prefix&gt;2620:0:10d0:f:ffff:ffff:ffff:fffe&lt;/v6-vr-lan-prefix&gt;
-								&lt;v4-vr-lan-prefix-length&gt;24&lt;/v4-vr-lan-prefix-length&gt;
-								&lt;v4-vr-lan-prefix&gt;10.192.27.254&lt;/v4-vr-lan-prefix&gt;
-								&lt;v4-public-lan-prefixes&gt;
-									&lt;t-provided-v4-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.2&lt;/v4-next-hop-address&gt;
-										&lt;v4-lan-public-prefix&gt;192.168.1.1&lt;/v4-lan-public-prefix&gt;
-										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-									&lt;/t-provided-v4-lan-public-prefixes&gt;
-									&lt;t-provided-v4-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.72&lt;/v4-next-hop-address&gt;
-										&lt;v4-lan-public-prefix&gt;192.168.1.71&lt;/v4-lan-public-prefix&gt;
-										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-									&lt;/t-provided-v4-lan-public-prefixes&gt;
-									&lt;t-provided-v4-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.68&lt;/v4-next-hop-address&gt;
-										&lt;v4-lan-public-prefix&gt;192.168.1.67&lt;/v4-lan-public-prefix&gt;
-										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-									&lt;/t-provided-v4-lan-public-prefixes&gt;
-								&lt;/v4-public-lan-prefixes&gt;
-								&lt;v6-public-lan-prefixes&gt;
-									&lt;t-provided-v6-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
-										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-									&lt;/t-provided-v6-lan-public-prefixes&gt;
-									&lt;t-provided-v6-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:3da::&lt;/v6-lan-public-prefix&gt;
-										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-									&lt;/t-provided-v6-lan-public-prefixes&gt;
-									&lt;t-provided-v6-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:4da::&lt;/v6-lan-public-prefix&gt;
-										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-									&lt;/t-provided-v6-lan-public-prefixes&gt;
-								&lt;/v6-public-lan-prefixes&gt;
-							&lt;/vr-lan-interface&gt;
-							&lt;routing-protocol&gt;none&lt;/routing-protocol&gt;
-						&lt;/vr-lan&gt;
-&lt;ucpe-vms-service-information&gt;				
- &lt;transport-service-information&gt;
-    &lt;transport-service-type&gt;AVPN&lt;/transport-service-type&gt;
-	&lt;access-circuit-info&gt;
-	   &lt;access-circuit-id&gt;1&lt;/access-circuit-id&gt;
-	   &lt;dual-mode&gt;Active&lt;/dual-mode&gt;
-	&lt;/access-circuit-info&gt;
-	&lt;access-circuit-info&gt;
-	   &lt;access-circuit-id&gt;2&lt;/access-circuit-id&gt;
-	   &lt;dual-mode&gt;Standby&lt;/dual-mode&gt;
-	&lt;/access-circuit-info&gt;	
- &lt;/transport-service-information&gt;
- &lt;ucpe-information&gt;
-    &lt;ucpe-host-name&gt;hostname&lt;/ucpe-host-name&gt;
-    &lt;ucpe-activation-code&gt;activecode&lt;/ucpe-activation-code&gt;
-    &lt;out-of-band-management-modem&gt;OOB&lt;/out-of-band-management-modem&gt;
-  &lt;/ucpe-information&gt;
-  &lt;vnf-list&gt;
-	&lt;vnf-information&gt; 
-		&lt;vnf-instance-id&gt;1&lt;/vnf-instance-id&gt; 
-		&lt;vnf-sequence-number&gt;1&lt;/vnf-sequence-number&gt;
-		&lt;vnf-type&gt;ZZ&lt;/vnf-type&gt;
-		&lt;vnf-vendor&gt;JUNIPER&lt;/vnf-vendor&gt;
-		&lt;vnf-model&gt;MODEL1&lt;/vnf-model&gt;
-		&lt;vnf-id&gt;1&lt;/vnf-id&gt;
-		&lt;prov-status&gt;1&lt;/prov-status&gt;
-		&lt;operational-state&gt;1&lt;/operational-state&gt;
-		&lt;orchestration-status&gt;1&lt;/orchestration-status&gt;
-		&lt;equipment-role&gt;1&lt;/equipment-role&gt;
-    &lt;/vnf-information&gt;
-	&lt;vnf-information&gt; 
-		&lt;vnf-instance-id&gt;2&lt;/vnf-instance-id&gt; 
-		&lt;vnf-sequence-number&gt;2&lt;/vnf-sequence-number&gt;
-		&lt;vnf-type&gt;HY&lt;/vnf-type&gt;
-		&lt;vnf-vendor&gt;JUNIPER&lt;/vnf-vendor&gt;
-		&lt;vnf-model&gt;MODEL2&lt;/vnf-model&gt;
-		&lt;vnf-id&gt;2&lt;/vnf-id&gt;
-		&lt;prov-status&gt;2&lt;/prov-status&gt;
-		&lt;operational-state&gt;2&lt;/operational-state&gt;
-		&lt;orchestration-status&gt;2&lt;/orchestration-status&gt;
-		&lt;equipment-role&gt;2&lt;/equipment-role&gt;
-    &lt;/vnf-information&gt;					
-  &lt;/vnf-list&gt;
- &lt;/ucpe-vms-service-information&gt;										
-						&lt;request-information&gt;
-							&lt;request-action&gt;Layer3ServiceActivateRequest&lt;/request-action&gt;
-							&lt;order-number&gt;4281555&lt;/order-number&gt;
-							&lt;request-id&gt;155415ab-b4a7-4382-b4c6-d17d9sm42855&lt;/request-id&gt;
-							&lt;notification-url&gt;https://csi-tst-q22.it.att.com:22443/Services/com/cingular/csi/sdn/SendManagedNetworkStatusNotification.jws&lt;/notification-url&gt;
-							&lt;source&gt;OMX&lt;/source&gt;
-							&lt;order-version&gt;1&lt;/order-version&gt;
-						&lt;/request-information&gt;
-						&lt;sdnc-request-header&gt;
-							&lt;svc-action&gt;activate&lt;/svc-action&gt;
-							&lt;svc-notification-url&gt;https://msojra.mtsnjdcp1.aic.cip.att.com:8443/adapters/rest/SDNCNotify&lt;/svc-notification-url&gt;
-							&lt;svc-request-id&gt;5b1f3c5d-cdf9-488d-8a4b-d3f1229d7760&lt;/svc-request-id&gt;
-						&lt;/sdnc-request-header&gt;
-						&lt;l2-homing-information&gt;
-							&lt;topology&gt;MultiPoint&lt;/topology&gt;
-							&lt;preferred-aic-clli&gt;MTSNJA4LCP1&lt;/preferred-aic-clli&gt;
-							&lt;evc-name&gt;AS/VLXM/003717//SW&lt;/evc-name&gt;
-						&lt;/l2-homing-information&gt;
-						&lt;service-information&gt;
-							&lt;service-instance-id&gt;FK/VLXM/003717//SW_INTERNET&lt;/service-instance-id&gt;
-							&lt;subscriber-name&gt;ST E2E Test42855_1300004281555&lt;/subscriber-name&gt;
-							&lt;service-type&gt;SDN-ETHERNET-INTERNET&lt;/service-type&gt;
-						&lt;/service-information&gt;
-						&lt;internet-service-change-details&gt;
-							&lt;internet-evc-speed-value&gt;10&lt;/internet-evc-speed-value&gt;
-							&lt;internet-evc-speed-units&gt;Kbps&lt;/internet-evc-speed-units&gt;
-							&lt;t-provided-v4-lan-public-prefixes&gt;
-							   &lt;request-index&gt;1&lt;/request-index&gt;
-							   &lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
-							   &lt;v4-lan-public-prefix&gt;192.168.1.15&lt;/v4-lan-public-prefix&gt;
-							   &lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-							&lt;/t-provided-v4-lan-public-prefixes&gt;
-							&lt;t-provided-v4-lan-public-prefixes&gt;
-							   &lt;request-index&gt;2&lt;/request-index&gt;
-							   &lt;v4-next-hop-address&gt;192.168.1.16&lt;/v4-next-hop-address&gt;
-							   &lt;v4-lan-public-prefix&gt;192.168.1.16&lt;/v4-lan-public-prefix&gt;
-							   &lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-							&lt;/t-provided-v4-lan-public-prefixes&gt;
-							&lt;t-provided-v6-lan-public-prefixes&gt;
-							   &lt;request-index&gt;1&lt;/request-index&gt;
-							   &lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-							   &lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
-							   &lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-							&lt;/t-provided-v6-lan-public-prefixes&gt;
-							&lt;t-provided-v6-lan-public-prefixes&gt;
-							   &lt;request-index&gt;1&lt;/request-index&gt;
-							   &lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-							   &lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
-							   &lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-							&lt;/t-provided-v6-lan-public-prefixes&gt;
-						&lt;/internet-service-change-details&gt;
-					&lt;/service-data&gt;
-				&lt;/layer3-service-list&gt;
-</tag0:RequestData>
-   </sdncadapterworkflow:response-data>
-</sdncadapterworkflow:SDNCAdapterWorkflowResponse>"""
-
-	String sdncAdapterRequest = """
-			<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
-			<SOAP-ENV:Body>
-			<aetgt:SDNCAdapterRequest xmlns:aetgt="http://org.openecomp/workflow/sdnc/adapter/schema/v1" xmlns:sdncadaptersc="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
-			<sdncadapter:RequestHeader xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
-			<sdncadapter:RequestId>745b1b50-e39e-4685-9cc8-c71f0bde8bf0</sdncadapter:RequestId>
-			<sdncadapter:SvcAction>query</sdncadapter:SvcAction>
-			<sdncadapter:SvcOperation>services/layer3-service-list/AS%2FVLXM%2F000199%2F%2FSB_INTERNET</sdncadapter:SvcOperation>
-			<sdncadapter:CallbackUrl>http://myhost.att.com:28080/mso/sdncAdapterCallbackServiceImpl</sdncadapter:CallbackUrl>
-			</sdncadapter:RequestHeader>
-			<sdncadaptersc:RequestData><rest:payload xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
-              contentType="text/xml">
-   <service-request xmlns="http://org.openecomp/mso/request/details/schema/v1">
-      <request-information>
-         <request-id>12570a36-7388-4c0a-bec4-189ce3kg9956</request-id>
-         <request-action>GetLayer3ServiceDetailsRequest</request-action>
-         <source>OMX</source>
-      </request-information>
-      <service-information>
-         <service-type>SDN-ETHERNET-INTERNET</service-type>
-         <service-instance-id>PD/VLXM/003717//SW_INTERNET</service-instance-id>
-      </service-information>
-   </service-request>
-</rest:payload></sdncadaptersc:RequestData></aetgt:SDNCAdapterRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>"""
-	
-def sdncAdapterResponse = """<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
-<sdncadapterworkflow:response-data>
-<tag0:CallbackHeader xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
-   <tag0:RequestId>39542e39-ccc3-4d1a-8b79-04ce88526613</tag0:RequestId>
-   <tag0:ResponseCode>404</tag0:ResponseCode>
-   <tag0:ResponseMessage>Error processing request to SDNC. Not Found.
-			https://sdncodl.us.aic.cip.att.com:8443/restconf/config/L3SDN-API:services/layer3-service-list/MVM%2FVLXP%2F000855%2F%2FShakeout.
-			SDNC Returned-[error-type:application, error-tag:data-missing,
-			error-message:Request could not be completed because the relevant
-			data model content does not exist.]</tag0:ResponseMessage>
-</tag0:CallbackHeader>
-</sdncadapterworkflow:response-data>
-</sdncadapterworkflow:SDNCAdapterWorkflowResponse>
-"""
-
-def workflowErrorResponse = """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
-								<aetgt:ErrorMessage>Received error from SDN-C: Error processing request to SDNC. Not Found.
-			https://sdncodl.us.aic.cip.att.com:8443/restconf/config/L3SDN-API:services/layer3-service-list/MVM%2FVLXP%2F000855%2F%2FShakeout.
-			SDNC Returned-[error-type:application, error-tag:data-missing,
-			error-message:Request could not be completed because the relevant
-			data model content does not exist.]</aetgt:ErrorMessage>
-								<aetgt:ErrorCode>5300</aetgt:ErrorCode>
-								<aetgt:SourceSystemErrorCode>404</aetgt:SourceSystemErrorCode>
-								</aetgt:WorkflowException>"""
-
-def workflowErrorResponse1 = """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
-					<aetgt:ErrorMessage>Invalid Callback Response from SDNC Adapter</aetgt:ErrorMessage>
-					<aetgt:ErrorCode>5300</aetgt:ErrorCode>
-				  </aetgt:WorkflowException>"""
-			
-def     enhancedCallbackRequestData =
-    """<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">				<layer3-service-list xmlns="com:att:sdnctl:l3api">
-					<service-instance-id>FK/VLXM/003717//SW_INTERNET</service-instance-id>
-					<service-status>
-						<rpc-name>service-configuration-operation</rpc-name>
-						<rpc-action>activate</rpc-action>
-						<request-status>synccomplete</request-status>
-						<final-indicator>N</final-indicator>
-						<l3sdn-action>Layer3ServiceActivateRequest</l3sdn-action>
-						<l3sdn-subaction>SUPP</l3sdn-subaction>
-						<response-timestamp>2015-04-28T21:32:11.386Z</response-timestamp>
-					</service-status>
-					<service-data>
-						<internet-evc-access-information>
-							<ip-version>ds</ip-version>
-							<internet-evc-speed-value>8</internet-evc-speed-value>
-							<internet-evc-speed-units>Mbps</internet-evc-speed-units>
-						</internet-evc-access-information>
-						<vr-lan xmlns="com:att:sdnctl:l3api">
-							<vr-lan-interface>
-								<static-routes>
-									<v6-static-routes>
-										<v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
-										<v6-static-route-prefix>2001:1890:12e3:2da::</v6-static-route-prefix>
-										<v6-static-route-prefix-length>28</v6-static-route-prefix-length>
-									</v6-static-routes>
-									<v4-static-routes>
-										<v4-static-route-prefix>255.255.252.1</v4-static-route-prefix>
-										<v4-next-hop-address>192.168.1.15</v4-next-hop-address>
-										<v4-static-route-prefix-length>28</v4-static-route-prefix-length>
-									</v4-static-routes>
-									<v6-static-routes>
-										<v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
-										<v6-static-route-prefix>2001:1890:12e3:2da::</v6-static-route-prefix>
-										<v6-static-route-prefix-length>28</v6-static-route-prefix-length>
-									</v6-static-routes>
-									<v4-static-routes>
-										<v4-static-route-prefix>255.255.252.2</v4-static-route-prefix>
-										<v4-next-hop-address>192.168.1.15</v4-next-hop-address>
-										<v4-static-route-prefix-length>28</v4-static-route-prefix-length>
-									</v4-static-routes>
-									<v4-static-routes>
-										<v4-static-route-prefix>255.255.252.3</v4-static-route-prefix>
-										<v4-next-hop-address>192.168.1.15</v4-next-hop-address>
-										<v4-static-route-prefix-length>28</v4-static-route-prefix-length>
-									</v4-static-routes>
-								</static-routes>
-								<dhcp>
-									<v6-dhcp-server-enabled>N</v6-dhcp-server-enabled>
-									<v4-dhcp-server-enabled>Y</v4-dhcp-server-enabled>
-									<use-v6-default-pool>N</use-v6-default-pool>
-									<excluded-v4-dhcp-addresses-from-default-pool>
-									  <excluded-v4-address>192.168.1.7</excluded-v4-address>
-									</excluded-v4-dhcp-addresses-from-default-pool>
-									<excluded-v4-dhcp-addresses-from-default-pool>
-									  <excluded-v4-address>192.168.1.8</excluded-v4-address>
-									</excluded-v4-dhcp-addresses-from-default-pool>
-									<v4-dhcp-pools>
-										<v4-dhcp-relay-next-hop-address>1.1.1.1</v4-dhcp-relay-next-hop-address>
-										<v4-dhcp-pool-prefix-length>28</v4-dhcp-pool-prefix-length>
-										<excluded-v4-addresses>
-											<excluded-v4-address>192.168.1.5</excluded-v4-address>
-										</excluded-v4-addresses>
-										<v4-dhcp-relay-gateway-address>2.2.2.1</v4-dhcp-relay-gateway-address>
-										<excluded-v4-addresses>
-											<excluded-v4-address>192.168.1.6</excluded-v4-address>
-										</excluded-v4-addresses>
-										<v4-dhcp-pool-prefix>192.155.2.3</v4-dhcp-pool-prefix>
-									</v4-dhcp-pools>
-									<v4-dhcp-pools>
-										<v4-dhcp-relay-next-hop-address>1.1.1.2</v4-dhcp-relay-next-hop-address>
-										<v4-dhcp-pool-prefix-length>28</v4-dhcp-pool-prefix-length>
-										<excluded-v4-addresses>
-											<excluded-v4-address>192.168.1.6</excluded-v4-address>
-										</excluded-v4-addresses>
-										<v4-dhcp-relay-gateway-address>2.2.2.2</v4-dhcp-relay-gateway-address>
-										<excluded-v4-addresses>
-											<excluded-v4-address>192.168.1.7</excluded-v4-address>
-										</excluded-v4-addresses>
-										<v4-dhcp-pool-prefix>192.155.2.4</v4-dhcp-pool-prefix>
-									</v4-dhcp-pools>									
-									<use-v4-default-pool>Y</use-v4-default-pool>
-									<excluded-v6-dhcp-addresses-from-default-pool>
-									  <excluded-v6-address>1:5</excluded-v6-address>
-									</excluded-v6-dhcp-addresses-from-default-pool>
-									<excluded-v6-dhcp-addresses-from-default-pool>
-									  <excluded-v6-address>1:6</excluded-v6-address>
-									</excluded-v6-dhcp-addresses-from-default-pool>
-									<v6-dhcp-pools>
-										<v6-dhcp-relay-next-hop-address>4:4</v6-dhcp-relay-next-hop-address>
-										<v6-dhcp-pool-prefix-length>28</v6-dhcp-pool-prefix-length>
-										<excluded-v6-addresses>
-											<excluded-v6-address>1:1</excluded-v6-address>
-										</excluded-v6-addresses>
-										<v6-dhcp-relay-gateway-address>3:3</v6-dhcp-relay-gateway-address>
-										<excluded-v6-addresses>
-											<excluded-v6-address>2:2</excluded-v6-address>
-										</excluded-v6-addresses>
-										<v6-dhcp-pool-prefix>0:0</v6-dhcp-pool-prefix>
-									</v6-dhcp-pools>
-									<v6-dhcp-pools>
-										<v6-dhcp-relay-next-hop-address>4:4</v6-dhcp-relay-next-hop-address>
-										<v6-dhcp-pool-prefix-length>28</v6-dhcp-pool-prefix-length>
-										<excluded-v6-addresses>
-											<excluded-v6-address>1:1</excluded-v6-address>
-										</excluded-v6-addresses>
-										<v6-dhcp-relay-gateway-address>3:3</v6-dhcp-relay-gateway-address>
-										<excluded-v6-addresses>
-											<excluded-v6-address>2:2</excluded-v6-address>
-										</excluded-v6-addresses>
-										<v6-dhcp-pool-prefix>0:0</v6-dhcp-pool-prefix>
-									</v6-dhcp-pools>									
-								</dhcp>
-								<firewall-lite>
-									<stateful-firewall-lite-v6-enabled>N</stateful-firewall-lite-v6-enabled>
-									<stateful-firewall-lite-v4-enabled>Y</stateful-firewall-lite-v4-enabled>
-									<v4-firewall-packet-filters>
-									  <v4-firewall-prefix>0.0.0.1</v4-firewall-prefix>
-									  <v4-firewall-prefix-length>1</v4-firewall-prefix-length>
-									  <allow-icmp-ping>Y</allow-icmp-ping>
-									  <udp-ports>
-									    <port-number>1</port-number>
-									  </udp-ports>
-									  <tcp-ports>
-									    <port-number>1</port-number>
-									  </tcp-ports>
-									</v4-firewall-packet-filters>
-									<v4-firewall-packet-filters>
-									  <v4-firewall-prefix>0.0.0.2</v4-firewall-prefix>
-									  <v4-firewall-prefix-length>2</v4-firewall-prefix-length>
-									  <allow-icmp-ping>Y</allow-icmp-ping>
-									  <udp-ports>
-									    <port-number>2</port-number>
-									  </udp-ports>
-									  <tcp-ports>
-									    <port-number>2</port-number>
-									  </tcp-ports>
-									</v4-firewall-packet-filters>
-									<v6-firewall-packet-filters>
-									  <v6-firewall-prefix>:</v6-firewall-prefix>
-									  <v6-firewall-prefix-length>0</v6-firewall-prefix-length>
-									  <allow-icmp-ping>Y</allow-icmp-ping>
-									  <udp-ports>
-									    <port-number>3</port-number>
-									  </udp-ports>
-									  <tcp-ports>
-									    <port-number>3</port-number>
-									  </tcp-ports>
-									</v6-firewall-packet-filters>
-									<v6-firewall-packet-filters>
-									  <v6-firewall-prefix>:</v6-firewall-prefix>
-									  <v6-firewall-prefix-length>1</v6-firewall-prefix-length>
-									  <allow-icmp-ping>Y</allow-icmp-ping>
-									  <udp-ports>
-									    <port-number>4</port-number>
-									  </udp-ports>
-									  <tcp-ports>
-									    <port-number>4</port-number>
-									  </tcp-ports>
-									</v6-firewall-packet-filters>
-								</firewall-lite>
-								<pat>
-									<v4-pat-pools>
-										<v4-pat-pool-prefix>192.168.1.44</v4-pat-pool-prefix>
-										<v4-pat-pool-next-hop-address>192.168.1.5</v4-pat-pool-next-hop-address>
-										<v4-pat-pool-prefix-length>0</v4-pat-pool-prefix-length>
-									</v4-pat-pools>
-									<use-v4-default-pool>Y</use-v4-default-pool>
-									<v4-pat-enabled>N</v4-pat-enabled>
-									<v4-pat-pools>
-										<v4-pat-pool-prefix>192.168.1.45</v4-pat-pool-prefix>
-										<v4-pat-pool-next-hop-address>192.168.1.6</v4-pat-pool-next-hop-address>
-										<v4-pat-pool-prefix-length>28</v4-pat-pool-prefix-length>
-									</v4-pat-pools>
-								</pat>
-								<nat>
-								  <v4-nat-enabled>Y</v4-nat-enabled>
-								  <v4-nat-mapping-entries>
-								    <v4-nat-internal>0.0.0.0</v4-nat-internal>
-								    <v4-nat-next-hop-address>0.0.0.0</v4-nat-next-hop-address>
-								    <v4-nat-external>0.0.0.0</v4-nat-external>
-								  </v4-nat-mapping-entries>
-								  <v4-nat-mapping-entries>
-								    <v4-nat-internal>0.0.0.1</v4-nat-internal>
-								    <v4-nat-next-hop-address>0.0.0.1</v4-nat-next-hop-address>
-								    <v4-nat-external>0.0.0.1</v4-nat-external>
-								  </v4-nat-mapping-entries>
-								</nat>
-								<vr-designation>primary</vr-designation>
-								<v4-vce-loopback-address>162.200.3.144</v4-vce-loopback-address>
-								<v6-vr-lan-prefix-length>64</v6-vr-lan-prefix-length>
-								<v6-vce-wan-address>2001:1890:12e3:2da::</v6-vce-wan-address>
-								<v6-vr-lan-prefix>2620:0:10d0:f:ffff:ffff:ffff:fffe</v6-vr-lan-prefix>
-								<v4-vr-lan-prefix-length>24</v4-vr-lan-prefix-length>
-								<v4-vr-lan-prefix>10.192.27.254</v4-vr-lan-prefix>
-								<v4-public-lan-prefixes>
-									<t-provided-v4-lan-public-prefixes>
-										<request-index>1</request-index>
-										<v4-next-hop-address>192.168.1.2</v4-next-hop-address>
-										<v4-lan-public-prefix>192.168.1.1</v4-lan-public-prefix>
-										<v4-lan-public-prefix-length>28</v4-lan-public-prefix-length>
-									</t-provided-v4-lan-public-prefixes>
-									<t-provided-v4-lan-public-prefixes>
-										<request-index>1</request-index>
-										<v4-next-hop-address>192.168.1.72</v4-next-hop-address>
-										<v4-lan-public-prefix>192.168.1.71</v4-lan-public-prefix>
-										<v4-lan-public-prefix-length>28</v4-lan-public-prefix-length>
-									</t-provided-v4-lan-public-prefixes>
-									<t-provided-v4-lan-public-prefixes>
-										<request-index>1</request-index>
-										<v4-next-hop-address>192.168.1.68</v4-next-hop-address>
-										<v4-lan-public-prefix>192.168.1.67</v4-lan-public-prefix>
-										<v4-lan-public-prefix-length>28</v4-lan-public-prefix-length>
-									</t-provided-v4-lan-public-prefixes>
-								</v4-public-lan-prefixes>
-								<v6-public-lan-prefixes>
-									<t-provided-v6-lan-public-prefixes>
-										<request-index>1</request-index>
-										<v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
-										<v6-lan-public-prefix>2001:1890:12e3:2da::</v6-lan-public-prefix>
-										<v6-lan-public-prefix-length>28</v6-lan-public-prefix-length>
-									</t-provided-v6-lan-public-prefixes>
-									<t-provided-v6-lan-public-prefixes>
-										<request-index>1</request-index>
-										<v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
-										<v6-lan-public-prefix>2001:1890:12e3:3da::</v6-lan-public-prefix>
-										<v6-lan-public-prefix-length>28</v6-lan-public-prefix-length>
-									</t-provided-v6-lan-public-prefixes>
-									<t-provided-v6-lan-public-prefixes>
-										<request-index>1</request-index>
-										<v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
-										<v6-lan-public-prefix>2001:1890:12e3:4da::</v6-lan-public-prefix>
-										<v6-lan-public-prefix-length>28</v6-lan-public-prefix-length>
-									</t-provided-v6-lan-public-prefixes>
-								</v6-public-lan-prefixes>
-							</vr-lan-interface>
-							<routing-protocol>none</routing-protocol>
-						</vr-lan>
-<ucpe-vms-service-information>				
- <transport-service-information>
-    <transport-service-type>AVPN</transport-service-type>
-	<access-circuit-info>
-	   <access-circuit-id>1</access-circuit-id>
-	   <dual-mode>Active</dual-mode>
-	</access-circuit-info>
-	<access-circuit-info>
-	   <access-circuit-id>2</access-circuit-id>
-	   <dual-mode>Standby</dual-mode>
-	</access-circuit-info>	
- </transport-service-information>
- <ucpe-information>
-    <ucpe-host-name>hostname</ucpe-host-name>
-    <ucpe-activation-code>activecode</ucpe-activation-code>
-    <out-of-band-management-modem>OOB</out-of-band-management-modem>
-  </ucpe-information>
-  <vnf-list>
-	<vnf-information> 
-		<vnf-instance-id>1</vnf-instance-id> 
-		<vnf-sequence-number>1</vnf-sequence-number>
-		<vnf-type>ZZ</vnf-type>
-		<vnf-vendor>JUNIPER</vnf-vendor>
-		<vnf-model>MODEL1</vnf-model>
-		<vnf-id>1</vnf-id>
-		<prov-status>1</prov-status>
-		<operational-state>1</operational-state>
-		<orchestration-status>1</orchestration-status>
-		<equipment-role>1</equipment-role>
-    </vnf-information>
-	<vnf-information> 
-		<vnf-instance-id>2</vnf-instance-id> 
-		<vnf-sequence-number>2</vnf-sequence-number>
-		<vnf-type>HY</vnf-type>
-		<vnf-vendor>JUNIPER</vnf-vendor>
-		<vnf-model>MODEL2</vnf-model>
-		<vnf-id>2</vnf-id>
-		<prov-status>2</prov-status>
-		<operational-state>2</operational-state>
-		<orchestration-status>2</orchestration-status>
-		<equipment-role>2</equipment-role>
-    </vnf-information>					
-  </vnf-list>
- </ucpe-vms-service-information>										
-						<request-information>
-							<request-action>Layer3ServiceActivateRequest</request-action>
-							<order-number>4281555</order-number>
-							<request-id>155415ab-b4a7-4382-b4c6-d17d9sm42855</request-id>
-							<notification-url>https://csi-tst-q22.it.att.com:22443/Services/com/cingular/csi/sdn/SendManagedNetworkStatusNotification.jws</notification-url>
-							<source>OMX</source>
-							<order-version>1</order-version>
-						</request-information>
-						<sdnc-request-header>
-							<svc-action>activate</svc-action>
-							<svc-notification-url>https://msojra.mtsnjdcp1.aic.cip.att.com:8443/adapters/rest/SDNCNotify</svc-notification-url>
-							<svc-request-id>5b1f3c5d-cdf9-488d-8a4b-d3f1229d7760</svc-request-id>
-						</sdnc-request-header>
-						<l2-homing-information>
-							<topology>MultiPoint</topology>
-							<preferred-aic-clli>MTSNJA4LCP1</preferred-aic-clli>
-							<evc-name>AS/VLXM/003717//SW</evc-name>
-						</l2-homing-information>
-						<service-information>
-							<service-instance-id>FK/VLXM/003717//SW_INTERNET</service-instance-id>
-							<subscriber-name>ST E2E Test42855_1300004281555</subscriber-name>
-							<service-type>SDN-ETHERNET-INTERNET</service-type>
-						</service-information>
-						<internet-service-change-details>
-							<internet-evc-speed-value>10</internet-evc-speed-value>
-							<internet-evc-speed-units>Kbps</internet-evc-speed-units>
-							<t-provided-v4-lan-public-prefixes>
-							   <request-index>1</request-index>
-							   <v4-next-hop-address>192.168.1.15</v4-next-hop-address>
-							   <v4-lan-public-prefix>192.168.1.15</v4-lan-public-prefix>
-							   <v4-lan-public-prefix-length>28</v4-lan-public-prefix-length>
-							</t-provided-v4-lan-public-prefixes>
-							<t-provided-v4-lan-public-prefixes>
-							   <request-index>2</request-index>
-							   <v4-next-hop-address>192.168.1.16</v4-next-hop-address>
-							   <v4-lan-public-prefix>192.168.1.16</v4-lan-public-prefix>
-							   <v4-lan-public-prefix-length>28</v4-lan-public-prefix-length>
-							</t-provided-v4-lan-public-prefixes>
-							<t-provided-v6-lan-public-prefixes>
-							   <request-index>1</request-index>
-							   <v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
-							   <v6-lan-public-prefix>2001:1890:12e3:2da::</v6-lan-public-prefix>
-							   <v6-lan-public-prefix-length>28</v6-lan-public-prefix-length>
-							</t-provided-v6-lan-public-prefixes>
-							<t-provided-v6-lan-public-prefixes>
-							   <request-index>1</request-index>
-							   <v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
-							   <v6-lan-public-prefix>2001:1890:12e3:2da::</v6-lan-public-prefix>
-							   <v6-lan-public-prefix-length>28</v6-lan-public-prefix-length>
-							</t-provided-v6-lan-public-prefixes>
-						</internet-service-change-details>
-					</service-data>
-				</layer3-service-list>
-</tag0:RequestData>
-"""
-
-def sdncAdapterResponseEmpty =
-"""<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
-   <sdncadapterworkflow:response-data/>
-</sdncadapterworkflow:SDNCAdapterWorkflowResponse>"""
-
-def sdncAdapterResponseError =
-"""<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
-                                                 xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
-   <sdncadapterworkflow:response-data>
-      <tag0:CallbackHeader>
-         <tag0:RequestId>39542e39-ccc3-4d1a-8b79-04ce88526613</tag0:RequestId>
-         <tag0:ResponseCode>404</tag0:ResponseCode>
-         <tag0:ResponseMessage>Error processing request to SDNC. Not Found.
-			https://sdncodl.us.aic.cip.att.com:8443/restconf/config/L3SDN-API:services/layer3-service-list/MVM%2FVLXP%2F000855%2F%2FShakeout.
-			SDNC Returned-[error-type:application, error-tag:data-missing,
-			error-message:Request could not be completed because the relevant
-			data model content does not exist.]</tag0:ResponseMessage>
-      </tag0:CallbackHeader>
-   </sdncadapterworkflow:response-data>
-</sdncadapterworkflow:SDNCAdapterWorkflowResponse>"""
-
-				  								
-	@Test
-	public void testPreProcessRequest() {
-
-		String sdncAdapterWorkflowRequest = FileUtil.readResourceFile("__files/SDN-ETHERNET-INTERNET/SDNCAdapterV1/sdncadapterworkflowrequest.xml");
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-		when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
-		when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
-		when(mockExecution.getVariable("sdncAdapterWorkflowRequest")).thenReturn(sdncAdapterWorkflowRequest)
-		when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://someurl.someting.com:28080/mso/sdncAdapterCallbackServiceImpl")
-		when(mockExecution.getVariable("URN_mso_use_qualified_host")).thenReturn("true")
-		when(mockExecution.getProcessInstanceId()).thenReturn("745b1b50-e39e-4685-9cc8-c71f0bde8bf0")
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
-	
-
-		SDNCAdapter sdncAdapter = new SDNCAdapter()
-		sdncAdapter.preProcessRequest(mockExecution)
-		
-		MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
-		debugger.printInvocations(mockExecution)
-		
-
-		verify(mockExecution).setVariable("prefix","SDNCA_")
-		verify(mockExecution).setVariable("sdncAdapterResponse","")
-		verify(mockExecution).setVariable("asynchronousResponseTimeout",false)
-		verify(mockExecution).setVariable("continueListening",false)
-		verify(mockExecution).setVariable("BasicAuthHeaderValue","Basic cGFzc3dvcmQ=")
-		verify(mockExecution).setVariable("serviceConfigActivate",false)
-		verify(mockExecution).setVariable("SDNCA_requestId", "745b1b50-e39e-4685-9cc8-c71f0bde8bf0")
-		verify(mockExecution).setVariable("SDNCA_SuccessIndicator",false)
-		verify(mockExecution).setVariable("source","")
-		verify(mockExecution).setVariable("sdncAdapterRequest", sdncAdapterRequest)	
-	}
-	
-	@Test
-	public void testProcessResponse()
-	{
-		String sdncAdapterCallbackResponse = FileUtil.readResourceFile("__files/SDN-ETHERNET-INTERNET/SDNCAdapterV1mock/sdncadaptercallbackrequest.xml");
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-		when(mockExecution.getVariable("sdncAdapterCallbackRequest")).thenReturn(sdncAdapterCallbackResponse)
-		SDNCAdapter sdncAdapter = new SDNCAdapter()
-		sdncAdapter.postProcessResponse(mockExecution)
-		
-//		MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
-//		debugger.printInvocations(mockExecution)
-		
-		verify(mockExecution).getVariable("isDebugLogEnabled")
-		verify(mockExecution,times(2)).getVariable("sdncAdapterCallbackRequest")
-		verify(mockExecution).setVariable("sdncAdapterResponse",workflowResponse)
-		verify(mockExecution).setVariable("enhancedCallbackRequestData",enhancedCallbackRequestData)
-		verify(mockExecution).setVariable("continueListening",false)
-
-	}	
-	
-	@Test
-	public void testProcessResponse_ErrorCase_404()
-	{
-		String sdncAdapterCallbackErrorResponse = FileUtil.readResourceFile("sdncadaptercallbackrequest_404CallBack.xml");
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-		when(mockExecution.getVariable("sdncAdapterCallbackRequest")).thenReturn(sdncAdapterCallbackErrorResponse)
-		SDNCAdapter sdncAdapter = new SDNCAdapter()
-		sdncAdapter.postProcessResponse(mockExecution)
-		
-		verify(mockExecution, times(1)).getVariable("isDebugLogEnabled")
-		verify(mockExecution,times(2)).getVariable("sdncAdapterCallbackRequest")
-		verify(mockExecution).setVariable("sdncAdapterResponse", sdncAdapterResponseError)
-		verify(mockExecution).setVariable("enhancedCallbackRequestData", "")
-		verify(mockExecution).setVariable("continueListening",false)
-		
-	}
-	
-	@Test
-	public void testProcessResponse_ErrorCase_InvalidCallback()
-	{
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-		when(mockExecution.getVariable("sdncAdapterCallbackRequest")).thenReturn("<h1>Service Unavailable</h1>")
-		SDNCAdapter sdncAdapter = new SDNCAdapter()
-		sdncAdapter.postProcessResponse(mockExecution)
-		
-		verify(mockExecution).getVariable("isDebugLogEnabled")
-		verify(mockExecution,times(2)).getVariable("sdncAdapterCallbackRequest")
-		verify(mockExecution).setVariable("sdncAdapterResponse", sdncAdapterResponseEmpty)
-		verify(mockExecution).setVariable("enhancedCallbackRequestData", "")
-		verify(mockExecution).setVariable("continueListening",false)
-
-	}
-	
-	@Test
-	public void postProcessResponse()
-	{
-		
-		String SDNCAdapterCallbackRequest = 
-		"""<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<SDNCAdapterCallbackRequest
-	xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
-	<CallbackHeader>
-		<RequestId>3bb02798-b344-4d28-9bca-1f029954d1c9</RequestId>
-		<ResponseCode>404</ResponseCode>
-		<ResponseMessage>Error processing request to SDNC. Not Found.
-			https://sdncodl.us.infra.aic.att.net:8443/restconf/config/L3SDN-API:services/layer3-service-list/85%2FCSIP%2F141203%2FPT_CSI9999998693.
-			SDNC Returned-[error-type:application, error-tag:data-missing,
-			error-message:Request could not be completed because the relevant
-			data model content does not exist ]</ResponseMessage>
-	</CallbackHeader>
-</SDNCAdapterCallbackRequest>"""
-		
-		String sdncAdapterResponse =
-		"""<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
-                                                 xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
-   <sdncadapterworkflow:response-data>
-      <tag0:CallbackHeader>
-         <tag0:RequestId>3bb02798-b344-4d28-9bca-1f029954d1c9</tag0:RequestId>
-         <tag0:ResponseCode>404</tag0:ResponseCode>
-         <tag0:ResponseMessage>Error processing request to SDNC. Not Found.
-			https://sdncodl.us.infra.aic.att.net:8443/restconf/config/L3SDN-API:services/layer3-service-list/85%2FCSIP%2F141203%2FPT_CSI9999998693.
-			SDNC Returned-[error-type:application, error-tag:data-missing,
-			error-message:Request could not be completed because the relevant
-			data model content does not exist ]</tag0:ResponseMessage>
-      </tag0:CallbackHeader>
-   </sdncadapterworkflow:response-data>
-</sdncadapterworkflow:SDNCAdapterWorkflowResponse>"""
-
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-		when(mockExecution.getVariable("sdncAdapterCallbackRequest")).thenReturn(SDNCAdapterCallbackRequest)
-		SDNCAdapter sdncAdapter = new SDNCAdapter()
-		sdncAdapter.postProcessResponse(mockExecution)
-		
-		verify(mockExecution).getVariable("isDebugLogEnabled")
-		verify(mockExecution,times(2)).getVariable("sdncAdapterCallbackRequest")
-		verify(mockExecution).setVariable("sdncAdapterResponse", sdncAdapterResponse)
-		verify(mockExecution).setVariable("enhancedCallbackRequestData", "")
-		verify(mockExecution).setVariable("continueListening",false)
-
-	}
-
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common.scripts;
+
+import static org.mockito.Mockito.*
+
+import org.camunda.bpm.engine.ProcessEngineServices
+import org.camunda.bpm.engine.RepositoryService
+import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
+import org.camunda.bpm.engine.repository.ProcessDefinition
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.MockitoAnnotations
+import org.mockito.runners.MockitoJUnitRunner
+import org.mockito.internal.debugging.MockitoDebuggerImpl
+import org.openecomp.mso.bpmn.common.scripts.SDNCAdapter;
+
+import org.openecomp.mso.bpmn.mock.FileUtil
+
+@RunWith(MockitoJUnitRunner.class)
+public class SDNCAdapterTest {
+	
+	@Before
+	public void init()
+	{
+		MockitoAnnotations.initMocks(this)
+		System.setProperty("jboss.qualified.host.name","myhost.com")
+	}
+
+	
+	def workflowResponse = """<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>testRequestId</tag0:RequestId>
+         <tag0:ResponseCode>200</tag0:ResponseCode>
+         <tag0:ResponseMessage>OK</tag0:ResponseMessage>
+      </tag0:CallbackHeader>
+      <tag0:RequestData xsi:type="xs:string">				&lt;layer3-service-list xmlns="com:att:sdnctl:l3api"&gt;
+					&lt;service-instance-id&gt;FK/VLXM/003717//SW_INTERNET&lt;/service-instance-id&gt;
+					&lt;service-status&gt;
+						&lt;rpc-name&gt;service-configuration-operation&lt;/rpc-name&gt;
+						&lt;rpc-action&gt;activate&lt;/rpc-action&gt;
+						&lt;request-status&gt;synccomplete&lt;/request-status&gt;
+						&lt;final-indicator&gt;N&lt;/final-indicator&gt;
+						&lt;l3sdn-action&gt;Layer3ServiceActivateRequest&lt;/l3sdn-action&gt;
+						&lt;l3sdn-subaction&gt;SUPP&lt;/l3sdn-subaction&gt;
+						&lt;response-timestamp&gt;2015-04-28T21:32:11.386Z&lt;/response-timestamp&gt;
+					&lt;/service-status&gt;
+					&lt;service-data&gt;
+						&lt;internet-evc-access-information&gt;
+							&lt;ip-version&gt;ds&lt;/ip-version&gt;
+							&lt;internet-evc-speed-value&gt;8&lt;/internet-evc-speed-value&gt;
+							&lt;internet-evc-speed-units&gt;Mbps&lt;/internet-evc-speed-units&gt;
+						&lt;/internet-evc-access-information&gt;
+						&lt;vr-lan xmlns="com:att:sdnctl:l3api"&gt;
+							&lt;vr-lan-interface&gt;
+								&lt;static-routes&gt;
+									&lt;v6-static-routes&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-static-route-prefix&gt;2001:1890:12e3:2da::&lt;/v6-static-route-prefix&gt;
+										&lt;v6-static-route-prefix-length&gt;28&lt;/v6-static-route-prefix-length&gt;
+									&lt;/v6-static-routes&gt;
+									&lt;v4-static-routes&gt;
+										&lt;v4-static-route-prefix&gt;255.255.252.1&lt;/v4-static-route-prefix&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
+										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
+									&lt;/v4-static-routes&gt;
+									&lt;v6-static-routes&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-static-route-prefix&gt;2001:1890:12e3:2da::&lt;/v6-static-route-prefix&gt;
+										&lt;v6-static-route-prefix-length&gt;28&lt;/v6-static-route-prefix-length&gt;
+									&lt;/v6-static-routes&gt;
+									&lt;v4-static-routes&gt;
+										&lt;v4-static-route-prefix&gt;255.255.252.2&lt;/v4-static-route-prefix&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
+										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
+									&lt;/v4-static-routes&gt;
+									&lt;v4-static-routes&gt;
+										&lt;v4-static-route-prefix&gt;255.255.252.3&lt;/v4-static-route-prefix&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
+										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
+									&lt;/v4-static-routes&gt;
+								&lt;/static-routes&gt;
+								&lt;dhcp&gt;
+									&lt;v6-dhcp-server-enabled&gt;N&lt;/v6-dhcp-server-enabled&gt;
+									&lt;v4-dhcp-server-enabled&gt;Y&lt;/v4-dhcp-server-enabled&gt;
+									&lt;use-v6-default-pool&gt;N&lt;/use-v6-default-pool&gt;
+									&lt;excluded-v4-dhcp-addresses-from-default-pool&gt;
+									  &lt;excluded-v4-address&gt;192.168.1.7&lt;/excluded-v4-address&gt;
+									&lt;/excluded-v4-dhcp-addresses-from-default-pool&gt;
+									&lt;excluded-v4-dhcp-addresses-from-default-pool&gt;
+									  &lt;excluded-v4-address&gt;192.168.1.8&lt;/excluded-v4-address&gt;
+									&lt;/excluded-v4-dhcp-addresses-from-default-pool&gt;
+									&lt;v4-dhcp-pools&gt;
+										&lt;v4-dhcp-relay-next-hop-address&gt;1.1.1.1&lt;/v4-dhcp-relay-next-hop-address&gt;
+										&lt;v4-dhcp-pool-prefix-length&gt;28&lt;/v4-dhcp-pool-prefix-length&gt;
+										&lt;excluded-v4-addresses&gt;
+											&lt;excluded-v4-address&gt;192.168.1.5&lt;/excluded-v4-address&gt;
+										&lt;/excluded-v4-addresses&gt;
+										&lt;v4-dhcp-relay-gateway-address&gt;2.2.2.1&lt;/v4-dhcp-relay-gateway-address&gt;
+										&lt;excluded-v4-addresses&gt;
+											&lt;excluded-v4-address&gt;192.168.1.6&lt;/excluded-v4-address&gt;
+										&lt;/excluded-v4-addresses&gt;
+										&lt;v4-dhcp-pool-prefix&gt;192.155.2.3&lt;/v4-dhcp-pool-prefix&gt;
+									&lt;/v4-dhcp-pools&gt;
+									&lt;v4-dhcp-pools&gt;
+										&lt;v4-dhcp-relay-next-hop-address&gt;1.1.1.2&lt;/v4-dhcp-relay-next-hop-address&gt;
+										&lt;v4-dhcp-pool-prefix-length&gt;28&lt;/v4-dhcp-pool-prefix-length&gt;
+										&lt;excluded-v4-addresses&gt;
+											&lt;excluded-v4-address&gt;192.168.1.6&lt;/excluded-v4-address&gt;
+										&lt;/excluded-v4-addresses&gt;
+										&lt;v4-dhcp-relay-gateway-address&gt;2.2.2.2&lt;/v4-dhcp-relay-gateway-address&gt;
+										&lt;excluded-v4-addresses&gt;
+											&lt;excluded-v4-address&gt;192.168.1.7&lt;/excluded-v4-address&gt;
+										&lt;/excluded-v4-addresses&gt;
+										&lt;v4-dhcp-pool-prefix&gt;192.155.2.4&lt;/v4-dhcp-pool-prefix&gt;
+									&lt;/v4-dhcp-pools&gt;									
+									&lt;use-v4-default-pool&gt;Y&lt;/use-v4-default-pool&gt;
+									&lt;excluded-v6-dhcp-addresses-from-default-pool&gt;
+									  &lt;excluded-v6-address&gt;1:5&lt;/excluded-v6-address&gt;
+									&lt;/excluded-v6-dhcp-addresses-from-default-pool&gt;
+									&lt;excluded-v6-dhcp-addresses-from-default-pool&gt;
+									  &lt;excluded-v6-address&gt;1:6&lt;/excluded-v6-address&gt;
+									&lt;/excluded-v6-dhcp-addresses-from-default-pool&gt;
+									&lt;v6-dhcp-pools&gt;
+										&lt;v6-dhcp-relay-next-hop-address&gt;4:4&lt;/v6-dhcp-relay-next-hop-address&gt;
+										&lt;v6-dhcp-pool-prefix-length&gt;28&lt;/v6-dhcp-pool-prefix-length&gt;
+										&lt;excluded-v6-addresses&gt;
+											&lt;excluded-v6-address&gt;1:1&lt;/excluded-v6-address&gt;
+										&lt;/excluded-v6-addresses&gt;
+										&lt;v6-dhcp-relay-gateway-address&gt;3:3&lt;/v6-dhcp-relay-gateway-address&gt;
+										&lt;excluded-v6-addresses&gt;
+											&lt;excluded-v6-address&gt;2:2&lt;/excluded-v6-address&gt;
+										&lt;/excluded-v6-addresses&gt;
+										&lt;v6-dhcp-pool-prefix&gt;0:0&lt;/v6-dhcp-pool-prefix&gt;
+									&lt;/v6-dhcp-pools&gt;
+									&lt;v6-dhcp-pools&gt;
+										&lt;v6-dhcp-relay-next-hop-address&gt;4:4&lt;/v6-dhcp-relay-next-hop-address&gt;
+										&lt;v6-dhcp-pool-prefix-length&gt;28&lt;/v6-dhcp-pool-prefix-length&gt;
+										&lt;excluded-v6-addresses&gt;
+											&lt;excluded-v6-address&gt;1:1&lt;/excluded-v6-address&gt;
+										&lt;/excluded-v6-addresses&gt;
+										&lt;v6-dhcp-relay-gateway-address&gt;3:3&lt;/v6-dhcp-relay-gateway-address&gt;
+										&lt;excluded-v6-addresses&gt;
+											&lt;excluded-v6-address&gt;2:2&lt;/excluded-v6-address&gt;
+										&lt;/excluded-v6-addresses&gt;
+										&lt;v6-dhcp-pool-prefix&gt;0:0&lt;/v6-dhcp-pool-prefix&gt;
+									&lt;/v6-dhcp-pools&gt;									
+								&lt;/dhcp&gt;
+								&lt;firewall-lite&gt;
+									&lt;stateful-firewall-lite-v6-enabled&gt;N&lt;/stateful-firewall-lite-v6-enabled&gt;
+									&lt;stateful-firewall-lite-v4-enabled&gt;Y&lt;/stateful-firewall-lite-v4-enabled&gt;
+									&lt;v4-firewall-packet-filters&gt;
+									  &lt;v4-firewall-prefix&gt;0.0.0.1&lt;/v4-firewall-prefix&gt;
+									  &lt;v4-firewall-prefix-length&gt;1&lt;/v4-firewall-prefix-length&gt;
+									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
+									  &lt;udp-ports&gt;
+									    &lt;port-number&gt;1&lt;/port-number&gt;
+									  &lt;/udp-ports&gt;
+									  &lt;tcp-ports&gt;
+									    &lt;port-number&gt;1&lt;/port-number&gt;
+									  &lt;/tcp-ports&gt;
+									&lt;/v4-firewall-packet-filters&gt;
+									&lt;v4-firewall-packet-filters&gt;
+									  &lt;v4-firewall-prefix&gt;0.0.0.2&lt;/v4-firewall-prefix&gt;
+									  &lt;v4-firewall-prefix-length&gt;2&lt;/v4-firewall-prefix-length&gt;
+									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
+									  &lt;udp-ports&gt;
+									    &lt;port-number&gt;2&lt;/port-number&gt;
+									  &lt;/udp-ports&gt;
+									  &lt;tcp-ports&gt;
+									    &lt;port-number&gt;2&lt;/port-number&gt;
+									  &lt;/tcp-ports&gt;
+									&lt;/v4-firewall-packet-filters&gt;
+									&lt;v6-firewall-packet-filters&gt;
+									  &lt;v6-firewall-prefix&gt;:&lt;/v6-firewall-prefix&gt;
+									  &lt;v6-firewall-prefix-length&gt;0&lt;/v6-firewall-prefix-length&gt;
+									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
+									  &lt;udp-ports&gt;
+									    &lt;port-number&gt;3&lt;/port-number&gt;
+									  &lt;/udp-ports&gt;
+									  &lt;tcp-ports&gt;
+									    &lt;port-number&gt;3&lt;/port-number&gt;
+									  &lt;/tcp-ports&gt;
+									&lt;/v6-firewall-packet-filters&gt;
+									&lt;v6-firewall-packet-filters&gt;
+									  &lt;v6-firewall-prefix&gt;:&lt;/v6-firewall-prefix&gt;
+									  &lt;v6-firewall-prefix-length&gt;1&lt;/v6-firewall-prefix-length&gt;
+									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
+									  &lt;udp-ports&gt;
+									    &lt;port-number&gt;4&lt;/port-number&gt;
+									  &lt;/udp-ports&gt;
+									  &lt;tcp-ports&gt;
+									    &lt;port-number&gt;4&lt;/port-number&gt;
+									  &lt;/tcp-ports&gt;
+									&lt;/v6-firewall-packet-filters&gt;
+								&lt;/firewall-lite&gt;
+								&lt;pat&gt;
+									&lt;v4-pat-pools&gt;
+										&lt;v4-pat-pool-prefix&gt;192.168.1.44&lt;/v4-pat-pool-prefix&gt;
+										&lt;v4-pat-pool-next-hop-address&gt;192.168.1.5&lt;/v4-pat-pool-next-hop-address&gt;
+										&lt;v4-pat-pool-prefix-length&gt;0&lt;/v4-pat-pool-prefix-length&gt;
+									&lt;/v4-pat-pools&gt;
+									&lt;use-v4-default-pool&gt;Y&lt;/use-v4-default-pool&gt;
+									&lt;v4-pat-enabled&gt;N&lt;/v4-pat-enabled&gt;
+									&lt;v4-pat-pools&gt;
+										&lt;v4-pat-pool-prefix&gt;192.168.1.45&lt;/v4-pat-pool-prefix&gt;
+										&lt;v4-pat-pool-next-hop-address&gt;192.168.1.6&lt;/v4-pat-pool-next-hop-address&gt;
+										&lt;v4-pat-pool-prefix-length&gt;28&lt;/v4-pat-pool-prefix-length&gt;
+									&lt;/v4-pat-pools&gt;
+								&lt;/pat&gt;
+								&lt;nat&gt;
+								  &lt;v4-nat-enabled&gt;Y&lt;/v4-nat-enabled&gt;
+								  &lt;v4-nat-mapping-entries&gt;
+								    &lt;v4-nat-internal&gt;0.0.0.0&lt;/v4-nat-internal&gt;
+								    &lt;v4-nat-next-hop-address&gt;0.0.0.0&lt;/v4-nat-next-hop-address&gt;
+								    &lt;v4-nat-external&gt;0.0.0.0&lt;/v4-nat-external&gt;
+								  &lt;/v4-nat-mapping-entries&gt;
+								  &lt;v4-nat-mapping-entries&gt;
+								    &lt;v4-nat-internal&gt;0.0.0.1&lt;/v4-nat-internal&gt;
+								    &lt;v4-nat-next-hop-address&gt;0.0.0.1&lt;/v4-nat-next-hop-address&gt;
+								    &lt;v4-nat-external&gt;0.0.0.1&lt;/v4-nat-external&gt;
+								  &lt;/v4-nat-mapping-entries&gt;
+								&lt;/nat&gt;
+								&lt;vr-designation&gt;primary&lt;/vr-designation&gt;
+								&lt;v4-vce-loopback-address&gt;162.200.3.144&lt;/v4-vce-loopback-address&gt;
+								&lt;v6-vr-lan-prefix-length&gt;64&lt;/v6-vr-lan-prefix-length&gt;
+								&lt;v6-vce-wan-address&gt;2001:1890:12e3:2da::&lt;/v6-vce-wan-address&gt;
+								&lt;v6-vr-lan-prefix&gt;2620:0:10d0:f:ffff:ffff:ffff:fffe&lt;/v6-vr-lan-prefix&gt;
+								&lt;v4-vr-lan-prefix-length&gt;24&lt;/v4-vr-lan-prefix-length&gt;
+								&lt;v4-vr-lan-prefix&gt;10.192.27.254&lt;/v4-vr-lan-prefix&gt;
+								&lt;v4-public-lan-prefixes&gt;
+									&lt;t-provided-v4-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.2&lt;/v4-next-hop-address&gt;
+										&lt;v4-lan-public-prefix&gt;192.168.1.1&lt;/v4-lan-public-prefix&gt;
+										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+									&lt;/t-provided-v4-lan-public-prefixes&gt;
+									&lt;t-provided-v4-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.72&lt;/v4-next-hop-address&gt;
+										&lt;v4-lan-public-prefix&gt;192.168.1.71&lt;/v4-lan-public-prefix&gt;
+										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+									&lt;/t-provided-v4-lan-public-prefixes&gt;
+									&lt;t-provided-v4-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.68&lt;/v4-next-hop-address&gt;
+										&lt;v4-lan-public-prefix&gt;192.168.1.67&lt;/v4-lan-public-prefix&gt;
+										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+									&lt;/t-provided-v4-lan-public-prefixes&gt;
+								&lt;/v4-public-lan-prefixes&gt;
+								&lt;v6-public-lan-prefixes&gt;
+									&lt;t-provided-v6-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
+										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+									&lt;/t-provided-v6-lan-public-prefixes&gt;
+									&lt;t-provided-v6-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:3da::&lt;/v6-lan-public-prefix&gt;
+										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+									&lt;/t-provided-v6-lan-public-prefixes&gt;
+									&lt;t-provided-v6-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:4da::&lt;/v6-lan-public-prefix&gt;
+										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+									&lt;/t-provided-v6-lan-public-prefixes&gt;
+								&lt;/v6-public-lan-prefixes&gt;
+							&lt;/vr-lan-interface&gt;
+							&lt;routing-protocol&gt;none&lt;/routing-protocol&gt;
+						&lt;/vr-lan&gt;
+&lt;ucpe-vms-service-information&gt;				
+ &lt;transport-service-information&gt;
+    &lt;transport-service-type&gt;AVPN&lt;/transport-service-type&gt;
+	&lt;access-circuit-info&gt;
+	   &lt;access-circuit-id&gt;1&lt;/access-circuit-id&gt;
+	   &lt;dual-mode&gt;Active&lt;/dual-mode&gt;
+	&lt;/access-circuit-info&gt;
+	&lt;access-circuit-info&gt;
+	   &lt;access-circuit-id&gt;2&lt;/access-circuit-id&gt;
+	   &lt;dual-mode&gt;Standby&lt;/dual-mode&gt;
+	&lt;/access-circuit-info&gt;	
+ &lt;/transport-service-information&gt;
+ &lt;ucpe-information&gt;
+    &lt;ucpe-host-name&gt;hostname&lt;/ucpe-host-name&gt;
+    &lt;ucpe-activation-code&gt;activecode&lt;/ucpe-activation-code&gt;
+    &lt;out-of-band-management-modem&gt;OOB&lt;/out-of-band-management-modem&gt;
+  &lt;/ucpe-information&gt;
+  &lt;vnf-list&gt;
+	&lt;vnf-information&gt; 
+		&lt;vnf-instance-id&gt;1&lt;/vnf-instance-id&gt; 
+		&lt;vnf-sequence-number&gt;1&lt;/vnf-sequence-number&gt;
+		&lt;vnf-type&gt;ZZ&lt;/vnf-type&gt;
+		&lt;vnf-vendor&gt;JUNIPER&lt;/vnf-vendor&gt;
+		&lt;vnf-model&gt;MODEL1&lt;/vnf-model&gt;
+		&lt;vnf-id&gt;1&lt;/vnf-id&gt;
+		&lt;prov-status&gt;1&lt;/prov-status&gt;
+		&lt;operational-state&gt;1&lt;/operational-state&gt;
+		&lt;orchestration-status&gt;1&lt;/orchestration-status&gt;
+		&lt;equipment-role&gt;1&lt;/equipment-role&gt;
+    &lt;/vnf-information&gt;
+	&lt;vnf-information&gt; 
+		&lt;vnf-instance-id&gt;2&lt;/vnf-instance-id&gt; 
+		&lt;vnf-sequence-number&gt;2&lt;/vnf-sequence-number&gt;
+		&lt;vnf-type&gt;HY&lt;/vnf-type&gt;
+		&lt;vnf-vendor&gt;JUNIPER&lt;/vnf-vendor&gt;
+		&lt;vnf-model&gt;MODEL2&lt;/vnf-model&gt;
+		&lt;vnf-id&gt;2&lt;/vnf-id&gt;
+		&lt;prov-status&gt;2&lt;/prov-status&gt;
+		&lt;operational-state&gt;2&lt;/operational-state&gt;
+		&lt;orchestration-status&gt;2&lt;/orchestration-status&gt;
+		&lt;equipment-role&gt;2&lt;/equipment-role&gt;
+    &lt;/vnf-information&gt;					
+  &lt;/vnf-list&gt;
+ &lt;/ucpe-vms-service-information&gt;										
+						&lt;request-information&gt;
+							&lt;request-action&gt;Layer3ServiceActivateRequest&lt;/request-action&gt;
+							&lt;order-number&gt;4281555&lt;/order-number&gt;
+							&lt;request-id&gt;155415ab-b4a7-4382-b4c6-d17d9sm42855&lt;/request-id&gt;
+							&lt;notification-url&gt;https://csi-tst-q22.it.com:22443/Services/com/cingular/csi/sdn/SendManagedNetworkStatusNotification.jws&lt;/notification-url&gt;
+							&lt;source&gt;OMX&lt;/source&gt;
+							&lt;order-version&gt;1&lt;/order-version&gt;
+						&lt;/request-information&gt;
+						&lt;sdnc-request-header&gt;
+							&lt;svc-action&gt;activate&lt;/svc-action&gt;
+							&lt;svc-notification-url&gt;https://msojra.mtsnjdcp1.aic.cip.com:8443/adapters/rest/SDNCNotify&lt;/svc-notification-url&gt;
+							&lt;svc-request-id&gt;5b1f3c5d-cdf9-488d-8a4b-d3f1229d7760&lt;/svc-request-id&gt;
+						&lt;/sdnc-request-header&gt;
+						&lt;l2-homing-information&gt;
+							&lt;topology&gt;MultiPoint&lt;/topology&gt;
+							&lt;preferred-aic-clli&gt;MTSNJA4LCP1&lt;/preferred-aic-clli&gt;
+							&lt;evc-name&gt;AS/VLXM/003717//SW&lt;/evc-name&gt;
+						&lt;/l2-homing-information&gt;
+						&lt;service-information&gt;
+							&lt;service-instance-id&gt;FK/VLXM/003717//SW_INTERNET&lt;/service-instance-id&gt;
+							&lt;subscriber-name&gt;ST E2E Test42855_1300004281555&lt;/subscriber-name&gt;
+							&lt;service-type&gt;SDN-ETHERNET-INTERNET&lt;/service-type&gt;
+						&lt;/service-information&gt;
+						&lt;internet-service-change-details&gt;
+							&lt;internet-evc-speed-value&gt;10&lt;/internet-evc-speed-value&gt;
+							&lt;internet-evc-speed-units&gt;Kbps&lt;/internet-evc-speed-units&gt;
+							&lt;t-provided-v4-lan-public-prefixes&gt;
+							   &lt;request-index&gt;1&lt;/request-index&gt;
+							   &lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
+							   &lt;v4-lan-public-prefix&gt;192.168.1.15&lt;/v4-lan-public-prefix&gt;
+							   &lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+							&lt;/t-provided-v4-lan-public-prefixes&gt;
+							&lt;t-provided-v4-lan-public-prefixes&gt;
+							   &lt;request-index&gt;2&lt;/request-index&gt;
+							   &lt;v4-next-hop-address&gt;192.168.1.16&lt;/v4-next-hop-address&gt;
+							   &lt;v4-lan-public-prefix&gt;192.168.1.16&lt;/v4-lan-public-prefix&gt;
+							   &lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+							&lt;/t-provided-v4-lan-public-prefixes&gt;
+							&lt;t-provided-v6-lan-public-prefixes&gt;
+							   &lt;request-index&gt;1&lt;/request-index&gt;
+							   &lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+							   &lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
+							   &lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+							&lt;/t-provided-v6-lan-public-prefixes&gt;
+							&lt;t-provided-v6-lan-public-prefixes&gt;
+							   &lt;request-index&gt;1&lt;/request-index&gt;
+							   &lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+							   &lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
+							   &lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+							&lt;/t-provided-v6-lan-public-prefixes&gt;
+						&lt;/internet-service-change-details&gt;
+					&lt;/service-data&gt;
+				&lt;/layer3-service-list&gt;
+</tag0:RequestData>
+   </sdncadapterworkflow:response-data>
+</sdncadapterworkflow:SDNCAdapterWorkflowResponse>"""
+
+	String sdncAdapterRequest = """
+			<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+			<SOAP-ENV:Body>
+			<aetgt:SDNCAdapterRequest xmlns:aetgt="http://org.openecomp/workflow/sdnc/adapter/schema/v1" xmlns:sdncadaptersc="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+			<sdncadapter:RequestHeader xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+			<sdncadapter:RequestId>745b1b50-e39e-4685-9cc8-c71f0bde8bf0</sdncadapter:RequestId>
+			<sdncadapter:SvcAction>query</sdncadapter:SvcAction>
+			<sdncadapter:SvcOperation>services/layer3-service-list/AS%2FVLXM%2F000199%2F%2FSB_INTERNET</sdncadapter:SvcOperation>
+			<sdncadapter:CallbackUrl>http://myhost.com:28080/mso/sdncAdapterCallbackServiceImpl</sdncadapter:CallbackUrl>
+			</sdncadapter:RequestHeader>
+			<sdncadaptersc:RequestData><rest:payload xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+              contentType="text/xml">
+   <service-request xmlns="http://org.openecomp/mso/request/details/schema/v1">
+      <request-information>
+         <request-id>12570a36-7388-4c0a-bec4-189ce3kg9956</request-id>
+         <request-action>GetLayer3ServiceDetailsRequest</request-action>
+         <source>OMX</source>
+      </request-information>
+      <service-information>
+         <service-type>SDN-ETHERNET-INTERNET</service-type>
+         <service-instance-id>PD/VLXM/003717//SW_INTERNET</service-instance-id>
+      </service-information>
+   </service-request>
+</rest:payload></sdncadaptersc:RequestData></aetgt:SDNCAdapterRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>"""
+	
+def sdncAdapterResponse = """<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
+<sdncadapterworkflow:response-data>
+<tag0:CallbackHeader xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+   <tag0:RequestId>39542e39-ccc3-4d1a-8b79-04ce88526613</tag0:RequestId>
+   <tag0:ResponseCode>404</tag0:ResponseCode>
+   <tag0:ResponseMessage>Error processing request to SDNC. Not Found.
+			https://sdncodl.us.aic.cip.com:8443/restconf/config/L3SDN-API:services/layer3-service-list/MVM%2FVLXP%2F000855%2F%2FShakeout.
+			SDNC Returned-[error-type:application, error-tag:data-missing,
+			error-message:Request could not be completed because the relevant
+			data model content does not exist.]</tag0:ResponseMessage>
+</tag0:CallbackHeader>
+</sdncadapterworkflow:response-data>
+</sdncadapterworkflow:SDNCAdapterWorkflowResponse>
+"""
+
+def workflowErrorResponse = """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+								<aetgt:ErrorMessage>Received error from SDN-C: Error processing request to SDNC. Not Found.
+			https://sdncodl.us.aic.cip.com:8443/restconf/config/L3SDN-API:services/layer3-service-list/MVM%2FVLXP%2F000855%2F%2FShakeout.
+			SDNC Returned-[error-type:application, error-tag:data-missing,
+			error-message:Request could not be completed because the relevant
+			data model content does not exist.]</aetgt:ErrorMessage>
+								<aetgt:ErrorCode>5300</aetgt:ErrorCode>
+								<aetgt:SourceSystemErrorCode>404</aetgt:SourceSystemErrorCode>
+								</aetgt:WorkflowException>"""
+
+def workflowErrorResponse1 = """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+					<aetgt:ErrorMessage>Invalid Callback Response from SDNC Adapter</aetgt:ErrorMessage>
+					<aetgt:ErrorCode>5300</aetgt:ErrorCode>
+				  </aetgt:WorkflowException>"""
+			
+def     enhancedCallbackRequestData =
+    """<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">				<layer3-service-list xmlns="com:att:sdnctl:l3api">
+					<service-instance-id>FK/VLXM/003717//SW_INTERNET</service-instance-id>
+					<service-status>
+						<rpc-name>service-configuration-operation</rpc-name>
+						<rpc-action>activate</rpc-action>
+						<request-status>synccomplete</request-status>
+						<final-indicator>N</final-indicator>
+						<l3sdn-action>Layer3ServiceActivateRequest</l3sdn-action>
+						<l3sdn-subaction>SUPP</l3sdn-subaction>
+						<response-timestamp>2015-04-28T21:32:11.386Z</response-timestamp>
+					</service-status>
+					<service-data>
+						<internet-evc-access-information>
+							<ip-version>ds</ip-version>
+							<internet-evc-speed-value>8</internet-evc-speed-value>
+							<internet-evc-speed-units>Mbps</internet-evc-speed-units>
+						</internet-evc-access-information>
+						<vr-lan xmlns="com:att:sdnctl:l3api">
+							<vr-lan-interface>
+								<static-routes>
+									<v6-static-routes>
+										<v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
+										<v6-static-route-prefix>2001:1890:12e3:2da::</v6-static-route-prefix>
+										<v6-static-route-prefix-length>28</v6-static-route-prefix-length>
+									</v6-static-routes>
+									<v4-static-routes>
+										<v4-static-route-prefix>255.255.252.1</v4-static-route-prefix>
+										<v4-next-hop-address>192.168.1.15</v4-next-hop-address>
+										<v4-static-route-prefix-length>28</v4-static-route-prefix-length>
+									</v4-static-routes>
+									<v6-static-routes>
+										<v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
+										<v6-static-route-prefix>2001:1890:12e3:2da::</v6-static-route-prefix>
+										<v6-static-route-prefix-length>28</v6-static-route-prefix-length>
+									</v6-static-routes>
+									<v4-static-routes>
+										<v4-static-route-prefix>255.255.252.2</v4-static-route-prefix>
+										<v4-next-hop-address>192.168.1.15</v4-next-hop-address>
+										<v4-static-route-prefix-length>28</v4-static-route-prefix-length>
+									</v4-static-routes>
+									<v4-static-routes>
+										<v4-static-route-prefix>255.255.252.3</v4-static-route-prefix>
+										<v4-next-hop-address>192.168.1.15</v4-next-hop-address>
+										<v4-static-route-prefix-length>28</v4-static-route-prefix-length>
+									</v4-static-routes>
+								</static-routes>
+								<dhcp>
+									<v6-dhcp-server-enabled>N</v6-dhcp-server-enabled>
+									<v4-dhcp-server-enabled>Y</v4-dhcp-server-enabled>
+									<use-v6-default-pool>N</use-v6-default-pool>
+									<excluded-v4-dhcp-addresses-from-default-pool>
+									  <excluded-v4-address>192.168.1.7</excluded-v4-address>
+									</excluded-v4-dhcp-addresses-from-default-pool>
+									<excluded-v4-dhcp-addresses-from-default-pool>
+									  <excluded-v4-address>192.168.1.8</excluded-v4-address>
+									</excluded-v4-dhcp-addresses-from-default-pool>
+									<v4-dhcp-pools>
+										<v4-dhcp-relay-next-hop-address>1.1.1.1</v4-dhcp-relay-next-hop-address>
+										<v4-dhcp-pool-prefix-length>28</v4-dhcp-pool-prefix-length>
+										<excluded-v4-addresses>
+											<excluded-v4-address>192.168.1.5</excluded-v4-address>
+										</excluded-v4-addresses>
+										<v4-dhcp-relay-gateway-address>2.2.2.1</v4-dhcp-relay-gateway-address>
+										<excluded-v4-addresses>
+											<excluded-v4-address>192.168.1.6</excluded-v4-address>
+										</excluded-v4-addresses>
+										<v4-dhcp-pool-prefix>192.155.2.3</v4-dhcp-pool-prefix>
+									</v4-dhcp-pools>
+									<v4-dhcp-pools>
+										<v4-dhcp-relay-next-hop-address>1.1.1.2</v4-dhcp-relay-next-hop-address>
+										<v4-dhcp-pool-prefix-length>28</v4-dhcp-pool-prefix-length>
+										<excluded-v4-addresses>
+											<excluded-v4-address>192.168.1.6</excluded-v4-address>
+										</excluded-v4-addresses>
+										<v4-dhcp-relay-gateway-address>2.2.2.2</v4-dhcp-relay-gateway-address>
+										<excluded-v4-addresses>
+											<excluded-v4-address>192.168.1.7</excluded-v4-address>
+										</excluded-v4-addresses>
+										<v4-dhcp-pool-prefix>192.155.2.4</v4-dhcp-pool-prefix>
+									</v4-dhcp-pools>									
+									<use-v4-default-pool>Y</use-v4-default-pool>
+									<excluded-v6-dhcp-addresses-from-default-pool>
+									  <excluded-v6-address>1:5</excluded-v6-address>
+									</excluded-v6-dhcp-addresses-from-default-pool>
+									<excluded-v6-dhcp-addresses-from-default-pool>
+									  <excluded-v6-address>1:6</excluded-v6-address>
+									</excluded-v6-dhcp-addresses-from-default-pool>
+									<v6-dhcp-pools>
+										<v6-dhcp-relay-next-hop-address>4:4</v6-dhcp-relay-next-hop-address>
+										<v6-dhcp-pool-prefix-length>28</v6-dhcp-pool-prefix-length>
+										<excluded-v6-addresses>
+											<excluded-v6-address>1:1</excluded-v6-address>
+										</excluded-v6-addresses>
+										<v6-dhcp-relay-gateway-address>3:3</v6-dhcp-relay-gateway-address>
+										<excluded-v6-addresses>
+											<excluded-v6-address>2:2</excluded-v6-address>
+										</excluded-v6-addresses>
+										<v6-dhcp-pool-prefix>0:0</v6-dhcp-pool-prefix>
+									</v6-dhcp-pools>
+									<v6-dhcp-pools>
+										<v6-dhcp-relay-next-hop-address>4:4</v6-dhcp-relay-next-hop-address>
+										<v6-dhcp-pool-prefix-length>28</v6-dhcp-pool-prefix-length>
+										<excluded-v6-addresses>
+											<excluded-v6-address>1:1</excluded-v6-address>
+										</excluded-v6-addresses>
+										<v6-dhcp-relay-gateway-address>3:3</v6-dhcp-relay-gateway-address>
+										<excluded-v6-addresses>
+											<excluded-v6-address>2:2</excluded-v6-address>
+										</excluded-v6-addresses>
+										<v6-dhcp-pool-prefix>0:0</v6-dhcp-pool-prefix>
+									</v6-dhcp-pools>									
+								</dhcp>
+								<firewall-lite>
+									<stateful-firewall-lite-v6-enabled>N</stateful-firewall-lite-v6-enabled>
+									<stateful-firewall-lite-v4-enabled>Y</stateful-firewall-lite-v4-enabled>
+									<v4-firewall-packet-filters>
+									  <v4-firewall-prefix>0.0.0.1</v4-firewall-prefix>
+									  <v4-firewall-prefix-length>1</v4-firewall-prefix-length>
+									  <allow-icmp-ping>Y</allow-icmp-ping>
+									  <udp-ports>
+									    <port-number>1</port-number>
+									  </udp-ports>
+									  <tcp-ports>
+									    <port-number>1</port-number>
+									  </tcp-ports>
+									</v4-firewall-packet-filters>
+									<v4-firewall-packet-filters>
+									  <v4-firewall-prefix>0.0.0.2</v4-firewall-prefix>
+									  <v4-firewall-prefix-length>2</v4-firewall-prefix-length>
+									  <allow-icmp-ping>Y</allow-icmp-ping>
+									  <udp-ports>
+									    <port-number>2</port-number>
+									  </udp-ports>
+									  <tcp-ports>
+									    <port-number>2</port-number>
+									  </tcp-ports>
+									</v4-firewall-packet-filters>
+									<v6-firewall-packet-filters>
+									  <v6-firewall-prefix>:</v6-firewall-prefix>
+									  <v6-firewall-prefix-length>0</v6-firewall-prefix-length>
+									  <allow-icmp-ping>Y</allow-icmp-ping>
+									  <udp-ports>
+									    <port-number>3</port-number>
+									  </udp-ports>
+									  <tcp-ports>
+									    <port-number>3</port-number>
+									  </tcp-ports>
+									</v6-firewall-packet-filters>
+									<v6-firewall-packet-filters>
+									  <v6-firewall-prefix>:</v6-firewall-prefix>
+									  <v6-firewall-prefix-length>1</v6-firewall-prefix-length>
+									  <allow-icmp-ping>Y</allow-icmp-ping>
+									  <udp-ports>
+									    <port-number>4</port-number>
+									  </udp-ports>
+									  <tcp-ports>
+									    <port-number>4</port-number>
+									  </tcp-ports>
+									</v6-firewall-packet-filters>
+								</firewall-lite>
+								<pat>
+									<v4-pat-pools>
+										<v4-pat-pool-prefix>192.168.1.44</v4-pat-pool-prefix>
+										<v4-pat-pool-next-hop-address>192.168.1.5</v4-pat-pool-next-hop-address>
+										<v4-pat-pool-prefix-length>0</v4-pat-pool-prefix-length>
+									</v4-pat-pools>
+									<use-v4-default-pool>Y</use-v4-default-pool>
+									<v4-pat-enabled>N</v4-pat-enabled>
+									<v4-pat-pools>
+										<v4-pat-pool-prefix>192.168.1.45</v4-pat-pool-prefix>
+										<v4-pat-pool-next-hop-address>192.168.1.6</v4-pat-pool-next-hop-address>
+										<v4-pat-pool-prefix-length>28</v4-pat-pool-prefix-length>
+									</v4-pat-pools>
+								</pat>
+								<nat>
+								  <v4-nat-enabled>Y</v4-nat-enabled>
+								  <v4-nat-mapping-entries>
+								    <v4-nat-internal>0.0.0.0</v4-nat-internal>
+								    <v4-nat-next-hop-address>0.0.0.0</v4-nat-next-hop-address>
+								    <v4-nat-external>0.0.0.0</v4-nat-external>
+								  </v4-nat-mapping-entries>
+								  <v4-nat-mapping-entries>
+								    <v4-nat-internal>0.0.0.1</v4-nat-internal>
+								    <v4-nat-next-hop-address>0.0.0.1</v4-nat-next-hop-address>
+								    <v4-nat-external>0.0.0.1</v4-nat-external>
+								  </v4-nat-mapping-entries>
+								</nat>
+								<vr-designation>primary</vr-designation>
+								<v4-vce-loopback-address>162.200.3.144</v4-vce-loopback-address>
+								<v6-vr-lan-prefix-length>64</v6-vr-lan-prefix-length>
+								<v6-vce-wan-address>2001:1890:12e3:2da::</v6-vce-wan-address>
+								<v6-vr-lan-prefix>2620:0:10d0:f:ffff:ffff:ffff:fffe</v6-vr-lan-prefix>
+								<v4-vr-lan-prefix-length>24</v4-vr-lan-prefix-length>
+								<v4-vr-lan-prefix>10.192.27.254</v4-vr-lan-prefix>
+								<v4-public-lan-prefixes>
+									<t-provided-v4-lan-public-prefixes>
+										<request-index>1</request-index>
+										<v4-next-hop-address>192.168.1.2</v4-next-hop-address>
+										<v4-lan-public-prefix>192.168.1.1</v4-lan-public-prefix>
+										<v4-lan-public-prefix-length>28</v4-lan-public-prefix-length>
+									</t-provided-v4-lan-public-prefixes>
+									<t-provided-v4-lan-public-prefixes>
+										<request-index>1</request-index>
+										<v4-next-hop-address>192.168.1.72</v4-next-hop-address>
+										<v4-lan-public-prefix>192.168.1.71</v4-lan-public-prefix>
+										<v4-lan-public-prefix-length>28</v4-lan-public-prefix-length>
+									</t-provided-v4-lan-public-prefixes>
+									<t-provided-v4-lan-public-prefixes>
+										<request-index>1</request-index>
+										<v4-next-hop-address>192.168.1.68</v4-next-hop-address>
+										<v4-lan-public-prefix>192.168.1.67</v4-lan-public-prefix>
+										<v4-lan-public-prefix-length>28</v4-lan-public-prefix-length>
+									</t-provided-v4-lan-public-prefixes>
+								</v4-public-lan-prefixes>
+								<v6-public-lan-prefixes>
+									<t-provided-v6-lan-public-prefixes>
+										<request-index>1</request-index>
+										<v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
+										<v6-lan-public-prefix>2001:1890:12e3:2da::</v6-lan-public-prefix>
+										<v6-lan-public-prefix-length>28</v6-lan-public-prefix-length>
+									</t-provided-v6-lan-public-prefixes>
+									<t-provided-v6-lan-public-prefixes>
+										<request-index>1</request-index>
+										<v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
+										<v6-lan-public-prefix>2001:1890:12e3:3da::</v6-lan-public-prefix>
+										<v6-lan-public-prefix-length>28</v6-lan-public-prefix-length>
+									</t-provided-v6-lan-public-prefixes>
+									<t-provided-v6-lan-public-prefixes>
+										<request-index>1</request-index>
+										<v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
+										<v6-lan-public-prefix>2001:1890:12e3:4da::</v6-lan-public-prefix>
+										<v6-lan-public-prefix-length>28</v6-lan-public-prefix-length>
+									</t-provided-v6-lan-public-prefixes>
+								</v6-public-lan-prefixes>
+							</vr-lan-interface>
+							<routing-protocol>none</routing-protocol>
+						</vr-lan>
+<ucpe-vms-service-information>				
+ <transport-service-information>
+    <transport-service-type>AVPN</transport-service-type>
+	<access-circuit-info>
+	   <access-circuit-id>1</access-circuit-id>
+	   <dual-mode>Active</dual-mode>
+	</access-circuit-info>
+	<access-circuit-info>
+	   <access-circuit-id>2</access-circuit-id>
+	   <dual-mode>Standby</dual-mode>
+	</access-circuit-info>	
+ </transport-service-information>
+ <ucpe-information>
+    <ucpe-host-name>hostname</ucpe-host-name>
+    <ucpe-activation-code>activecode</ucpe-activation-code>
+    <out-of-band-management-modem>OOB</out-of-band-management-modem>
+  </ucpe-information>
+  <vnf-list>
+	<vnf-information> 
+		<vnf-instance-id>1</vnf-instance-id> 
+		<vnf-sequence-number>1</vnf-sequence-number>
+		<vnf-type>ZZ</vnf-type>
+		<vnf-vendor>JUNIPER</vnf-vendor>
+		<vnf-model>MODEL1</vnf-model>
+		<vnf-id>1</vnf-id>
+		<prov-status>1</prov-status>
+		<operational-state>1</operational-state>
+		<orchestration-status>1</orchestration-status>
+		<equipment-role>1</equipment-role>
+    </vnf-information>
+	<vnf-information> 
+		<vnf-instance-id>2</vnf-instance-id> 
+		<vnf-sequence-number>2</vnf-sequence-number>
+		<vnf-type>HY</vnf-type>
+		<vnf-vendor>JUNIPER</vnf-vendor>
+		<vnf-model>MODEL2</vnf-model>
+		<vnf-id>2</vnf-id>
+		<prov-status>2</prov-status>
+		<operational-state>2</operational-state>
+		<orchestration-status>2</orchestration-status>
+		<equipment-role>2</equipment-role>
+    </vnf-information>					
+  </vnf-list>
+ </ucpe-vms-service-information>										
+						<request-information>
+							<request-action>Layer3ServiceActivateRequest</request-action>
+							<order-number>4281555</order-number>
+							<request-id>155415ab-b4a7-4382-b4c6-d17d9sm42855</request-id>
+							<notification-url>https://csi-tst-q22.it.com:22443/Services/com/cingular/csi/sdn/SendManagedNetworkStatusNotification.jws</notification-url>
+							<source>OMX</source>
+							<order-version>1</order-version>
+						</request-information>
+						<sdnc-request-header>
+							<svc-action>activate</svc-action>
+							<svc-notification-url>https://msojra.mtsnjdcp1.aic.cip.com:8443/adapters/rest/SDNCNotify</svc-notification-url>
+							<svc-request-id>5b1f3c5d-cdf9-488d-8a4b-d3f1229d7760</svc-request-id>
+						</sdnc-request-header>
+						<l2-homing-information>
+							<topology>MultiPoint</topology>
+							<preferred-aic-clli>MTSNJA4LCP1</preferred-aic-clli>
+							<evc-name>AS/VLXM/003717//SW</evc-name>
+						</l2-homing-information>
+						<service-information>
+							<service-instance-id>FK/VLXM/003717//SW_INTERNET</service-instance-id>
+							<subscriber-name>ST E2E Test42855_1300004281555</subscriber-name>
+							<service-type>SDN-ETHERNET-INTERNET</service-type>
+						</service-information>
+						<internet-service-change-details>
+							<internet-evc-speed-value>10</internet-evc-speed-value>
+							<internet-evc-speed-units>Kbps</internet-evc-speed-units>
+							<t-provided-v4-lan-public-prefixes>
+							   <request-index>1</request-index>
+							   <v4-next-hop-address>192.168.1.15</v4-next-hop-address>
+							   <v4-lan-public-prefix>192.168.1.15</v4-lan-public-prefix>
+							   <v4-lan-public-prefix-length>28</v4-lan-public-prefix-length>
+							</t-provided-v4-lan-public-prefixes>
+							<t-provided-v4-lan-public-prefixes>
+							   <request-index>2</request-index>
+							   <v4-next-hop-address>192.168.1.16</v4-next-hop-address>
+							   <v4-lan-public-prefix>192.168.1.16</v4-lan-public-prefix>
+							   <v4-lan-public-prefix-length>28</v4-lan-public-prefix-length>
+							</t-provided-v4-lan-public-prefixes>
+							<t-provided-v6-lan-public-prefixes>
+							   <request-index>1</request-index>
+							   <v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
+							   <v6-lan-public-prefix>2001:1890:12e3:2da::</v6-lan-public-prefix>
+							   <v6-lan-public-prefix-length>28</v6-lan-public-prefix-length>
+							</t-provided-v6-lan-public-prefixes>
+							<t-provided-v6-lan-public-prefixes>
+							   <request-index>1</request-index>
+							   <v6-next-hop-address>2001:1890:12e3:2da::</v6-next-hop-address>
+							   <v6-lan-public-prefix>2001:1890:12e3:2da::</v6-lan-public-prefix>
+							   <v6-lan-public-prefix-length>28</v6-lan-public-prefix-length>
+							</t-provided-v6-lan-public-prefixes>
+						</internet-service-change-details>
+					</service-data>
+				</layer3-service-list>
+</tag0:RequestData>
+"""
+
+def sdncAdapterResponseEmpty =
+"""<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
+   <sdncadapterworkflow:response-data/>
+</sdncadapterworkflow:SDNCAdapterWorkflowResponse>"""
+
+def sdncAdapterResponseError =
+"""<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+                                                 xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+   <sdncadapterworkflow:response-data>
+      <tag0:CallbackHeader>
+         <tag0:RequestId>39542e39-ccc3-4d1a-8b79-04ce88526613</tag0:RequestId>
+         <tag0:ResponseCode>404</tag0:ResponseCode>
+         <tag0:ResponseMessage>Error processing request to SDNC. Not Found.
+			https://sdncodl.us.aic.cip.com:8443/restconf/config/L3SDN-API:services/layer3-service-list/MVM%2FVLXP%2F000855%2F%2FShakeout.
+			SDNC Returned-[error-type:application, error-tag:data-missing,
+			error-message:Request could not be completed because the relevant
+			data model content does not exist.]</tag0:ResponseMessage>
+      </tag0:CallbackHeader>
+   </sdncadapterworkflow:response-data>
+</sdncadapterworkflow:SDNCAdapterWorkflowResponse>"""
+
+				  								
+	@Test
+	public void testPreProcessRequest() {
+
+		String sdncAdapterWorkflowRequest = FileUtil.readResourceFile("__files/SDN-ETHERNET-INTERNET/SDNCAdapterV1/sdncadapterworkflowrequest.xml");
+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+		when(mockExecution.getVariable("URN_mso_adapters_po_auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
+		when(mockExecution.getVariable("URN_mso_msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
+		when(mockExecution.getVariable("sdncAdapterWorkflowRequest")).thenReturn(sdncAdapterWorkflowRequest)
+		when(mockExecution.getVariable("URN_mso_workflow_sdncadapter_callback")).thenReturn("http://someurl.someting.com:28080/mso/sdncAdapterCallbackServiceImpl")
+		when(mockExecution.getVariable("URN_mso_use_qualified_host")).thenReturn("true")
+		when(mockExecution.getProcessInstanceId()).thenReturn("745b1b50-e39e-4685-9cc8-c71f0bde8bf0")
+		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
+	
+
+		SDNCAdapter sdncAdapter = new SDNCAdapter()
+		sdncAdapter.preProcessRequest(mockExecution)
+		
+		MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+		debugger.printInvocations(mockExecution)
+		
+
+		verify(mockExecution).setVariable("prefix","SDNCA_")
+		verify(mockExecution).setVariable("sdncAdapterResponse","")
+		verify(mockExecution).setVariable("asynchronousResponseTimeout",false)
+		verify(mockExecution).setVariable("continueListening",false)
+		verify(mockExecution).setVariable("BasicAuthHeaderValue","Basic cGFzc3dvcmQ=")
+		verify(mockExecution).setVariable("serviceConfigActivate",false)
+		verify(mockExecution).setVariable("SDNCA_requestId", "745b1b50-e39e-4685-9cc8-c71f0bde8bf0")
+		verify(mockExecution).setVariable("SDNCA_SuccessIndicator",false)
+		verify(mockExecution).setVariable("source","")
+		verify(mockExecution).setVariable("sdncAdapterRequest", sdncAdapterRequest)	
+	}
+	
+	@Test
+	public void testProcessResponse()
+	{
+		String sdncAdapterCallbackResponse = FileUtil.readResourceFile("__files/SDN-ETHERNET-INTERNET/SDNCAdapterV1mock/sdncadaptercallbackrequest.xml");
+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+		when(mockExecution.getVariable("sdncAdapterCallbackRequest")).thenReturn(sdncAdapterCallbackResponse)
+		SDNCAdapter sdncAdapter = new SDNCAdapter()
+		sdncAdapter.postProcessResponse(mockExecution)
+		
+//		MockitoDebuggerImpl debugger = new MockitoDebuggerImpl()
+//		debugger.printInvocations(mockExecution)
+		
+		verify(mockExecution).getVariable("isDebugLogEnabled")
+		verify(mockExecution,times(2)).getVariable("sdncAdapterCallbackRequest")
+		verify(mockExecution).setVariable("sdncAdapterResponse",workflowResponse)
+		verify(mockExecution).setVariable("enhancedCallbackRequestData",enhancedCallbackRequestData)
+		verify(mockExecution).setVariable("continueListening",false)
+
+	}	
+	
+	@Test
+	public void testProcessResponse_ErrorCase_404()
+	{
+		String sdncAdapterCallbackErrorResponse = FileUtil.readResourceFile("sdncadaptercallbackrequest_404CallBack.xml");
+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+		when(mockExecution.getVariable("sdncAdapterCallbackRequest")).thenReturn(sdncAdapterCallbackErrorResponse)
+		SDNCAdapter sdncAdapter = new SDNCAdapter()
+		sdncAdapter.postProcessResponse(mockExecution)
+		
+		verify(mockExecution, times(1)).getVariable("isDebugLogEnabled")
+		verify(mockExecution,times(2)).getVariable("sdncAdapterCallbackRequest")
+		verify(mockExecution).setVariable("sdncAdapterResponse", sdncAdapterResponseError)
+		verify(mockExecution).setVariable("enhancedCallbackRequestData", "")
+		verify(mockExecution).setVariable("continueListening",false)
+		
+	}
+	
+	@Test
+	public void testProcessResponse_ErrorCase_InvalidCallback()
+	{
+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+		when(mockExecution.getVariable("sdncAdapterCallbackRequest")).thenReturn("<h1>Service Unavailable</h1>")
+		SDNCAdapter sdncAdapter = new SDNCAdapter()
+		sdncAdapter.postProcessResponse(mockExecution)
+		
+		verify(mockExecution).getVariable("isDebugLogEnabled")
+		verify(mockExecution,times(2)).getVariable("sdncAdapterCallbackRequest")
+		verify(mockExecution).setVariable("sdncAdapterResponse", sdncAdapterResponseEmpty)
+		verify(mockExecution).setVariable("enhancedCallbackRequestData", "")
+		verify(mockExecution).setVariable("continueListening",false)
+
+	}
+	
+	@Test
+	public void postProcessResponse()
+	{
+		
+		String SDNCAdapterCallbackRequest = 
+		"""<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<SDNCAdapterCallbackRequest
+	xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+	<CallbackHeader>
+		<RequestId>3bb02798-b344-4d28-9bca-1f029954d1c9</RequestId>
+		<ResponseCode>404</ResponseCode>
+		<ResponseMessage>Error processing request to SDNC. Not Found.
+			https://sdncodl.us.infra.aic.net:8443/restconf/config/L3SDN-API:services/layer3-service-list/85%2FCSIP%2F141203%2FPT_CSI9999998693.
+			SDNC Returned-[error-type:application, error-tag:data-missing,
+			error-message:Request could not be completed because the relevant
+			data model content does not exist ]</ResponseMessage>
+	</CallbackHeader>
+</SDNCAdapterCallbackRequest>"""
+		
+		String sdncAdapterResponse =
+		"""<sdncadapterworkflow:SDNCAdapterWorkflowResponse xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+                                                 xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+   <sdncadapterworkflow:response-data>
+      <tag0:CallbackHeader>
+         <tag0:RequestId>3bb02798-b344-4d28-9bca-1f029954d1c9</tag0:RequestId>
+         <tag0:ResponseCode>404</tag0:ResponseCode>
+         <tag0:ResponseMessage>Error processing request to SDNC. Not Found.
+			https://sdncodl.us.infra.aic.net:8443/restconf/config/L3SDN-API:services/layer3-service-list/85%2FCSIP%2F141203%2FPT_CSI9999998693.
+			SDNC Returned-[error-type:application, error-tag:data-missing,
+			error-message:Request could not be completed because the relevant
+			data model content does not exist ]</tag0:ResponseMessage>
+      </tag0:CallbackHeader>
+   </sdncadapterworkflow:response-data>
+</sdncadapterworkflow:SDNCAdapterWorkflowResponse>"""
+
+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+		when(mockExecution.getVariable("sdncAdapterCallbackRequest")).thenReturn(SDNCAdapterCallbackRequest)
+		SDNCAdapter sdncAdapter = new SDNCAdapter()
+		sdncAdapter.postProcessResponse(mockExecution)
+		
+		verify(mockExecution).getVariable("isDebugLogEnabled")
+		verify(mockExecution,times(2)).getVariable("sdncAdapterCallbackRequest")
+		verify(mockExecution).setVariable("sdncAdapterResponse", sdncAdapterResponse)
+		verify(mockExecution).setVariable("enhancedCallbackRequestData", "")
+		verify(mockExecution).setVariable("continueListening",false)
+
+	}
+
 }
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/TrinityExceptionUtilTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/TrinityExceptionUtilTest.groovy
new file mode 100644
index 0000000..b525967
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/openecomp/mso/bpmn/common/scripts/TrinityExceptionUtilTest.groovy
@@ -0,0 +1,201 @@
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common.scripts
+
+import org.junit.Assert
+import org.junit.Ignore
+import org.junit.runner.RunWith;
+import org.mockito.runners.MockitoJUnitRunner;
+
+
+
+import static org.mockito.Mockito.*
+
+import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
+import org.junit.Before
+import org.junit.runner.RunWith
+import org.mockito.MockitoAnnotations
+import org.mockito.internal.debugging.MockitoDebuggerImpl
+import org.mockito.runners.MockitoJUnitRunner
+import org.openecomp.mso.bpmn.common.scripts.TrinityExceptionUtil;
+@RunWith(MockitoJUnitRunner.class)
+import org.junit.Test
+
+class TrinityExceptionUtilTest {
+	
+	def aotsFault ="""<n1:Fault xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:n1="http://csi.cingular.com/CSI/Namespaces/OneTicketingSystem/InfrastructureCommon/Types/Public/SoapFault.xsd" xmlns:cer="http://csi.cingular.com/CSI/Namespaces/OneTicketingSystem/InfrastructureCommon/Types/Public/ErrorResponse.xsd" xsi:schemaLocation="http://csi.cingular.com/CSI/Namespaces/OneTicketingSystem/InfrastructureCommon/Types/Public/SoapFault.xsd SoapFault-CDM.xsd">
+	<n1:faultcode>xml:space</n1:faultcode>
+	<n1:faultstring>String</n1:faultstring>
+	<n1:faultactor>http://test.com</n1:faultactor>
+	<n1:detail>
+		<n1:CSIApplicationException>
+			<cer:Response>
+				<cer:code>400</cer:code>
+				<cer:description>bad stuff</cer:description>
+			</cer:Response>
+			<cer:ServiceProviderEntity>
+				<cer:reportingServiceEntity>String</cer:reportingServiceEntity>
+				<cer:faultDate>*** ERROR ***</cer:faultDate>
+				<cer:faultSequenceNumber>String</cer:faultSequenceNumber>
+				<cer:faultLevel>String</cer:faultLevel>
+				<cer:faultCode>String</cer:faultCode>
+				<cer:faultDescription>String</cer:faultDescription>
+				<cer:ServiceProviderRawError>
+					<cer:code>String</cer:code>
+					<cer:description>String</cer:description>
+					<cer:BISError>
+						<cer:code>String</cer:code>
+						<cer:description>String</cer:description>
+						<cer:origination>String</cer:origination>
+						<cer:severity>String</cer:severity>
+					</cer:BISError>
+				</cer:ServiceProviderRawError>
+			</cer:ServiceProviderEntity>
+		</n1:CSIApplicationException>
+		<n1:CSIInternalException>
+			<cer:reportingServiceEntity>String</cer:reportingServiceEntity>
+			<cer:faultDate>*** ERROR ***</cer:faultDate>
+			<cer:faultSequenceNumber>String</cer:faultSequenceNumber>
+			<cer:faultLevel>String</cer:faultLevel>
+			<cer:faultCode>String</cer:faultCode>
+			<cer:faultDescription>String</cer:faultDescription>
+			<cer:cingularErrorCode>String</cer:cingularErrorCode>
+			<cer:cingularErrorDescription>String</cer:cingularErrorDescription>
+			<cer:cingularErrorCategory>String</cer:cingularErrorCategory>
+		</n1:CSIInternalException>
+	</n1:detail>
+</n1:Fault>"""
+
+	
+	@Before
+	public void init()
+	{
+		MockitoAnnotations.initMocks(this)
+	}
+	
+	@Test
+	@Ignore
+	public void testMapAAIExceptionTCommonException() {
+		
+		
+		
+		String restFault = """
+				<Fault>
+<requestError>
+<serviceException>
+<messageId>SVC3002</messageId>
+<text>Error writing output performing %1 on %2 (msg=%3) (ec=%4)</text>
+<variables>
+<variable>PUTcustomer</variable>
+<variable>SubName01</variable>
+<variable>Unexpected error reading/updating database:Adding this property for key [service-instance-id] and value [USSTU2CFCNC0101UJZZ01] violates a uniqueness constraint [service-instance-id]</variable>
+<variable>ERR.5.4.5105</variable>
+</variables>
+</serviceException>
+</requestError>
+</Fault>
+			"""	
+		def errorString = """<requestError>
+<serviceException>
+<messageId>SVC3002</messageId>
+<text>Error writing output performing %1 on %2 (msg=%3) (ec=%4)</text>
+<variables>
+<variable>PUTcustomer</variable>
+<variable>SubName01</variable>
+<variable>Unexpected error reading/updating database:Adding this property for key [service-instance-id] and value [USSTU2CFCNC0101UJZZ01] violates a uniqueness constraint [service-instance-id]</variable>
+<variable>ERR.5.4.5105</variable>
+</variables>
+</serviceException>
+</requestError>""" as String
+
+
+			
+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+
+		TrinityExceptionUtil util = new TrinityExceptionUtil()
+		Assert.assertEquals(errorString, util.mapAAIExceptionTCommonException(restFault, mockExecution))
+	}
+	
+	
+	
+	
+	@Test
+	public void testBuildException() {				
+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+		when(mockExecution.getVariable("prefix")).thenReturn("test_")
+		when(mockExecution.getVariable("test_ResponseCode")).thenReturn("400")
+		ArrayList msgVars = new ArrayList()
+		msgVars.add("var1")
+		msgVars.add("var2")
+		when(mockExecution.getVariable("test_errVariables")).thenReturn(msgVars)
+
+		
+		TrinityExceptionUtil util = new TrinityExceptionUtil()
+		String msg = "Bad request"
+		String errorString = """<tns:requestError xmlns:tns="http://org.openecomp/mso/request/types/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://org.openecomp/mso/request/types/v1 MsoServiceInstanceTypesV1.xsd">
+	<tns:serviceException>
+		<tns:messageId>SVC2000</tns:messageId>
+		<tns:text>The following service error occurred: %1. Error code is %2.</tns:text>
+			<tns:variables>var1</tns:variables>
+			<tns:variables>var2</tns:variables>
+	</tns:serviceException>
+</tns:requestError>"""
+		Assert.assertEquals(errorString, util.buildException(msg, mockExecution))
+	}
+	
+	@Test
+	public void testMapAOTSExecptionToCommonException() {
+		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+		when(mockExecution.getVariable("prefix")).thenReturn("test_")
+		when(mockExecution.getVariable("test_ResponseCode")).thenReturn("400")
+		
+		TrinityExceptionUtil util = new TrinityExceptionUtil()
+		String errorString = """<tns:requestError xmlns:tns="http://org.openecomp/mso/request/types/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://org.openecomp/mso/request/types/v1 MsoServiceInstanceTypesV1.xsd">
+	<tns:serviceException>
+		<tns:messageId>SVC2000</tns:messageId>
+		<tns:text>The following service error occurred: %1. Error code is %2.</tns:text>
+			<tns:variables>Received error from AOTS: bad stuff</tns:variables>
+			<tns:variables>400</tns:variables>
+	</tns:serviceException>
+</tns:requestError>"""
+		Assert.assertEquals(errorString, util.mapAOTSExecptionToCommonException(aotsFault, mockExecution))
+	}
+	
+	
+	@Test
+	public void testParseError() {
+	ExecutionEntity mockExecution = mock(ExecutionEntity.class)
+	String errorString = "The following service error occurred: %1. Error code is %2."
+	ArrayList msgVars = new ArrayList()
+	msgVars.add("var1")
+	msgVars.add("var2")
+	when(mockExecution.getVariable("prefix")).thenReturn("test_")
+	when(mockExecution.getVariable("test_errTxt")).thenReturn(errorString)
+	when(mockExecution.getVariable("test_errVariables")).thenReturn(msgVars)
+		
+	TrinityExceptionUtil util = new TrinityExceptionUtil()
+
+	Assert.assertEquals("The following service error occurred: var1. Error code is var2.", util.parseError(mockExecution))
+}
+
+	
+	
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/BPMNUtil.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/BPMNUtil.java
index 4e2b1e1..27f2479 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/BPMNUtil.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/BPMNUtil.java
@@ -1,214 +1,214 @@
-package org.openecomp.mso.bpmn.common;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.spy;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.core.Response;
-
-import org.camunda.bpm.engine.ProcessEngineServices;
-import org.camunda.bpm.engine.history.HistoricProcessInstance;
-import org.camunda.bpm.engine.history.HistoricVariableInstance;
-import org.camunda.bpm.engine.variable.impl.VariableMapImpl;
-import org.jboss.resteasy.spi.AsynchronousResponse;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowAsyncCommonResource;
-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResource;
-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
-
-/**
- * Set of utility methods used for Unit testing
- *
- */
-public class BPMNUtil {
-
-	public static String getVariable(ProcessEngineServices processEngineServices, String processDefinitionID, String name) {
-		String pID = getProcessInstanceId(processEngineServices,
-				processDefinitionID);
-		assertProcessInstanceFinished(processEngineServices, pID);
-		HistoricVariableInstance responseData = processEngineServices.getHistoryService()
-			    .createHistoricVariableInstanceQuery().processInstanceId(pID)
-			    .variableName(name)
-			    .singleResult();
-		
-		if (responseData != null) {
-			return (responseData.getValue() != null ? responseData.getValue().toString(): null); 
-		}
-		return null;
-	}
-
-	@SuppressWarnings("unchecked")
-	public static <T extends Object> T getRawVariable(ProcessEngineServices processEngineServices, String processDefinitionID, String name) {
-		String pID = getProcessInstanceId(processEngineServices,
-				processDefinitionID);
-		assertProcessInstanceFinished(processEngineServices, pID);
-		Object responseData = processEngineServices.getHistoryService()
-			    .createHistoricVariableInstanceQuery().processInstanceId(pID)
-			    .variableName(name)
-			    .singleResult()
-			    .getValue();
-		return (T) responseData;
-	}
-	
-	
-	public static void assertProcessInstanceFinished(ProcessEngineServices processEngineServices, String pid) {
-	    assertEquals(1, processEngineServices.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(pid).finished().count());
-	}
-	
-	public static void assertProcessInstanceNotFinished(ProcessEngineServices processEngineServices, String processDefinitionID) {
-		String pID = getProcessInstanceId(processEngineServices,
-				processDefinitionID);		
-	    assertEquals(0, processEngineServices.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(pID).finished().count());
-	}
-
-	private static String getProcessInstanceId(
-			ProcessEngineServices processEngineServices, String processDefinitionID) {
-		List<HistoricProcessInstance> historyList =  processEngineServices.getHistoryService().createHistoricProcessInstanceQuery().list();
-		String pID = null;
-		for (HistoricProcessInstance hInstance: historyList) {
-			if (hInstance.getProcessDefinitionKey().equals(processDefinitionID)) {
-				pID = hInstance.getId();
-				break;
-			}
-		}
-		return pID;
-	}
-
-	public static boolean isProcessInstanceFinished(ProcessEngineServices processEngineServices, String pid) {
-	    return processEngineServices.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(pid).finished().count() == 1 ? true: false;
-	}
-
-	
-	private static void buildVariable(String key, String value, Map<String,Object> variableValueType) {
-		Map<String, Object> host = new HashMap<String, Object>();
-		host.put("value", value);
-		host.put("type", "String");
-		variableValueType.put(key, host);
-	}
-	
-	public static WorkflowResponse executeWorkFlow(ProcessEngineServices processEngineServices, String processKey, Map<String,String> variables) {
-		WorkflowResource workflowResource = new WorkflowResource();
-		VariableMapImpl variableMap = new VariableMapImpl();
-
-		Map<String, Object> variableValueType = new HashMap<String, Object>();
-		for (String key : variables.keySet()) {
-			buildVariable(key, variables.get(key), variableValueType);
-		}
-		buildVariable("mso-service-request-timeout","600", variableValueType);
-		variableMap.put("variables", variableValueType);
-		
-		workflowResource.setProcessEngineServices4junit(processEngineServices);
-		Response response = workflowResource.startProcessInstanceByKey(
-					processKey, variableMap);
-		WorkflowResponse workflowResponse = (WorkflowResponse) response.getEntity();
-		return workflowResponse;
-	}
-
-	//Check the runtime service to see whether the process is completed
-	public static void waitForWorkflowToFinish(ProcessEngineServices processEngineServices, String pid) throws InterruptedException {
-		// Don't wait forever
-		long waitTime = 120000;
-		long endTime = System.currentTimeMillis() + waitTime;
-
-		while (true) {
-			if (processEngineServices.getRuntimeService().createProcessInstanceQuery().processInstanceId(pid).singleResult() == null) {
-				break;
-			}
-
-			if (System.currentTimeMillis() >= endTime) {
-				fail("Process " + pid + " did not finish in " + waitTime + "ms");
-			}
-
-			Thread.sleep(200);
-		}
-	}
-	
-	/**
-	 * Executes the Asynchronous workflow in synchronous fashion and returns the WorkflowResponse object
-	 * @param processEngineServices
-	 * @param processKey
-	 * @param variables
-	 * @return
-	 * @throws InterruptedException
-	 */
-	public static WorkflowResponse executeAsyncWorkflow(ProcessEngineServices processEngineServices, String processKey, Map<String,String> variables) throws InterruptedException {
-		ProcessThread pthread = new ProcessThread(processKey, processEngineServices, variables);
-		pthread.start();
-		BPMNUtil.assertProcessInstanceNotFinished(processEngineServices, processKey);
-		String pid = getProcessInstanceId(processEngineServices, processKey);
-		//Caution: If there is a problem with workflow, this may wait for ever
-		while (true) {
-			pid = getProcessInstanceId(processEngineServices, processKey);
-			if (!isProcessInstanceFinished(processEngineServices,pid)) {
-				Thread.sleep(200);
-			} else{
-				break;
-			}
-		}
-		//need to retrieve for second time ?
-		pid = getProcessInstanceId(processEngineServices, processKey);
-		waitForWorkflowToFinish(processEngineServices, pid);
-		return pthread.workflowResponse;
-	}
-
-	/**
-	 * Execute workflow using async resource
-	 * @param processEngineServices
-	 * @param processKey
-	 * @param asyncResponse
-	 * @param variables
-	 */
-	private static void executeAsyncFlow(ProcessEngineServices processEngineServices, String processKey, AsynchronousResponse asyncResponse, Map<String,String> variables) {
-		WorkflowAsyncCommonResource workflowResource = new WorkflowAsyncCommonResource();
-		VariableMapImpl variableMap = new VariableMapImpl();
-
-		Map<String, Object> variableValueType = new HashMap<String, Object>();
-		for (String key : variables.keySet()) {
-			buildVariable(key, variables.get(key), variableValueType);
-		}
-		buildVariable("mso-service-request-timeout","600", variableValueType);
-		variableMap.put("variables", variableValueType);
-		
-		workflowResource.setProcessEngineServices4junit(processEngineServices);
-		workflowResource.startProcessInstanceByKey(asyncResponse, processKey, variableMap);
-	}
-	
-	/**
-	 * Helper class which executes workflow in a thread
-	 *
-	 */
-	static class ProcessThread extends Thread {
-		
-		public WorkflowResponse workflowResponse = null;
-		public String processKey;
-		public AsynchronousResponse asyncResponse = spy(AsynchronousResponse.class);
-		public boolean started;
-		public ProcessEngineServices processEngineServices;
-		public Map<String,String> variables;
-		
-		public ProcessThread(String processKey, ProcessEngineServices processEngineServices, Map<String,String> variables) {
-			this.processKey = processKey;
-			this.processEngineServices = processEngineServices;
-			this.variables = variables;
-		}
-		
-		public void run() {
-			started = true;
-			doAnswer(new Answer<Void>() {
-			    public Void answer(InvocationOnMock invocation) {
-			      Response response = (Response) invocation.getArguments()[0];
-			      workflowResponse = (WorkflowResponse) response.getEntity();
-			      return null;
-			    }
-			}).when(asyncResponse).setResponse(any(Response.class));		
-			executeAsyncFlow(processEngineServices, processKey, asyncResponse, variables);
-		}
-	}
-}
+package org.openecomp.mso.bpmn.common;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.spy;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.ws.rs.core.Response;
+
+import org.camunda.bpm.engine.ProcessEngineServices;
+import org.camunda.bpm.engine.history.HistoricProcessInstance;
+import org.camunda.bpm.engine.history.HistoricVariableInstance;
+import org.camunda.bpm.engine.variable.impl.VariableMapImpl;
+import org.jboss.resteasy.spi.AsynchronousResponse;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowAsyncCommonResource;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResource;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+
+/**
+ * Set of utility methods used for Unit testing
+ *
+ */
+public class BPMNUtil {
+
+	public static String getVariable(ProcessEngineServices processEngineServices, String processDefinitionID, String name) {
+		String pID = getProcessInstanceId(processEngineServices,
+				processDefinitionID);
+		assertProcessInstanceFinished(processEngineServices, pID);
+		HistoricVariableInstance responseData = processEngineServices.getHistoryService()
+			    .createHistoricVariableInstanceQuery().processInstanceId(pID)
+			    .variableName(name)
+			    .singleResult();
+		
+		if (responseData != null) {
+			return (responseData.getValue() != null ? responseData.getValue().toString(): null); 
+		}
+		return null;
+	}
+
+	@SuppressWarnings("unchecked")
+	public static <T extends Object> T getRawVariable(ProcessEngineServices processEngineServices, String processDefinitionID, String name) {
+		String pID = getProcessInstanceId(processEngineServices,
+				processDefinitionID);
+		assertProcessInstanceFinished(processEngineServices, pID);
+		Object responseData = processEngineServices.getHistoryService()
+			    .createHistoricVariableInstanceQuery().processInstanceId(pID)
+			    .variableName(name)
+			    .singleResult()
+			    .getValue();
+		return (T) responseData;
+	}
+	
+	
+	public static void assertProcessInstanceFinished(ProcessEngineServices processEngineServices, String pid) {
+	    assertEquals(1, processEngineServices.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(pid).finished().count());
+	}
+	
+	public static void assertProcessInstanceNotFinished(ProcessEngineServices processEngineServices, String processDefinitionID) {
+		String pID = getProcessInstanceId(processEngineServices,
+				processDefinitionID);		
+	    assertEquals(0, processEngineServices.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(pID).finished().count());
+	}
+
+	private static String getProcessInstanceId(
+			ProcessEngineServices processEngineServices, String processDefinitionID) {
+		List<HistoricProcessInstance> historyList =  processEngineServices.getHistoryService().createHistoricProcessInstanceQuery().list();
+		String pID = null;
+		for (HistoricProcessInstance hInstance: historyList) {
+			if (hInstance.getProcessDefinitionKey().equals(processDefinitionID)) {
+				pID = hInstance.getId();
+				break;
+			}
+		}
+		return pID;
+	}
+
+	public static boolean isProcessInstanceFinished(ProcessEngineServices processEngineServices, String pid) {
+	    return processEngineServices.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(pid).finished().count() == 1 ? true: false;
+	}
+
+	
+	private static void buildVariable(String key, String value, Map<String,Object> variableValueType) {
+		Map<String, Object> host = new HashMap<String, Object>();
+		host.put("value", value);
+		host.put("type", "String");
+		variableValueType.put(key, host);
+	}
+	
+	public static WorkflowResponse executeWorkFlow(ProcessEngineServices processEngineServices, String processKey, Map<String,String> variables) {
+		WorkflowResource workflowResource = new WorkflowResource();
+		VariableMapImpl variableMap = new VariableMapImpl();
+
+		Map<String, Object> variableValueType = new HashMap<String, Object>();
+		for (String key : variables.keySet()) {
+			buildVariable(key, variables.get(key), variableValueType);
+		}
+		buildVariable("mso-service-request-timeout","600", variableValueType);
+		variableMap.put("variables", variableValueType);
+		
+		workflowResource.setProcessEngineServices4junit(processEngineServices);
+		Response response = workflowResource.startProcessInstanceByKey(
+					processKey, variableMap);
+		WorkflowResponse workflowResponse = (WorkflowResponse) response.getEntity();
+		return workflowResponse;
+	}
+
+	//Check the runtime service to see whether the process is completed
+	public static void waitForWorkflowToFinish(ProcessEngineServices processEngineServices, String pid) throws InterruptedException {
+		// Don't wait forever
+		long waitTime = 120000;
+		long endTime = System.currentTimeMillis() + waitTime;
+
+		while (true) {
+			if (processEngineServices.getRuntimeService().createProcessInstanceQuery().processInstanceId(pid).singleResult() == null) {
+				break;
+			}
+
+			if (System.currentTimeMillis() >= endTime) {
+				fail("Process " + pid + " did not finish in " + waitTime + "ms");
+			}
+
+			Thread.sleep(200);
+		}
+	}
+	
+	/**
+	 * Executes the Asynchronous workflow in synchronous fashion and returns the WorkflowResponse object
+	 * @param processEngineServices
+	 * @param processKey
+	 * @param variables
+	 * @return
+	 * @throws InterruptedException
+	 */
+	public static WorkflowResponse executeAsyncWorkflow(ProcessEngineServices processEngineServices, String processKey, Map<String,String> variables) throws InterruptedException {
+		ProcessThread pthread = new ProcessThread(processKey, processEngineServices, variables);
+		pthread.start();
+		BPMNUtil.assertProcessInstanceNotFinished(processEngineServices, processKey);
+		String pid = getProcessInstanceId(processEngineServices, processKey);
+		//Caution: If there is a problem with workflow, this may wait for ever
+		while (true) {
+			pid = getProcessInstanceId(processEngineServices, processKey);
+			if (!isProcessInstanceFinished(processEngineServices,pid)) {
+				Thread.sleep(200);
+			} else{
+				break;
+			}
+		}
+		//need to retrieve for second time ?
+		pid = getProcessInstanceId(processEngineServices, processKey);
+		waitForWorkflowToFinish(processEngineServices, pid);
+		return pthread.workflowResponse;
+	}
+
+	/**
+	 * Execute workflow using async resource
+	 * @param processEngineServices
+	 * @param processKey
+	 * @param asyncResponse
+	 * @param variables
+	 */
+	private static void executeAsyncFlow(ProcessEngineServices processEngineServices, String processKey, AsynchronousResponse asyncResponse, Map<String,String> variables) {
+		WorkflowAsyncCommonResource workflowResource = new WorkflowAsyncCommonResource();
+		VariableMapImpl variableMap = new VariableMapImpl();
+
+		Map<String, Object> variableValueType = new HashMap<String, Object>();
+		for (String key : variables.keySet()) {
+			buildVariable(key, variables.get(key), variableValueType);
+		}
+		buildVariable("mso-service-request-timeout","600", variableValueType);
+		variableMap.put("variables", variableValueType);
+		
+		workflowResource.setProcessEngineServices4junit(processEngineServices);
+		workflowResource.startProcessInstanceByKey(asyncResponse, processKey, variableMap);
+	}
+	
+	/**
+	 * Helper class which executes workflow in a thread
+	 *
+	 */
+	static class ProcessThread extends Thread {
+		
+		public WorkflowResponse workflowResponse = null;
+		public String processKey;
+		public AsynchronousResponse asyncResponse = spy(AsynchronousResponse.class);
+		public boolean started;
+		public ProcessEngineServices processEngineServices;
+		public Map<String,String> variables;
+		
+		public ProcessThread(String processKey, ProcessEngineServices processEngineServices, Map<String,String> variables) {
+			this.processKey = processKey;
+			this.processEngineServices = processEngineServices;
+			this.variables = variables;
+		}
+		
+		public void run() {
+			started = true;
+			doAnswer(new Answer<Void>() {
+			    public Void answer(InvocationOnMock invocation) {
+			      Response response = (Response) invocation.getArguments()[0];
+			      workflowResponse = (WorkflowResponse) response.getEntity();
+			      return null;
+			    }
+			}).when(asyncResponse).setResponse(any(Response.class));		
+			executeAsyncFlow(processEngineServices, processKey, asyncResponse, variables);
+		}
+	}
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/CompleteMsoProcessTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/CompleteMsoProcessTest.java
index 5cd59f3..e99f2a8 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/CompleteMsoProcessTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/CompleteMsoProcessTest.java
@@ -1,207 +1,217 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common;
-
-import static org.openecomp.mso.bpmn.common.BPMNUtil.executeWorkFlow;
-import static org.openecomp.mso.bpmn.common.BPMNUtil.waitForWorkflowToFinish;
-import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.camunda.bpm.engine.test.Deployment;
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
-
-/**
- * Unit test for CompleteMsoProcess.bpmn.
- */
-public class CompleteMsoProcessTest extends WorkflowTest {
-	
-	private void executeFlow(String inputRequestFile) throws InterruptedException {
-		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
-		
-		//String changeFeatureActivateRequest = FileUtil.readResourceFile("__files/SDN-ETHERNET-INTERNET/ChangeFeatureActivateV1/" + inputRequestFile);
-		Map<String, String> variables = new HashMap<String, String>();		
-		variables.put("CompleteMsoProcessRequest",inputRequestFile);
-		
-		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "CompleteMsoProcess", variables);
-		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
-		logEnd();
-	}	
-	
-	@Test		
-	@Deployment(resources = {"subprocess/CompleteMsoProcess.bpmn"})
-	public void msoCompletionRequestWithNotificationurl_200() throws Exception {
-		logStart();	
-		
-		//Execute Flow
-		executeFlow(gMsoCompletionRequestWithNotificationurl());
-		
-		//Verify Error
-		String CMSO_ResponseCode = BPMNUtil.getVariable(processEngineRule, "CompleteMsoProcess", "CMSO_ResponseCode");
-		Assert.assertEquals("200", CMSO_ResponseCode);
-		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "CompleteMsoProcess", "CMSO_SuccessIndicator"));
-		logEnd();
-	}
-	
-	@Test		
-	@Ignore // BROKEN TEST
-	@Deployment(resources = {"subprocess/CompleteMsoProcess.bpmn"})
-	public void msoCompletionRequestWithNotificationurl_500() throws Exception {
-		logStart();
-		
-		//Execute Flow
-		executeFlow(gMsoCompletionRequestWithNotificationurl());
-		
-		//Verify Error
-		String CMSO_ResponseCode = BPMNUtil.getVariable(processEngineRule, "CompleteMsoProcess", "CMSO_ResponseCode");
-		Assert.assertEquals("500", CMSO_ResponseCode);
-		Assert.assertFalse((boolean) BPMNUtil.getRawVariable(processEngineRule, "CompleteMsoProcess", "CMSO_SuccessIndicator"));
-		logEnd();
-	}	
-
-	@Test		
-	@Deployment(resources = {"subprocess/CompleteMsoProcess.bpmn"})
-	public void msoCompletionRequestWithNoNotificationurl() throws Exception {
-		logStart();	
-		
-		//Execute Flow
-		executeFlow(gMsoCompletionRequestWithNoNotificationurl());
-		
-		//Verify Error
-		String CMSO_ResponseCode = BPMNUtil.getVariable(processEngineRule, "CompleteMsoProcess", "CMSO_ResponseCode");
-		Assert.assertEquals("200", CMSO_ResponseCode);	
-		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "CompleteMsoProcess", "CMSO_SuccessIndicator"));
-		logEnd();
-	}
-
-	@Test		
-	@Deployment(resources = {"subprocess/CompleteMsoProcess.bpmn"})
-	public void msoCompletionRequestWithNotificationurlNoRequestId() throws Exception {
-		logStart();	
-		
-		//Execute Flow
-		executeFlow(gMsoCompletionRequestWithNotificationurlNoRequestId());
-		
-		//Verify Error
-		String CMSO_ResponseCode = BPMNUtil.getVariable(processEngineRule, "CompleteMsoProcess", "CMSO_ResponseCode");
-		Assert.assertEquals("200", CMSO_ResponseCode);
-		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "CompleteMsoProcess", "CMSO_SuccessIndicator"));
-		logEnd();	
-	}
-	
-	@Test		
-	@Deployment(resources = {"subprocess/CompleteMsoProcess.bpmn"})
-	public void msoCompletionRequestWithNoNotificationurlNoRequestId() throws Exception {
-		logStart();
-		
-		//Execute Flow
-		executeFlow(gMsoCompletionRequestWithNoNotificationurlNoRequestId());
-		
-		//Verify Error
-		String CMSO_ResponseCode = BPMNUtil.getVariable(processEngineRule, "CompleteMsoProcess", "CMSO_ResponseCode");
-		Assert.assertEquals("200", CMSO_ResponseCode);
-		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "CompleteMsoProcess", "CMSO_SuccessIndicator"));
-		logEnd();
-	}	
-
-	public String gMsoCompletionRequestWithNotificationurl() {
-		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
-		String xml = ""
-				+ "<sdncadapterworkflow:MsoCompletionRequest xmlns:ns=\"http://openecomp.org/mso/request/types/v1\" xmlns:sdncadapterworkflow=\"http://ecomp.openecomp.org.com/mso/workflow/schema/v1\">"
-				+ "		<ns:request-information>"
-				+ "			<ns:request-id>uCPE1020_STUW105_5002</ns:request-id>"
-				+ "			<ns:request-action>Layer3ServiceActivateRequest</ns:request-action>"				
-				+ "			<ns:request-sub-action>COMPLETE</ns:request-sub-action>"
-				+ "			<ns:source>OMX</ns:source>"
-				+ "			<ns:notification-url>https://t3nap1a1.snt.bst.bls.com:9004/sdncontroller-sdncontroller-inbound-ws-war/sdncontroller-sdncontroller-inbound-ws.wsdl</ns:notification-url>"				
-				+ "			<ns:order-number>10205000</ns:order-number>"				
-				+ "			<ns:order-version>1</ns:order-version>"
-				+ "		</ns:request-information>"				
-				+ "		<sdncadapterworkflow:mso-bpel-name>UCPELayer3ServiceActivateV1</sdncadapterworkflow:mso-bpel-name>"
-				+ "</sdncadapterworkflow:MsoCompletionRequest>";
-		
-		return xml;
-	}
-		
-
-
-	public String gMsoCompletionRequestWithNoNotificationurl() {
-		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
-		String xml = ""
-				+ "<sdncadapterworkflow:MsoCompletionRequest xmlns:ns=\"http://openecomp.org/mso/request/types/v1\" xmlns:sdncadapterworkflow=\"http://openecomp.org/mso/workflow/schema/v1\">"
-				+ "		<ns:request-information>"
-				+ "			<ns:request-id>uCPE1020_STUW105_5002</ns:request-id>"
-				+ "			<ns:request-action>Layer3ServiceActivateRequest</ns:request-action>"				
-				+ "			<ns:request-sub-action>COMPLETE</ns:request-sub-action>"
-				+ "			<ns:source>OMX</ns:source>"
-				+ "			<ns:notification-url></ns:notification-url>"				
-				+ "			<ns:order-number>10205000</ns:order-number>"				
-				+ "			<ns:order-version>1</ns:order-version>"
-				+ "		</ns:request-information>"				
-				+ "		<sdncadapterworkflow:mso-bpel-name>UCPELayer3ServiceActivateV1</sdncadapterworkflow:mso-bpel-name>"
-				+ "</sdncadapterworkflow:MsoCompletionRequest>";
-		
-		return xml;
-	}
-	
-	public String gMsoCompletionRequestWithNoNotificationurlNoRequestId() {
-		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
-		String xml = ""
-				+ "<sdncadapterworkflow:MsoCompletionRequest xmlns:ns=\"http://openecomp.org/mso/request/types/v1\" xmlns:sdncadapterworkflow=\"http://openecomp.org/mso/workflow/schema/v1\">"
-				+ "		<ns:request-information>"
-				+ "			<ns:request-id></ns:request-id>"
-				+ "			<ns:request-action>Layer3ServiceActivateRequest</ns:request-action>"
-				+ "			<ns:request-sub-action>COMPLETE</ns:request-sub-action>"
-				+ "			<ns:source>OMX</ns:source>"
-				+ "			<ns:notification-url></ns:notification-url>"				
-				+ "			<ns:order-number>10205000</ns:order-number>"				
-				+ "			<ns:order-version>1</ns:order-version>"
-				+ "		</ns:request-information>"				
-				+ "		<sdncadapterworkflow:mso-bpel-name>UCPELayer3ServiceActivateV1</sdncadapterworkflow:mso-bpel-name>"
-				+ "</sdncadapterworkflow:MsoCompletionRequest>";
-		
-		return xml;
-	}	
-	
-	public String gMsoCompletionRequestWithNotificationurlNoRequestId() {
-		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
-		String xml = ""
-				+ "<sdncadapterworkflow:MsoCompletionRequest xmlns:ns=\"http://openecomp.org/mso/request/types/v1\" xmlns:sdncadapterworkflow=\"http://openecomp.org/mso/workflow/schema/v1\">"
-				+ "		<ns:request-information>"
-				+ "			<ns:request-id></ns:request-id>"
-				+ "			<ns:request-action>Layer3ServiceActivateRequest</ns:request-action>"				
-				+ "			<ns:request-sub-action>COMPLETE</ns:request-sub-action>"
-				+ "			<ns:source>OMX</ns:source>"
-				+ "			<ns:notification-url>https://t3nap1a1.snt.bst.bls.com:9004/sdncontroller-sdncontroller-inbound-ws-war/sdncontroller-sdncontroller-inbound-ws.wsdl</ns:notification-url>"				
-				+ "			<ns:order-number>10205000</ns:order-number>"				
-				+ "			<ns:order-version>1</ns:order-version>"
-				+ "		</ns:request-information>"				
-				+ "		<sdncadapterworkflow:mso-bpel-name>UCPELayer3ServiceActivateV1</sdncadapterworkflow:mso-bpel-name>"
-				+ "</sdncadapterworkflow:MsoCompletionRequest>";
-		
-		return xml;
-	}	
-}
-
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common;
+
+import static org.openecomp.mso.bpmn.common.BPMNUtil.executeWorkFlow;
+import static org.openecomp.mso.bpmn.common.BPMNUtil.waitForWorkflowToFinish;
+import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.camunda.bpm.engine.test.Deployment;
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+
+/**
+ * Unit test for CompleteMsoProcess.bpmn.
+ */
+public class CompleteMsoProcessTest extends WorkflowTest {
+	
+	private void executeFlow(String inputRequestFile) throws InterruptedException {
+		mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");
+		
+		//String changeFeatureActivateRequest = FileUtil.readResourceFile("__files/SDN-ETHERNET-INTERNET/ChangeFeatureActivateV1/" + inputRequestFile);
+		Map<String, String> variables = new HashMap<String, String>();		
+		variables.put("CompleteMsoProcessRequest",inputRequestFile);
+		
+		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "CompleteMsoProcess", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+		logEnd();
+	}	
+	
+	@Test		
+	@Deployment(resources = {"subprocess/CompleteMsoProcess.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void msoCompletionRequestWithNotificationurl_200() throws Exception {
+		logStart();	
+		
+		//Execute Flow
+		executeFlow(gMsoCompletionRequestWithNotificationurl());
+		
+		//Verify Error
+		String CMSO_ResponseCode = BPMNUtil.getVariable(processEngineRule, "CompleteMsoProcess", "CMSO_ResponseCode");
+		Assert.assertEquals("200", CMSO_ResponseCode);
+		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "CompleteMsoProcess", "CMSO_SuccessIndicator"));
+		logEnd();
+	}
+	
+	@Test		
+	@Ignore // BROKEN TEST
+	@Deployment(resources = {"subprocess/CompleteMsoProcess.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void msoCompletionRequestWithNotificationurl_500() throws Exception {
+		logStart();
+		
+		//Execute Flow
+		executeFlow(gMsoCompletionRequestWithNotificationurl());
+		
+		//Verify Error
+		String CMSO_ResponseCode = BPMNUtil.getVariable(processEngineRule, "CompleteMsoProcess", "CMSO_ResponseCode");
+		Assert.assertEquals("500", CMSO_ResponseCode);
+		Assert.assertFalse((boolean) BPMNUtil.getRawVariable(processEngineRule, "CompleteMsoProcess", "CMSO_SuccessIndicator"));
+		logEnd();
+	}	
+
+	@Test		
+	@Deployment(resources = {"subprocess/CompleteMsoProcess.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void msoCompletionRequestWithNoNotificationurl() throws Exception {
+		logStart();	
+		
+		//Execute Flow
+		executeFlow(gMsoCompletionRequestWithNoNotificationurl());
+		
+		//Verify Error
+		String CMSO_ResponseCode = BPMNUtil.getVariable(processEngineRule, "CompleteMsoProcess", "CMSO_ResponseCode");
+		Assert.assertEquals("200", CMSO_ResponseCode);	
+		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "CompleteMsoProcess", "CMSO_SuccessIndicator"));
+		logEnd();
+	}
+
+	@Test		
+	@Deployment(resources = {"subprocess/CompleteMsoProcess.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void msoCompletionRequestWithNotificationurlNoRequestId() throws Exception {
+		logStart();	
+		
+		//Execute Flow
+		executeFlow(gMsoCompletionRequestWithNotificationurlNoRequestId());
+		
+		//Verify Error
+		String CMSO_ResponseCode = BPMNUtil.getVariable(processEngineRule, "CompleteMsoProcess", "CMSO_ResponseCode");
+		Assert.assertEquals("200", CMSO_ResponseCode);
+		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "CompleteMsoProcess", "CMSO_SuccessIndicator"));
+		logEnd();	
+	}
+	
+	@Test		
+	@Deployment(resources = {"subprocess/CompleteMsoProcess.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void msoCompletionRequestWithNoNotificationurlNoRequestId() throws Exception {
+		logStart();
+		
+		//Execute Flow
+		executeFlow(gMsoCompletionRequestWithNoNotificationurlNoRequestId());
+		
+		//Verify Error
+		String CMSO_ResponseCode = BPMNUtil.getVariable(processEngineRule, "CompleteMsoProcess", "CMSO_ResponseCode");
+		Assert.assertEquals("200", CMSO_ResponseCode);
+		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "CompleteMsoProcess", "CMSO_SuccessIndicator"));
+		logEnd();
+	}	
+
+	public String gMsoCompletionRequestWithNotificationurl() {
+		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
+		String xml = ""
+				+ "<sdncadapterworkflow:MsoCompletionRequest xmlns:ns=\"http://openecomp.org/mso/request/types/v1\" xmlns:sdncadapterworkflow=\"http://ecomp.openecomp.org.com/mso/workflow/schema/v1\">"
+				+ "		<ns:request-information>"
+				+ "			<ns:request-id>uCPE1020_STUW105_5002</ns:request-id>"
+				+ "			<ns:request-action>Layer3ServiceActivateRequest</ns:request-action>"				
+				+ "			<ns:request-sub-action>COMPLETE</ns:request-sub-action>"
+				+ "			<ns:source>OMX</ns:source>"
+				+ "			<ns:notification-url>https://t3nap1a1.snt.bst.bls.com:9004/sdncontroller-sdncontroller-inbound-ws-war/sdncontroller-sdncontroller-inbound-ws.wsdl</ns:notification-url>"				
+				+ "			<ns:order-number>10205000</ns:order-number>"				
+				+ "			<ns:order-version>1</ns:order-version>"
+				+ "		</ns:request-information>"				
+				+ "		<sdncadapterworkflow:mso-bpel-name>UCPELayer3ServiceActivateV1</sdncadapterworkflow:mso-bpel-name>"
+				+ "</sdncadapterworkflow:MsoCompletionRequest>";
+		
+		return xml;
+	}
+		
+
+
+	public String gMsoCompletionRequestWithNoNotificationurl() {
+		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
+		String xml = ""
+				+ "<sdncadapterworkflow:MsoCompletionRequest xmlns:ns=\"http://openecomp.org/mso/request/types/v1\" xmlns:sdncadapterworkflow=\"http://openecomp.org/mso/workflow/schema/v1\">"
+				+ "		<ns:request-information>"
+				+ "			<ns:request-id>uCPE1020_STUW105_5002</ns:request-id>"
+				+ "			<ns:request-action>Layer3ServiceActivateRequest</ns:request-action>"				
+				+ "			<ns:request-sub-action>COMPLETE</ns:request-sub-action>"
+				+ "			<ns:source>OMX</ns:source>"
+				+ "			<ns:notification-url></ns:notification-url>"				
+				+ "			<ns:order-number>10205000</ns:order-number>"				
+				+ "			<ns:order-version>1</ns:order-version>"
+				+ "		</ns:request-information>"				
+				+ "		<sdncadapterworkflow:mso-bpel-name>UCPELayer3ServiceActivateV1</sdncadapterworkflow:mso-bpel-name>"
+				+ "</sdncadapterworkflow:MsoCompletionRequest>";
+		
+		return xml;
+	}
+	
+	public String gMsoCompletionRequestWithNoNotificationurlNoRequestId() {
+		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
+		String xml = ""
+				+ "<sdncadapterworkflow:MsoCompletionRequest xmlns:ns=\"http://openecomp.org/mso/request/types/v1\" xmlns:sdncadapterworkflow=\"http://openecomp.org/mso/workflow/schema/v1\">"
+				+ "		<ns:request-information>"
+				+ "			<ns:request-id></ns:request-id>"
+				+ "			<ns:request-action>Layer3ServiceActivateRequest</ns:request-action>"
+				+ "			<ns:request-sub-action>COMPLETE</ns:request-sub-action>"
+				+ "			<ns:source>OMX</ns:source>"
+				+ "			<ns:notification-url></ns:notification-url>"				
+				+ "			<ns:order-number>10205000</ns:order-number>"				
+				+ "			<ns:order-version>1</ns:order-version>"
+				+ "		</ns:request-information>"				
+				+ "		<sdncadapterworkflow:mso-bpel-name>UCPELayer3ServiceActivateV1</sdncadapterworkflow:mso-bpel-name>"
+				+ "</sdncadapterworkflow:MsoCompletionRequest>";
+		
+		return xml;
+	}	
+	
+	public String gMsoCompletionRequestWithNotificationurlNoRequestId() {
+		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
+		String xml = ""
+				+ "<sdncadapterworkflow:MsoCompletionRequest xmlns:ns=\"http://openecomp.org/mso/request/types/v1\" xmlns:sdncadapterworkflow=\"http://openecomp.org/mso/workflow/schema/v1\">"
+				+ "		<ns:request-information>"
+				+ "			<ns:request-id></ns:request-id>"
+				+ "			<ns:request-action>Layer3ServiceActivateRequest</ns:request-action>"				
+				+ "			<ns:request-sub-action>COMPLETE</ns:request-sub-action>"
+				+ "			<ns:source>OMX</ns:source>"
+				+ "			<ns:notification-url>https://t3nap1a1.snt.bst.bls.com:9004/sdncontroller-sdncontroller-inbound-ws-war/sdncontroller-sdncontroller-inbound-ws.wsdl</ns:notification-url>"				
+				+ "			<ns:order-number>10205000</ns:order-number>"				
+				+ "			<ns:order-version>1</ns:order-version>"
+				+ "		</ns:request-information>"				
+				+ "		<sdncadapterworkflow:mso-bpel-name>UCPELayer3ServiceActivateV1</sdncadapterworkflow:mso-bpel-name>"
+				+ "</sdncadapterworkflow:MsoCompletionRequest>";
+		
+		return xml;
+	}	
+}
+
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/CreateAAIVfModuleTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/CreateAAIVfModuleTest.java
index b41d2d2..63b1f77 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/CreateAAIVfModuleTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/CreateAAIVfModuleTest.java
@@ -1,277 +1,277 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common;
-
-import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
-import static com.github.tomakehurst.wiremock.client.WireMock.containing;
-import static com.github.tomakehurst.wiremock.client.WireMock.put;
-import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
-import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
-import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIGenericVnfSearch;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.camunda.bpm.engine.RuntimeService;
-import org.camunda.bpm.engine.test.Deployment;
-import org.junit.Assert;
-import org.junit.Test;
-import org.openecomp.mso.bpmn.core.WorkflowException;
-
-/**
- * Unit test for CreateAAIVfModule.bpmn.
- */
-public class CreateAAIVfModuleTest extends WorkflowTest {
-	
-	@Test	
-	@Deployment(resources = {
-			"subprocess/CreateAAIVfModule.bpmn"
-		})
-	public void  TestCreateGenericVnfSuccess_200() {
-
-		MockAAIGenericVnfSearch();
-		MockAAICreateGenericVnf();
-		MockAAIVfModulePUT(true);
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");
-		variables.put("isVidRequest", "false");
-		variables.put("vnfName", "STMTN5MMSC22");
-		variables.put("serviceId", "00000000-0000-0000-0000-000000000000");
-		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
-		variables.put("personaModelVersion", "1.0");
-		variables.put("vfModuleName", "STMTN5MMSC22-MMSC::module-0-0");
-		variables.put("vfModuleModelName", "MMSC::module-0");
-		
-		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
-		String response = BPMNUtil.getVariable(processEngineRule, "CreateAAIVfModule", "CAAIVfMod_createVfModuleResponseCode");
-		String responseCode = BPMNUtil.getVariable(processEngineRule, "CreateAAIVfModule", "CAAIVfMod_createVfModuleResponseCode");
-		Assert.assertEquals("201", responseCode);
-		System.out.println(response);
-	}
-
-	@Test	
-	@Deployment(resources = {
-			"subprocess/CreateAAIVfModule.bpmn"
-		})
-	public void  TestCreateVfModuleSuccess_200() {
-		// create Add-on VF Module for existing Generic VNF
-		MockAAIGenericVnfSearch();
-		MockAAICreateGenericVnf();
-		MockAAIVfModulePUT(true);
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");
-		variables.put("isVidRequest", "false");
-		variables.put("vnfId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
-		variables.put("serviceId", "00000000-0000-0000-0000-000000000000");
-		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
-		variables.put("personaModelVersion", "1.0");
-		variables.put("vfModuleName", "STMTN5MMSC21-MMSC::module-1-0");
-		variables.put("vfModuleModelName", "STMTN5MMSC21-MMSC::model-1-0");
-		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
-		String response = BPMNUtil.getVariable(processEngineRule, "CreateAAIVfModule", "CAAIVfMod_createVfModuleResponseCode");
-		String responseCode = BPMNUtil.getVariable(processEngineRule, "CreateAAIVfModule", "CAAIVfMod_createVfModuleResponseCode");
-		Assert.assertEquals("201", responseCode);
-		System.out.println(response);
-	}
-
-	@Test	
-	@Deployment(resources = {
-			"subprocess/CreateAAIVfModule.bpmn"
-		})
-	public void  TestQueryGenericVnfFailure_5000() {
-		MockAAIGenericVnfSearch();
-		MockAAICreateGenericVnf();
-		MockAAIVfModulePUT(true);
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");		
-		variables.put("isVidRequest", "false");
-		variables.put("vnfName", "STMTN5MMSC23");
-		variables.put("serviceId", "00000000-0000-0000-0000-000000000000");
-		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
-		variables.put("personaModelVersion", "1.0");
-		variables.put("vfModuleName", "STMTN5MMSC23-MMSC::module-0-0");
-		variables.put("vfModuleModelName", "MMSC::module-0");
-		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);		
-		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "CreateAAIVfModule", "WorkflowException");
-		Assert.assertEquals(5000, exception.getErrorCode());
-		Assert.assertEquals(true, exception.getErrorMessage().contains("<messageId>SVC3002</messageId>"));
-		System.out.println(exception.getErrorMessage());
-	}
-
-	@Test	
-	@Deployment(resources = {
-			"subprocess/CreateAAIVfModule.bpmn"
-		})
-	public void  TestCreateDupGenericVnfFailure_1002() {
-		MockAAIGenericVnfSearch();
-		MockAAICreateGenericVnf();
-		MockAAIVfModulePUT(true);
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");		
-		variables.put("isVidRequest", "false");
-		variables.put("vnfName", "STMTN5MMSC21");
-		variables.put("serviceId", "00000000-0000-0000-0000-000000000000");
-		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
-		variables.put("personaModelVersion", "1.0");
-		variables.put("vfModuleName", "STMTN5MMSC21-MMSC::module-0-0");
-		variables.put("vfModuleModelName", "MMSC::module-0");
-		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
-		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "CreateAAIVfModule", "WorkflowException");
-		Assert.assertEquals(1002, exception.getErrorCode());
-		Assert.assertEquals(true, exception.getErrorMessage().contains("Invalid request for new Generic VNF which already exists"));
-		System.out.println(exception.getErrorMessage());
-	}
-
-	@Test	
-	@Deployment(resources = {
-			"subprocess/CreateAAIVfModule.bpmn"
-		})
-	public void  TestCreateDupVfModuleFailure_1002() {
-		MockAAIGenericVnfSearch();
-		MockAAICreateGenericVnf();
-		MockAAIVfModulePUT(true);
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");		
-		variables.put("isVidRequest", "false");
-		variables.put("vnfId", "2f6aee38-1e2a-11e6-82d1-ffc7d9ee8aa4");
-		variables.put("serviceId", "00000000-0000-0000-0000-000000000000");
-		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
-		variables.put("personaModelVersion", "1.0");
-		variables.put("vfModuleName", "STMTN5MMSC20-MMSC::module-1-0");
-		variables.put("vfModuleModelName", "STMTN5MMSC20-MMSC::model-1-0");
-		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
-		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "CreateAAIVfModule", "WorkflowException");
-		Assert.assertEquals(1002, exception.getErrorCode());
-		Assert.assertEquals(true, exception.getErrorMessage().contains("already exists for Generic VNF"));
-		System.out.println(exception.getErrorMessage());
-	}
-	
-	@Test	
-	@Deployment(resources = {
-			"subprocess/CreateAAIVfModule.bpmn"
-		})
-	public void  TestCreateGenericVnfFailure_5000() {
-		MockAAIGenericVnfSearch();
-		MockAAICreateGenericVnf();
-		MockAAIVfModulePUT(true);
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");		
-		variables.put("isVidRequest", "false");
-		variables.put("vnfName", "STMTN5MMSC22");
-		variables.put("serviceId", "99999999-9999-9999-9999-999999999999");
-		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
-		variables.put("personaModelVersion", "1.0");
-		variables.put("vfModuleName", "STMTN5MMSC22-PCRF::module-1-0");
-		variables.put("vfModuleModelName", "PCRF::module-0");
-		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
-		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "CreateAAIVfModule", "WorkflowException");
-		Assert.assertEquals(5000, exception.getErrorCode());
-		Assert.assertEquals(true, exception.getErrorMessage().contains("<messageId>SVC3002</messageId>"));
-		System.out.println(exception.getErrorMessage());
-	}
-
-	@Test	
-	@Deployment(resources = {
-			"subprocess/CreateAAIVfModule.bpmn"
-		})
-	public void  TestCreateGenericVnfFailure_1002() {
-		MockAAIGenericVnfSearch();
-		MockAAICreateGenericVnf();
-		MockAAIVfModulePUT(true);
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");		
-		variables.put("isVidRequest", "false");
-		variables.put("vnfId", "768073c7-f41f-4822-9323-b75962763d74");
-		variables.put("serviceId", "00000000-0000-0000-0000-000000000000");
-		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
-		variables.put("personaModelVersion", "1.0");
-		variables.put("vfModuleName", "STMTN5MMSC22-PCRF::module-1-0");
-		variables.put("vfModuleModelName", "PCRF::module-0");
-		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
-		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "CreateAAIVfModule", "WorkflowException");
-		Assert.assertEquals(1002, exception.getErrorCode());
-		Assert.assertEquals(true, exception.getErrorMessage().contains("Generic VNF Not Found"));
-		System.out.println(exception.getErrorMessage());
-	}
-
-	@Test	
-	@Deployment(resources = {
-			"subprocess/CreateAAIVfModule.bpmn"
-		})
-	public void  TestCreateVfModuleFailure_5000() {
-		MockAAIGenericVnfSearch();
-		MockAAICreateGenericVnf();
-		MockAAIVfModulePUT(true);
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");		
-		variables.put("isVidRequest", "false");
-		variables.put("vnfId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
-		variables.put("serviceId", "99999999-9999-9999-9999-999999999999");
-		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
-		variables.put("personaModelVersion", "1.0");
-		variables.put("vfModuleName", "STMTN5MMSC21-PCRF::module-1-0");
-		variables.put("vfModuleModelName", "STMTN5MMSC21-PCRF::model-1-0");
-		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
-		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "CreateAAIVfModule", "WorkflowException");
-		Assert.assertEquals(5000, exception.getErrorCode());
-		Assert.assertEquals(true, exception.getErrorMessage().contains("<messageId>SVC3002</messageId>"));
-		System.out.println(exception.getErrorMessage());
-	}
-
-	public static void MockAAICreateGenericVnf(){
-		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*"))
-				.withRequestBody(containing("<service-id>00000000-0000-0000-0000-000000000000</service-id>"))
-				.willReturn(aResponse()
-						.withStatus(201)));
-		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*"))
-				.withRequestBody(containing("<service-id>99999999-9999-9999-9999-999999999999</service-id>"))
-				.willReturn(aResponse()
-						.withStatus(500)
-						.withHeader("Content-Type", "text/xml")
-						.withBodyFile("aaiFault.xml")));
-	}
-	
-	// start of mocks used locally and by other VF Module unit tests
-	public static void MockAAIVfModulePUT(boolean isCreate){
-		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*/vf-modules/vf-module/.*"))
-				.withRequestBody(containing("MMSC"))
-				.willReturn(aResponse()
-						.withStatus(isCreate ? 201 : 200)));
-		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*/vf-modules/vf-module/.*"))
-				.withRequestBody(containing("PCRF"))
-				.willReturn(aResponse()
-						.withStatus(500)
-						.withHeader("Content-Type", "text/xml")
-						.withBodyFile("aaiFault.xml")));
-		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721"))				
-				.willReturn(aResponse()
-					.withStatus(200)));
-	}
-	
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.containing;
+import static com.github.tomakehurst.wiremock.client.WireMock.put;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
+import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIGenericVnfSearch;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.camunda.bpm.engine.RuntimeService;
+import org.camunda.bpm.engine.test.Deployment;
+import org.junit.Assert;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.core.WorkflowException;
+
+/**
+ * Unit test for CreateAAIVfModule.bpmn.
+ */
+public class CreateAAIVfModuleTest extends WorkflowTest {
+	
+	@Test	
+	@Deployment(resources = {
+			"subprocess/CreateAAIVfModule.bpmn"
+		})
+	public void  TestCreateGenericVnfSuccess_200() {
+
+		MockAAIGenericVnfSearch();
+		MockAAICreateGenericVnf();
+		MockAAIVfModulePUT(true);
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("isVidRequest", "false");
+		variables.put("vnfName", "STMTN5MMSC22");
+		variables.put("serviceId", "00000000-0000-0000-0000-000000000000");
+		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		variables.put("personaModelVersion", "1.0");
+		variables.put("vfModuleName", "STMTN5MMSC22-MMSC::module-0-0");
+		variables.put("vfModuleModelName", "MMSC::module-0");
+		
+		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
+		String response = BPMNUtil.getVariable(processEngineRule, "CreateAAIVfModule", "CAAIVfMod_createVfModuleResponseCode");
+		String responseCode = BPMNUtil.getVariable(processEngineRule, "CreateAAIVfModule", "CAAIVfMod_createVfModuleResponseCode");
+		Assert.assertEquals("201", responseCode);
+		System.out.println(response);
+	}
+
+	@Test	
+	@Deployment(resources = {
+			"subprocess/CreateAAIVfModule.bpmn"
+		})
+	public void  TestCreateVfModuleSuccess_200() {
+		// create Add-on VF Module for existing Generic VNF
+		MockAAIGenericVnfSearch();
+		MockAAICreateGenericVnf();
+		MockAAIVfModulePUT(true);
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("isVidRequest", "false");
+		variables.put("vnfId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("serviceId", "00000000-0000-0000-0000-000000000000");
+		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		variables.put("personaModelVersion", "1.0");
+		variables.put("vfModuleName", "STMTN5MMSC21-MMSC::module-1-0");
+		variables.put("vfModuleModelName", "STMTN5MMSC21-MMSC::model-1-0");
+		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
+		String response = BPMNUtil.getVariable(processEngineRule, "CreateAAIVfModule", "CAAIVfMod_createVfModuleResponseCode");
+		String responseCode = BPMNUtil.getVariable(processEngineRule, "CreateAAIVfModule", "CAAIVfMod_createVfModuleResponseCode");
+		Assert.assertEquals("201", responseCode);
+		System.out.println(response);
+	}
+
+	@Test	
+	@Deployment(resources = {
+			"subprocess/CreateAAIVfModule.bpmn"
+		})
+	public void  TestQueryGenericVnfFailure_5000() {
+		MockAAIGenericVnfSearch();
+		MockAAICreateGenericVnf();
+		MockAAIVfModulePUT(true);
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");		
+		variables.put("isVidRequest", "false");
+		variables.put("vnfName", "STMTN5MMSC23");
+		variables.put("serviceId", "00000000-0000-0000-0000-000000000000");
+		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		variables.put("personaModelVersion", "1.0");
+		variables.put("vfModuleName", "STMTN5MMSC23-MMSC::module-0-0");
+		variables.put("vfModuleModelName", "MMSC::module-0");
+		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);		
+		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "CreateAAIVfModule", "WorkflowException");
+		Assert.assertEquals(500, exception.getErrorCode());
+		Assert.assertEquals(true, exception.getErrorMessage().contains("Error occurred attempting to query AAI"));
+		System.out.println(exception.getErrorMessage());
+	}
+
+	@Test	
+	@Deployment(resources = {
+			"subprocess/CreateAAIVfModule.bpmn"
+		})
+	public void  TestCreateDupGenericVnfFailure_1002() {
+		MockAAIGenericVnfSearch();
+		MockAAICreateGenericVnf();
+		MockAAIVfModulePUT(true);
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");		
+		variables.put("isVidRequest", "false");
+		variables.put("vnfName", "STMTN5MMSC21");
+		variables.put("serviceId", "00000000-0000-0000-0000-000000000000");
+		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		variables.put("personaModelVersion", "1.0");
+		variables.put("vfModuleName", "STMTN5MMSC21-MMSC::module-0-0");
+		variables.put("vfModuleModelName", "MMSC::module-0");
+		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
+		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "CreateAAIVfModule", "WorkflowException");
+		Assert.assertEquals(1002, exception.getErrorCode());
+		Assert.assertEquals(true, exception.getErrorMessage().contains("Invalid request for new Generic VNF which already exists"));
+		System.out.println(exception.getErrorMessage());
+	}
+
+	@Test	
+	@Deployment(resources = {
+			"subprocess/CreateAAIVfModule.bpmn"
+		})
+	public void  TestCreateDupVfModuleFailure_1002() {
+		MockAAIGenericVnfSearch();
+		MockAAICreateGenericVnf();
+		MockAAIVfModulePUT(true);
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");		
+		variables.put("isVidRequest", "false");
+		variables.put("vnfId", "2f6aee38-1e2a-11e6-82d1-ffc7d9ee8aa4");
+		variables.put("serviceId", "00000000-0000-0000-0000-000000000000");
+		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		variables.put("personaModelVersion", "1.0");
+		variables.put("vfModuleName", "STMTN5MMSC20-MMSC::module-1-0");
+		variables.put("vfModuleModelName", "STMTN5MMSC20-MMSC::model-1-0");
+		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
+		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "CreateAAIVfModule", "WorkflowException");
+		Assert.assertEquals(1002, exception.getErrorCode());
+		Assert.assertEquals(true, exception.getErrorMessage().contains("already exists for Generic VNF"));
+		System.out.println(exception.getErrorMessage());
+	}
+	
+	@Test	
+	@Deployment(resources = {
+			"subprocess/CreateAAIVfModule.bpmn"
+		})
+	public void  TestCreateGenericVnfFailure_5000() {
+		MockAAIGenericVnfSearch();
+		MockAAICreateGenericVnf();
+		MockAAIVfModulePUT(true);
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");		
+		variables.put("isVidRequest", "false");
+		variables.put("vnfName", "STMTN5MMSC22");
+		variables.put("serviceId", "99999999-9999-9999-9999-999999999999");
+		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		variables.put("personaModelVersion", "1.0");
+		variables.put("vfModuleName", "STMTN5MMSC22-PCRF::module-1-0");
+		variables.put("vfModuleModelName", "PCRF::module-0");
+		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
+		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "CreateAAIVfModule", "WorkflowException");
+		Assert.assertEquals(5000, exception.getErrorCode());
+		Assert.assertEquals(true, exception.getErrorMessage().contains("<messageId>SVC3002</messageId>"));
+		System.out.println(exception.getErrorMessage());
+	}
+
+	@Test	
+	@Deployment(resources = {
+			"subprocess/CreateAAIVfModule.bpmn"
+		})
+	public void  TestCreateGenericVnfFailure_1002() {
+		MockAAIGenericVnfSearch();
+		MockAAICreateGenericVnf();
+		MockAAIVfModulePUT(true);
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");		
+		variables.put("isVidRequest", "false");
+		variables.put("vnfId", "768073c7-f41f-4822-9323-b75962763d74");
+		variables.put("serviceId", "00000000-0000-0000-0000-000000000000");
+		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		variables.put("personaModelVersion", "1.0");
+		variables.put("vfModuleName", "STMTN5MMSC22-PCRF::module-1-0");
+		variables.put("vfModuleModelName", "PCRF::module-0");
+		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
+		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "CreateAAIVfModule", "WorkflowException");
+		Assert.assertEquals(1002, exception.getErrorCode());
+		Assert.assertEquals(true, exception.getErrorMessage().contains("Generic VNF Not Found"));
+		System.out.println(exception.getErrorMessage());
+	}
+
+	@Test	
+	@Deployment(resources = {
+			"subprocess/CreateAAIVfModule.bpmn"
+		})
+	public void  TestCreateVfModuleFailure_5000() {
+		MockAAIGenericVnfSearch();
+		MockAAICreateGenericVnf();
+		MockAAIVfModulePUT(true);
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");		
+		variables.put("isVidRequest", "false");
+		variables.put("vnfId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");
+		variables.put("serviceId", "99999999-9999-9999-9999-999999999999");
+		variables.put("personaModelId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");
+		variables.put("personaModelVersion", "1.0");
+		variables.put("vfModuleName", "STMTN5MMSC21-PCRF::module-1-0");
+		variables.put("vfModuleModelName", "STMTN5MMSC21-PCRF::model-1-0");
+		runtimeService.startProcessInstanceByKey("CreateAAIVfModule", variables);
+		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "CreateAAIVfModule", "WorkflowException");
+		Assert.assertEquals(5000, exception.getErrorCode());
+		Assert.assertEquals(true, exception.getErrorMessage().contains("<messageId>SVC3002</messageId>"));
+		System.out.println(exception.getErrorMessage());
+	}
+
+	public static void MockAAICreateGenericVnf(){
+		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*"))
+				.withRequestBody(containing("<service-id>00000000-0000-0000-0000-000000000000</service-id>"))
+				.willReturn(aResponse()
+						.withStatus(201)));
+		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*"))
+				.withRequestBody(containing("<service-id>99999999-9999-9999-9999-999999999999</service-id>"))
+				.willReturn(aResponse()
+						.withStatus(500)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("aaiFault.xml")));
+	}
+	
+	// start of mocks used locally and by other VF Module unit tests
+	public static void MockAAIVfModulePUT(boolean isCreate){
+		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*/vf-modules/vf-module/.*"))
+				.withRequestBody(containing("MMSC"))
+				.willReturn(aResponse()
+						.withStatus(isCreate ? 201 : 200)));
+		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*/vf-modules/vf-module/.*"))
+				.withRequestBody(containing("PCRF"))
+				.willReturn(aResponse()
+						.withStatus(500)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("aaiFault.xml")));
+		stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721"))				
+				.willReturn(aResponse()
+					.withStatus(200)));
+	}
+	
 }
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/DeleteAAIVfModuleTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/DeleteAAIVfModuleTest.java
index 0136b67..d8e0037 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/DeleteAAIVfModuleTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/DeleteAAIVfModuleTest.java
@@ -1,643 +1,643 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common;
-
-import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
-import static com.github.tomakehurst.wiremock.client.WireMock.delete;
-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 java.util.HashMap;
-import java.util.Map;
-
-import org.camunda.bpm.engine.RuntimeService;
-import org.camunda.bpm.engine.test.Deployment;
-import org.junit.Assert;
-import org.junit.Test;
-import org.openecomp.mso.bpmn.core.WorkflowException;
-
-/**
- * Unit test for DeleteAAIVfModule.bpmn.
- */
-public class DeleteAAIVfModuleTest extends WorkflowTest {
-	private static final String EOL = "\n";
-	
-	@Test	
-	@Deployment(resources = {
-			"subprocess/DeleteAAIVfModule.bpmn"
-		})
-	public void  TestDeleteGenericVnfSuccess_200() {
-		// delete the Base Module and Generic Vnf
-		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73
-		MockAAIGenericVnfSearch();
-		MockAAIDeleteGenericVnf();
-		MockAAIDeleteVfModule();
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");
-		variables.put("DeleteAAIVfModuleRequest","<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\"> <request-info> <action>DELETE_VF_MODULE</action> <source>PORTAL</source> </request-info> <vnf-inputs> <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id> <vnf-name>STMTN5MMSC21</vnf-name> <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id> <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name> </vnf-inputs> <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/> </vnf-request>");
-		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
-		String response = BPMNUtil.getVariable(processEngineRule, "DeleteAAIVfModule", "DAAIVfMod_deleteGenericVnfResponseCode");
-		String responseCode = BPMNUtil.getVariable(processEngineRule, "DeleteAAIVfModule", "DAAIVfMod_deleteGenericVnfResponseCode");
-		Assert.assertEquals("200", responseCode);
-		System.out.println(response);
-	}
-
-	@Test	
-	@Deployment(resources = {
-			"subprocess/DeleteAAIVfModule.bpmn"
-		})
-	public void  TestDeleteVfModuleSuccess_200() {
-		// delete Add-on Vf Module for existing Generic Vnf
-		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c720, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a75
-		String request =
-			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
-			"  <request-info>" + EOL +
-			"    <action>DELETE_VF_MODULE</action>" + EOL +
-			"    <source>PORTAL</source>" + EOL +
-			"  </request-info>" + EOL +
-			"  <vnf-inputs>" + EOL +
-			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c720</vnf-id>" + EOL +
-			"    <vnf-name>STMTN5MMSC20</vnf-name>" + EOL +
-			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a75</vf-module-id>" + EOL +
-			"    <vf-module-name>STMTN5MMSC20-MMSC::module-1-0</vf-module-name>" + EOL +
-			"  </vnf-inputs>" + EOL +
-			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
-			"</vnf-request>" + EOL;
-
-		MockAAIGenericVnfSearch();
-		MockAAIDeleteGenericVnf();
-		MockAAIDeleteVfModule();
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");
-		variables.put("DeleteAAIVfModuleRequest",request);
-		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
-		String response = BPMNUtil.getVariable(processEngineRule, "DeleteAAIVfModule", "DAAIVfMod_deleteVfModuleResponseCode");
-		String responseCode = BPMNUtil.getVariable(processEngineRule, "DeleteAAIVfModule", "DAAIVfMod_deleteVfModuleResponseCode");
-		Assert.assertEquals("200", responseCode);
-		System.out.println(response);
-	}
-
-	@Test	
-	@Deployment(resources = {
-			"subprocess/DeleteAAIVfModule.bpmn"
-		})
-	public void  TestQueryGenericVnfFailure_5000() {
-		// query Generic Vnf failure (non-404) with A&AI
-		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c723, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a71
-		String request =
-			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
-			"  <request-info>" + EOL +
-			"    <action>DELETE_VF_MODULE</action>" + EOL +
-			"    <source>PORTAL</source>" + EOL +
-			"  </request-info>" + EOL +
-			"  <vnf-inputs>" + EOL +
-			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c723</vnf-id>" + EOL +
-			"    <vnf-name>STMTN5MMSC23</vnf-name>" + EOL +
-			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a71</vf-module-id>" + EOL +
-			"    <vf-module-name>STMTN5MMSC20-MMSC::module-1-0</vf-module-name>" + EOL +
-			"  </vnf-inputs>" + EOL +
-			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
-			"</vnf-request>" + EOL;
-		MockAAIGenericVnfSearch();
-		MockAAIDeleteGenericVnf();
-		MockAAIDeleteVfModule();
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");
-		variables.put("DeleteAAIVfModuleRequest",request);
-		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
-		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "DeleteAAIVfModule", "WorkflowException");
-		Assert.assertEquals(5000, exception.getErrorCode());
-		Assert.assertEquals(true, exception.getErrorMessage().contains("<messageId>SVC3002</messageId>"));
-		System.out.println(exception.getErrorMessage());
-	}
-
-	@Test	
-	@Deployment(resources = {
-			"subprocess/DeleteAAIVfModule.bpmn"
-		})
-	public void  TestQueryGenericVnfFailure_1002() {
-		// attempt to delete Vf Module for Generic Vnf that does not exist (A&AI returns 404)
-		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c722, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a72
-		String request =
-			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
-			"  <request-info>" + EOL +
-			"    <action>DELETE_VF_MODULE</action>" + EOL +
-			"    <source>PORTAL</source>" + EOL +
-			"  </request-info>" + EOL +
-			"  <vnf-inputs>" + EOL +
-			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c722</vnf-id>" + EOL +
-			"    <vnf-name>STMTN5MMSC22</vnf-name>" + EOL +
-			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a72</vf-module-id>" + EOL +
-			"    <vf-module-name>STMTN5MMSC22-MMSC::module-1-0</vf-module-name>" + EOL +
-			"  </vnf-inputs>" + EOL +
-			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
-			"</vnf-request>" + EOL;
-		MockAAIGenericVnfSearch();
-		MockAAIDeleteGenericVnf();
-		MockAAIDeleteVfModule();
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");
-		variables.put("DeleteAAIVfModuleRequest",request);
-		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
-		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "DeleteAAIVfModule", "WorkflowException");
-		Assert.assertEquals(1002, exception.getErrorCode());
-		Assert.assertEquals(true, exception.getErrorMessage().contains("Generic VNF Not Found"));
-		System.out.println(exception.getErrorMessage());
-	}
-
-	@Test	
-	@Deployment(resources = {
-			"subprocess/DeleteAAIVfModule.bpmn"
-		})
-	public void  TestDeleteGenericVnfFailure_5000() {
-		// A&AI failure (non-200) when attempting to delete a Generic Vnf
-		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c718, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a78
-		String request =
-			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
-			"  <request-info>" + EOL +
-			"    <action>DELETE_VF_MODULE</action>" + EOL +
-			"    <source>PORTAL</source>" + EOL +
-			"  </request-info>" + EOL +
-			"  <vnf-inputs>" + EOL +
-			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c718</vnf-id>" + EOL +
-			"    <vnf-name>STMTN5MMSC18</vnf-name>" + EOL +
-			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a78</vf-module-id>" + EOL +
-			"    <vf-module-name>STMTN5MMSC18-MMSC::module-0-0</vf-module-name>" + EOL +
-			"  </vnf-inputs>" + EOL +
-			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
-			"</vnf-request>" + EOL;
-		MockAAIGenericVnfSearch();
-		MockAAIDeleteGenericVnf();
-		MockAAIDeleteVfModule();
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");
-		variables.put("DeleteAAIVfModuleRequest",request);
-		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
-		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "DeleteAAIVfModule", "WorkflowException");
-		Assert.assertEquals(5000, exception.getErrorCode());
-		Assert.assertEquals(true, exception.getErrorMessage().contains("<messageId>SVC3002</messageId>"));
-		System.out.println(exception.getErrorMessage());
-	}
-	
-	@Test	
-	@Deployment(resources = {
-			"subprocess/DeleteAAIVfModule.bpmn"
-		})
-	public void  TestDeleteVfModuleFailure_5000() {
-		// A&AI failure (non-200) when attempting to delete a Vf Module
-		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c719, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a77
-		String request =
-			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
-			"  <request-info>" + EOL +
-			"    <action>DELETE_VF_MODULE</action>" + EOL +
-			"    <source>PORTAL</source>" + EOL +
-			"  </request-info>" + EOL +
-			"  <vnf-inputs>" + EOL +
-			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c719</vnf-id>" + EOL +
-			"    <vnf-name>STMTN5MMSC19</vnf-name>" + EOL +
-			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a77</vf-module-id>" + EOL +
-			"    <vf-module-name>STMTN5MMSC19-MMSC::module-1-0</vf-module-name>" + EOL +
-			"  </vnf-inputs>" + EOL +
-			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
-			"</vnf-request>" + EOL;
-		MockAAIGenericVnfSearch();
-		MockAAIDeleteGenericVnf();
-		MockAAIDeleteVfModule();
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");
-		variables.put("DeleteAAIVfModuleRequest",request);
-		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
-		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "DeleteAAIVfModule", "WorkflowException");
-		Assert.assertEquals(5000, exception.getErrorCode());
-		Assert.assertEquals(true, exception.getErrorMessage().contains("<messageId>SVC3002</messageId>"));
-		System.out.println(exception.getErrorMessage());
-	}
-	
-	@Test	
-	@Deployment(resources = {
-			"subprocess/DeleteAAIVfModule.bpmn"
-		})
-	public void  TestDeleteVfModuleFailure_1002_1() {
-		// failure attempting to delete Base Module when not the last Vf Module
-		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c720, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a74
-		String request =
-			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
-			"  <request-info>" + EOL +
-			"    <action>DELETE_VF_MODULE</action>" + EOL +
-			"    <source>PORTAL</source>" + EOL +
-			"  </request-info>" + EOL +
-			"  <vnf-inputs>" + EOL +
-			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c720</vnf-id>" + EOL +
-			"    <vnf-name>STMTN5MMSC20</vnf-name>" + EOL +
-			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</vf-module-id>" + EOL +
-			"    <vf-module-name>STMTN5MMSC20-MMSC::module-0-0</vf-module-name>" + EOL +
-			"  </vnf-inputs>" + EOL +
-			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
-			"</vnf-request>" + EOL;
-		MockAAIGenericVnfSearch();
-		MockAAIDeleteGenericVnf();
-		MockAAIDeleteVfModule();
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");
-		variables.put("DeleteAAIVfModuleRequest",request);
-		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
-		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "DeleteAAIVfModule", "WorkflowException");
-		Assert.assertEquals(1002, exception.getErrorCode());
-		Assert.assertEquals(true, exception.getErrorMessage().contains("is Base Module, not Last Module"));
-		System.out.println(exception.getErrorMessage());
-	}
-
-	@Test	
-	@Deployment(resources = {
-			"subprocess/DeleteAAIVfModule.bpmn"
-		})
-	public void  TestDeleteVfModuleFailure_1002_2() {
-		// failure attempting to delete a Vf Module that does not exist (A&AI returns 404)
-		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c720, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a76
-		MockAAIGenericVnfSearch();
-		MockAAIDeleteGenericVnf();
-		MockAAIDeleteVfModule();
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("isDebugLogEnabled","true");
-		variables.put("DeleteAAIVfModuleRequest","<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\"> <request-info> <action>DELETE_VF_MODULE</action> <source>PORTAL</source> </request-info> <vnf-inputs> <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c720</vnf-id> <vnf-name>STMTN5MMSC20</vnf-name> <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a76</vf-module-id> <vf-module-name>STMTN5MMSC20-MMSC::module-2-0</vf-module-name> </vnf-inputs> <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/> </vnf-request>");
-		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
-		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "DeleteAAIVfModule", "WorkflowException");
-		Assert.assertEquals(1002, exception.getErrorCode());
-		Assert.assertEquals(true, exception.getErrorMessage().contains("does not exist for Generic Vnf Id"));
-		System.out.println(exception.getErrorMessage());
-	}
-	
-	// Start of VF Modularization A&AI mocks
-	
-	public static void MockAAIGenericVnfSearch(){
-		String body;
-	
-		// The following stubs are for CreateAAIVfModule and UpdateAAIVfModule
-	
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/[?]vnf-name=STMTN5MMSC23&depth=1"))
-				.willReturn(aResponse()
-						.withStatus(500)
-						.withHeader("Content-Type", "text/xml")
-						.withBodyFile("aaiFault.xml")));
-	
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/[?]vnf-name=STMTN5MMSC22&depth=1"))
-				.willReturn(aResponse()
-						.withStatus(404)
-						.withHeader("Content-Type", "text/xml")
-						.withBody("Generic VNF Not Found")));
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/768073c7-f41f-4822-9323-b75962763d74[?]depth=1"))
-				.willReturn(aResponse()
-						.withStatus(404)
-						.withHeader("Content-Type", "text/xml")
-						.withBody("Generic VNF Not Found")));
-	
-		body =
-			"<generic-vnf xmlns=\"http://com.att.aai.inventory/v7\">" + EOL +
-			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
-			"  <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
-			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
-			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
-			"  <equipment-role>vMMSC</equipment-role>" + EOL +
-			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"  <in-maint>false</in-maint>" + EOL +
-			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
-			"  <resource-version>1508691</resource-version>" + EOL +
-			"  <vf-modules>" + EOL +
-			"    <vf-module>" + EOL +
-			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
-			"      <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
-			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>" + EOL +
-			"      <persona-model-version>1.0</persona-model-version>" + EOL +
-			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
-			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
-			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"      <resource-version>1508692</resource-version>" + EOL +
-			"    </vf-module>" + EOL +
-			"  </vf-modules>" + EOL +
-			"  <relationship-list/>" + EOL +
-			"  <l-interfaces/>" + EOL +
-			"  <lag-interfaces/>" + EOL +
-			"</generic-vnf>" + EOL;
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/[?]vnf-name=STMTN5MMSC21&depth=1"))
-				.willReturn(aResponse()
-						.withStatus(200)
-						.withHeader("Content-Type", "text/xml")
-						.withBody(body)));
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721[?]depth=1"))
-				.willReturn(aResponse()
-						.withStatus(200)
-						.withHeader("Content-Type", "text/xml")
-						.withBody(body)));
-	
-		body =
-			"<generic-vnf xmlns=\"http://com.att.aai.inventory/v7\">" + EOL +
-			"  <vnf-id>2f6aee38-1e2a-11e6-82d1-ffc7d9ee8aa4</vnf-id>" + EOL +
-			"  <vnf-name>STMTN5MMSC20</vnf-name>" + EOL +
-			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
-			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
-			"  <equipment-role>vMMSC</equipment-role>" + EOL +
-			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"  <in-maint>false</in-maint>" + EOL +
-			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
-			"  <resource-version>1508691</resource-version>" + EOL +
-			"  <vf-modules>" + EOL +
-			"    <vf-module>" + EOL +
-			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
-			"      <vf-module-name>STMTN5MMSC20-MMSC::module-0-0</vf-module-name>" + EOL +
-			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>" + EOL +
-			"      <persona-model-version>1.0</persona-model-version>" + EOL +
-			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
-			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
-			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"      <resource-version>1508692</resource-version>" + EOL +
-			"    </vf-module>" + EOL +
-			"    <vf-module>" + EOL +
-			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</vf-module-id>" + EOL +
-			"      <vf-module-name>STMTN5MMSC20-MMSC::module-1-0</vf-module-name>" + EOL +
-			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</persona-model-id>" + EOL +
-			"      <persona-model-version>1.0</persona-model-version>" + EOL +
-			"      <is-base-vf-module>false</is-base-vf-module>" + EOL +
-			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
-			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"      <resource-version>1508692</resource-version>" + EOL +
-			"    </vf-module>" + EOL +
-			"  </vf-modules>" + EOL +
-			"  <relationship-list/>" + EOL +
-			"  <l-interfaces/>" + EOL +
-			"  <lag-interfaces/>" + EOL +
-			"</generic-vnf>" + EOL;
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/[?]vnf-name=STMTN5MMSC20&depth=1"))
-				.willReturn(aResponse()
-						.withStatus(200)
-						.withHeader("Content-Type", "text/xml")
-						.withBody(body)));
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/2f6aee38-1e2a-11e6-82d1-ffc7d9ee8aa4[?]depth=1"))
-				.willReturn(aResponse()
-						.withStatus(200)
-						.withHeader("Content-Type", "text/xml")
-						.withBody(body)));
-	
-		// The following stubs are for DeleteAAIVfModule
-	
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c723[?]depth=1"))
-				.willReturn(aResponse()
-						.withStatus(500)
-						.withHeader("Content-Type", "text/xml")
-						.withBodyFile("aaiFault.xml")));
-	
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c722[?]depth=1"))
-				.willReturn(aResponse()
-						.withStatus(404)
-						.withHeader("Content-Type", "text/xml")
-						.withBody("Generic VNF Not Found")));
-	
-		body =
-				"<generic-vnf xmlns=\"http://com.att.aai.inventory/v7\">" + EOL +
-				"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
-				"  <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
-				"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
-				"  <service-id>SDN-MOBILITY</service-id>" + EOL +
-				"  <equipment-role>vMMSC</equipment-role>" + EOL +
-				"  <orchestration-status>pending-create</orchestration-status>" + EOL +
-				"  <in-maint>false</in-maint>" + EOL +
-				"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
-				"  <resource-version>0000021</resource-version>" + EOL +
-				"  <vf-modules>" + EOL +
-				"    <vf-module>" + EOL +
-				"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
-				"      <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
-				"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>" + EOL +
-				"      <persona-model-version>1.0</persona-model-version>" + EOL +
-				"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
-				"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
-				"      <orchestration-status>pending-create</orchestration-status>" + EOL +
-				"      <resource-version>0000073</resource-version>" + EOL +
-				"    </vf-module>" + EOL +
-				"  </vf-modules>" + EOL +
-				"  <relationship-list/>" + EOL +
-				"  <l-interfaces/>" + EOL +
-				"  <lag-interfaces/>" + EOL +
-				"</generic-vnf>" + EOL;
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721[?]depth=1"))
-				.willReturn(aResponse()
-						.withStatus(200)
-						.withHeader("Content-Type", "text/xml")
-						.withBody(body)));
-	
-		body =
-			"<generic-vnf xmlns=\"http://com.att.aai.inventory/v7\">" + EOL +
-			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c720</vnf-id>" + EOL +
-			"  <vnf-name>STMTN5MMSC20</vnf-name>" + EOL +
-			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
-			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
-			"  <equipment-role>vMMSC</equipment-role>" + EOL +
-			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"  <in-maint>false</in-maint>" + EOL +
-			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
-			"  <resource-version>0000020</resource-version>" + EOL +
-			"  <vf-modules>" + EOL +
-			"    <vf-module>" + EOL +
-			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</vf-module-id>" + EOL +
-			"      <vf-module-name>STMTN5MMSC20-MMSC::module-0-0</vf-module-name>" + EOL +
-			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</persona-model-id>" + EOL +
-			"      <persona-model-version>1.0</persona-model-version>" + EOL +
-			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
-			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
-			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"      <resource-version>0000074</resource-version>" + EOL +
-			"    </vf-module>" + EOL +
-			"    <vf-module>" + EOL +
-			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a75</vf-module-id>" + EOL +
-			"      <vf-module-name>STMTN5MMSC20-MMSC::module-1-0</vf-module-name>" + EOL +
-			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a75</persona-model-id>" + EOL +
-			"      <persona-model-version>1.0</persona-model-version>" + EOL +
-			"      <is-base-vf-module>false</is-base-vf-module>" + EOL +
-			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
-			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"      <resource-version>0000075</resource-version>" + EOL +
-			"    </vf-module>" + EOL +
-			"  </vf-modules>" + EOL +
-			"  <relationship-list/>" + EOL +
-			"  <l-interfaces/>" + EOL +
-			"  <lag-interfaces/>" + EOL +
-			"</generic-vnf>" + EOL;
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c720[?]depth=1"))
-				.willReturn(aResponse()
-						.withStatus(200)
-						.withHeader("Content-Type", "text/xml")
-						.withBody(body)));
-	
-		body =
-			"<generic-vnf xmlns=\"http://com.att.aai.inventory/v7\">" + EOL +
-			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c719</vnf-id>" + EOL +
-			"  <vnf-name>STMTN5MMSC19</vnf-name>" + EOL +
-			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
-			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
-			"  <equipment-role>vMMSC</equipment-role>" + EOL +
-			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"  <in-maint>false</in-maint>" + EOL +
-			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
-			"  <resource-version>0000019</resource-version>" + EOL +
-			"  <vf-modules>" + EOL +
-			"    <vf-module>" + EOL +
-			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a76</vf-module-id>" + EOL +
-			"      <vf-module-name>STMTN5MMSC19-MMSC::module-0-0</vf-module-name>" + EOL +
-			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a76</persona-model-id>" + EOL +
-			"      <persona-model-version>1.0</persona-model-version>" + EOL +
-			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
-			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
-			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"      <resource-version>0000076</resource-version>" + EOL +
-			"    </vf-module>" + EOL +
-			"    <vf-module>" + EOL +
-			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a77</vf-module-id>" + EOL +
-			"      <vf-module-name>STMTN5MMSC19-MMSC::module-1-0</vf-module-name>" + EOL +
-			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a77</persona-model-id>" + EOL +
-			"      <persona-model-version>1.0</persona-model-version>" + EOL +
-			"      <is-base-vf-module>false</is-base-vf-module>" + EOL +
-			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
-			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"      <resource-version>0000077</resource-version>" + EOL +
-			"    </vf-module>" + EOL +
-			"  </vf-modules>" + EOL +
-			"  <relationship-list/>" + EOL +
-			"  <l-interfaces/>" + EOL +
-			"  <lag-interfaces/>" + EOL +
-			"</generic-vnf>" + EOL;
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c719[?]depth=1"))
-				.willReturn(aResponse()
-						.withStatus(200)
-						.withHeader("Content-Type", "text/xml")
-						.withBody(body)));
-	
-		body =
-			"<generic-vnf xmlns=\"http://com.att.aai.inventory/v7\">" + EOL +
-			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c718</vnf-id>" + EOL +
-			"  <vnf-name>STMTN5MMSC18</vnf-name>" + EOL +
-			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
-			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
-			"  <equipment-role>vMMSC</equipment-role>" + EOL +
-			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"  <in-maint>false</in-maint>" + EOL +
-			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
-			"  <resource-version>0000018</resource-version>" + EOL +
-			"  <vf-modules>" + EOL +
-			"    <vf-module>" + EOL +
-			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a78</vf-module-id>" + EOL +
-			"      <vf-module-name>STMTN5MMSC18-MMSC::module-0-0</vf-module-name>" + EOL +
-			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a78</persona-model-id>" + EOL +
-			"      <persona-model-version>1.0</persona-model-version>" + EOL +
-			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
-			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
-			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"      <resource-version>0000078</resource-version>" + EOL +
-			"    </vf-module>" + EOL +
-			"  </vf-modules>" + EOL +
-			"  <relationship-list/>" + EOL +
-			"  <l-interfaces/>" + EOL +
-			"  <lag-interfaces/>" + EOL +
-			"</generic-vnf>" + EOL;
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c718[?]depth=1"))
-				.willReturn(aResponse()
-						.withStatus(200)
-						.withHeader("Content-Type", "text/xml")
-						.withBody(body)));
-	
-		body =
-			"<generic-vnf xmlns=\"http://com.att.aai.inventory/v7\">" + EOL +
-			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
-			"  <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
-			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
-			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
-			"  <equipment-role>vMMSC</equipment-role>" + EOL +
-			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"  <in-maint>false</in-maint>" + EOL +
-			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
-			"  <resource-version>0000021</resource-version>" + EOL +
-			"  <vf-modules>" + EOL +
-			"    <vf-module>" + EOL +
-			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
-			"      <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
-			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>" + EOL +
-			"      <persona-model-version>1.0</persona-model-version>" + EOL +
-			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
-			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
-			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
-			"      <resource-version>0000073</resource-version>" + EOL +
-			"    </vf-module>" + EOL +
-			"  </vf-modules>" + EOL +
-			"  <relationship-list/>" + EOL +
-			"  <l-interfaces/>" + EOL +
-			"  <lag-interfaces/>" + EOL +
-			"</generic-vnf>" + EOL;
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a73"))
-				.willReturn(aResponse()
-						.withStatus(200)
-						.withHeader("Content-Type", "text/xml")
-						.withBody(body)));
-	}
-	public static void MockAAIDeleteGenericVnf(){
-		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721/[?]resource-version=0000021"))
-				.willReturn(aResponse()
-						.withStatus(200)));
-		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c718/[?]resource-version=0000018"))
-				.willReturn(aResponse()
-						.withStatus(500)
-						.withHeader("Content-Type", "text/xml")
-						.withBodyFile("aaiFault.xml")));
-	}
-
-	public static void MockAAIDeleteVfModule(){
-		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a73/[?]resource-version=0000073"))
-				.willReturn(aResponse()
-						.withStatus(200)));
-		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c720/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a75/[?]resource-version=0000075"))
-				.willReturn(aResponse()
-						.withStatus(200)));
-		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c718/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a78/[?]resource-version=0000078"))
-				.willReturn(aResponse()
-						.withStatus(200)));
-		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c719/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a77/[?]resource-version=0000077"))
-				.willReturn(aResponse()
-						.withStatus(500)
-						.withHeader("Content-Type", "text/xml")
-						.withBodyFile("aaiFault.xml")));
-		stubFor(get(urlMatching("/aai/v[0-9]+/network/network-policies/network-policy\\?network-policy-fqdn=.*"))
-				  .willReturn(aResponse()
-				  .withStatus(200)
-				  .withHeader("Content-Type", "text/xml")
-				  .withBodyFile("VfModularity/QueryNetworkPolicy_AAIResponse_Success.xml")));
-
-		stubFor(delete(urlMatching("/aai/v[0-9]+/network/network-policies/network-policy/.*"))
-				.willReturn(aResponse()
-						.withStatus(200)));
-	}
-}
-
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.delete;
+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 java.util.HashMap;
+import java.util.Map;
+
+import org.camunda.bpm.engine.RuntimeService;
+import org.camunda.bpm.engine.test.Deployment;
+import org.junit.Assert;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.core.WorkflowException;
+
+/**
+ * Unit test for DeleteAAIVfModule.bpmn.
+ */
+public class DeleteAAIVfModuleTest extends WorkflowTest {
+	private static final String EOL = "\n";
+	
+	@Test	
+	@Deployment(resources = {
+			"subprocess/DeleteAAIVfModule.bpmn"
+		})
+	public void  TestDeleteGenericVnfSuccess_200() {
+		// delete the Base Module and Generic Vnf
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73
+		MockAAIGenericVnfSearch();
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("DeleteAAIVfModuleRequest","<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\"> <request-info> <action>DELETE_VF_MODULE</action> <source>PORTAL</source> </request-info> <vnf-inputs> <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id> <vnf-name>STMTN5MMSC21</vnf-name> <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id> <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name> </vnf-inputs> <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/> </vnf-request>");
+		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
+		String response = BPMNUtil.getVariable(processEngineRule, "DeleteAAIVfModule", "DAAIVfMod_deleteGenericVnfResponseCode");
+		String responseCode = BPMNUtil.getVariable(processEngineRule, "DeleteAAIVfModule", "DAAIVfMod_deleteGenericVnfResponseCode");
+		Assert.assertEquals("200", responseCode);
+		System.out.println(response);
+	}
+
+	@Test	
+	@Deployment(resources = {
+			"subprocess/DeleteAAIVfModule.bpmn"
+		})
+	public void  TestDeleteVfModuleSuccess_200() {
+		// delete Add-on Vf Module for existing Generic Vnf
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c720, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a75
+		String request =
+			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
+			"  <request-info>" + EOL +
+			"    <action>DELETE_VF_MODULE</action>" + EOL +
+			"    <source>PORTAL</source>" + EOL +
+			"  </request-info>" + EOL +
+			"  <vnf-inputs>" + EOL +
+			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c720</vnf-id>" + EOL +
+			"    <vnf-name>STMTN5MMSC20</vnf-name>" + EOL +
+			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a75</vf-module-id>" + EOL +
+			"    <vf-module-name>STMTN5MMSC20-MMSC::module-1-0</vf-module-name>" + EOL +
+			"  </vnf-inputs>" + EOL +
+			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+
+		MockAAIGenericVnfSearch();
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("DeleteAAIVfModuleRequest",request);
+		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
+		String response = BPMNUtil.getVariable(processEngineRule, "DeleteAAIVfModule", "DAAIVfMod_deleteVfModuleResponseCode");
+		String responseCode = BPMNUtil.getVariable(processEngineRule, "DeleteAAIVfModule", "DAAIVfMod_deleteVfModuleResponseCode");
+		Assert.assertEquals("200", responseCode);
+		System.out.println(response);
+	}
+
+	@Test	
+	@Deployment(resources = {
+			"subprocess/DeleteAAIVfModule.bpmn"
+		})
+	public void  TestQueryGenericVnfFailure_5000() {
+		// query Generic Vnf failure (non-404) with A&AI
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c723, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a71
+		String request =
+			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
+			"  <request-info>" + EOL +
+			"    <action>DELETE_VF_MODULE</action>" + EOL +
+			"    <source>PORTAL</source>" + EOL +
+			"  </request-info>" + EOL +
+			"  <vnf-inputs>" + EOL +
+			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c723</vnf-id>" + EOL +
+			"    <vnf-name>STMTN5MMSC23</vnf-name>" + EOL +
+			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a71</vf-module-id>" + EOL +
+			"    <vf-module-name>STMTN5MMSC20-MMSC::module-1-0</vf-module-name>" + EOL +
+			"  </vnf-inputs>" + EOL +
+			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+		MockAAIGenericVnfSearch();
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("DeleteAAIVfModuleRequest",request);
+		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
+		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "DeleteAAIVfModule", "WorkflowException");
+		Assert.assertEquals(5000, exception.getErrorCode());
+		Assert.assertEquals(true, exception.getErrorMessage().contains("<messageId>SVC3002</messageId>"));
+		System.out.println(exception.getErrorMessage());
+	}
+
+	@Test	
+	@Deployment(resources = {
+			"subprocess/DeleteAAIVfModule.bpmn"
+		})
+	public void  TestQueryGenericVnfFailure_1002() {
+		// attempt to delete Vf Module for Generic Vnf that does not exist (A&AI returns 404)
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c722, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a72
+		String request =
+			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
+			"  <request-info>" + EOL +
+			"    <action>DELETE_VF_MODULE</action>" + EOL +
+			"    <source>PORTAL</source>" + EOL +
+			"  </request-info>" + EOL +
+			"  <vnf-inputs>" + EOL +
+			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c722</vnf-id>" + EOL +
+			"    <vnf-name>STMTN5MMSC22</vnf-name>" + EOL +
+			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a72</vf-module-id>" + EOL +
+			"    <vf-module-name>STMTN5MMSC22-MMSC::module-1-0</vf-module-name>" + EOL +
+			"  </vnf-inputs>" + EOL +
+			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+		MockAAIGenericVnfSearch();
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("DeleteAAIVfModuleRequest",request);
+		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
+		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "DeleteAAIVfModule", "WorkflowException");
+		Assert.assertEquals(1002, exception.getErrorCode());
+		Assert.assertEquals(true, exception.getErrorMessage().contains("Generic VNF Not Found"));
+		System.out.println(exception.getErrorMessage());
+	}
+
+	@Test	
+	@Deployment(resources = {
+			"subprocess/DeleteAAIVfModule.bpmn"
+		})
+	public void  TestDeleteGenericVnfFailure_5000() {
+		// A&AI failure (non-200) when attempting to delete a Generic Vnf
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c718, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a78
+		String request =
+			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
+			"  <request-info>" + EOL +
+			"    <action>DELETE_VF_MODULE</action>" + EOL +
+			"    <source>PORTAL</source>" + EOL +
+			"  </request-info>" + EOL +
+			"  <vnf-inputs>" + EOL +
+			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c718</vnf-id>" + EOL +
+			"    <vnf-name>STMTN5MMSC18</vnf-name>" + EOL +
+			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a78</vf-module-id>" + EOL +
+			"    <vf-module-name>STMTN5MMSC18-MMSC::module-0-0</vf-module-name>" + EOL +
+			"  </vnf-inputs>" + EOL +
+			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+		MockAAIGenericVnfSearch();
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("DeleteAAIVfModuleRequest",request);
+		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
+		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "DeleteAAIVfModule", "WorkflowException");
+		Assert.assertEquals(5000, exception.getErrorCode());
+		Assert.assertEquals(true, exception.getErrorMessage().contains("<messageId>SVC3002</messageId>"));
+		System.out.println(exception.getErrorMessage());
+	}
+	
+	@Test	
+	@Deployment(resources = {
+			"subprocess/DeleteAAIVfModule.bpmn"
+		})
+	public void  TestDeleteVfModuleFailure_5000() {
+		// A&AI failure (non-200) when attempting to delete a Vf Module
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c719, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a77
+		String request =
+			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
+			"  <request-info>" + EOL +
+			"    <action>DELETE_VF_MODULE</action>" + EOL +
+			"    <source>PORTAL</source>" + EOL +
+			"  </request-info>" + EOL +
+			"  <vnf-inputs>" + EOL +
+			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c719</vnf-id>" + EOL +
+			"    <vnf-name>STMTN5MMSC19</vnf-name>" + EOL +
+			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a77</vf-module-id>" + EOL +
+			"    <vf-module-name>STMTN5MMSC19-MMSC::module-1-0</vf-module-name>" + EOL +
+			"  </vnf-inputs>" + EOL +
+			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+		MockAAIGenericVnfSearch();
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("DeleteAAIVfModuleRequest",request);
+		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
+		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "DeleteAAIVfModule", "WorkflowException");
+		Assert.assertEquals(5000, exception.getErrorCode());
+		Assert.assertEquals(true, exception.getErrorMessage().contains("<messageId>SVC3002</messageId>"));
+		System.out.println(exception.getErrorMessage());
+	}
+	
+	@Test	
+	@Deployment(resources = {
+			"subprocess/DeleteAAIVfModule.bpmn"
+		})
+	public void  TestDeleteVfModuleFailure_1002_1() {
+		// failure attempting to delete Base Module when not the last Vf Module
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c720, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a74
+		String request =
+			"<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +
+			"  <request-info>" + EOL +
+			"    <action>DELETE_VF_MODULE</action>" + EOL +
+			"    <source>PORTAL</source>" + EOL +
+			"  </request-info>" + EOL +
+			"  <vnf-inputs>" + EOL +
+			"    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c720</vnf-id>" + EOL +
+			"    <vnf-name>STMTN5MMSC20</vnf-name>" + EOL +
+			"    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</vf-module-id>" + EOL +
+			"    <vf-module-name>STMTN5MMSC20-MMSC::module-0-0</vf-module-name>" + EOL +
+			"  </vnf-inputs>" + EOL +
+			"  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +
+			"</vnf-request>" + EOL;
+		MockAAIGenericVnfSearch();
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("DeleteAAIVfModuleRequest",request);
+		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
+		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "DeleteAAIVfModule", "WorkflowException");
+		Assert.assertEquals(1002, exception.getErrorCode());
+		Assert.assertEquals(true, exception.getErrorMessage().contains("is Base Module, not Last Module"));
+		System.out.println(exception.getErrorMessage());
+	}
+
+	@Test	
+	@Deployment(resources = {
+			"subprocess/DeleteAAIVfModule.bpmn"
+		})
+	public void  TestDeleteVfModuleFailure_1002_2() {
+		// failure attempting to delete a Vf Module that does not exist (A&AI returns 404)
+		// vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c720, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a76
+		MockAAIGenericVnfSearch();
+		MockAAIDeleteGenericVnf();
+		MockAAIDeleteVfModule();
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();				
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("isDebugLogEnabled","true");
+		variables.put("DeleteAAIVfModuleRequest","<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\"> <request-info> <action>DELETE_VF_MODULE</action> <source>PORTAL</source> </request-info> <vnf-inputs> <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c720</vnf-id> <vnf-name>STMTN5MMSC20</vnf-name> <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a76</vf-module-id> <vf-module-name>STMTN5MMSC20-MMSC::module-2-0</vf-module-name> </vnf-inputs> <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/> </vnf-request>");
+		runtimeService.startProcessInstanceByKey("DeleteAAIVfModule", variables);
+		WorkflowException exception = BPMNUtil.getRawVariable(processEngineRule, "DeleteAAIVfModule", "WorkflowException");
+		Assert.assertEquals(1002, exception.getErrorCode());
+		Assert.assertEquals(true, exception.getErrorMessage().contains("does not exist for Generic Vnf Id"));
+		System.out.println(exception.getErrorMessage());
+	}
+	
+	// Start of VF Modularization A&AI mocks
+	
+	public static void MockAAIGenericVnfSearch(){
+		String body;
+	
+		// The following stubs are for CreateAAIVfModule and UpdateAAIVfModule
+	
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/[?]vnf-name=STMTN5MMSC23&depth=1"))
+				.willReturn(aResponse()
+						.withStatus(500)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("aaiFault.xml")));
+	
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/[?]vnf-name=STMTN5MMSC22&depth=1"))
+				.willReturn(aResponse()
+						.withStatus(404)
+						.withHeader("Content-Type", "text/xml")
+						.withBody("Generic VNF Not Found")));
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/768073c7-f41f-4822-9323-b75962763d74[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(404)
+						.withHeader("Content-Type", "text/xml")
+						.withBody("Generic VNF Not Found")));
+	
+		body =
+			"<generic-vnf xmlns=\"http://com.aai.inventory/v7\">" + EOL +
+			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
+			"  <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
+			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+			"  <equipment-role>vMMSC</equipment-role>" + EOL +
+			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"  <in-maint>false</in-maint>" + EOL +
+			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+			"  <resource-version>1508691</resource-version>" + EOL +
+			"  <vf-modules>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>1508692</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"  </vf-modules>" + EOL +
+			"  <relationship-list/>" + EOL +
+			"  <l-interfaces/>" + EOL +
+			"  <lag-interfaces/>" + EOL +
+			"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/[?]vnf-name=STMTN5MMSC21&depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	
+		body =
+			"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+			"  <vnf-id>2f6aee38-1e2a-11e6-82d1-ffc7d9ee8aa4</vnf-id>" + EOL +
+			"  <vnf-name>STMTN5MMSC20</vnf-name>" + EOL +
+			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+			"  <equipment-role>vMMSC</equipment-role>" + EOL +
+			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"  <in-maint>false</in-maint>" + EOL +
+			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+			"  <resource-version>1508691</resource-version>" + EOL +
+			"  <vf-modules>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC20-MMSC::module-0-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>1508692</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC20-MMSC::module-1-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>false</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>1508692</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"  </vf-modules>" + EOL +
+			"  <relationship-list/>" + EOL +
+			"  <l-interfaces/>" + EOL +
+			"  <lag-interfaces/>" + EOL +
+			"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/[?]vnf-name=STMTN5MMSC20&depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/2f6aee38-1e2a-11e6-82d1-ffc7d9ee8aa4[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	
+		// The following stubs are for DeleteAAIVfModule
+	
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c723[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(500)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("aaiFault.xml")));
+	
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c722[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(404)
+						.withHeader("Content-Type", "text/xml")
+						.withBody("Generic VNF Not Found")));
+	
+		body =
+				"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+				"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
+				"  <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
+				"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+				"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+				"  <equipment-role>vMMSC</equipment-role>" + EOL +
+				"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+				"  <in-maint>false</in-maint>" + EOL +
+				"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+				"  <resource-version>0000021</resource-version>" + EOL +
+				"  <vf-modules>" + EOL +
+				"    <vf-module>" + EOL +
+				"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+				"      <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
+				"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>" + EOL +
+				"      <persona-model-version>1.0</persona-model-version>" + EOL +
+				"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+				"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+				"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+				"      <resource-version>0000073</resource-version>" + EOL +
+				"    </vf-module>" + EOL +
+				"  </vf-modules>" + EOL +
+				"  <relationship-list/>" + EOL +
+				"  <l-interfaces/>" + EOL +
+				"  <lag-interfaces/>" + EOL +
+				"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	
+		body =
+			"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c720</vnf-id>" + EOL +
+			"  <vnf-name>STMTN5MMSC20</vnf-name>" + EOL +
+			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+			"  <equipment-role>vMMSC</equipment-role>" + EOL +
+			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"  <in-maint>false</in-maint>" + EOL +
+			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+			"  <resource-version>0000020</resource-version>" + EOL +
+			"  <vf-modules>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC20-MMSC::module-0-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a74</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>0000074</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a75</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC20-MMSC::module-1-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a75</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>false</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>0000075</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"  </vf-modules>" + EOL +
+			"  <relationship-list/>" + EOL +
+			"  <l-interfaces/>" + EOL +
+			"  <lag-interfaces/>" + EOL +
+			"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c720[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	
+		body =
+			"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c719</vnf-id>" + EOL +
+			"  <vnf-name>STMTN5MMSC19</vnf-name>" + EOL +
+			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+			"  <equipment-role>vMMSC</equipment-role>" + EOL +
+			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"  <in-maint>false</in-maint>" + EOL +
+			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+			"  <resource-version>0000019</resource-version>" + EOL +
+			"  <vf-modules>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a76</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC19-MMSC::module-0-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a76</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>0000076</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a77</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC19-MMSC::module-1-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a77</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>false</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>0000077</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"  </vf-modules>" + EOL +
+			"  <relationship-list/>" + EOL +
+			"  <l-interfaces/>" + EOL +
+			"  <lag-interfaces/>" + EOL +
+			"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c719[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	
+		body =
+			"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c718</vnf-id>" + EOL +
+			"  <vnf-name>STMTN5MMSC18</vnf-name>" + EOL +
+			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+			"  <equipment-role>vMMSC</equipment-role>" + EOL +
+			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"  <in-maint>false</in-maint>" + EOL +
+			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+			"  <resource-version>0000018</resource-version>" + EOL +
+			"  <vf-modules>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a78</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC18-MMSC::module-0-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a78</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>0000078</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"  </vf-modules>" + EOL +
+			"  <relationship-list/>" + EOL +
+			"  <l-interfaces/>" + EOL +
+			"  <lag-interfaces/>" + EOL +
+			"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c718[?]depth=1"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	
+		body =
+			"<generic-vnf xmlns=\"http://org.openecomp.aai.inventory/v7\">" + EOL +
+			"  <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +
+			"  <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +
+			"  <vnf-type>mmsc-capacity</vnf-type>" + EOL +
+			"  <service-id>SDN-MOBILITY</service-id>" + EOL +
+			"  <equipment-role>vMMSC</equipment-role>" + EOL +
+			"  <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"  <in-maint>false</in-maint>" + EOL +
+			"  <is-closed-loop-disabled>false</is-closed-loop-disabled>" + EOL +
+			"  <resource-version>0000021</resource-version>" + EOL +
+			"  <vf-modules>" + EOL +
+			"    <vf-module>" + EOL +
+			"      <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +
+			"      <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +
+			"      <persona-model-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</persona-model-id>" + EOL +
+			"      <persona-model-version>1.0</persona-model-version>" + EOL +
+			"      <is-base-vf-module>true</is-base-vf-module>" + EOL +
+			"      <heat-stack-id>FILLED-IN-BY-MSO</heat-stack-id>" + EOL +
+			"      <orchestration-status>pending-create</orchestration-status>" + EOL +
+			"      <resource-version>0000073</resource-version>" + EOL +
+			"    </vf-module>" + EOL +
+			"  </vf-modules>" + EOL +
+			"  <relationship-list/>" + EOL +
+			"  <l-interfaces/>" + EOL +
+			"  <lag-interfaces/>" + EOL +
+			"</generic-vnf>" + EOL;
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a73"))
+				.willReturn(aResponse()
+						.withStatus(200)
+						.withHeader("Content-Type", "text/xml")
+						.withBody(body)));
+	}
+	public static void MockAAIDeleteGenericVnf(){
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721/[?]resource-version=0000021"))
+				.willReturn(aResponse()
+						.withStatus(200)));
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c718/[?]resource-version=0000018"))
+				.willReturn(aResponse()
+						.withStatus(500)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("aaiFault.xml")));
+	}
+
+	public static void MockAAIDeleteVfModule(){
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a73/[?]resource-version=0000073"))
+				.willReturn(aResponse()
+						.withStatus(200)));
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c720/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a75/[?]resource-version=0000075"))
+				.willReturn(aResponse()
+						.withStatus(200)));
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c718/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a78/[?]resource-version=0000078"))
+				.willReturn(aResponse()
+						.withStatus(200)));
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c719/vf-modules/vf-module/973ed047-d251-4fb9-bf1a-65b8949e0a77/[?]resource-version=0000077"))
+				.willReturn(aResponse()
+						.withStatus(500)
+						.withHeader("Content-Type", "text/xml")
+						.withBodyFile("aaiFault.xml")));
+		stubFor(get(urlMatching("/aai/v[0-9]+/network/network-policies/network-policy\\?network-policy-fqdn=.*"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "text/xml")
+				  .withBodyFile("VfModularity/QueryNetworkPolicy_AAIResponse_Success.xml")));
+
+		stubFor(delete(urlMatching("/aai/v[0-9]+/network/network-policies/network-policy/.*"))
+				.willReturn(aResponse()
+						.withStatus(200)));
+	}
+}
+
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/FalloutHandlerTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/FalloutHandlerTest.java
index 7732075..5223bca 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/FalloutHandlerTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/FalloutHandlerTest.java
@@ -1,226 +1,230 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common;
-
-import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
-import static 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.common.BPMNUtil.executeWorkFlow;
-import static org.openecomp.mso.bpmn.common.BPMNUtil.waitForWorkflowToFinish;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.camunda.bpm.engine.test.Deployment;
-import org.junit.Assert;
-import org.junit.Test;
-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
-
-/**
- * Unit test for FalloutHandler.bpmn.
- */
-public class FalloutHandlerTest extends WorkflowTest {
-	private void setupMocks() {
-		stubFor(post(urlEqualTo("/dbadapters/RequestsDbAdapter"))
-				.willReturn(aResponse()
-				.withStatus(200)
-				.withHeader("Content-Type", "text/xml")
-				.withBody("<DbTag>Notified</DbTag>")));
-	}	
-	
-	private void executeFlow(String inputRequestFile) throws InterruptedException {
-		String method = getClass().getSimpleName() + "." + new Object() {
-		}.getClass().getEnclosingMethod().getName();
-		System.out.println("STARTED TEST: " + method);
-        
-		//String changeFeatureActivateRequest = FileUtil.readResourceFile("__files/SDN-ETHERNET-INTERNET/ChangeFeatureActivateV1/" + inputRequestFile);
-		Map<String, String> variables = new HashMap<String, String>();		
-		variables.put("FalloutHandlerRequest",inputRequestFile);
-		
-		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "FalloutHandler", variables);
-		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
-		System.out.println("ENDED TEST: " + method);
-	}	
-	
-	@Test		
-	@Deployment(resources = {"subprocess/FalloutHandler.bpmn"})
-	public void msoFalloutHandlerWithNotificationurl_200() throws Exception{
-		String method = getClass().getSimpleName() + "." + new Object() {
-		}.getClass().getEnclosingMethod().getName();
-		System.out.println("STARTED TEST: " + method);
-		
-		//Setup Mocks
-		setupMocks();
-		//Execute Flow
-		executeFlow(gMsoFalloutHandlerWithNotificationurl());
-		//Verify Error
-		String FH_ResponseCode = BPMNUtil.getVariable(processEngineRule, "FalloutHandler", "FH_ResponseCode");
-		Assert.assertEquals("200", FH_ResponseCode);
-		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "FalloutHandler", "FH_SuccessIndicator")); 
-	}
-	
-	public String gMsoFalloutHandlerWithNotificationurl() {
-		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
-		String xml = ""
-				+ "<sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow=\"http://org.openecomp/mso/workflow/schema/v1\" xmlns:ns7=\"http://org.openecomp/mso/request/types/v1\">"
-				+ "		<ns7:request-information>"
-				+ "			<ns7:request-id>uCPE1020_STUW105_5002</ns7:request-id>"
-				+ "			<ns7:request-action>Layer3ServiceActivateRequest</ns7:request-action>"
-				+ "			<ns7:request-sub-action>CANCEL</ns7:request-sub-action>"
-				+ "			<ns7:source>OMX</ns7:source>"
-				+ "			<ns7:notification-url>http://localhost:28090/CCD/StatusNotification</ns7:notification-url>"
-				+ "			<ns7:order-number>10205000</ns7:order-number>"
-				+ "			<ns7:order-version>1</ns7:order-version>"
-				+ "		</ns7:request-information>"
-				+ "		<sdncadapterworkflow:WorkflowException>"
-				+ "			<sdncadapterworkflow:ErrorMessage>Some Error Message - Fallout Handler</sdncadapterworkflow:ErrorMessage>"
-				+ "			<sdncadapterworkflow:ErrorCode>Some Error Code - Fallout Handler</sdncadapterworkflow:ErrorCode>"
-				+ "			<sdncadapterworkflow:SourceSystemErrorCode>Some Source System Error Code- Fallout Handler</sdncadapterworkflow:SourceSystemErrorCode>"
-				+ "		</sdncadapterworkflow:WorkflowException>"
-				+ "</sdncadapterworkflow:FalloutHandlerRequest>";
-		
-		return xml;
-
-	}	
-	
-
-
-
-	@Test		
-	@Deployment(resources = {"subprocess/FalloutHandler.bpmn"})
-	public void msoFalloutHandlerWithNoNotificationurl() throws Exception{
-		String method = getClass().getSimpleName() + "." + new Object() {
-		}.getClass().getEnclosingMethod().getName();
-		System.out.println("STARTED TEST: " + method);		
-		//Setup Mocks
-		setupMocks();
-		//Execute Flow
-		executeFlow(gMsoFalloutHandlerWithNoNotificationurl());
-		//Verify Error
-		String FH_ResponseCode = BPMNUtil.getVariable(processEngineRule, "FalloutHandler", "FH_ResponseCode");
-		Assert.assertEquals("200", FH_ResponseCode);
-		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "FalloutHandler", "FH_SuccessIndicator")); 
-	}
-	
-	public String gMsoFalloutHandlerWithNoNotificationurl() {
-		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
-		String xml = ""
-				+ "<sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow=\"http://org.openecomp/mso/workflow/schema/v1\" xmlns:ns7=\"http://org.openecomp/mso/request/types/v1\">"
-				+ "		<ns7:request-information>"
-				+ "			<ns7:request-id>uCPE1020_STUW105_5002</ns7:request-id>"
-				+ "			<ns7:request-action>Layer3ServiceActivateRequest</ns7:request-action>"
-				+ "			<ns7:request-sub-action>CANCEL</ns7:request-sub-action>"
-				+ "			<ns7:source>OMX</ns7:source>"
-				+ "			<ns7:notification-url></ns7:notification-url>"
-				+ "			<ns7:order-number>10205000</ns7:order-number>"
-				+ "			<ns7:order-version>1</ns7:order-version>"
-				+ "		</ns7:request-information>"
-				+ "		<sdncadapterworkflow:WorkflowException>"
-				+ "			<sdncadapterworkflow:ErrorMessage>Some Error Message - Fallout Handler</sdncadapterworkflow:ErrorMessage>"
-				+ "			<sdncadapterworkflow:ErrorCode>Some Error Code - Fallout Handler</sdncadapterworkflow:ErrorCode>"
-				+ "			<sdncadapterworkflow:SourceSystemErrorCode>Some Source System Error Code- Fallout Handler</sdncadapterworkflow:SourceSystemErrorCode>"
-				+ "		</sdncadapterworkflow:WorkflowException>"
-				+ "</sdncadapterworkflow:FalloutHandlerRequest>";
-		
-		return xml;
-	}	
-	
-	@Test		
-	@Deployment(resources = {"subprocess/FalloutHandler.bpmn"})
-	public void msoFalloutHandlerWithNotificationurlNoRequestId() throws Exception{
-		String method = getClass().getSimpleName() + "." + new Object() {
-		}.getClass().getEnclosingMethod().getName();
-		System.out.println("STARTED TEST: " + method);		
-		//Setup Mocks
-		setupMocks();
-		//Execute Flow
-		executeFlow(gMsoFalloutHandlerWithNotificationurlNoRequestId());
-		//Verify Error		
-		String FH_ResponseCode = BPMNUtil.getVariable(processEngineRule, "FalloutHandler", "FH_ResponseCode");
-		Assert.assertEquals("200", FH_ResponseCode);
-		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "FalloutHandler", "FH_SuccessIndicator")); 
-	}
-
-	public String gMsoFalloutHandlerWithNotificationurlNoRequestId() {
-		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
-		String xml = ""
-				+ "<sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow=\"http://org.openecomp/mso/workflow/schema/v1\" xmlns:ns7=\"http://org.openecomp/mso/request/types/v1\">"
-				+ "		<ns7:request-information>"
-				+ "			<ns7:request-id></ns7:request-id>"
-				+ "			<ns7:request-action>Layer3ServiceActivateRequest</ns7:request-action>"
-				+ "			<ns7:request-sub-action>CANCEL</ns7:request-sub-action>"
-				+ "			<ns7:source>OMX</ns7:source>"
-				+ "			<ns7:notification-url>www.att.com</ns7:notification-url>"
-				+ "			<ns7:order-number>10205000</ns7:order-number>"
-				+ "			<ns7:order-version>1</ns7:order-version>"
-				+ "		</ns7:request-information>"
-				+ "		<sdncadapterworkflow:WorkflowException>"
-				+ "			<sdncadapterworkflow:ErrorMessage>Some Error Message - Fallout Handler</sdncadapterworkflow:ErrorMessage>"
-				+ "			<sdncadapterworkflow:ErrorCode>Some Error Code - Fallout Handler</sdncadapterworkflow:ErrorCode>"
-				+ "			<sdncadapterworkflow:SourceSystemErrorCode>Some Source System Error Code- Fallout Handler</sdncadapterworkflow:SourceSystemErrorCode>"
-				+ "		</sdncadapterworkflow:WorkflowException>"
-				+ "</sdncadapterworkflow:FalloutHandlerRequest>";
-		
-		return xml;
-	}		
-	
-	@Test		
-	@Deployment(resources = {"subprocess/FalloutHandler.bpmn"})
-	public void msoFalloutHandlerWithNoNotificationurlNoRequestId() throws Exception{
-		String method = getClass().getSimpleName() + "." + new Object() {
-		}.getClass().getEnclosingMethod().getName();
-		System.out.println("STARTED TEST: " + method);		
-		//Setup Mocks
-		setupMocks();
-		//Execute Flow
-		executeFlow(gMsoFalloutHandlerWithNoNotificationurlNoRequestId());
-		//Verify Error
-		String FH_ResponseCode = BPMNUtil.getVariable(processEngineRule, "FalloutHandler", "FH_ResponseCode");
-		Assert.assertEquals("200", FH_ResponseCode);
-		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "FalloutHandler", "FH_SuccessIndicator")); 
-	}	
-	
-	public String gMsoFalloutHandlerWithNoNotificationurlNoRequestId() {
-		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
-		String xml = ""
-				+ "<sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow=\"http://org.openecomp/mso/workflow/schema/v1\" xmlns:ns7=\"http://org.openecomp/mso/request/types/v1\">"
-				+ "		<ns7:request-information>"
-				+ "			<ns7:request-id></ns7:request-id>"
-				+ "			<ns7:request-action>Layer3ServiceActivateRequest</ns7:request-action>"
-				+ "			<ns7:request-sub-action>CANCEL</ns7:request-sub-action>"
-				+ "			<ns7:source>OMX</ns7:source>"
-				+ "			<ns7:notification-url></ns7:notification-url>"
-				+ "			<ns7:order-number>10205000</ns7:order-number>"
-				+ "			<ns7:order-version>1</ns7:order-version>"
-				+ "		</ns7:request-information>"
-				+ "		<sdncadapterworkflow:WorkflowException>"
-				+ "			<sdncadapterworkflow:ErrorMessage>Some Error Message - Fallout Handler</sdncadapterworkflow:ErrorMessage>"
-				+ "			<sdncadapterworkflow:ErrorCode>Some Error Code - Fallout Handler</sdncadapterworkflow:ErrorCode>"
-				+ "			<sdncadapterworkflow:SourceSystemErrorCode>Some Source System Error Code- Fallout Handler</sdncadapterworkflow:SourceSystemErrorCode>"
-				+ "		</sdncadapterworkflow:WorkflowException>"
-				+ "</sdncadapterworkflow:FalloutHandlerRequest>";
-		
-		return xml;
-	}	
-	
-}
-
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static 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.common.BPMNUtil.executeWorkFlow;
+import static org.openecomp.mso.bpmn.common.BPMNUtil.waitForWorkflowToFinish;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.camunda.bpm.engine.test.Deployment;
+import org.junit.Assert;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+
+/**
+ * Unit test for FalloutHandler.bpmn.
+ */
+public class FalloutHandlerTest extends WorkflowTest {
+	private void setupMocks() {
+		stubFor(post(urlEqualTo("/dbadapters/RequestsDbAdapter"))
+				.willReturn(aResponse()
+				.withStatus(200)
+				.withHeader("Content-Type", "text/xml")
+				.withBody("<DbTag>Notified</DbTag>")));
+	}	
+	
+	private void executeFlow(String inputRequestFile) throws InterruptedException {
+		String method = getClass().getSimpleName() + "." + new Object() {
+		}.getClass().getEnclosingMethod().getName();
+		System.out.println("STARTED TEST: " + method);
+        
+		//String changeFeatureActivateRequest = FileUtil.readResourceFile("__files/SDN-ETHERNET-INTERNET/ChangeFeatureActivateV1/" + inputRequestFile);
+		Map<String, String> variables = new HashMap<String, String>();		
+		variables.put("FalloutHandlerRequest",inputRequestFile);
+		
+		WorkflowResponse workflowResponse = executeWorkFlow(processEngineRule, "FalloutHandler", variables);
+		waitForWorkflowToFinish(processEngineRule, workflowResponse.getProcessInstanceID());
+		System.out.println("ENDED TEST: " + method);
+	}	
+	
+	@Test		
+	@Deployment(resources = {"subprocess/FalloutHandler.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void msoFalloutHandlerWithNotificationurl_200() throws Exception{
+		String method = getClass().getSimpleName() + "." + new Object() {
+		}.getClass().getEnclosingMethod().getName();
+		System.out.println("STARTED TEST: " + method);
+		
+		//Setup Mocks
+		setupMocks();
+		//Execute Flow
+		executeFlow(gMsoFalloutHandlerWithNotificationurl());
+		//Verify Error
+		String FH_ResponseCode = BPMNUtil.getVariable(processEngineRule, "FalloutHandler", "FH_ResponseCode");
+		Assert.assertEquals("200", FH_ResponseCode);
+		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "FalloutHandler", "FH_SuccessIndicator")); 
+	}
+	
+	public String gMsoFalloutHandlerWithNotificationurl() {
+		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
+		String xml = ""
+				+ "<sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow=\"http://org.openecomp/mso/workflow/schema/v1\" xmlns:ns7=\"http://org.openecomp/mso/request/types/v1\">"
+				+ "		<ns7:request-information>"
+				+ "			<ns7:request-id>uCPE1020_STUW105_5002</ns7:request-id>"
+				+ "			<ns7:request-action>Layer3ServiceActivateRequest</ns7:request-action>"
+				+ "			<ns7:request-sub-action>CANCEL</ns7:request-sub-action>"
+				+ "			<ns7:source>OMX</ns7:source>"
+				+ "			<ns7:notification-url>http://localhost:28090/CCD/StatusNotification</ns7:notification-url>"
+				+ "			<ns7:order-number>10205000</ns7:order-number>"
+				+ "			<ns7:order-version>1</ns7:order-version>"
+				+ "		</ns7:request-information>"
+				+ "		<sdncadapterworkflow:WorkflowException>"
+				+ "			<sdncadapterworkflow:ErrorMessage>Some Error Message - Fallout Handler</sdncadapterworkflow:ErrorMessage>"
+				+ "			<sdncadapterworkflow:ErrorCode>Some Error Code - Fallout Handler</sdncadapterworkflow:ErrorCode>"
+				+ "			<sdncadapterworkflow:SourceSystemErrorCode>Some Source System Error Code- Fallout Handler</sdncadapterworkflow:SourceSystemErrorCode>"
+				+ "		</sdncadapterworkflow:WorkflowException>"
+				+ "</sdncadapterworkflow:FalloutHandlerRequest>";
+		
+		return xml;
+
+	}	
+	
+
+
+
+	@Test		
+	@Deployment(resources = {"subprocess/FalloutHandler.bpmn"})
+	public void msoFalloutHandlerWithNoNotificationurl() throws Exception{
+		String method = getClass().getSimpleName() + "." + new Object() {
+		}.getClass().getEnclosingMethod().getName();
+		System.out.println("STARTED TEST: " + method);		
+		//Setup Mocks
+		setupMocks();
+		//Execute Flow
+		executeFlow(gMsoFalloutHandlerWithNoNotificationurl());
+		//Verify Error
+		String FH_ResponseCode = BPMNUtil.getVariable(processEngineRule, "FalloutHandler", "FH_ResponseCode");
+		Assert.assertEquals("200", FH_ResponseCode);
+		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "FalloutHandler", "FH_SuccessIndicator")); 
+	}
+	
+	public String gMsoFalloutHandlerWithNoNotificationurl() {
+		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
+		String xml = ""
+				+ "<sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow=\"http://org.openecomp/mso/workflow/schema/v1\" xmlns:ns7=\"http://org.openecomp/mso/request/types/v1\">"
+				+ "		<ns7:request-information>"
+				+ "			<ns7:request-id>uCPE1020_STUW105_5002</ns7:request-id>"
+				+ "			<ns7:request-action>Layer3ServiceActivateRequest</ns7:request-action>"
+				+ "			<ns7:request-sub-action>CANCEL</ns7:request-sub-action>"
+				+ "			<ns7:source>OMX</ns7:source>"
+				+ "			<ns7:notification-url></ns7:notification-url>"
+				+ "			<ns7:order-number>10205000</ns7:order-number>"
+				+ "			<ns7:order-version>1</ns7:order-version>"
+				+ "		</ns7:request-information>"
+				+ "		<sdncadapterworkflow:WorkflowException>"
+				+ "			<sdncadapterworkflow:ErrorMessage>Some Error Message - Fallout Handler</sdncadapterworkflow:ErrorMessage>"
+				+ "			<sdncadapterworkflow:ErrorCode>Some Error Code - Fallout Handler</sdncadapterworkflow:ErrorCode>"
+				+ "			<sdncadapterworkflow:SourceSystemErrorCode>Some Source System Error Code- Fallout Handler</sdncadapterworkflow:SourceSystemErrorCode>"
+				+ "		</sdncadapterworkflow:WorkflowException>"
+				+ "</sdncadapterworkflow:FalloutHandlerRequest>";
+		
+		return xml;
+	}	
+	
+	@Test		
+	@Deployment(resources = {"subprocess/FalloutHandler.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void msoFalloutHandlerWithNotificationurlNoRequestId() throws Exception{
+		String method = getClass().getSimpleName() + "." + new Object() {
+		}.getClass().getEnclosingMethod().getName();
+		System.out.println("STARTED TEST: " + method);		
+		//Setup Mocks
+		setupMocks();
+		//Execute Flow
+		executeFlow(gMsoFalloutHandlerWithNotificationurlNoRequestId());
+		//Verify Error		
+		String FH_ResponseCode = BPMNUtil.getVariable(processEngineRule, "FalloutHandler", "FH_ResponseCode");
+		Assert.assertEquals("200", FH_ResponseCode);
+		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "FalloutHandler", "FH_SuccessIndicator")); 
+	}
+
+	public String gMsoFalloutHandlerWithNotificationurlNoRequestId() {
+		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
+		String xml = ""
+				+ "<sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow=\"http://org.openecomp/mso/workflow/schema/v1\" xmlns:ns7=\"http://org.openecomp/mso/request/types/v1\">"
+				+ "		<ns7:request-information>"
+				+ "			<ns7:request-id></ns7:request-id>"
+				+ "			<ns7:request-action>Layer3ServiceActivateRequest</ns7:request-action>"
+				+ "			<ns7:request-sub-action>CANCEL</ns7:request-sub-action>"
+				+ "			<ns7:source>OMX</ns7:source>"
+				+ "			<ns7:notification-url>www.test.com</ns7:notification-url>"
+				+ "			<ns7:order-number>10205000</ns7:order-number>"
+				+ "			<ns7:order-version>1</ns7:order-version>"
+				+ "		</ns7:request-information>"
+				+ "		<sdncadapterworkflow:WorkflowException>"
+				+ "			<sdncadapterworkflow:ErrorMessage>Some Error Message - Fallout Handler</sdncadapterworkflow:ErrorMessage>"
+				+ "			<sdncadapterworkflow:ErrorCode>Some Error Code - Fallout Handler</sdncadapterworkflow:ErrorCode>"
+				+ "			<sdncadapterworkflow:SourceSystemErrorCode>Some Source System Error Code- Fallout Handler</sdncadapterworkflow:SourceSystemErrorCode>"
+				+ "		</sdncadapterworkflow:WorkflowException>"
+				+ "</sdncadapterworkflow:FalloutHandlerRequest>";
+		
+		return xml;
+	}		
+	
+	@Test		
+	@Deployment(resources = {"subprocess/FalloutHandler.bpmn"})
+	public void msoFalloutHandlerWithNoNotificationurlNoRequestId() throws Exception{
+		String method = getClass().getSimpleName() + "." + new Object() {
+		}.getClass().getEnclosingMethod().getName();
+		System.out.println("STARTED TEST: " + method);		
+		//Setup Mocks
+		setupMocks();
+		//Execute Flow
+		executeFlow(gMsoFalloutHandlerWithNoNotificationurlNoRequestId());
+		//Verify Error
+		String FH_ResponseCode = BPMNUtil.getVariable(processEngineRule, "FalloutHandler", "FH_ResponseCode");
+		Assert.assertEquals("200", FH_ResponseCode);
+		Assert.assertTrue((boolean) BPMNUtil.getRawVariable(processEngineRule, "FalloutHandler", "FH_SuccessIndicator")); 
+	}	
+	
+	public String gMsoFalloutHandlerWithNoNotificationurlNoRequestId() {
+		//Generated the below XML from ActiveVOS moduler ... Using the generate sample XML feature in ActiveVOS
+		String xml = ""
+				+ "<sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow=\"http://org.openecomp/mso/workflow/schema/v1\" xmlns:ns7=\"http://org.openecomp/mso/request/types/v1\">"
+				+ "		<ns7:request-information>"
+				+ "			<ns7:request-id></ns7:request-id>"
+				+ "			<ns7:request-action>Layer3ServiceActivateRequest</ns7:request-action>"
+				+ "			<ns7:request-sub-action>CANCEL</ns7:request-sub-action>"
+				+ "			<ns7:source>OMX</ns7:source>"
+				+ "			<ns7:notification-url></ns7:notification-url>"
+				+ "			<ns7:order-number>10205000</ns7:order-number>"
+				+ "			<ns7:order-version>1</ns7:order-version>"
+				+ "		</ns7:request-information>"
+				+ "		<sdncadapterworkflow:WorkflowException>"
+				+ "			<sdncadapterworkflow:ErrorMessage>Some Error Message - Fallout Handler</sdncadapterworkflow:ErrorMessage>"
+				+ "			<sdncadapterworkflow:ErrorCode>Some Error Code - Fallout Handler</sdncadapterworkflow:ErrorCode>"
+				+ "			<sdncadapterworkflow:SourceSystemErrorCode>Some Source System Error Code- Fallout Handler</sdncadapterworkflow:SourceSystemErrorCode>"
+				+ "		</sdncadapterworkflow:WorkflowException>"
+				+ "</sdncadapterworkflow:FalloutHandlerRequest>";
+		
+		return xml;
+	}	
+	
+}
+
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/PrepareUpdateAAIVfModuleTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/PrepareUpdateAAIVfModuleTest.java
index cb5f722..6fe6df6 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/PrepareUpdateAAIVfModuleTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/PrepareUpdateAAIVfModuleTest.java
@@ -1,208 +1,210 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common;
-
-import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;
-import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById_404;
-import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
-
-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.core.WorkflowException;
-import org.openecomp.mso.bpmn.mock.FileUtil;
-
-/**
- * Unit tests for PrepareUpdateAAIVfModule.bpmn.
- */
-public class PrepareUpdateAAIVfModuleTest extends WorkflowTest {
-	
-	/**
-	 * Test the happy path through the flow.
-	 */
-	@Test	
-	@Deployment(resources = {
-			"subprocess/PrepareUpdateAAIVfModule.bpmn"
-		})
-	public void happyPath() throws IOException {
-		
-		logStart();
-		
-		String prepareUpdateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/PrepareUpdateAAIVfModuleRequest.xml"); 
-		
-		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
-		MockPutGenericVnf("/skask/vf-modules/vf-module/supercool", "PCRF", 200);
-		
-		String businessKey = UUID.randomUUID().toString();
-		Map<String, Object> variables = new HashMap<String, Object>();
-		variables.put("mso-request-id", "999-99-9999");
-		variables.put("isDebugLogEnabled","true");
-		variables.put("PrepareUpdateAAIVfModuleRequest", prepareUpdateAAIVfModuleRequest);
-		invokeSubProcess("PrepareUpdateAAIVfModule", businessKey, variables);
-		
-		Assert.assertTrue(isProcessEnded(businessKey));
-		String response = (String) getVariableFromHistory(businessKey, "PUAAIVfMod_updateVfModuleResponse");
-		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "PUAAIVfMod_updateVfModuleResponseCode");
-		System.out.println("Subflow response code: " + responseCode);
-		System.out.println("Subflow response: " + response);
-		Assert.assertEquals(200, responseCode.intValue());
-		String heatStackId = (String) getVariableFromHistory(businessKey, "PUAAIVfMod_heatStackId");
-		System.out.println("Ouput heat-stack-id:" + heatStackId);
-		Assert.assertEquals("slowburn", heatStackId);
-		
-		logEnd();
-	}
-	
-	/**
-	 * Test the case where the GET to AAI returns a 404.
-	 */
-	@Test	
-	@Deployment(resources = {
-			"subprocess/PrepareUpdateAAIVfModule.bpmn"
-		})
-	public void badGet() throws IOException {
-		
-		logStart();
-		
-		String prepareUpdateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/PrepareUpdateAAIVfModuleRequest.xml"); 
-		MockGetGenericVnfById_404("skask[?]depth=1");
-		
-		String businessKey = UUID.randomUUID().toString();
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("mso-request-id", "999-99-9999");
-		variables.put("isDebugLogEnabled","true");
-		variables.put("PrepareUpdateAAIVfModuleRequest", prepareUpdateAAIVfModuleRequest);
-		invokeSubProcess("PrepareUpdateAAIVfModule", businessKey, variables);
-		
-		Assert.assertTrue(isProcessEnded(businessKey));
-		String response = (String) getVariableFromHistory(businessKey, "PUAAIVfMod_getVnfResponse");
-		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "PUAAIVfMod_getVnfResponseCode");
-		WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
-		System.out.println("Subflow response code: " + responseCode);
-		System.out.println("Subflow response: " + response);
-		Assert.assertEquals(404, responseCode.intValue());
-		Assert.assertNotNull(workflowException);
-		System.out.println("Subflow WorkflowException error message: " + workflowException.getErrorMessage());
-		
-		logEnd();
-	}
-	
-	/**
-	 * Test the case where the validation of the VF Module fails.
-	 */
-	@Test	
-	@Deployment(resources = {
-			"subprocess/PrepareUpdateAAIVfModule.bpmn"
-		})
-	public void failValidation1() throws IOException {
-		
-		logStart();
-		
-		String prepareUpdateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/PrepareUpdateAAIVfModuleRequest.xml").replaceFirst("supercool", "lukewarm");
-		
-		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
-		
-		String businessKey = UUID.randomUUID().toString();
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("mso-request-id", "999-99-9999");
-		variables.put("isDebugLogEnabled","true");
-		variables.put("PrepareUpdateAAIVfModuleRequest", prepareUpdateAAIVfModuleRequest);
-		invokeSubProcess("PrepareUpdateAAIVfModule", businessKey, variables);
-		
-		WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
-		Assert.assertNotNull(workflowException);
-		System.out.println("Subflow WorkflowException error message: " + workflowException.getErrorMessage());
-		Assert.assertTrue(workflowException.getErrorMessage().startsWith("VF Module validation error: Orchestration"));
-		
-		logEnd();
-	}
-	
-	/**
-	 * Test the case where the validation of the VF Module fails.
-	 */
-	@Test	
-	@Deployment(resources = {
-			"subprocess/PrepareUpdateAAIVfModule.bpmn"
-		})
-	public void failValidation2() throws IOException {
-		
-		logStart();
-		
-		String prepareUpdateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/PrepareUpdateAAIVfModuleRequest.xml").replaceFirst("supercool", "notsocool");
-		
-		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");		
-		
-		String businessKey = UUID.randomUUID().toString();
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("mso-request-id", "999-99-9999");
-		variables.put("isDebugLogEnabled","true");
-		variables.put("PrepareUpdateAAIVfModuleRequest", prepareUpdateAAIVfModuleRequest);
-		invokeSubProcess("PrepareUpdateAAIVfModule", businessKey, variables);
-			
-		WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
-		Assert.assertNotNull(workflowException);
-		System.out.println("Subflow WorkflowException error message: " + workflowException.getErrorMessage());
-		Assert.assertTrue(workflowException.getErrorMessage().startsWith("VF Module validation error: VF Module"));
-		
-		logEnd();
-	}
-
-	/**
-	 * Test the case where the GET to AAI is successful, but the subsequent PUT returns 404.
-	 */
-	@Test	
-	@Deployment(resources = {
-			"subprocess/PrepareUpdateAAIVfModule.bpmn"
-		})
-	public void badPut() throws IOException {
-		
-		logStart();
-		
-		String prepareUpdateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/PrepareUpdateAAIVfModuleRequest.xml"); 
-		
-		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
-			
-		String businessKey = UUID.randomUUID().toString();
-		Map<String, Object> variables = new HashMap<String, Object>();		
-		variables.put("mso-request-id", "999-99-9999");
-		variables.put("isDebugLogEnabled","true");
-		variables.put("PrepareUpdateAAIVfModuleRequest", prepareUpdateAAIVfModuleRequest);
-		invokeSubProcess("PrepareUpdateAAIVfModule", businessKey, variables);
-		
-		Assert.assertTrue(isProcessEnded(businessKey));
-		String response = (String) getVariableFromHistory(businessKey, "PUAAIVfMod_updateVfModuleResponse");
-		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "PUAAIVfMod_updateVfModuleResponseCode");
-		WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
-		System.out.println("Subflow response code: " + responseCode);
-		System.out.println("Subflow response: " + response);
-		Assert.assertEquals(404, responseCode.intValue());
-		Assert.assertNotNull(workflowException);
-		System.out.println("Subflow WorkflowException error message: " + workflowException.getErrorMessage());
-		
-		logEnd();
-	}
-}
-
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common;
+
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById_404;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;
+
+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.core.WorkflowException;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit tests for PrepareUpdateAAIVfModule.bpmn.
+ */
+public class PrepareUpdateAAIVfModuleTest extends WorkflowTest {
+	
+	/**
+	 * Test the happy path through the flow.
+	 */
+	@Test	
+	@Deployment(resources = {
+			"subprocess/PrepareUpdateAAIVfModule.bpmn"
+		})
+	public void happyPath() throws IOException {
+		
+		logStart();
+		
+		String prepareUpdateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/PrepareUpdateAAIVfModuleRequest.xml"); 
+		
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+		MockPutGenericVnf("/skask/vf-modules/vf-module/supercool", "PCRF", 200);
+		MockPatchVfModuleId("skask", "supercool");
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		variables.put("mso-request-id", "999-99-9999");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("PrepareUpdateAAIVfModuleRequest", prepareUpdateAAIVfModuleRequest);
+		invokeSubProcess("PrepareUpdateAAIVfModule", businessKey, variables);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String response = (String) getVariableFromHistory(businessKey, "PUAAIVfMod_updateVfModuleResponse");
+		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "PUAAIVfMod_updateVfModuleResponseCode");
+		System.out.println("Subflow response code: " + responseCode);
+		System.out.println("Subflow response: " + response);
+		Assert.assertEquals(200, responseCode.intValue());
+		String heatStackId = (String) getVariableFromHistory(businessKey, "PUAAIVfMod_heatStackId");
+		System.out.println("Ouput heat-stack-id:" + heatStackId);
+		Assert.assertEquals("slowburn", heatStackId);
+		
+		logEnd();
+	}
+	
+	/**
+	 * Test the case where the GET to AAI returns a 404.
+	 */
+	@Test	
+	@Deployment(resources = {
+			"subprocess/PrepareUpdateAAIVfModule.bpmn"
+		})
+	public void badGet() throws IOException {
+		
+		logStart();
+		
+		String prepareUpdateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/PrepareUpdateAAIVfModuleRequest.xml"); 
+		MockGetGenericVnfById_404("skask[?]depth=1");
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("mso-request-id", "999-99-9999");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("PrepareUpdateAAIVfModuleRequest", prepareUpdateAAIVfModuleRequest);
+		invokeSubProcess("PrepareUpdateAAIVfModule", businessKey, variables);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String response = (String) getVariableFromHistory(businessKey, "PUAAIVfMod_getVnfResponse");
+		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "PUAAIVfMod_getVnfResponseCode");
+		WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
+		System.out.println("Subflow response code: " + responseCode);
+		System.out.println("Subflow response: " + response);
+		Assert.assertEquals(404, responseCode.intValue());
+		Assert.assertNotNull(workflowException);
+		System.out.println("Subflow WorkflowException error message: " + workflowException.getErrorMessage());
+		
+		logEnd();
+	}
+	
+	/**
+	 * Test the case where the validation of the VF Module fails.
+	 */
+	@Test	
+	@Deployment(resources = {
+			"subprocess/PrepareUpdateAAIVfModule.bpmn"
+		})
+	public void failValidation1() throws IOException {
+		
+		logStart();
+		
+		String prepareUpdateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/PrepareUpdateAAIVfModuleRequest.xml").replaceFirst("supercool", "lukewarm");
+		
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("mso-request-id", "999-99-9999");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("PrepareUpdateAAIVfModuleRequest", prepareUpdateAAIVfModuleRequest);
+		invokeSubProcess("PrepareUpdateAAIVfModule", businessKey, variables);
+		
+		WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
+		Assert.assertNotNull(workflowException);
+		System.out.println("Subflow WorkflowException error message: " + workflowException.getErrorMessage());
+		Assert.assertTrue(workflowException.getErrorMessage().startsWith("VF Module validation error: Orchestration"));
+		
+		logEnd();
+	}
+	
+	/**
+	 * Test the case where the validation of the VF Module fails.
+	 */
+	@Test	
+	@Deployment(resources = {
+			"subprocess/PrepareUpdateAAIVfModule.bpmn"
+		})
+	public void failValidation2() throws IOException {
+		
+		logStart();
+		
+		String prepareUpdateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/PrepareUpdateAAIVfModuleRequest.xml").replaceFirst("supercool", "notsocool");
+		
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");		
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("mso-request-id", "999-99-9999");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("PrepareUpdateAAIVfModuleRequest", prepareUpdateAAIVfModuleRequest);
+		invokeSubProcess("PrepareUpdateAAIVfModule", businessKey, variables);
+			
+		WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
+		Assert.assertNotNull(workflowException);
+		System.out.println("Subflow WorkflowException error message: " + workflowException.getErrorMessage());
+		Assert.assertTrue(workflowException.getErrorMessage().startsWith("VF Module validation error: VF Module"));
+		
+		logEnd();
+	}
+
+	/**
+	 * Test the case where the GET to AAI is successful, but the subsequent PUT returns 404.
+	 */
+	@Test	
+	@Deployment(resources = {
+			"subprocess/PrepareUpdateAAIVfModule.bpmn"
+		})
+	public void badPut() throws IOException {
+		
+		logStart();
+		
+		String prepareUpdateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/PrepareUpdateAAIVfModuleRequest.xml"); 
+		
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+			
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();		
+		variables.put("mso-request-id", "999-99-9999");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("PrepareUpdateAAIVfModuleRequest", prepareUpdateAAIVfModuleRequest);
+		invokeSubProcess("PrepareUpdateAAIVfModule", businessKey, variables);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String response = (String) getVariableFromHistory(businessKey, "PUAAIVfMod_updateVfModuleResponse");
+		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "PUAAIVfMod_updateVfModuleResponseCode");
+		WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
+		System.out.println("Subflow response code: " + responseCode);
+		System.out.println("Subflow response: " + response);
+		Assert.assertEquals(404, responseCode.intValue());
+		Assert.assertNotNull(workflowException);
+		System.out.println("Subflow WorkflowException error message: " + workflowException.getErrorMessage());
+		
+		logEnd();
+	}
+}
+
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/SDNCAdapterV1Test.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/SDNCAdapterV1Test.java
index b0e1dc9..846a14f 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/SDNCAdapterV1Test.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/SDNCAdapterV1Test.java
@@ -1,389 +1,403 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-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 javax.ws.rs.core.Response;
-
-import org.camunda.bpm.engine.MismatchingMessageCorrelationException;
-import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl;
-import org.camunda.bpm.engine.runtime.Job;
-import org.camunda.bpm.engine.test.Deployment;
-import org.camunda.bpm.engine.variable.impl.VariableMapImpl;
-import org.junit.Assert;
-import org.junit.Test;
-import org.openecomp.mso.bpmn.common.adapter.sdnc.CallbackHeader;
-import org.openecomp.mso.bpmn.common.adapter.sdnc.SDNCAdapterCallbackRequest;
-import org.openecomp.mso.bpmn.common.adapter.sdnc.SDNCAdapterResponse;
-import org.openecomp.mso.bpmn.common.workflow.service.SDNCAdapterCallbackServiceImpl;
-import org.openecomp.mso.bpmn.common.workflow.service.SDNCAdapterCallbackServiceImpl.SDNCAdapterExceptionResponse;
-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResource;
-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
-import org.openecomp.mso.bpmn.mock.FileUtil;
-
-/**
- * Unit test cases for SDNCAdapterV1.bpmn
- */
-public class SDNCAdapterV1Test extends WorkflowTest {
-
-	private String sdncAdapterWorkflowRequest;
-	private String sdncAdapterWorkflowRequestAct;
-	private String sdncAdapterCallbackRequestData;
-	private String sdncAdapterCallbackRequestDataNonfinal;
-
-	public SDNCAdapterV1Test() throws IOException {
-		sdncAdapterWorkflowRequest = FileUtil.readResourceFile("sdncadapterworkflowrequest.xml");
-		sdncAdapterWorkflowRequestAct = FileUtil.readResourceFile("sdncadapterworkflowrequest-act.xml");
-		sdncAdapterCallbackRequestData = FileUtil.readResourceFile("sdncadaptercallbackrequestdata.text");
-		sdncAdapterCallbackRequestDataNonfinal = FileUtil.readResourceFile("sdncadaptercallbackrequestdata-nonfinal.text");
-	}
-
-	/**
-	 * End-to-End flow - Unit test for SDNCAdapterV1.bpmn
-	 *  - String input & String response
-	 */
-
-	private WorkflowResponse invokeFlow(String workflowRequest) {
-
-		Map<String, Object>valueMap = new HashMap<String, Object>();
-		valueMap.put("value", workflowRequest);
-		Map<String, Object> variables = new HashMap<String, Object>();
-		variables.put("sdncAdapterWorkflowRequest", valueMap);
-
-		Map<String, Object> valueMap2 = new HashMap<String, Object>();
-		valueMap2.put("value", "true");
-		variables.put("isDebugLogEnabled", valueMap2);
-
-		VariableMapImpl varMap = new VariableMapImpl();
-		varMap.put("variables", variables);
-
-		//System.out.println("Invoking the flow");
-
-		WorkflowResource workflowResource = new WorkflowResource();
-		workflowResource.setProcessEngineServices4junit(processEngineRule);
-
-		Response response = workflowResource.startProcessInstanceByKey("sdncAdapter", varMap);
-		WorkflowResponse workflowResponse = (WorkflowResponse) response.getEntity();
-
-		//String pid = workflowResponse.getProcessInstanceID();
-		//System.out.println("Back from executing process instance with pid=" + pid);
-		return workflowResponse;
-	}
-
-	@Test
-	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn"})
-	public void sunnyDay() throws InterruptedException {
-
-		mockSDNCAdapter(200);
-
-		//System.out.println("SDNCAdapter sunny day flow Started!");
-
-		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequest);
-		thread.start();
-		waitForExecutionToStart("sdncAdapter", 3);
-		String pid = getPid();
-
-		assertProcessInstanceNotFinished(pid);
-
-		System.out.println("Injecting SDNC Adapter asynchronous callback message to continue processing");
-		String generatedRequestId = (String) processEngineRule.getRuntimeService().getVariable(pid, "SDNCA_requestId");
-		CallbackHeader callbackHeader = new CallbackHeader();
-		callbackHeader.setRequestId(generatedRequestId);
-		callbackHeader.setResponseCode("200");
-		callbackHeader.setResponseMessage("OK");
-		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();
-		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);
-		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestData);
-		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();
-		callbackService.setProcessEngineServices4junit(processEngineRule);
-		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
-		//System.out.println("Back from executing process again");
-
-		assertFalse(sdncAdapterResponse instanceof SDNCAdapterExceptionResponse);
-		assertProcessInstanceFinished(pid);
-
-		//System.out.println("SDNCAdapter sunny day flow Completed!");
-	}
-
-	@Test
-	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn"})
-	public void nonFinalWithTimeout() throws InterruptedException {
-
-		mockSDNCAdapter(200);
-		mockUpdateRequestDB(200, "Database/DBAdapter.xml");
-
-		//System.out.println("SDNCAdapter interim status processing flow Started!");
-
-		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequestAct);
-		thread.start();
-		waitForExecutionToStart("sdncAdapter", 3);
-		String pid = getPid();
-
-		assertProcessInstanceNotFinished(pid);
-
-		//System.out.println("Injecting SDNC Adapter asynchronous callback message to continue processing");
-		String generatedRequestId = (String) processEngineRule.getRuntimeService().getVariable(pid, "SDNCA_requestId");
-		CallbackHeader callbackHeader = new CallbackHeader();
-		callbackHeader.setRequestId(generatedRequestId);
-		callbackHeader.setResponseCode("200");
-		callbackHeader.setResponseMessage("OK");
-		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();
-		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);
-		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestDataNonfinal);
-		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();
-		callbackService.setProcessEngineServices4junit(processEngineRule);
-		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
-		//System.out.println("Back from executing process again");
-
-		assertFalse(sdncAdapterResponse instanceof SDNCAdapterExceptionResponse);
-		assertProcessInstanceNotFinished(pid);
-
-		checkForTimeout(pid);
-
-		assertEquals(true, (Boolean) (getVariable(pid, "continueListening")));
-
-
-		//System.out.println("SDNCAdapter interim status processing flow Completed!");
-	}
-
-	@Test
-	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn"})
-	public void nonFinalThenFinal() throws InterruptedException {
-
-		mockSDNCAdapter(200);
-		mockUpdateRequestDB(200, "Database/DBAdapter.xml");
-
-		//System.out.println("SDNCAdapter non-final then final processing flow Started!");
-
-		// Start the flow
-		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequestAct);
-		thread.start();
-		waitForExecutionToStart("sdncAdapter", 3);
-		String pid = getPid();
-
-		assertProcessInstanceNotFinished(pid);
-
-		// Inject a "non-final" SDNC Adapter asynchronous callback message
-		//System.out.println("Injecting SDNC Adapter asynchronous callback message to continue processing");
-		String generatedRequestId = (String) processEngineRule.getRuntimeService().getVariable(pid, "SDNCA_requestId");
-		CallbackHeader callbackHeader = new CallbackHeader();
-		callbackHeader.setRequestId(generatedRequestId);
-		callbackHeader.setResponseCode("200");
-		callbackHeader.setResponseMessage("OK");
-		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();
-		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);
-		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestDataNonfinal);
-		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();
-		callbackService.setProcessEngineServices4junit(processEngineRule);
-		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
-		//System.out.println("Back from executing process again");
-
-		assertFalse(sdncAdapterResponse instanceof SDNCAdapterExceptionResponse);
-		assertProcessInstanceNotFinished(pid);
-		assertEquals(true, (Boolean) (getVariable(pid, "continueListening")));
-
-		// Inject a "final" SDNC Adapter asynchronous callback message
-		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestData);
-		sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
-		//System.out.println("Back from executing process again");
-
-		assertFalse(sdncAdapterResponse instanceof SDNCAdapterExceptionResponse);
-		assertProcessInstanceFinished(pid);
-		assertEquals(false, (Boolean) (getVariable(pid, "continueListening")));
-
-		//System.out.println("SDNCAdapter non-final then final processing flow Completed!");
-	}
-
-	
-
-	private void waitForExecutionToStart(String processDefintion, int count) throws InterruptedException {
-		//System.out.println(processEngineRule.getRuntimeService().createExecutionQuery().processDefinitionKey(processDefintion).count());
-		while (processEngineRule.getRuntimeService().createExecutionQuery().processDefinitionKey(processDefintion).count() != count) {
-			Thread.sleep(200);
-		}
-	}
-
-	@Test
-	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn"})
-	public void badCorrelationIdTest() throws InterruptedException {
-
-		mockSDNCAdapter(200);
-
-		//System.out.println("SDNCAdapter bad RequestId test Started!");
-
-		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequest);
-		thread.start();
-		waitForExecutionToStart("sdncAdapter", 3);
-		String pid = getPid();
-		assertProcessInstanceNotFinished(pid);
-
-		//System.out.println("Injecting SDNC Adapter asynchronous callback message to continue processing");
-		String badRequestId = "This is not the RequestId that was used";
-		CallbackHeader callbackHeader = new CallbackHeader();
-		callbackHeader.setRequestId(badRequestId);
-		callbackHeader.setResponseCode("200");
-		callbackHeader.setResponseMessage("OK");
-		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();
-		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);
-		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestData);
-		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();
-		callbackService.setProcessEngineServices4junit(processEngineRule);
-		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
-		//System.out.println("Back from executing process again");
-
-		assertTrue(sdncAdapterResponse instanceof SDNCAdapterExceptionResponse);
-		assertTrue(((SDNCAdapterExceptionResponse) sdncAdapterResponse).getException() instanceof MismatchingMessageCorrelationException);
-		assertProcessInstanceNotFinished(pid);
-
-		//System.out.println("SDNCAdapter bad RequestId test Completed!");
-	}
-
-	@Test
-	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn"})
-	public void badSynchronousResponse() throws IOException, InterruptedException {
-
-		mockSDNCAdapter(404);
-
-		//System.out.println("SDNCAdapter bad synchronous response flow Started!");
-
-		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequest);
-		thread.start();
-		while (thread.isAlive()) {
-			Thread.sleep(200);
-		}
-		WorkflowResponse response = thread.workflowResponse;
-		Assert.assertNotNull(response);
-		Assert.assertEquals("404 error", response.getMessageCode(),7000);
-//		assertProcessInstanceFinished(response.getProcessInstanceID());
-		//System.out.println("SDNCAdapter bad synchronous response flow Completed!");
-	}
-
-	@Test
-	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn"})
-	public void sdncNotFound() throws IOException, InterruptedException {
-		mockSDNCAdapter(200);
-		mockSDNCAdapter("/sdncAdapterMock/404", 400, "sdncCallbackErrorResponse.xml");
-
-		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequest);
-		thread.start();
-		waitForExecutionToStart("sdncAdapter", 3);
-		String pid = getPid();
-
-		//System.out.println("Injecting SDNC Adapter asynchronous callback message to continue processing");
-		String generatedRequestId = (String) processEngineRule.getRuntimeService().getVariable(pid, "SDNCA_requestId");
-		CallbackHeader callbackHeader = new CallbackHeader();
-		callbackHeader.setRequestId(generatedRequestId);
-		callbackHeader.setResponseCode("404");
-		callbackHeader.setResponseMessage("Error processing request to SDNC. Not Found. https://sdncodl.it.us.aic.cip.att.com:8443/restconf/config/L3SDN-API:services/layer3-service-list/AS%2FVLXM%2F000199%2F%2FSB_INTERNET. SDNC Returned-[error-type:application, error-tag:data-missing, error-message:Request could not be completed because the relevant data model content does not exist.]");
-		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();
-		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);
-		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();
-		callbackService.setProcessEngineServices4junit(processEngineRule);
-		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
-		//System.out.println("Back from executing process again");
-
-		assertProcessInstanceFinished(pid);
-		assertNotNull(sdncAdapterResponse);
-		//TODO query history to see SDNCA_ResponseCode, SDNCA_ErrorResponse
-		//System.out.println("SDNCAdapter SDNC Notfound test Completed!");
-	}
-
-	@Test
-	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn"})
-	public void asynchronousMessageTimeout() throws IOException, InterruptedException {
-		mockSDNCAdapter(200);
-		//System.out.println("SDNCAdapter asynchronous message timeout flow Started!");
-		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequest);
-		thread.start();
-		waitForExecutionToStart("sdncAdapter", 3);
-		checkForTimeout(getPid());
-	}
-
-	private void checkForTimeout(String pid) throws InterruptedException {
-
-		assertProcessInstanceNotFinished(pid);
-
-		ProcessEngineConfigurationImpl processEngineConfiguration =
-			(ProcessEngineConfigurationImpl) processEngineRule.getProcessEngine().getProcessEngineConfiguration();
-		assertTrue(processEngineConfiguration.getJobExecutor().isActive());
-
-	    Job timerJob = processEngineRule.getManagementService().createJobQuery().processInstanceId(pid).singleResult();
-	    assertNotNull(timerJob);
-
-	    processEngineRule.getManagementService().executeJob(timerJob.getId());
-
-	    assertProcessInstanceFinished(pid);
-
-		//System.out.println("SDNCAdapter asynchronous message timeout flow Completed!");
-	}
-
-	class ProcessExecutionThread extends Thread {
-
-		private String workflowRequest;
-		private WorkflowResponse workflowResponse;
-
-		public ProcessExecutionThread(String workflowRequest) {
-			this.workflowRequest = workflowRequest;
-		}
-
-		public void run() {
-			workflowResponse = invokeFlow(workflowRequest);
-			workflowResponse.getProcessInstanceID();
-		}
-	}
-
-	private String getPid() {
-		return processEngineRule.getHistoryService().createHistoricProcessInstanceQuery().list().get(0).getId();
-	}
-
-	private Object getVariable(String pid, String variableName) {
-		try {
-			return
-				processEngineRule
-					.getHistoryService()
-					.createHistoricVariableInstanceQuery()
-					.processInstanceId(pid).variableName(variableName)
-					.singleResult()
-					.getValue();
-		} catch(Exception ex) {
-			return null;
-		}
-	}
-
-	private void assertProcessInstanceFinished(String pid) {
-	    assertEquals(1, processEngineRule.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(pid).finished().count());
-	}
-
-	private void assertProcessInstanceNotFinished(String pid) {
-	    assertEquals(0, processEngineRule.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(pid).finished().count());
-	}
-
-}
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+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 javax.ws.rs.core.Response;
+
+import org.camunda.bpm.engine.MismatchingMessageCorrelationException;
+import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl;
+import org.camunda.bpm.engine.runtime.Job;
+import org.camunda.bpm.engine.test.Deployment;
+import org.camunda.bpm.engine.variable.impl.VariableMapImpl;
+import org.junit.Assert;
+import org.junit.Test;
+import org.openecomp.mso.bpmn.common.adapter.sdnc.CallbackHeader;
+import org.openecomp.mso.bpmn.common.adapter.sdnc.SDNCAdapterCallbackRequest;
+import org.openecomp.mso.bpmn.common.adapter.sdnc.SDNCAdapterResponse;
+import org.openecomp.mso.bpmn.common.workflow.service.SDNCAdapterCallbackServiceImpl;
+import org.openecomp.mso.bpmn.common.workflow.service.SDNCAdapterCallbackServiceImpl.SDNCAdapterExceptionResponse;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResource;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit test cases for SDNCAdapterV1.bpmn
+ */
+public class SDNCAdapterV1Test extends WorkflowTest {
+
+	private String sdncAdapterWorkflowRequest;
+	private String sdncAdapterWorkflowRequestAct;
+	private String sdncAdapterCallbackRequestData;
+	private String sdncAdapterCallbackRequestDataNonfinal;
+
+	public SDNCAdapterV1Test() throws IOException {
+		sdncAdapterWorkflowRequest = FileUtil.readResourceFile("sdncadapterworkflowrequest.xml");
+		sdncAdapterWorkflowRequestAct = FileUtil.readResourceFile("sdncadapterworkflowrequest-act.xml");
+		sdncAdapterCallbackRequestData = FileUtil.readResourceFile("sdncadaptercallbackrequestdata.text");
+		sdncAdapterCallbackRequestDataNonfinal = FileUtil.readResourceFile("sdncadaptercallbackrequestdata-nonfinal.text");
+	}
+
+	/**
+	 * End-to-End flow - Unit test for SDNCAdapterV1.bpmn
+	 *  - String input & String response
+	 */
+
+	private WorkflowResponse invokeFlow(String workflowRequest) {
+
+		Map<String, Object>valueMap = new HashMap<String, Object>();
+		valueMap.put("value", workflowRequest);
+		Map<String, Object> variables = new HashMap<String, Object>();
+		variables.put("sdncAdapterWorkflowRequest", valueMap);
+
+		Map<String, Object> valueMap2 = new HashMap<String, Object>();
+		valueMap2.put("value", "true");
+		variables.put("isDebugLogEnabled", valueMap2);
+
+		VariableMapImpl varMap = new VariableMapImpl();
+		varMap.put("variables", variables);
+
+		//System.out.println("Invoking the flow");
+
+		WorkflowResource workflowResource = new WorkflowResource();
+		workflowResource.setProcessEngineServices4junit(processEngineRule);
+
+		Response response = workflowResource.startProcessInstanceByKey("sdncAdapter", varMap);
+		WorkflowResponse workflowResponse = (WorkflowResponse) response.getEntity();
+
+		//String pid = workflowResponse.getProcessInstanceID();
+		//System.out.println("Back from executing process instance with pid=" + pid);
+		return workflowResponse;
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void sunnyDay() throws InterruptedException {
+
+		mockSDNCAdapter(200);
+
+		//System.out.println("SDNCAdapter sunny day flow Started!");
+
+		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequest);
+		thread.start();
+		waitForExecutionToStart("sdncAdapter", 3);
+		String pid = getPid();
+
+		assertProcessInstanceNotFinished(pid);
+
+		System.out.println("Injecting SDNC Adapter asynchronous callback message to continue processing");
+		String generatedRequestId = (String) processEngineRule.getRuntimeService().getVariable(pid, "SDNCA_requestId");
+		CallbackHeader callbackHeader = new CallbackHeader();
+		callbackHeader.setRequestId(generatedRequestId);
+		callbackHeader.setResponseCode("200");
+		callbackHeader.setResponseMessage("OK");
+		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();
+		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);
+		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestData);
+		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();
+		callbackService.setProcessEngineServices4junit(processEngineRule);
+		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
+		//System.out.println("Back from executing process again");
+
+		assertFalse(sdncAdapterResponse instanceof SDNCAdapterExceptionResponse);
+		assertProcessInstanceFinished(pid);
+
+		//System.out.println("SDNCAdapter sunny day flow Completed!");
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void nonFinalWithTimeout() throws InterruptedException {
+
+		mockSDNCAdapter(200);
+		mockUpdateRequestDB(200, "Database/DBAdapter.xml");
+
+		//System.out.println("SDNCAdapter interim status processing flow Started!");
+
+		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequestAct);
+		thread.start();
+		waitForExecutionToStart("sdncAdapter", 3);
+		String pid = getPid();
+
+		assertProcessInstanceNotFinished(pid);
+
+		//System.out.println("Injecting SDNC Adapter asynchronous callback message to continue processing");
+		String generatedRequestId = (String) processEngineRule.getRuntimeService().getVariable(pid, "SDNCA_requestId");
+		CallbackHeader callbackHeader = new CallbackHeader();
+		callbackHeader.setRequestId(generatedRequestId);
+		callbackHeader.setResponseCode("200");
+		callbackHeader.setResponseMessage("OK");
+		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();
+		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);
+		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestDataNonfinal);
+		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();
+		callbackService.setProcessEngineServices4junit(processEngineRule);
+		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
+		//System.out.println("Back from executing process again");
+
+		assertFalse(sdncAdapterResponse instanceof SDNCAdapterExceptionResponse);
+		assertProcessInstanceNotFinished(pid);
+
+		checkForTimeout(pid);
+
+		assertEquals(true, (Boolean) (getVariable(pid, "continueListening")));
+
+
+		//System.out.println("SDNCAdapter interim status processing flow Completed!");
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void nonFinalThenFinal() throws InterruptedException {
+
+		mockSDNCAdapter(200);
+		mockUpdateRequestDB(200, "Database/DBAdapter.xml");
+
+		//System.out.println("SDNCAdapter non-final then final processing flow Started!");
+
+		// Start the flow
+		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequestAct);
+		thread.start();
+		waitForExecutionToStart("sdncAdapter", 3);
+		String pid = getPid();
+
+		assertProcessInstanceNotFinished(pid);
+
+		// Inject a "non-final" SDNC Adapter asynchronous callback message
+		//System.out.println("Injecting SDNC Adapter asynchronous callback message to continue processing");
+		String generatedRequestId = (String) processEngineRule.getRuntimeService().getVariable(pid, "SDNCA_requestId");
+		CallbackHeader callbackHeader = new CallbackHeader();
+		callbackHeader.setRequestId(generatedRequestId);
+		callbackHeader.setResponseCode("200");
+		callbackHeader.setResponseMessage("OK");
+		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();
+		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);
+		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestDataNonfinal);
+		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();
+		callbackService.setProcessEngineServices4junit(processEngineRule);
+		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
+		//System.out.println("Back from executing process again");
+
+		assertFalse(sdncAdapterResponse instanceof SDNCAdapterExceptionResponse);
+		assertProcessInstanceNotFinished(pid);
+		assertEquals(true, (Boolean) (getVariable(pid, "continueListening")));
+
+		// Inject a "final" SDNC Adapter asynchronous callback message
+		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestData);
+		sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
+		//System.out.println("Back from executing process again");
+
+		assertFalse(sdncAdapterResponse instanceof SDNCAdapterExceptionResponse);
+		assertProcessInstanceFinished(pid);
+		assertEquals(false, (Boolean) (getVariable(pid, "continueListening")));
+
+		//System.out.println("SDNCAdapter non-final then final processing flow Completed!");
+	}
+
+	
+
+	private void waitForExecutionToStart(String processDefintion, int count) throws InterruptedException {
+		//System.out.println(processEngineRule.getRuntimeService().createExecutionQuery().processDefinitionKey(processDefintion).count());
+		while (processEngineRule.getRuntimeService().createExecutionQuery().processDefinitionKey(processDefintion).count() != count) {
+			Thread.sleep(200);
+		}
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void badCorrelationIdTest() throws InterruptedException {
+
+		mockSDNCAdapter(200);
+
+		//System.out.println("SDNCAdapter bad RequestId test Started!");
+
+		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequest);
+		thread.start();
+		waitForExecutionToStart("sdncAdapter", 3);
+		String pid = getPid();
+		assertProcessInstanceNotFinished(pid);
+
+		//System.out.println("Injecting SDNC Adapter asynchronous callback message to continue processing");
+		String badRequestId = "This is not the RequestId that was used";
+		CallbackHeader callbackHeader = new CallbackHeader();
+		callbackHeader.setRequestId(badRequestId);
+		callbackHeader.setResponseCode("200");
+		callbackHeader.setResponseMessage("OK");
+		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();
+		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);
+		sdncAdapterCallbackRequest.setRequestData(sdncAdapterCallbackRequestData);
+		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();
+		callbackService.setProcessEngineServices4junit(processEngineRule);
+		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
+		//System.out.println("Back from executing process again");
+
+		assertTrue(sdncAdapterResponse instanceof SDNCAdapterExceptionResponse);
+		assertTrue(((SDNCAdapterExceptionResponse) sdncAdapterResponse).getException() instanceof IllegalStateException);
+		assertProcessInstanceNotFinished(pid);
+
+		//System.out.println("SDNCAdapter bad RequestId test Completed!");
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void badSynchronousResponse() throws IOException, InterruptedException {
+
+		mockSDNCAdapter(404);
+
+		//System.out.println("SDNCAdapter bad synchronous response flow Started!");
+
+		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequest);
+		thread.start();
+		while (thread.isAlive()) {
+			Thread.sleep(200);
+		}
+		WorkflowResponse response = thread.workflowResponse;
+		Assert.assertNotNull(response);
+		Assert.assertEquals("404 error", response.getMessageCode(),7000);
+//		assertProcessInstanceFinished(response.getProcessInstanceID());
+		//System.out.println("SDNCAdapter bad synchronous response flow Completed!");
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void sdncNotFound() throws IOException, InterruptedException {
+		mockSDNCAdapter(200);
+		mockSDNCAdapter("/sdncAdapterMock/404", 400, "sdncCallbackErrorResponse.xml");
+
+		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequest);
+		thread.start();
+		waitForExecutionToStart("sdncAdapter", 3);
+		String pid = getPid();
+
+		//System.out.println("Injecting SDNC Adapter asynchronous callback message to continue processing");
+		String generatedRequestId = (String) processEngineRule.getRuntimeService().getVariable(pid, "SDNCA_requestId");
+		CallbackHeader callbackHeader = new CallbackHeader();
+		callbackHeader.setRequestId(generatedRequestId);
+		callbackHeader.setResponseCode("404");
+		callbackHeader.setResponseMessage("Error processing request to SDNC. Not Found. https://sdncodl.it.us.aic.cip.com:8443/restconf/config/L3SDN-API:services/layer3-service-list/AS%2FVLXM%2F000199%2F%2FSB_INTERNET. SDNC Returned-[error-type:application, error-tag:data-missing, error-message:Request could not be completed because the relevant data model content does not exist.]");
+		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();
+		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);
+		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();
+		callbackService.setProcessEngineServices4junit(processEngineRule);
+		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
+		//System.out.println("Back from executing process again");
+
+		assertProcessInstanceFinished(pid);
+		assertNotNull(sdncAdapterResponse);
+		//TODO query history to see SDNCA_ResponseCode, SDNCA_ErrorResponse
+		//System.out.println("SDNCAdapter SDNC Notfound test Completed!");
+	}
+
+	@Test
+	@Deployment(resources = {"subprocess/SDNCAdapterV1.bpmn",
+			"subprocess/GenericNotificationService.bpmn"
+			})
+	public void asynchronousMessageTimeout() throws IOException, InterruptedException {
+		mockSDNCAdapter(200);
+		//System.out.println("SDNCAdapter asynchronous message timeout flow Started!");
+		ProcessExecutionThread thread = new ProcessExecutionThread(sdncAdapterWorkflowRequest);
+		thread.start();
+		waitForExecutionToStart("sdncAdapter", 3);
+		checkForTimeout(getPid());
+	}
+
+	private void checkForTimeout(String pid) throws InterruptedException {
+
+		assertProcessInstanceNotFinished(pid);
+
+		ProcessEngineConfigurationImpl processEngineConfiguration =
+			(ProcessEngineConfigurationImpl) processEngineRule.getProcessEngine().getProcessEngineConfiguration();
+		assertTrue(processEngineConfiguration.getJobExecutor().isActive());
+
+	    Job timerJob = processEngineRule.getManagementService().createJobQuery().processInstanceId(pid).singleResult();
+	    assertNotNull(timerJob);
+
+	    processEngineRule.getManagementService().executeJob(timerJob.getId());
+
+	    assertProcessInstanceFinished(pid);
+
+		//System.out.println("SDNCAdapter asynchronous message timeout flow Completed!");
+	}
+
+	class ProcessExecutionThread extends Thread {
+
+		private String workflowRequest;
+		private WorkflowResponse workflowResponse;
+
+		public ProcessExecutionThread(String workflowRequest) {
+			this.workflowRequest = workflowRequest;
+		}
+
+		public void run() {
+			workflowResponse = invokeFlow(workflowRequest);
+			workflowResponse.getProcessInstanceID();
+		}
+	}
+
+	private String getPid() {
+		return processEngineRule.getHistoryService().createHistoricProcessInstanceQuery().list().get(0).getId();
+	}
+
+	private Object getVariable(String pid, String variableName) {
+		try {
+			return
+				processEngineRule
+					.getHistoryService()
+					.createHistoricVariableInstanceQuery()
+					.processInstanceId(pid).variableName(variableName)
+					.singleResult()
+					.getValue();
+		} catch(Exception ex) {
+			return null;
+		}
+	}
+
+	private void assertProcessInstanceFinished(String pid) {
+	    assertEquals(1, processEngineRule.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(pid).finished().count());
+	}
+
+	private void assertProcessInstanceNotFinished(String pid) {
+	    assertEquals(0, processEngineRule.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(pid).finished().count());
+	}
+
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/UpdateAAIGenericVnfTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/UpdateAAIGenericVnfTest.java
index 4ae7620..18fb5ac 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/UpdateAAIGenericVnfTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/UpdateAAIGenericVnfTest.java
@@ -1,171 +1,173 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common;
-
-import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;
-import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById_404;
-import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
-import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf_Bad;
-
-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.core.WorkflowException;
-import org.openecomp.mso.bpmn.mock.FileUtil;
-
-/**
- * Unit tests for UpdateAAIGenericVnf bpmn.
- */
-public class UpdateAAIGenericVnfTest extends WorkflowTest {
-		
-	/**
-	 * Test the happy path through the flow.
-	 */
-	@Test	
-	@Deployment(resources = {
-			"subprocess/UpdateAAIGenericVnf.bpmn"
-		})
-	public void happyPath() throws IOException {
-		logStart();
-		
-		String updateAAIGenericVnfRequest =	FileUtil.readResourceFile("__files/VfModularity/UpdateAAIGenericVnfRequest.xml"); 
-		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
-		MockPutGenericVnf("/skask", 200);
-		
-		String businessKey = UUID.randomUUID().toString();
-		Map<String, Object> variables = new HashMap<String, Object>();
-		variables.put("mso-request-id", "999-99-9999");
-		variables.put("isDebugLogEnabled","true");
-		variables.put("UpdateAAIGenericVnfRequest", updateAAIGenericVnfRequest);
-		invokeSubProcess("UpdateAAIGenericVnf", businessKey, variables);
-		
-		Assert.assertTrue(isProcessEnded(businessKey));
-		String response = (String) getVariableFromHistory(businessKey, "UAAIGenVnf_updateGenericVnfResponse");
-		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "UAAIGenVnf_updateGenericVnfResponseCode");
-		System.out.println("Subflow response code: " + responseCode);
-		System.out.println("Subflow response: " + response);
-		Assert.assertEquals(200, responseCode.intValue());
-		
-		logEnd();
-	}
-
-	/**
-	 * Test the happy path through the flow.
-	 */
-	@Test	
-	@Deployment(resources = {
-			"subprocess/UpdateAAIGenericVnf.bpmn"
-		})
-	public void personaMismatch() throws IOException {
-		
-		logStart();
-		
-		String updateAAIGenericVnfRequest =	FileUtil.readResourceFile("__files/VfModularity/UpdateAAIGenericVnfRequest.xml"); 
-		updateAAIGenericVnfRequest = updateAAIGenericVnfRequest.replaceFirst("introvert", "extrovert");
-		
-		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
-		
-		String businessKey = UUID.randomUUID().toString();
-		Map<String, Object> variables = new HashMap<String, Object>();
-		variables.put("mso-request-id", "999-99-9999");
-		variables.put("isDebugLogEnabled","true");
-		variables.put("UpdateAAIGenericVnfRequest", updateAAIGenericVnfRequest);
-		invokeSubProcess("UpdateAAIGenericVnf", businessKey, variables);
-		
-		Assert.assertTrue(isProcessEnded(businessKey));
-		WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
-		System.out.println("Workflow Exception: " + workflowException);
-		Assert.assertNotNull(workflowException);
-		
-		logEnd();
-	}
-
-	/**
-	 * Test the case where the GET to AAI returns a 404.
-	 */
-	@Test	
-	@Deployment(resources = {
-			"subprocess/UpdateAAIGenericVnf.bpmn"
-		})
-	public void badGet() throws IOException {
-		
-		logStart();
-		
-		String updateAAIGenericVnfRequest = FileUtil.readResourceFile("__files/VfModularity/UpdateAAIGenericVnfRequest.xml"); 
-		
-		MockGetGenericVnfById_404("skask[?]depth=1");
-		
-		String businessKey = UUID.randomUUID().toString();
-		Map<String, Object> variables = new HashMap<String, Object>();
-		variables.put("mso-request-id", "999-99-9999");
-		variables.put("isDebugLogEnabled","true");
-		variables.put("UpdateAAIGenericVnfRequest", updateAAIGenericVnfRequest);
-		invokeSubProcess("UpdateAAIGenericVnf", businessKey, variables);
-		
-		Assert.assertTrue(isProcessEnded(businessKey));
-		String response = (String) getVariableFromHistory(businessKey, "UAAIGenVnf_getGenericVnfResponse");
-		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "UAAIGenVnf_getGenericVnfResponseCode");
-		System.out.println("Subflow response code: " + responseCode);
-		System.out.println("Subflow response: " + response);
-		Assert.assertEquals(404, responseCode.intValue());
-		
-		logEnd();
-	}
-
-	/**
-	 * Test the case where the GET to AAI is successful, but he subsequent PUT returns 404.
-	 */
-	@Test	
-	@Deployment(resources = {
-			"subprocess/UpdateAAIGenericVnf.bpmn"
-		})
-	public void badPut() throws IOException {
-		
-		logStart();
-		
-		String updateAAIGenericVnfRequest = FileUtil.readResourceFile("__files/VfModularity/UpdateAAIGenericVnfRequest.xml"); 
-		
-		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
-		MockPutGenericVnf_Bad("skask", 404);
-		
-		String businessKey = UUID.randomUUID().toString();
-		Map<String, Object> variables = new HashMap<String, Object>();
-		variables.put("mso-request-id", "999-99-9999");
-		variables.put("isDebugLogEnabled","true");
-		variables.put("UpdateAAIGenericVnfRequest", updateAAIGenericVnfRequest);
-		invokeSubProcess("UpdateAAIGenericVnf", businessKey, variables);
-		
-		Assert.assertTrue(isProcessEnded(businessKey));
-		String response = (String) getVariableFromHistory(businessKey, "UAAIGenVnf_updateGenericVnfResponse");
-		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "UAAIGenVnf_updateGenericVnfResponseCode");
-		System.out.println("Subflow response code: " + responseCode);
-		System.out.println("Subflow response: " + response);
-		Assert.assertEquals(404, responseCode.intValue());
-		
-		logEnd();
-	}
-}
-
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common;
+
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById_404;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf_Bad;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchGenericVnf;
+
+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.core.WorkflowException;
+import org.openecomp.mso.bpmn.mock.FileUtil;
+
+/**
+ * Unit tests for UpdateAAIGenericVnf bpmn.
+ */
+public class UpdateAAIGenericVnfTest extends WorkflowTest {
+		
+	/**
+	 * Test the happy path through the flow.
+	 */
+	@Test	
+	@Deployment(resources = {
+			"subprocess/UpdateAAIGenericVnf.bpmn"
+		})
+	public void happyPath() throws IOException {
+		logStart();
+		
+		String updateAAIGenericVnfRequest =	FileUtil.readResourceFile("__files/VfModularity/UpdateAAIGenericVnfRequest.xml"); 
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+		MockPutGenericVnf("/skask", 200);
+		MockPatchGenericVnf("skask");
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		variables.put("mso-request-id", "999-99-9999");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("UpdateAAIGenericVnfRequest", updateAAIGenericVnfRequest);
+		invokeSubProcess("UpdateAAIGenericVnf", businessKey, variables);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String response = (String) getVariableFromHistory(businessKey, "UAAIGenVnf_updateGenericVnfResponse");
+		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "UAAIGenVnf_updateGenericVnfResponseCode");
+		System.out.println("Subflow response code: " + responseCode);
+		System.out.println("Subflow response: " + response);
+		Assert.assertEquals(200, responseCode.intValue());
+		
+		logEnd();
+	}
+
+	/**
+	 * Test the happy path through the flow.
+	 */
+	@Test	
+	@Deployment(resources = {
+			"subprocess/UpdateAAIGenericVnf.bpmn"
+		})
+	public void personaMismatch() throws IOException {
+		
+		logStart();
+		
+		String updateAAIGenericVnfRequest =	FileUtil.readResourceFile("__files/VfModularity/UpdateAAIGenericVnfRequest.xml"); 
+		updateAAIGenericVnfRequest = updateAAIGenericVnfRequest.replaceFirst("introvert", "extrovert");
+		
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		variables.put("mso-request-id", "999-99-9999");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("UpdateAAIGenericVnfRequest", updateAAIGenericVnfRequest);
+		invokeSubProcess("UpdateAAIGenericVnf", businessKey, variables);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
+		System.out.println("Workflow Exception: " + workflowException);
+		Assert.assertNotNull(workflowException);
+		
+		logEnd();
+	}
+
+	/**
+	 * Test the case where the GET to AAI returns a 404.
+	 */
+	@Test	
+	@Deployment(resources = {
+			"subprocess/UpdateAAIGenericVnf.bpmn"
+		})
+	public void badGet() throws IOException {
+		
+		logStart();
+		
+		String updateAAIGenericVnfRequest = FileUtil.readResourceFile("__files/VfModularity/UpdateAAIGenericVnfRequest.xml"); 
+		
+		MockGetGenericVnfById_404("skask[?]depth=1");
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		variables.put("mso-request-id", "999-99-9999");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("UpdateAAIGenericVnfRequest", updateAAIGenericVnfRequest);
+		invokeSubProcess("UpdateAAIGenericVnf", businessKey, variables);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String response = (String) getVariableFromHistory(businessKey, "UAAIGenVnf_getGenericVnfResponse");
+		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "UAAIGenVnf_getGenericVnfResponseCode");
+		System.out.println("Subflow response code: " + responseCode);
+		System.out.println("Subflow response: " + response);
+		Assert.assertEquals(404, responseCode.intValue());
+		
+		logEnd();
+	}
+
+	/**
+	 * Test the case where the GET to AAI is successful, but he subsequent PUT returns 404.
+	 */
+	@Test	
+	@Deployment(resources = {
+			"subprocess/UpdateAAIGenericVnf.bpmn"
+		})
+	public void badPut() throws IOException {
+		
+		logStart();
+		
+		String updateAAIGenericVnfRequest = FileUtil.readResourceFile("__files/VfModularity/UpdateAAIGenericVnfRequest.xml"); 
+		
+		MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");
+		MockPutGenericVnf_Bad("skask", 404);
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		variables.put("mso-request-id", "999-99-9999");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("UpdateAAIGenericVnfRequest", updateAAIGenericVnfRequest);
+		invokeSubProcess("UpdateAAIGenericVnf", businessKey, variables);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String response = (String) getVariableFromHistory(businessKey, "UAAIGenVnf_updateGenericVnfResponse");
+		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "UAAIGenVnf_updateGenericVnfResponseCode");
+		System.out.println("Subflow response code: " + responseCode);
+		System.out.println("Subflow response: " + response);
+		Assert.assertEquals(404, responseCode.intValue());
+		
+		logEnd();
+	}
+}
+
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/UpdateAAIVfModuleTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/UpdateAAIVfModuleTest.java
index 8691ae8..035f097 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/UpdateAAIVfModuleTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/UpdateAAIVfModuleTest.java
@@ -1,137 +1,139 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common;
-
-import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById;
-import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithPriority;
-import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById_404;
-import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
-
-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.mock.FileUtil;
-
-/**
- * Unit tests for UpdateAAIVfModuleTest.bpmn.
- */
-public class UpdateAAIVfModuleTest extends WorkflowTest {
-		
-	/**
-	 * Test the happy path through the flow.
-	 */
-	@Test	
-	@Deployment(resources = {
-			"subprocess/UpdateAAIVfModule.bpmn"
-		})
-	public void happyPath() throws IOException {
-		logStart();
-		
-		String updateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/UpdateAAIVfModuleRequest.xml"); 
-		MockGetGenericVnfByIdWithPriority("/skask/vf-modules/vf-module/supercool", 200, "VfModularity/VfModule-supercool.xml");
-		MockPutGenericVnf("/skask/vf-modules/vf-module/supercool", "PCRF", 200);
-		
-		String businessKey = UUID.randomUUID().toString();
-		Map<String, Object> variables = new HashMap<String, Object>();
-		variables.put("mso-request-id", "999-99-9999");
-		variables.put("isDebugLogEnabled","true");
-		variables.put("UpdateAAIVfModuleRequest", updateAAIVfModuleRequest);
-		invokeSubProcess("UpdateAAIVfModule", businessKey, variables);
-		
-		Assert.assertTrue(isProcessEnded(businessKey));
-		String response = (String) getVariableFromHistory(businessKey, "UAAIVfMod_updateVfModuleResponse");
-		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "UAAIVfMod_updateVfModuleResponseCode");
-		System.out.println("Subflow response code: " + responseCode);
-		System.out.println("Subflow response: " + response);
-		Assert.assertEquals(200, responseCode.intValue());
-		
-		logEnd();
-	}
-
-	/**
-	 * Test the case where the GET to AAI returns a 404.
-	 */
-	@Test	
-	@Deployment(resources = {
-			"subprocess/UpdateAAIVfModule.bpmn"
-		})
-	public void badGet() throws IOException {
-		
-		logStart();
-		
-		String updateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/UpdateAAIVfModuleRequest.xml"); 
-		MockGetGenericVnfById("/skask/vf-modules/vf-module/.*", "VfModularity/VfModule-supercool.xml", 404);
-		
-		String businessKey = UUID.randomUUID().toString();
-		Map<String, Object> variables = new HashMap<String, Object>();
-		variables.put("mso-request-id", "999-99-9999");
-		variables.put("isDebugLogEnabled","true");
-		variables.put("UpdateAAIVfModuleRequest", updateAAIVfModuleRequest);
-		invokeSubProcess("UpdateAAIVfModule", businessKey, variables);
-		
-		Assert.assertTrue(isProcessEnded(businessKey));
-		String response = (String) getVariableFromHistory(businessKey, "UAAIVfMod_getVfModuleResponse");
-		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "UAAIVfMod_getVfModuleResponseCode");
-		System.out.println("Subflow response code: " + responseCode);
-		System.out.println("Subflow response: " + response);
-		Assert.assertEquals(404, responseCode.intValue());
-		
-		logEnd();
-	}
-
-	/**
-	 * Test the case where the GET to AAI is successful, but he subsequent PUT returns 404.
-	 */
-	@Test	
-	@Deployment(resources = {
-			"subprocess/UpdateAAIVfModule.bpmn"
-		})
-	public void badPut() throws IOException {
-		
-		logStart();
-		
-		String updateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/UpdateAAIVfModuleRequest.xml"); 
-		MockGetGenericVnfById_404("/skask/vf-modules/vf-module/supercool");
-		MockGetGenericVnfById("/skask/vf-modules/vf-module/supercool", "VfModularity/VfModule-supercool.xml", 200);
-		
-		String businessKey = UUID.randomUUID().toString();
-		Map<String, Object> variables = new HashMap<String, Object>();
-		variables.put("mso-request-id", "999-99-9999");
-		variables.put("isDebugLogEnabled","true");
-		variables.put("UpdateAAIVfModuleRequest", updateAAIVfModuleRequest);
-		invokeSubProcess("UpdateAAIVfModule", businessKey, variables);
-		
-		Assert.assertTrue(isProcessEnded(businessKey));
-		String response = (String) getVariableFromHistory(businessKey, "UAAIVfMod_updateVfModuleResponse");
-		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "UAAIVfMod_updateVfModuleResponseCode");
-		System.out.println("Subflow response code: " + responseCode);
-		System.out.println("Subflow response: " + response);
-		Assert.assertEquals(404, responseCode.intValue());
-		
-		logEnd();
-	}
-}
-
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common;
+
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithPriority;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById_404;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;
+
+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.mock.FileUtil;
+
+/**
+ * Unit tests for UpdateAAIVfModuleTest.bpmn.
+ */
+public class UpdateAAIVfModuleTest extends WorkflowTest {
+		
+	/**
+	 * Test the happy path through the flow.
+	 */
+	@Test	
+	@Deployment(resources = {
+			"subprocess/UpdateAAIVfModule.bpmn"
+		})
+	public void happyPath() throws IOException {
+		logStart();
+		
+		String updateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/UpdateAAIVfModuleRequest.xml"); 
+		MockGetGenericVnfByIdWithPriority("/skask/vf-modules/vf-module/supercool", 200, "VfModularity/VfModule-supercool.xml");
+		MockPutGenericVnf("/skask/vf-modules/vf-module/supercool", "PCRF", 200);
+		MockPatchVfModuleId("skask", "supercool");
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		variables.put("mso-request-id", "999-99-9999");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("UpdateAAIVfModuleRequest", updateAAIVfModuleRequest);
+		invokeSubProcess("UpdateAAIVfModule", businessKey, variables);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String response = (String) getVariableFromHistory(businessKey, "UAAIVfMod_updateVfModuleResponse");
+		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "UAAIVfMod_updateVfModuleResponseCode");
+		System.out.println("Subflow response code: " + responseCode);
+		System.out.println("Subflow response: " + response);
+		Assert.assertEquals(200, responseCode.intValue());
+		
+		logEnd();
+	}
+
+	/**
+	 * Test the case where the GET to AAI returns a 404.
+	 */
+	@Test	
+	@Deployment(resources = {
+			"subprocess/UpdateAAIVfModule.bpmn"
+		})
+	public void badGet() throws IOException {
+		
+		logStart();
+		
+		String updateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/UpdateAAIVfModuleRequest.xml"); 
+		MockGetGenericVnfById("/skask/vf-modules/vf-module/.*", "VfModularity/VfModule-supercool.xml", 404);
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		variables.put("mso-request-id", "999-99-9999");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("UpdateAAIVfModuleRequest", updateAAIVfModuleRequest);
+		invokeSubProcess("UpdateAAIVfModule", businessKey, variables);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String response = (String) getVariableFromHistory(businessKey, "UAAIVfMod_getVfModuleResponse");
+		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "UAAIVfMod_getVfModuleResponseCode");
+		System.out.println("Subflow response code: " + responseCode);
+		System.out.println("Subflow response: " + response);
+		Assert.assertEquals(404, responseCode.intValue());
+		
+		logEnd();
+	}
+
+	/**
+	 * Test the case where the GET to AAI is successful, but he subsequent PUT returns 404.
+	 */
+	@Test	
+	@Deployment(resources = {
+			"subprocess/UpdateAAIVfModule.bpmn"
+		})
+	public void badPut() throws IOException {
+		
+		logStart();
+		
+		String updateAAIVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/UpdateAAIVfModuleRequest.xml"); 
+		MockGetGenericVnfById_404("/skask/vf-modules/vf-module/supercool");
+		MockGetGenericVnfById("/skask/vf-modules/vf-module/supercool", "VfModularity/VfModule-supercool.xml", 200);
+		
+		String businessKey = UUID.randomUUID().toString();
+		Map<String, Object> variables = new HashMap<String, Object>();
+		variables.put("mso-request-id", "999-99-9999");
+		variables.put("isDebugLogEnabled","true");
+		variables.put("UpdateAAIVfModuleRequest", updateAAIVfModuleRequest);
+		invokeSubProcess("UpdateAAIVfModule", businessKey, variables);
+		
+		Assert.assertTrue(isProcessEnded(businessKey));
+		String response = (String) getVariableFromHistory(businessKey, "UAAIVfMod_updateVfModuleResponse");
+		Integer responseCode = (Integer) getVariableFromHistory(businessKey, "UAAIVfMod_updateVfModuleResponseCode");
+		System.out.println("Subflow response code: " + responseCode);
+		System.out.println("Subflow response: " + response);
+		Assert.assertEquals(404, responseCode.intValue());
+		
+		logEnd();
+	}
+}
+
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java
index c475213..46bbb72 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java
@@ -1,1796 +1,1796 @@
-/*- 
- * ============LICENSE_START======================================================= 
- * OPENECOMP - MSO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.openecomp.mso.bpmn.common;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.lang.management.ManagementFactory;
-import java.lang.management.RuntimeMXBean;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import javax.ws.rs.core.Response;
-import javax.xml.bind.JAXBException;
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.namespace.QName;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpression;
-import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathFactory;
-
-import org.camunda.bpm.engine.RuntimeService;
-import org.camunda.bpm.engine.history.HistoricProcessInstance;
-import org.camunda.bpm.engine.history.HistoricVariableInstance;
-import org.camunda.bpm.engine.runtime.ProcessInstance;
-import org.camunda.bpm.engine.test.ProcessEngineRule;
-import org.camunda.bpm.engine.variable.impl.VariableMapImpl;
-import org.custommonkey.xmlunit.DetailedDiff;
-import org.custommonkey.xmlunit.XMLUnit;
-import org.jboss.resteasy.spi.AsynchronousResponse;
-import org.junit.Before;
-import org.junit.Rule;
-import org.openecomp.mso.bpmn.common.adapter.sdnc.CallbackHeader;
-import org.openecomp.mso.bpmn.common.adapter.sdnc.SDNCAdapterCallbackRequest;
-import org.openecomp.mso.bpmn.common.adapter.sdnc.SDNCAdapterResponse;
-import org.openecomp.mso.bpmn.common.adapter.vnf.CreateVnfNotification;
-import org.openecomp.mso.bpmn.common.adapter.vnf.DeleteVnfNotification;
-import org.openecomp.mso.bpmn.common.adapter.vnf.MsoExceptionCategory;
-import org.openecomp.mso.bpmn.common.adapter.vnf.MsoRequest;
-import org.openecomp.mso.bpmn.common.adapter.vnf.UpdateVnfNotification;
-import org.openecomp.mso.bpmn.common.adapter.vnf.VnfRollback;
-import org.openecomp.mso.bpmn.common.workflow.service.SDNCAdapterCallbackServiceImpl;
-import org.openecomp.mso.bpmn.common.workflow.service.VnfAdapterNotifyServiceImpl;
-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowAsyncCommonResource;
-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowMessageResource;
-import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
-import org.openecomp.mso.bpmn.core.CamundaDBSetup;
-import org.openecomp.mso.bpmn.core.PropertyConfigurationSetup;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
-import com.github.tomakehurst.wiremock.extension.ResponseTransformer;
-import com.github.tomakehurst.wiremock.junit.WireMockRule;
-
-
-
-/**
- * A base class for Workflow tests.
- * <p>
- * WireMock response transformers may be specified by declaring public
- * static fields with the @WorkflowTestTransformer annotation. For example:
- * <pre>
- *     @WorkflowTestTransformer
- *     public static final ResponseTransformer sdncAdapterMockTransformer =
- *         new SDNCAdapterMockTransformer();
- * </pre>
- */
-public class WorkflowTest {
-	@Rule
-	public final ProcessEngineRule processEngineRule = new ProcessEngineRule();
-
-	@Rule
-	public final WireMockRule wireMockRule;
-
-	/**
-	 * Constructor.
-	 */
-	public WorkflowTest() throws RuntimeException {
-		// Process WorkflowTestTransformer annotations
-		List<ResponseTransformer> transformerList = new ArrayList<ResponseTransformer>();
-
-		for (Field field : getClass().getFields()) {
-			WorkflowTestTransformer annotation = (WorkflowTestTransformer)
-				field.getAnnotation(WorkflowTestTransformer.class);
-
-			if (annotation == null) {
-				continue;
-			}
-
-			if (!Modifier.isStatic(field.getModifiers())) {
-				throw new RuntimeException(field.getDeclaringClass().getName()
-					+ "#" + field.getName() + " has a @WorkflowTestTransformer "
-					+ " annotation but it is not declared static");
-			}
-
-			ResponseTransformer transformer;
-
-			try {
-				transformer = (ResponseTransformer) field.get(null);
-			} catch (IllegalAccessException e) {
-				throw new RuntimeException(field.getDeclaringClass().getName()
-					+ "#" + field.getName() + " is not accessible", e);
-			} catch (ClassCastException e) {
-				throw new RuntimeException(field.getDeclaringClass().getName()
-					+ "#" + field.getName() + " is not a ResponseTransformer", e);
-			}
-
-			if (transformer == null) {
-				continue;
-			}
-
-			transformerList.add(transformer);
-		}
-
-		ResponseTransformer[] transformerArray =
-			transformerList.toArray(new ResponseTransformer[transformerList.size()]);
-
-		wireMockRule = new WireMockRule(WireMockConfiguration.wireMockConfig()
-			.port(28090).extensions(transformerArray));
-	}
-
-	@Before
-	public void testSetup() throws Exception {
-		CamundaDBSetup.configure();
-		PropertyConfigurationSetup.init();
-	}
-
-	/**
-	 * The current request ID.  Normally set when an "invoke" method is called.
-	 */
-	protected volatile String msoRequestId = null;
-
-	/**
-	 * The current service instance ID.  Normally set when an "invoke" method
-	 * is called.
-	 */
-	protected volatile String msoServiceInstanceId = null;
-
-	/**
-	 * Logs a test start method.
-	 */
-	protected void logStart() {
-		StackTraceElement[] st = Thread.currentThread().getStackTrace();
-		String method = st[2].getMethodName();
-		System.out.println("STARTED TEST: " + method);
-	}
-
-	/**
-	 * Logs a test end method.
-	 */
-	protected void logEnd() {
-		StackTraceElement[] st = Thread.currentThread().getStackTrace();
-		String method = st[2].getMethodName();
-		System.out.println("ENDED TEST: " + method);
-	}
-
-	/**
-	 * Invokes a subprocess.
-	 * @param processKey the process key
-	 * @param businessKey a unique key that will identify the process instance
-	 * @param injectedVariables variables to inject into the process
-	 */
-	protected void invokeSubProcess(String processKey, String businessKey,
-			Map<String, Object> injectedVariables) {
-		RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
-		List<String> arguments = runtimeMxBean.getInputArguments();
-		System.out.println("JVM args = " + arguments);
-
-		msoRequestId = (String) injectedVariables.get("mso-request-id");
-
-		if (msoRequestId == null) {
-			String msg = "mso-request-id variable was not provided";
-			System.out.println(msg);
-			fail(msg);
-		}
-
-		// Note: some scenarios don't have a service-instance-id, may be null
-		msoServiceInstanceId = (String) injectedVariables.get("mso-service-instance-id");
-
-		RuntimeService runtimeService = processEngineRule.getRuntimeService();
-		runtimeService.startProcessInstanceByKey(processKey, businessKey, injectedVariables);
-	}
-
-	/**
-	 * Invokes an asynchronous process.
-	 * Errors are handled with junit assertions and will cause the test to fail.
-	 * @param processKey the process key
-	 * @param schemaVersion the API schema version, e.g. "v1"
-	 * @param businessKey a unique key that will identify the process instance
-	 * @param request the request
-	 * @return a TestAsyncResponse object associated with the test
-	 */
-	protected TestAsyncResponse invokeAsyncProcess(String processKey,
-			String schemaVersion, String businessKey, String request) {
-		return invokeAsyncProcess(processKey, schemaVersion, businessKey, request, null);
-	}
-
-	/**
-	 * Invokes an asynchronous process.
-	 * Errors are handled with junit assertions and will cause the test to fail.
-	 * @param processKey the process key
-	 * @param schemaVersion the API schema version, e.g. "v1"
-	 * @param businessKey a unique key that will identify the process instance
-	 * @param request the request
-	 * @param injectedVariables optional variables to inject into the process
-	 * @return a TestAsyncResponse object associated with the test
-	 */
-	public TestAsyncResponse invokeAsyncProcess(String processKey,
-			String schemaVersion, String businessKey, String request,
-			Map<String, Object> injectedVariables) {
-
-		RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
-		List<String> arguments = runtimeMxBean.getInputArguments();
-		System.out.println("JVM args = " + arguments);
-
-		Map<String, Object> variables = createVariables(schemaVersion, businessKey,
-			request, injectedVariables, false);
-		VariableMapImpl variableMapImpl = createVariableMapImpl(variables);
-
-		System.out.println("Sending " + request + " to " + processKey + " process");
-		WorkflowAsyncCommonResource workflowResource = new WorkflowAsyncCommonResource();
-		workflowResource.setProcessEngineServices4junit(processEngineRule);
-
-		TestAsyncResponse asyncResponse = new TestAsyncResponse();
-		workflowResource.startProcessInstanceByKey(asyncResponse, processKey, variableMapImpl);
-		return asyncResponse;
-	}
-
-	/**
-	 * Invokes an asynchronous process.
-	 * Errors are handled with junit assertions and will cause the test to fail.
-	 * @param processKey the process key
-	 * @param schemaVersion the API schema version, e.g. "v1"
-	 * @param businessKey a unique key that will identify the process instance
-	 * @param request the request
-	 * @param injectedVariables optional variables to inject into the process
-	 * @param serviceInstantiationModel indicates whether this method is being
-	 * invoked for a flow that is designed using the service instantiation model
-	 * @return a TestAsyncResponse object associated with the test
-	 */
-	protected TestAsyncResponse invokeAsyncProcess(String processKey,
-			String schemaVersion, String businessKey, String request,
-			Map<String, Object> injectedVariables, boolean serviceInstantiationModel) {
-
-		RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
-		List<String> arguments = runtimeMxBean.getInputArguments();
-		System.out.println("JVM args = " + arguments);
-
-		Map<String, Object> variables = createVariables(schemaVersion, businessKey,
-			request, injectedVariables, serviceInstantiationModel);
-		VariableMapImpl variableMapImpl = createVariableMapImpl(variables);
-
-		System.out.println("Sending " + request + " to " + processKey + " process");
-		WorkflowAsyncCommonResource workflowResource = new WorkflowAsyncCommonResource();
-		workflowResource.setProcessEngineServices4junit(processEngineRule);
-
-		TestAsyncResponse asyncResponse = new TestAsyncResponse();
-		workflowResource.startProcessInstanceByKey(asyncResponse, processKey, variableMapImpl);
-		return asyncResponse;
-	}
-
-	/**
-	 * Private helper method that creates a variable map for a request.
-	 * Errors are handled with junit assertions and will cause the test to fail.
-	 * @param schemaVersion the API schema version, e.g. "v1"
-	 * @param businessKey a unique key that will identify the process instance
-	 * @param request the request
-	 * @param injectedVariables optional variables to inject into the process
-	 * @param serviceInstantiationModel indicates whether this method is being
-	 * invoked for a flow that is designed using the service instantiation model
-	 * @return a variable map
-	 */
-	private Map<String, Object> createVariables(String schemaVersion,
-			String businessKey, String request, Map<String, Object> injectedVariables,
-			boolean serviceInstantiationModel) {
-
-		Map<String, Object> variables = new HashMap<String, Object>();
-
-		// These variables may be overridded by injected variables.
-		variables.put("mso-service-request-timeout", "180");
-		variables.put("isDebugLogEnabled", "true");
-
-		// These variables may not be overridded by injected variables.
-		String[] notAllowed = new String[] {
-				"mso-schema-version",
-				"mso-business-key",
-				"bpmnRequest",
-				"mso-request-id",
-				"mso-service-instance-id"
-		};
-
-		if (injectedVariables != null) {
-			for (String key : injectedVariables.keySet()) {
-				for (String var : notAllowed) {
-					if (var.equals(key)) {
-						String msg = "Cannot specify " + var + " in injected variables";
-						System.out.println(msg);
-						fail(msg);
-					}
-				}
-
-				variables.put(key, injectedVariables.get(key));
-			}
-		}
-
-		variables.put("mso-schema-version", schemaVersion);
-		variables.put("mso-business-key", businessKey);
-		variables.put("bpmnRequest", request);
-
-		if (serviceInstantiationModel) {
-
-			/*
-			 * The request ID and the service instance ID are generated for flows
-			 * that follow the service instantiation model unless "requestId" and
-			 * "serviceInstanceId" are injected variables.
-			 */
-
-			try {
-				msoRequestId = (String) injectedVariables.get("requestId");
-				variables.put("mso-request-id", msoRequestId);
-				msoServiceInstanceId = (String) injectedVariables.get("serviceInstanceId");
-				variables.put("mso-service-instance-id", msoServiceInstanceId);
-			}
-			catch(Exception e) {
-			}
-			if (msoRequestId == null || msoRequestId.trim().equals("")) {
-				System.out.println("No requestId element in injectedVariables");
-				variables.put("mso-request-id", UUID.randomUUID().toString());
-			}
-			if (msoServiceInstanceId == null || msoServiceInstanceId.trim().equals("")) {
-				System.out.println("No seviceInstanceId element in injectedVariables");
-				variables.put("mso-service-instance-id", UUID.randomUUID().toString());
-			}
-
-		} else {
-			msoRequestId = getXMLTextElement(request, "request-id");
-
-			if (msoRequestId == null) {
-				//check in injected variables
-				try {
-					msoRequestId = (String) injectedVariables.get("requestId");
-				}
-				catch(Exception e) {
-				}
-				if (msoRequestId == null || msoRequestId.trim().equals("")) {
-					String msg = "No request-id element in " + request;
-					System.out.println(msg);
-					fail(msg);
-				}
-			}
-
-			variables.put("mso-request-id", msoRequestId);
-
-			// Note: some request types don't have a service-instance-id
-			msoServiceInstanceId = getXMLTextElement(request, "service-instance-id");
-
-			if (msoServiceInstanceId != null) {
-				variables.put("mso-service-instance-id", msoServiceInstanceId);
-			}
-		}
-
-		return variables;
-	}
-
-	/**
-	 * Private helper method that creates a camunda VariableMapImpl from a simple
-	 * variable map.
-	 * @param variables the simple variable map
-	 * @return a VariableMap
-	 */
-	private VariableMapImpl createVariableMapImpl(Map<String, Object> variables) {
-		Map<String, Object> wrappedVariables = new HashMap<String, Object>();
-
-		for (String key : variables.keySet()) {
-			Object value = variables.get(key);
-			wrappedVariables.put(key, wrapVariableValue(value));
-		}
-
-		VariableMapImpl variableMapImpl = new VariableMapImpl();
-		variableMapImpl.put("variables", wrappedVariables);
-		return variableMapImpl;
-	}
-
-	/**
-	 * Private helper method that wraps a variable value for inclusion in a
-	 * camunda VariableMapImpl.
-	 * @param value the variable value
-	 * @return the wrapped variable
-	 */
-	private Map<String, Object> wrapVariableValue(Object value) {
-		HashMap<String, Object> valueMap = new HashMap<String, Object>();
-		valueMap.put("value", value);
-		return valueMap;
-	}
-
-	/**
-	 * Receives a response from an asynchronous process.
-	 * Errors are handled with junit assertions and will cause the test to fail.
-	 * @param businessKey the process business key
-	 * @param asyncResponse the TestAsyncResponse object associated with the test
-	 * @param timeout the timeout in milliseconds
-	 * @return the WorkflowResponse
-	 */
-	public WorkflowResponse receiveResponse(String businessKey,
-			TestAsyncResponse asyncResponse, long timeout) {
-		System.out.println("Waiting " + timeout + "ms for process with business key " + businessKey
-			+ " to send a response");
-
-		long now = System.currentTimeMillis() + timeout;
-		long endTime = now + timeout;
-
-		while (now <= endTime) {
-			Response response = asyncResponse.getResponse();
-
-			if (response != null) {
-				System.out.println("Received a response from process with business key " + businessKey);
-
-				Object entity = response.getEntity();
-
-				if (!(entity instanceof WorkflowResponse)) {
-					String msg = "Response entity is " +
-						(entity == null ? "null" : entity.getClass().getName()) +
-						", expected WorkflowResponse";
-					System.out.println(msg);
-					fail(msg);
-					return null; // unreachable
-				}
-
-				return (WorkflowResponse) entity;
-			}
-
-			try {
-				Thread.sleep(200);
-			} catch (InterruptedException e) {
-				String msg = "Interrupted waiting for a response from process with business key " +
-					businessKey;
-				System.out.println(msg);
-				fail(msg);
-				return null; // unreachable
-			}
-
-			now = System.currentTimeMillis();
-		}
-
-		String msg = "No response received from process with business key " + businessKey +
-			" within " + timeout + "ms";
-		System.out.println(msg);
-		fail("Process with business key " + businessKey + " did not end within 10000ms");
-		return null; // unreachable
-	}
-
-	/**
-	 * Runs a program to inject SDNC callback data into the test environment.
-	 * A program is essentially just a list of keys that identify callback data
-	 * to be injected, in sequence. An example program:
-	 * <pre>
-	 *     reserve, assign, delete:ERR
-	 * </pre>
-	 * Errors are handled with junit assertions and will cause the test to fail.
-	 * @param callbacks an object containing callback data for the program
-	 * @param program the program to execute
-	 */
-	protected void injectSDNCRestCallbacks(CallbackSet callbacks, String program) {
-
-		String[] cmds = program.replaceAll("\\s+", "").split(",");
-
-		for (String cmd : cmds) {
-			String action = cmd;
-			String modifier = "STD";
-
-			if (cmd.contains(":")) {
-				String[] parts = cmd.split(":");
-				action = parts[0];
-				modifier = parts[1];
-			}
-
-			String content = null;
-
-			if ("STD".equals(modifier)) {
-				content = callbacks.get(action);
-
-				if (content == null) {
-					String msg = "No callback defined for '" + action + "' SDNC request";
-					System.out.println(msg);
-					fail(msg);
-				}
-			} else if ("ERR".equals(modifier)) {
-				content = "{\"SDNCServiceError\":{\"sdncRequestId\":\"((REQUEST-ID))\",\"responseCode\":\"500\",\"responseMessage\":\"SIMULATED ERROR FROM SDNC ADAPTER\",\"ackFinalIndicator\":\"Y\"}}";
-			} else {
-				String msg = "Invalid SDNC program modifier: '" + modifier + "'";
-				System.out.println(msg);
-				fail(msg);
-			}
-
-			if (!injectSDNCRestCallback(content, 10000)) {
-				fail("Failed to inject SDNC '" + action + "' callback");
-			}
-
-			try {
-				Thread.sleep(1000);
-			} catch (InterruptedException e) {
-				fail("Interrupted after injection of SDNC '" + action + "' callback");
-			}
-		}
-	}
-
-	/**
-	 * Runs a program to inject SDNC events into the test environment.
-	 * A program is essentially just a list of keys that identify event data
-	 * to be injected, in sequence. An example program:
-	 * <pre>
-	 *     event1, event2
-	 * </pre>
-	 * Errors are handled with junit assertions and will cause the test to fail.
-	 * Defaults the Event Type to "SDNCAEvent" for backward compatibility.
-	 * @param callbacks an object containing event data for the program
-	 * @param program the program to execute
-	 */
-	protected void injectSDNCEvents(CallbackSet callbacks, String program) {
-		injectSDNCEvents(callbacks, program, "SDNCAEvent");
-	}
-
-	/**
-	 * Runs a program to inject SDNC events into the test environment.
-	 * A program is essentially just a list of keys that identify event data
-	 * to be injected, in sequence. An example program:
-	 * <pre>
-	 *     event1, event2
-	 * </pre>
-	 * Errors are handled with junit assertions and will cause the test to fail.
-	 * @param callbacks an object containing event data for the program
-	 * @param program the program to execute
-	 * @param eventType (i.e. "SDNCAEvent", "SNIROResponse", etc.)
-	 */
-	protected void injectSDNCEvents(CallbackSet callbacks, String program, String eventType) {
-
-		String[] cmds = program.replaceAll("\\s+", "").split(",");
-
-		for (String cmd : cmds) {
-			String action = cmd;
-			String modifier = "STD";
-
-			if (cmd.contains(":")) {
-				String[] parts = cmd.split(":");
-				action = parts[0];
-				modifier = parts[1];
-			}
-
-			String content = null;
-
-			if ("STD".equals(modifier)) {
-				content = callbacks.get(action);
-
-				if (content == null) {
-					String msg = "No SDNC event callback defined for '" + action + "'";
-					System.out.println(msg);
-					fail(msg);
-				}
-			} else {
-				String msg = "Invalid SDNC program modifier: '" + modifier + "'";
-				System.out.println(msg);
-				fail(msg);
-			}
-
-			if (!injectWorkflowMessage(eventType, content, 10000)) {
-				fail("Failed to inject SDNC '" + action + "' event");
-			}
-
-			try {
-				Thread.sleep(1000);
-			} catch (InterruptedException e) {
-				fail("Interrupted after injection of SDNC '" + action + "' event");
-			}
-		}
-	}
-
-	/**
-	 * Runs a program to inject SDNC callback data into the test environment.
-	 * A program is essentially just a list of keys that identify callback data
-	 * to be injected, in sequence. An example program:
-	 * <pre>
-	 *     reserve, assign, delete:ERR
-	 * </pre>
-	 * Errors are handled with junit assertions and will cause the test to fail.
-	 * @param callbacks an object containing callback data for the program
-	 * @param program the program to execute
-	 */
-	public void injectSDNCCallbacks(CallbackSet callbacks, String program) {
-
-		String[] cmds = program.replaceAll("\\s+", "").split(",");
-
-		for (String cmd : cmds) {
-			String action = cmd;
-			String modifier = "STD";
-
-			if (cmd.contains(":")) {
-				String[] parts = cmd.split(":");
-				action = parts[0];
-				modifier = parts[1];
-			}
-
-			String content = null;
-			int respCode = 200;
-			String respMsg = "OK";
-
-			if ("STD".equals(modifier)) {
-				content = callbacks.get(action);
-
-				if (content == null) {
-					String msg = "No callback defined for '" + action + "' SDNC request";
-					System.out.println(msg);
-					fail(msg);
-				}
-
-				respCode = 200;
-				respMsg = "OK";
-			} else if ("ERR".equals(modifier)) {
-				content = "<svc-request-id>((REQUEST-ID))</svc-request-id><response-code>500</response-code><response-message>SIMULATED ERROR FROM SDNC ADAPTER</response-message>";
-				respCode = 500;
-				respMsg = "SERVER ERROR";
-			} else {
-				String msg = "Invalid SDNC program modifier: '" + modifier + "'";
-				System.out.println(msg);
-				fail(msg);
-			}
-
-			if (!injectSDNCCallback(respCode, respMsg, content, 10000)) {
-				fail("Failed to inject SDNC '" + action + "' callback");
-			}
-
-			try {
-				Thread.sleep(1000);
-			} catch (InterruptedException e) {
-				fail("Interrupted after injection of SDNC '" + action + "' callback");
-			}
-		}
-	}
-
-	/**
-	 * Runs a program to inject VNF adapter REST callback data into the test environment.
-	 * A program is essentially just a list of keys that identify callback data
-	 * to be injected, in sequence. An example program:
-	 * <pre>
-	 *     create, rollback
-	 * </pre>
-	 * Errors are handled with junit assertions and will cause the test to fail.
-	 * @param callbacks an object containing callback data for the program
-	 * @param program the program to execute
-	 */
-	public void injectVNFRestCallbacks(CallbackSet callbacks, String program) {
-
-		String[] cmds = program.replaceAll("\\s+", "").split(",");
-
-		for (String cmd : cmds) {
-			String action = cmd;
-			String modifier = "STD";
-
-			if (cmd.contains(":")) {
-				String[] parts = cmd.split(":");
-				action = parts[0];
-				modifier = parts[1];
-			}
-
-			String content = null;
-
-			if ("STD".equals(modifier)) {
-				content = callbacks.get(action);
-
-				if (content == null) {
-					String msg = "No callback defined for '" + action + "' VNF REST request";
-					System.out.println(msg);
-					fail(msg);
-				}
-			} else if ("ERR".equals(modifier)) {
-				content = "SIMULATED ERROR FROM VNF ADAPTER";
-			} else {
-				String msg = "Invalid VNF REST program modifier: '" + modifier + "'";
-				System.out.println(msg);
-				fail(msg);
-			}
-
-			if (!injectVnfAdapterRestCallback(content, 10000)) {
-				fail("Failed to inject VNF REST '" + action + "' callback");
-			}
-
-			try {
-				Thread.sleep(1000);
-			} catch (InterruptedException e) {
-				fail("Interrupted after injection of VNF REST '" + action + "' callback");
-			}
-		}
-	}
-
-	/**
-	 * Runs a program to inject VNF callback data into the test environment.
-	 * A program is essentially just a list of keys that identify callback data
-	 * to be injected, in sequence. An example program:
-	 * <pre>
-	 *     createVnf, deleteVnf
-	 * </pre>
-	 * Errors are handled with junit assertions and will cause the test to fail.
-	 * @param callbacks an object containing callback data for the program
-	 * @param program the program to execute
-	 */
-	protected void injectVNFCallbacks(CallbackSet callbacks, String program) {
-
-		String[] cmds = program.replaceAll("\\s+", "").split(",");
-
-		for (String cmd : cmds) {
-			String action = cmd;
-			String modifier = "STD";
-
-			if (cmd.contains(":")) {
-				String[] parts = cmd.split(":");
-				action = parts[0];
-				modifier = parts[1];
-			}
-
-			String content = null;
-
-			if ("STD".equals(modifier)) {
-				content = callbacks.get(action);
-
-				if (content == null) {
-					String msg = "No callback defined for '" + action + "' VNF request";
-					System.out.println(msg);
-					fail(msg);
-				}
-
-			} else if ("ERR".equals(modifier)) {
-				String msg = "Currently unsupported VNF program modifier: '" + modifier + "'";
-				System.out.println(msg);
-				fail(msg);
-			} else {
-				String msg = "Invalid VNF program modifier: '" + modifier + "'";
-				System.out.println(msg);
-				fail(msg);
-			}
-
-			boolean injected = false;
-
-			if (content.contains("createVnfNotification")) {
-				injected = injectCreateVNFCallback(content, 10000);
-			} else if (content.contains("deleteVnfNotification")) {
-				injected = injectDeleteVNFCallback(content, 10000);
-			} else if (content.contains("updateVnfNotification")) {
-				injected = injectUpdateVNFCallback(content, 10000);
-			}
-
-			if (!injected) {
-				String msg = "Failed to inject VNF '" + action + "' callback";
-				System.out.println(msg);
-				fail(msg);
-			}
-
-			try {
-				Thread.sleep(1000);
-			} catch (InterruptedException e) {
-				fail("Interrupted after injection of VNF '" + action + "' callback");
-			}
-		}
-	}
-
-	/**
-	 * Waits for the number of running processes with the specified process
-	 * definition key to equal a particular count.
-	 * @param processKey the process definition key
-	 * @param count the desired count
-	 * @param timeout the timeout in milliseconds
-	 */
-	public void waitForRunningProcessCount(String processKey, int count, long timeout) {
-		System.out.println("Waiting " + timeout + "ms for there to be " + count + " "
-			+ processKey + " instances");
-
-		long now = System.currentTimeMillis() + timeout;
-		long endTime = now + timeout;
-		int last = -1;
-
-		while (now <= endTime) {
-			int actual = processEngineRule.getRuntimeService()
-				.createProcessInstanceQuery()
-				.processDefinitionKey(processKey)
-				.list().size();
-
-			if (actual != last) {
-				System.out.println("There are now " + actual + " "
-					+ processKey + " instances");
-				last = actual;
-			}
-
-			if (actual == count) {
-				return;
-			}
-
-			try {
-				Thread.sleep(200);
-			} catch (InterruptedException e) {
-				String msg = "Interrupted waiting for there to be " + count + " "
-					+ processKey + " instances";
-				System.out.println(msg);
-				fail(msg);
-			}
-
-			now = System.currentTimeMillis();
-		}
-
-		String msg = "Timed out waiting for there to be " + count + " "
-			+ processKey + " instances";
-		System.out.println(msg);
-		fail(msg);
-	}
-
-	/**
-	 * Waits for the specified process variable to be set.
-	 * @param processKey the process definition key
-	 * @param variable the variable name
-	 * @param timeout the timeout in milliseconds
-	 * @return the variable value, or null if it cannot be obtained
-	 *         in the specified time
-	 */
-	protected Object getProcessVariable(String processKey, String variable,
-			long timeout) {
-
-		System.out.println("Waiting " + timeout + "ms for "
-			+ processKey + "." + variable + " to be set");
-
-		long now = System.currentTimeMillis() + timeout;
-		long endTime = now + timeout;
-
-		ProcessInstance processInstance = null;
-		Object value = null;
-
-		while (value == null) {
-			if (now > endTime) {
-				if (processInstance == null) {
-					System.out.println("Timed out waiting for "
-						+ processKey + " to start");
-				} else {
-					System.out.println("Timed out waiting for "
-						+ processKey + "[" + processInstance.getId()
-						+ "]." + variable + " to be set");
-				}
-
-				return null;
-			}
-
-			if (processInstance == null) {
-				processInstance = processEngineRule.getRuntimeService()
-					.createProcessInstanceQuery()
-					.processDefinitionKey(processKey)
-					.singleResult();
-			}
-
-			if (processInstance != null) {
-				value = processEngineRule.getRuntimeService()
-					.getVariable(processInstance.getId(), variable);
-			}
-
-			try {
-				Thread.sleep(200);
-			} catch (InterruptedException e) {
-				System.out.println("Interrupted waiting for "
-					+ processKey + "." + variable + " to be set");
-				return null;
-			}
-
-			now = System.currentTimeMillis();
-		}
-
-		System.out.println(processKey + "["
-			+ processInstance.getId() + "]." + variable + "="
-			+ value);
-
-		return value;
-	}
-
-	/**
-	 * Injects a single SDNC adapter callback request. The specified callback data
-	 * may contain the placeholder string ((REQUEST-ID)) which is replaced with
-	 * the actual SDNC request ID. Note: this is not the requestId in the original
-	 * MSO request.
-	 * @param content the content of the callback
-	 * @param timeout the timeout in milliseconds
-	 * @return true if the callback could be injected, false otherwise
-	 */
-	protected boolean injectSDNCRestCallback(String content, long timeout) {
-		String sdncRequestId = (String) getProcessVariable("SDNCAdapterRestV1",
-			"SDNCAResponse_CORRELATOR", timeout);
-
-		if (sdncRequestId == null) {
-			return false;
-		}
-
-		content = content.replace("((REQUEST-ID))", sdncRequestId);
-		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
-		content = content.replace("{{REQUEST-ID}}", sdncRequestId);
-
-		System.out.println("Injecting SDNC adapter callback");
-		WorkflowMessageResource workflowMessageResource = new WorkflowMessageResource();
-		workflowMessageResource.setProcessEngineServices4junit(processEngineRule);
-		Response response = workflowMessageResource.deliver("SDNCAResponse", sdncRequestId, content);
-		System.out.println("Workflow response to SDNC adapter callback: " + response);
-		return true;
-	}
-
-	/**
-	 * Injects a single SDNC adapter callback request. The specified callback data
-	 * may contain the placeholder string ((REQUEST-ID)) which is replaced with
-	 * the actual SDNC request ID. Note: this is not the requestId in the original
-	 * MSO request.
-	 * @param content the content of the callback
-	 * @param respCode the response code (normally 200)
-	 * @param respMsg the response message (normally "OK")
-	 * @param timeout the timeout in milliseconds
-	 * @return true if the callback could be injected, false otherwise
-	 */
-	protected boolean injectSDNCCallback(int respCode, String respMsg,
-			String content, long timeout) {
-
-		String sdncRequestId = (String) getProcessVariable("sdncAdapter",
-			"SDNCA_requestId", timeout);
-
-		if (sdncRequestId == null) {
-			return false;
-		}
-
-		content = content.replace("((REQUEST-ID))", sdncRequestId);
-		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
-		content = content.replace("{{REQUEST-ID}}", sdncRequestId);
-
-		System.out.println("Injecting SDNC adapter callback");
-		CallbackHeader callbackHeader = new CallbackHeader();
-		callbackHeader.setRequestId(sdncRequestId);
-		callbackHeader.setResponseCode(String.valueOf(respCode));
-		callbackHeader.setResponseMessage(respMsg);
-		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();
-		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);
-		sdncAdapterCallbackRequest.setRequestData(content);
-		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();
-		callbackService.setProcessEngineServices4junit(processEngineRule);
-		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
-		System.out.println("Workflow response to SDNC adapter callback: " + sdncAdapterResponse);
-
-		return true;
-	}
-
-	/**
-	 * Injects a single VNF adapter callback request. The specified callback data
-	 * may contain the placeholder string ((MESSAGE-ID)) which is replaced with
-	 * the actual message ID. Note: this is not the requestId in the original
-	 * MSO request.
-	 * @param content the content of the callback
-	 * @param timeout the timeout in milliseconds
-	 * @return true if the callback could be injected, false otherwise
-	 */
-	protected boolean injectVnfAdapterRestCallback(String content, long timeout) {
-		String messageId = (String) getProcessVariable("vnfAdapterRestV1",
-			"VNFAResponse_CORRELATOR", timeout);
-
-		if (messageId == null) {
-			return false;
-		}
-
-		content = content.replace("((MESSAGE-ID))", messageId);
-		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
-		content = content.replace("{{MESSAGE-ID}}", messageId);
-
-		System.out.println("Injecting VNF adapter callback");
-		WorkflowMessageResource workflowMessageResource = new WorkflowMessageResource();
-		workflowMessageResource.setProcessEngineServices4junit(processEngineRule);
-		Response response = workflowMessageResource.deliver("VNFAResponse", messageId, content);
-		System.out.println("Workflow response to VNF adapter callback: " + response);
-		return true;
-	}
-
-	/**
-	 * Injects a Create VNF adapter callback request. The specified callback data
-	 * may contain the placeholder string ((MESSAGE-ID)) which is replaced with
-	 * the actual message ID.  It may also contain the placeholder string
-	 * ((REQUEST-ID)) which is replaced request ID of the original MSO request.
-	 * @param content the content of the callback
-	 * @param timeout the timeout in milliseconds
-	 * @return true if the callback could be injected, false otherwise
-	 * @throws JAXBException if the content does not adhere to the schema
-	 */
-	protected boolean injectCreateVNFCallback(String content, long timeout) {
-
-		String messageId = (String) getProcessVariable("vnfAdapterCreateV1",
-			"VNFC_messageId", timeout);
-
-		if (messageId == null) {
-			return false;
-		}
-
-		content = content.replace("((MESSAGE-ID))", messageId);
-		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
-		content = content.replace("{{MESSAGE-ID}}", messageId);
-
-		if(content.contains("((REQUEST-ID))")){
-			content = content.replace("((REQUEST-ID))", msoRequestId);
-		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
-			content = content.replace("{{REQUEST-ID}}", msoRequestId);
-		}
-
-		System.out.println("Injecting VNF adapter callback");
-
-		// Is it possible to unmarshal this with JAXB?  I couldn't.
-
-		CreateVnfNotification createVnfNotification = new CreateVnfNotification();
-		XPathTool xpathTool = new VnfNotifyXPathTool();
-		xpathTool.setXML(content);
-
-		try {
-			String completed = xpathTool.evaluate(
-				"/tns:createVnfNotification/tns:completed/text()");
-			createVnfNotification.setCompleted("true".equals(completed));
-
-			String vnfId = xpathTool.evaluate(
-				"/tns:createVnfNotification/tns:vnfId/text()");
-			createVnfNotification.setVnfId(vnfId);
-
-			NodeList entries = (NodeList) xpathTool.evaluate(
-				"/tns:createVnfNotification/tns:outputs/tns:entry",
-				XPathConstants.NODESET);
-
-			CreateVnfNotificationOutputs outputs = new CreateVnfNotificationOutputs();
-
-			for (int i = 0; i < entries.getLength(); i++) {
-				Node node = entries.item(i);
-
-				if (node.getNodeType() == Node.ELEMENT_NODE) {
-					Element entry = (Element) node;
-					String key = entry.getElementsByTagNameNS("*", "key").item(0).getTextContent();
-					String value = entry.getElementsByTagNameNS("*", "value").item(0).getTextContent();
-					outputs.add(key, value);
-				}
-			}
-
-			createVnfNotification.setOutputs(outputs);
-
-			VnfRollback rollback = new VnfRollback();
-
-			String cloudSiteId = xpathTool.evaluate(
-				"/tns:createVnfNotification/tns:rollback/tns:cloudSiteId/text()");
-			rollback.setCloudSiteId(cloudSiteId);
-
-			String requestId = xpathTool.evaluate(
-				"/tns:createVnfNotification/tns:rollback/tns:msoRequest/tns:requestId/text()");
-			String serviceInstanceId = xpathTool.evaluate(
-				"/tns:createVnfNotification/tns:rollback/tns:msoRequest/tns:serviceInstanceId/text()");
-
-			if (requestId != null || serviceInstanceId != null) {
-				MsoRequest msoRequest = new MsoRequest();
-				msoRequest.setRequestId(requestId);
-				msoRequest.setServiceInstanceId(serviceInstanceId);
-				rollback.setMsoRequest(msoRequest);
-			}
-
-			String tenantCreated = xpathTool.evaluate(
-				"/tns:createVnfNotification/tns:rollback/tns:tenantCreated/text()");
-			rollback.setTenantCreated("true".equals(tenantCreated));
-
-			String tenantId = xpathTool.evaluate(
-				"/tns:createVnfNotification/tns:rollback/tns:tenantId/text()");
-			rollback.setTenantId(tenantId);
-
-			String vnfCreated = xpathTool.evaluate(
-				"/tns:createVnfNotification/tns:rollback/tns:vnfCreated/text()");
-			rollback.setVnfCreated("true".equals(vnfCreated));
-
-			String rollbackVnfId = xpathTool.evaluate(
-				"/tns:createVnfNotification/tns:rollback/tns:vnfId/text()");
-			rollback.setVnfId(rollbackVnfId);
-
-			createVnfNotification.setRollback(rollback);
-
-		} catch (Exception e) {
-			System.out.println("Failed to unmarshal VNF callback content:");
-			System.out.println(content);
-			return false;
-		}
-
-		VnfAdapterNotifyServiceImpl notifyService = new VnfAdapterNotifyServiceImpl();
-		notifyService.setProcessEngineServices4junit(processEngineRule);
-
-		notifyService.createVnfNotification(
-			messageId,
-			createVnfNotification.isCompleted(),
-			createVnfNotification.getException(),
-			createVnfNotification.getErrorMessage(),
-			createVnfNotification.getVnfId(),
-			createVnfNotification.getOutputs(),
-			createVnfNotification.getRollback());
-
-		return true;
-	}
-
-	/**
-	 * Injects a Delete VNF adapter callback request. The specified callback data
-	 * may contain the placeholder string ((MESSAGE-ID)) which is replaced with
-	 * the actual message ID.  It may also contain the placeholder string
-	 * ((REQUEST-ID)) which is replaced request ID of the original MSO request.
-	 * @param content the content of the callback
-	 * @param timeout the timeout in milliseconds
-	 * @return true if the callback could be injected, false otherwise
-	 * @throws JAXBException if the content does not adhere to the schema
-	 */
-	protected boolean injectDeleteVNFCallback(String content, long timeout) {
-
-		String messageId = (String) getProcessVariable("vnfAdapterDeleteV1",
-			"VNFDEL_uuid", timeout);
-
-		if (messageId == null) {
-			return false;
-		}
-
-		content = content.replace("((MESSAGE-ID))", messageId);
-		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
-		content = content.replace("{{MESSAGE-ID}}", messageId);
-
-		System.out.println("Injecting VNF adapter delete callback");
-
-		// Is it possible to unmarshal this with JAXB?  I couldn't.
-
-		DeleteVnfNotification deleteVnfNotification = new DeleteVnfNotification();
-		XPathTool xpathTool = new VnfNotifyXPathTool();
-		xpathTool.setXML(content);
-
-		try {
-			String completed = xpathTool.evaluate(
-				"/tns:deleteVnfNotification/tns:completed/text()");
-			deleteVnfNotification.setCompleted("true".equals(completed));
-			// if notification failure, set the exception and error message
-			if (deleteVnfNotification.isCompleted() == false) {
-				deleteVnfNotification.setException(MsoExceptionCategory.INTERNAL);
-				deleteVnfNotification.setErrorMessage(xpathTool.evaluate(
-						"/tns:deleteVnfNotification/tns:errorMessage/text()")) ;
-			}
-
-		} catch (Exception e) {
-			System.out.println("Failed to unmarshal VNF Delete callback content:");
-			System.out.println(content);
-			return false;
-		}
-
-		VnfAdapterNotifyServiceImpl notifyService = new VnfAdapterNotifyServiceImpl();
-		notifyService.setProcessEngineServices4junit(processEngineRule);
-
-		notifyService.deleteVnfNotification(
-			messageId,
-			deleteVnfNotification.isCompleted(),
-			deleteVnfNotification.getException(),
-			deleteVnfNotification.getErrorMessage());
-
-		return true;
-	}
-
-	/**
-	 * Injects a Update VNF adapter callback request. The specified callback data
-	 * may contain the placeholder string ((MESSAGE-ID)) which is replaced with
-	 * the actual message ID.  It may also contain the placeholder string
-	 * ((REQUEST-ID)) which is replaced request ID of the original MSO request.
-	 * @param content the content of the callback
-	 * @param timeout the timeout in milliseconds
-	 * @return true if the callback could be injected, false otherwise
-	 * @throws JAXBException if the content does not adhere to the schema
-	 */
-	protected boolean injectUpdateVNFCallback(String content, long timeout) {
-
-		String messageId = (String) getProcessVariable("vnfAdapterUpdate",
-			"VNFU_messageId", timeout);
-
-		if (messageId == null) {
-			return false;
-		}
-
-		content = content.replace("((MESSAGE-ID))", messageId);
-		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
-		content = content.replace("{{MESSAGE-ID}}", messageId);
-
-		content = content.replace("((REQUEST-ID))", msoRequestId);
-		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
-		content = content.replace("{{REQUEST-ID}}", msoRequestId);
-
-		System.out.println("Injecting VNF adapter callback");
-
-		// Is it possible to unmarshal this with JAXB?  I couldn't.
-
-		UpdateVnfNotification updateVnfNotification = new UpdateVnfNotification();
-		XPathTool xpathTool = new VnfNotifyXPathTool();
-		xpathTool.setXML(content);
-
-		try {
-			String completed = xpathTool.evaluate(
-				"/tns:updateVnfNotification/tns:completed/text()");
-			updateVnfNotification.setCompleted("true".equals(completed));
-
-			NodeList entries = (NodeList) xpathTool.evaluate(
-				"/tns:updateVnfNotification/tns:outputs/tns:entry",
-				XPathConstants.NODESET);
-
-			UpdateVnfNotificationOutputs outputs = new UpdateVnfNotificationOutputs();
-
-			for (int i = 0; i < entries.getLength(); i++) {
-				Node node = entries.item(i);
-
-				if (node.getNodeType() == Node.ELEMENT_NODE) {
-					Element entry = (Element) node;
-					String key = entry.getElementsByTagNameNS("*", "key").item(0).getTextContent();
-					String value = entry.getElementsByTagNameNS("*", "value").item(0).getTextContent();
-					outputs.add(key, value);
-				}
-			}
-
-			updateVnfNotification.setOutputs(outputs);
-
-			VnfRollback rollback = new VnfRollback();
-
-			String cloudSiteId = xpathTool.evaluate(
-				"/tns:updateVnfNotification/tns:rollback/tns:cloudSiteId/text()");
-			rollback.setCloudSiteId(cloudSiteId);
-
-			String requestId = xpathTool.evaluate(
-				"/tns:updateVnfNotification/tns:rollback/tns:msoRequest/tns:requestId/text()");
-			String serviceInstanceId = xpathTool.evaluate(
-				"/tns:updateVnfNotification/tns:rollback/tns:msoRequest/tns:serviceInstanceId/text()");
-
-			if (requestId != null || serviceInstanceId != null) {
-				MsoRequest msoRequest = new MsoRequest();
-				msoRequest.setRequestId(requestId);
-				msoRequest.setServiceInstanceId(serviceInstanceId);
-				rollback.setMsoRequest(msoRequest);
-			}
-
-			String tenantCreated = xpathTool.evaluate(
-				"/tns:updateVnfNotification/tns:rollback/tns:tenantCreated/text()");
-			rollback.setTenantCreated("true".equals(tenantCreated));
-
-			String tenantId = xpathTool.evaluate(
-				"/tns:updateVnfNotification/tns:rollback/tns:tenantId/text()");
-			rollback.setTenantId(tenantId);
-
-			String vnfCreated = xpathTool.evaluate(
-				"/tns:updateVnfNotification/tns:rollback/tns:vnfCreated/text()");
-			rollback.setVnfCreated("true".equals(vnfCreated));
-
-			String rollbackVnfId = xpathTool.evaluate(
-				"/tns:updateVnfNotification/tns:rollback/tns:vnfId/text()");
-			rollback.setVnfId(rollbackVnfId);
-
-			updateVnfNotification.setRollback(rollback);
-
-		} catch (Exception e) {
-			System.out.println("Failed to unmarshal VNF callback content:");
-			System.out.println(content);
-			return false;
-		}
-
-		VnfAdapterNotifyServiceImpl notifyService = new VnfAdapterNotifyServiceImpl();
-		notifyService.setProcessEngineServices4junit(processEngineRule);
-
-		notifyService.updateVnfNotification(
-			messageId,
-			updateVnfNotification.isCompleted(),
-			updateVnfNotification.getException(),
-			updateVnfNotification.getErrorMessage(),
-			updateVnfNotification.getOutputs(),
-			updateVnfNotification.getRollback());
-
-		return true;
-	}
-
-	/**
-	 * Injects a workflow message. The specified callback data may contain the
-	 * placeholder string ((CORRELATOR)) which is replaced with the actual
-	 * correlator value.
-	 * @param content the message type
-	 * @param content the message content
-	 * @param timeout the timeout in milliseconds
-	 * @return true if the event could be injected, false otherwise
-	 */
-	protected boolean injectWorkflowMessage(String messageType, String content, long timeout) {
-		String correlator = (String) getProcessVariable("ReceiveWorkflowMessage",
-			messageType + "_CORRELATOR", timeout);
-
-		if (correlator == null) {
-			return false;
-		}
-
-		content = content.replace("((CORRELATOR))", correlator);
-
-		System.out.println("Injecting " + messageType + " message");
-		WorkflowMessageResource workflowMessageResource = new WorkflowMessageResource();
-		workflowMessageResource.setProcessEngineServices4junit(processEngineRule);
-		Response response = workflowMessageResource.deliver(messageType, correlator, content);
-		System.out.println("Workflow response to " + messageType + " message: " + response);
-		return true;
-	}
-
-	/**
-	 * Wait for the process to end.
-	 * @param businessKey the process business key
-	 * @param timeout the amount of time to wait, in milliseconds
-	 */
-	public void waitForProcessEnd(String businessKey, long timeout) {
-		System.out.println("Waiting " + timeout + "ms for process with business key " +
-			businessKey + " to end");
-
-		long now = System.currentTimeMillis() + timeout;
-		long endTime = now + timeout;
-
-		while (now <= endTime) {
-			if (isProcessEnded(businessKey)) {
-				System.out.println("Process with business key " + businessKey + " has ended");
-				return;
-			}
-
-			try {
-				Thread.sleep(200);
-			} catch (InterruptedException e) {
-				String msg = "Interrupted waiting for process with business key " +
-					businessKey + " to end";
-				System.out.println(msg);
-				fail(msg);
-			}
-
-			now = System.currentTimeMillis();
-		}
-
-		String msg = "Process with business key " + businessKey +
-			" did not end within " + timeout + "ms";
-		System.out.println(msg);
-		fail(msg);
-	}
-
-	/**
-	 * Verifies that the specified historic process variable has the specified value.
-	 * If the variable does not have the specified value, the test is failed.
-	 * @param businessKey the process business key
-	 * @param variable the variable name
-	 * @param value the expected variable value
-	 */
-	public void checkVariable(String businessKey, String variable, Object value) {
-		if (!isProcessEnded(businessKey)) {
-			fail("Cannot get historic variable " + variable + " because process with business key " +
-				businessKey + " has not ended");
-		}
-
-		Object variableValue = getVariableFromHistory(businessKey, variable);
-		assertEquals(value, variableValue);
-	}
-
-	/**
-	 * Checks to see if the specified process is ended.
-	 * @param businessKey the process business Key
-	 * @return true if the process is ended
-	 */
-	protected boolean isProcessEnded(String businessKey) {
-		HistoricProcessInstance processInstance = processEngineRule.getHistoryService()
-			.createHistoricProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();
-		return processInstance != null && processInstance.getEndTime() != null;
-	}
-
-	/**
-	 * Gets a variable value from a historical process instance.
-	 * @param businessKey the process business key
-	 * @param variableName the variable name
-	 * @return the variable value, or null if the variable could not be
-	 * obtained
-	 */
-	public Object getVariableFromHistory(String businessKey, String variableName) {
-		try {
-			HistoricProcessInstance processInstance = processEngineRule.getHistoryService()
-				.createHistoricProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();
-
-			if (processInstance == null) {
-				return null;
-			}
-
-			HistoricVariableInstance v = processEngineRule.getHistoryService()
-				.createHistoricVariableInstanceQuery().processInstanceId(processInstance.getId())
-				.variableName(variableName).singleResult();
-			return v == null ? null : v.getValue();
-		} catch (Exception e) {
-			System.out.println("Error retrieving variable " + variableName +
-				" from historical process with business key " + businessKey + ": " + e);
-			return null;
-		}
-	}
-
-	/**
-	 * Gets the value of a subflow variable from the specified subflow's
-	 * historical process instance.
-	 *
-	 * @param subflowName - the name of the subflow that contains the variable
-	 * @param variableName the variable name
-	 *
-	 * @return the variable value, or null if the variable could not be obtained
-	 *
-	 */
-	protected Object getVariableFromSubflowHistory(String subflowName, String variableName) {
-		try {
-			List<HistoricProcessInstance> processInstanceList = processEngineRule.getHistoryService()
-					.createHistoricProcessInstanceQuery().processDefinitionName(subflowName).list();
-
-			Collections.sort(processInstanceList, new Comparator<HistoricProcessInstance>() {
-			    public int compare(HistoricProcessInstance m1, HistoricProcessInstance m2) {
-			        return m1.getStartTime().compareTo(m2.getStartTime());
-			    }
-			});
-
-			HistoricProcessInstance processInstance = processInstanceList.get(0);
-
-			if (processInstanceList == null) {
-				return null;
-			}
-
-			HistoricVariableInstance v = processEngineRule.getHistoryService()
-				.createHistoricVariableInstanceQuery().processInstanceId(processInstance.getId())
-				.variableName(variableName).singleResult();
-			return v == null ? null : v.getValue();
-		} catch (Exception e) {
-			System.out.println("Error retrieving variable " + variableName +
-					" from sub flow: " + subflowName + ", Exception is: " + e);
-			return null;
-		}
-	}
-
-	/**
-	 * Gets the value of a subflow variable from the subflow's
-	 * historical process x instance.
-	 *
-	 * @param subflowName - the name of the subflow that contains the variable
-	 * @param variableName the variable name
-	 * @param subflowInstanceIndex - the instance of the subflow (use when same subflow is called more than once from mainflow)
-	 *
-	 * @return the variable value, or null if the variable could not be obtained
-	 */
-	protected Object getVariableFromSubflowHistory(int subflowInstanceIndex, String subflowName, String variableName) {
-		try {
-			List<HistoricProcessInstance> processInstanceList = processEngineRule.getHistoryService()
-					.createHistoricProcessInstanceQuery().processDefinitionName(subflowName).list();
-
-			Collections.sort(processInstanceList, new Comparator<HistoricProcessInstance>() {
-			    public int compare(HistoricProcessInstance m1, HistoricProcessInstance m2) {
-			        return m1.getStartTime().compareTo(m2.getStartTime());
-			    }
-			});
-
-			HistoricProcessInstance processInstance = processInstanceList.get(subflowInstanceIndex);
-
-			if (processInstanceList == null) {
-				return null;
-			}
-
-			HistoricVariableInstance v = processEngineRule.getHistoryService()
-				.createHistoricVariableInstanceQuery().processInstanceId(processInstance.getId())
-				.variableName(variableName).singleResult();
-			return v == null ? null : v.getValue();
-		} catch (Exception e) {
-			System.out.println("Error retrieving variable " + variableName +
-				" from " + subflowInstanceIndex + " instance index of sub flow: " + subflowName + ", Exception is: " + e);
-			return null;
-		}
-	}
-
-
-	/**
-	 * Extracts text from an XML element. This method is not namespace aware
-	 * (namespaces are ignored).  The first matching element is selected.
-	 * @param xml the XML document or fragment
-	 * @param tag the desired element, e.g. "<name>"
-	 * @return the element text, or null if the element was not found
-	 */
-	protected String getXMLTextElement(String xml, String tag) {
-		xml = removeXMLNamespaces(xml);
-
-		if (!tag.startsWith("<")) {
-			tag = "<" + tag + ">";
-		}
-
-		int start = xml.indexOf(tag);
-
-		if (start == -1) {
-			return null;
-		}
-
-		int end = xml.indexOf('<', start + tag.length());
-
-		if (end == -1) {
-			return null;
-		}
-
-		return xml.substring(start + tag.length(), end);
-	}
-
-	/**
-	 * Removes namespace definitions and prefixes from XML, if any.
-	 */
-	private String removeXMLNamespaces(String xml) {
-		// remove xmlns declaration
-		xml = xml.replaceAll("xmlns.*?(\"|\').*?(\"|\')", "");
-
-		// remove opening tag prefix
-		xml = xml.replaceAll("(<)(\\w+:)(.*?>)", "$1$3");
-
-		// remove closing tags prefix
-		xml = xml.replaceAll("(</)(\\w+:)(.*?>)", "$1$3");
-
-		// remove extra spaces left when xmlns declarations are removed
-		xml = xml.replaceAll("\\s+>", ">");
-
-		return xml;
-	}
-
-	/**
-	 * Asserts that two XML documents are semantically equivalent.  Differences
-	 * in whitespace or in namespace usage do not affect the comparison.
-	 * @param expected the expected XML
-	 * @param actual the XML to test
-	 * @throws SAXException
-	 * @throws IOException
-	 */
-    public static void assertXMLEquals(String expected, String actual)
-    		throws SAXException, IOException {
-    	XMLUnit.setIgnoreWhitespace(true);
-    	XMLUnit.setIgnoreAttributeOrder(true);
-    	DetailedDiff diff = new DetailedDiff(XMLUnit.compareXML(expected, actual));
-    	List<?> allDifferences = diff.getAllDifferences();
-    	assertEquals("Differences found: " + diff.toString(), 0, allDifferences.size());
-    }
-
-	/**
-	 * A test implementation of AsynchronousResponse.
-	 */
-	public class TestAsyncResponse implements AsynchronousResponse {
-		Response response = null;
-
-		/**
-		 * {@inheritDoc}
-		 */
-		@Override
-		public synchronized void setResponse(Response response) {
-			this.response = response;
-		}
-
-		/**
-		 * Gets the response.
-		 * @return the response, or null if none has been produced yet
-		 */
-		public synchronized Response getResponse() {
-			return response;
-		}
-	}
-
-	/**
-	 * An object that contains callback data for a "program".
-	 */
-	public class CallbackSet {
-		private final Map<String, String> map = new HashMap<String, String>();
-
-		/**
-		 * Add callback data to the set.
-		 * @param action the action with which the data is associated
-		 * @param content the callback data
-		 */
-		public void put(String action, String content) {
-			map.put(action, content);
-		}
-
-		/**
-		 * Retrieve callback data from the set.
-		 * @param action the action with which the data is associated
-		 * @return the callback data, or null if there is none for the specified operation
-		 */
-		public String get(String action) {
-			return map.get(action);
-		}
-	}
-
-	/**
-	 * A tool for evaluating XPath expressions.
-	 */
-	protected class XPathTool {
-		private final DocumentBuilderFactory factory;
-		private final SimpleNamespaceContext context = new SimpleNamespaceContext();
-		private final XPath xpath = XPathFactory.newInstance().newXPath();
-		private String xml = null;
-		private Document doc = null;
-
-		/**
-		 * Constructor.
-		 */
-		public XPathTool() {
-			factory = DocumentBuilderFactory.newInstance();
-			factory.setNamespaceAware(true);
-			xpath.setNamespaceContext(context);
-		}
-
-		/**
-		 * Adds a namespace.
-		 * @param prefix the namespace prefix
-		 * @param uri the namespace uri
-		 */
-		public synchronized void addNamespace(String prefix, String uri) {
-			context.add(prefix, uri);
-		}
-
-		/**
-		 * Sets the XML content to be operated on.
-		 * @param xml the XML content
-		 */
-		public synchronized void setXML(String xml) {
-			this.xml = xml;
-			this.doc = null;
-		}
-
-		/**
-		 * Returns the document object.
-		 * @return the document object, or null if XML has not been set
-		 * @throws SAXException
-		 * @throws IOException
-		 * @throws ParserConfigurationException
-		 */
-		public synchronized Document getDocument()
-				throws ParserConfigurationException, IOException, SAXException {
-			if (xml == null) {
-				return null;
-			}
-
-			buildDocument();
-			return doc;
-		}
-
-		/**
-		 * Evaluates the specified XPath expression and returns a string result.
-		 * This method throws exceptions on error.
-		 * @param expression the expression
-		 * @return the result object
-		 * @throws ParserConfigurationException
-		 * @throws IOException
-		 * @throws SAXException
-		 * @throws XPathExpressionException on error
-		 */
-		public synchronized String evaluate(String expression)
-				throws ParserConfigurationException, SAXException,
-				IOException, XPathExpressionException {
-			return (String) evaluate(expression, XPathConstants.STRING);
-		}
-
-		/**
-		 * Evaluates the specified XPath expression.
-		 * This method throws exceptions on error.
-		 * @param expression the expression
-		 * @param returnType the return type
-		 * @return the result object
-		 * @throws ParserConfigurationException
-		 * @throws IOException
-		 * @throws SAXException
-		 * @throws XPathExpressionException on error
-		 */
-		public synchronized Object evaluate(String expression, QName returnType)
-				throws ParserConfigurationException, SAXException,
-				IOException, XPathExpressionException {
-
-			buildDocument();
-			XPathExpression expr = xpath.compile(expression);
-			return expr.evaluate(doc, returnType);
-		}
-
-		/**
-		 * Private helper method that builds the document object.
-		 * Assumes the calling method is synchronized.
-		 * @throws ParserConfigurationException
-		 * @throws IOException
-		 * @throws SAXException
-		 */
-		private void buildDocument() throws ParserConfigurationException,
-				IOException, SAXException {
-			if (doc == null) {
-				if (xml == null) {
-					throw new IOException("XML input is null");
-				}
-
-				DocumentBuilder builder = factory.newDocumentBuilder();
-				InputSource source = new InputSource(new StringReader(xml));
-				doc = builder.parse(source);
-			}
-		}
-	}
-
-	/**
-	 * A NamespaceContext class based on a Map.
-	 */
-	private class SimpleNamespaceContext implements NamespaceContext {
-		private Map<String, String> prefixMap = new HashMap<String, String>();
-		private Map<String, String> uriMap = new HashMap<String, String>();
-
-		public synchronized void add(String prefix, String uri) {
-			prefixMap.put(prefix, uri);
-			uriMap.put(uri, prefix);
-		}
-
-		@Override
-		public synchronized String getNamespaceURI(String prefix) {
-			return prefixMap.get(prefix);
-		}
-
-		@Override
-		public Iterator<String> getPrefixes(String uri) {
-			List<String> list = new ArrayList<String>();
-			String prefix = uriMap.get(uri);
-			if (prefix != null) {
-				list.add(prefix);
-			}
-			return list.iterator();
-		}
-
-		@Override
-		public String getPrefix(String uri) {
-			return uriMap.get(uri);
-		}
-	}
-
-	/**
-	 * A VnfNotify XPathTool.
-	 */
-	protected class VnfNotifyXPathTool extends XPathTool {
-		public VnfNotifyXPathTool() {
-			addNamespace("tns", "http://org.openecomp.mso/vnfNotify");
-		}
-	}
-
-	/**
-	 * Helper class to make it easier to create this type.
-	 */
-	private static class CreateVnfNotificationOutputs
-			extends org.openecomp.mso.bpmn.common.adapter.vnf.CreateVnfNotification.Outputs {
-		public void add(String key, String value) {
-			Entry entry = new Entry();
-			entry.setKey(key);
-			entry.setValue(value);
-			getEntry().add(entry);
-		}
-	}
-
-	/**
-	 * Helper class to make it easier to create this type.
-	 */
-	private static class UpdateVnfNotificationOutputs
-			extends org.openecomp.mso.bpmn.common.adapter.vnf.UpdateVnfNotification.Outputs {
-		public void add(String key, String value) {
-			Entry entry = new Entry();
-			entry.setKey(key);
-			entry.setValue(value);
-			getEntry().add(entry);
-		}
-	}
-}
+/*- 
+ * ============LICENSE_START======================================================= 
+ * OPENECOMP - MSO 
+ * ================================================================================ 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * ================================================================================ 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ * ============LICENSE_END========================================================= 
+ */ 
+
+package org.openecomp.mso.bpmn.common;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.ws.rs.core.Response;
+import javax.xml.bind.JAXBException;
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
+import org.camunda.bpm.engine.RuntimeService;
+import org.camunda.bpm.engine.history.HistoricProcessInstance;
+import org.camunda.bpm.engine.history.HistoricVariableInstance;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.camunda.bpm.engine.test.ProcessEngineRule;
+import org.camunda.bpm.engine.variable.impl.VariableMapImpl;
+import org.custommonkey.xmlunit.DetailedDiff;
+import org.custommonkey.xmlunit.XMLUnit;
+import org.jboss.resteasy.spi.AsynchronousResponse;
+import org.junit.Before;
+import org.junit.Rule;
+import org.openecomp.mso.bpmn.common.adapter.sdnc.CallbackHeader;
+import org.openecomp.mso.bpmn.common.adapter.sdnc.SDNCAdapterCallbackRequest;
+import org.openecomp.mso.bpmn.common.adapter.sdnc.SDNCAdapterResponse;
+import org.openecomp.mso.bpmn.common.adapter.vnf.CreateVnfNotification;
+import org.openecomp.mso.bpmn.common.adapter.vnf.DeleteVnfNotification;
+import org.openecomp.mso.bpmn.common.adapter.vnf.MsoExceptionCategory;
+import org.openecomp.mso.bpmn.common.adapter.vnf.MsoRequest;
+import org.openecomp.mso.bpmn.common.adapter.vnf.UpdateVnfNotification;
+import org.openecomp.mso.bpmn.common.adapter.vnf.VnfRollback;
+import org.openecomp.mso.bpmn.common.workflow.service.SDNCAdapterCallbackServiceImpl;
+import org.openecomp.mso.bpmn.common.workflow.service.VnfAdapterNotifyServiceImpl;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowAsyncCommonResource;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowMessageResource;
+import org.openecomp.mso.bpmn.common.workflow.service.WorkflowResponse;
+import org.openecomp.mso.bpmn.core.CamundaDBSetup;
+import org.openecomp.mso.bpmn.core.PropertyConfigurationSetup;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
+import com.github.tomakehurst.wiremock.extension.ResponseTransformer;
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
+
+
+
+/**
+ * A base class for Workflow tests.
+ * <p>
+ * WireMock response transformers may be specified by declaring public
+ * static fields with the @WorkflowTestTransformer annotation. For example:
+ * <pre>
+ *     @WorkflowTestTransformer
+ *     public static final ResponseTransformer sdncAdapterMockTransformer =
+ *         new SDNCAdapterMockTransformer();
+ * </pre>
+ */
+public class WorkflowTest {
+	@Rule
+	public final ProcessEngineRule processEngineRule = new ProcessEngineRule();
+
+	@Rule
+	public final WireMockRule wireMockRule;
+
+	/**
+	 * Constructor.
+	 */
+	public WorkflowTest() throws RuntimeException {
+		// Process WorkflowTestTransformer annotations
+		List<ResponseTransformer> transformerList = new ArrayList<ResponseTransformer>();
+
+		for (Field field : getClass().getFields()) {
+			WorkflowTestTransformer annotation = (WorkflowTestTransformer)
+				field.getAnnotation(WorkflowTestTransformer.class);
+
+			if (annotation == null) {
+				continue;
+			}
+
+			if (!Modifier.isStatic(field.getModifiers())) {
+				throw new RuntimeException(field.getDeclaringClass().getName()
+					+ "#" + field.getName() + " has a @WorkflowTestTransformer "
+					+ " annotation but it is not declared static");
+			}
+
+			ResponseTransformer transformer;
+
+			try {
+				transformer = (ResponseTransformer) field.get(null);
+			} catch (IllegalAccessException e) {
+				throw new RuntimeException(field.getDeclaringClass().getName()
+					+ "#" + field.getName() + " is not accessible", e);
+			} catch (ClassCastException e) {
+				throw new RuntimeException(field.getDeclaringClass().getName()
+					+ "#" + field.getName() + " is not a ResponseTransformer", e);
+			}
+
+			if (transformer == null) {
+				continue;
+			}
+
+			transformerList.add(transformer);
+		}
+
+		ResponseTransformer[] transformerArray =
+			transformerList.toArray(new ResponseTransformer[transformerList.size()]);
+
+		wireMockRule = new WireMockRule(WireMockConfiguration.wireMockConfig()
+			.port(28090).extensions(transformerArray));
+	}
+
+	@Before
+	public void testSetup() throws Exception {
+		CamundaDBSetup.configure();
+		PropertyConfigurationSetup.init();
+	}
+
+	/**
+	 * The current request ID.  Normally set when an "invoke" method is called.
+	 */
+	protected volatile String msoRequestId = null;
+
+	/**
+	 * The current service instance ID.  Normally set when an "invoke" method
+	 * is called.
+	 */
+	protected volatile String msoServiceInstanceId = null;
+
+	/**
+	 * Logs a test start method.
+	 */
+	protected void logStart() {
+		StackTraceElement[] st = Thread.currentThread().getStackTrace();
+		String method = st[2].getMethodName();
+		System.out.println("STARTED TEST: " + method);
+	}
+
+	/**
+	 * Logs a test end method.
+	 */
+	protected void logEnd() {
+		StackTraceElement[] st = Thread.currentThread().getStackTrace();
+		String method = st[2].getMethodName();
+		System.out.println("ENDED TEST: " + method);
+	}
+
+	/**
+	 * Invokes a subprocess.
+	 * @param processKey the process key
+	 * @param businessKey a unique key that will identify the process instance
+	 * @param injectedVariables variables to inject into the process
+	 */
+	protected void invokeSubProcess(String processKey, String businessKey,
+			Map<String, Object> injectedVariables) {
+		RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
+		List<String> arguments = runtimeMxBean.getInputArguments();
+		System.out.println("JVM args = " + arguments);
+
+		msoRequestId = (String) injectedVariables.get("mso-request-id");
+
+		if (msoRequestId == null) {
+			String msg = "mso-request-id variable was not provided";
+			System.out.println(msg);
+			fail(msg);
+		}
+
+		// Note: some scenarios don't have a service-instance-id, may be null
+		msoServiceInstanceId = (String) injectedVariables.get("mso-service-instance-id");
+
+		RuntimeService runtimeService = processEngineRule.getRuntimeService();
+		runtimeService.startProcessInstanceByKey(processKey, businessKey, injectedVariables);
+	}
+
+	/**
+	 * Invokes an asynchronous process.
+	 * Errors are handled with junit assertions and will cause the test to fail.
+	 * @param processKey the process key
+	 * @param schemaVersion the API schema version, e.g. "v1"
+	 * @param businessKey a unique key that will identify the process instance
+	 * @param request the request
+	 * @return a TestAsyncResponse object associated with the test
+	 */
+	protected TestAsyncResponse invokeAsyncProcess(String processKey,
+			String schemaVersion, String businessKey, String request) {
+		return invokeAsyncProcess(processKey, schemaVersion, businessKey, request, null);
+	}
+
+	/**
+	 * Invokes an asynchronous process.
+	 * Errors are handled with junit assertions and will cause the test to fail.
+	 * @param processKey the process key
+	 * @param schemaVersion the API schema version, e.g. "v1"
+	 * @param businessKey a unique key that will identify the process instance
+	 * @param request the request
+	 * @param injectedVariables optional variables to inject into the process
+	 * @return a TestAsyncResponse object associated with the test
+	 */
+	public TestAsyncResponse invokeAsyncProcess(String processKey,
+			String schemaVersion, String businessKey, String request,
+			Map<String, Object> injectedVariables) {
+
+		RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
+		List<String> arguments = runtimeMxBean.getInputArguments();
+		System.out.println("JVM args = " + arguments);
+
+		Map<String, Object> variables = createVariables(schemaVersion, businessKey,
+			request, injectedVariables, false);
+		VariableMapImpl variableMapImpl = createVariableMapImpl(variables);
+
+		System.out.println("Sending " + request + " to " + processKey + " process");
+		WorkflowAsyncCommonResource workflowResource = new WorkflowAsyncCommonResource();
+		workflowResource.setProcessEngineServices4junit(processEngineRule);
+
+		TestAsyncResponse asyncResponse = new TestAsyncResponse();
+		workflowResource.startProcessInstanceByKey(asyncResponse, processKey, variableMapImpl);
+		return asyncResponse;
+	}
+
+	/**
+	 * Invokes an asynchronous process.
+	 * Errors are handled with junit assertions and will cause the test to fail.
+	 * @param processKey the process key
+	 * @param schemaVersion the API schema version, e.g. "v1"
+	 * @param businessKey a unique key that will identify the process instance
+	 * @param request the request
+	 * @param injectedVariables optional variables to inject into the process
+	 * @param serviceInstantiationModel indicates whether this method is being
+	 * invoked for a flow that is designed using the service instantiation model
+	 * @return a TestAsyncResponse object associated with the test
+	 */
+	protected TestAsyncResponse invokeAsyncProcess(String processKey,
+			String schemaVersion, String businessKey, String request,
+			Map<String, Object> injectedVariables, boolean serviceInstantiationModel) {
+
+		RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
+		List<String> arguments = runtimeMxBean.getInputArguments();
+		System.out.println("JVM args = " + arguments);
+
+		Map<String, Object> variables = createVariables(schemaVersion, businessKey,
+			request, injectedVariables, serviceInstantiationModel);
+		VariableMapImpl variableMapImpl = createVariableMapImpl(variables);
+
+		System.out.println("Sending " + request + " to " + processKey + " process");
+		WorkflowAsyncCommonResource workflowResource = new WorkflowAsyncCommonResource();
+		workflowResource.setProcessEngineServices4junit(processEngineRule);
+
+		TestAsyncResponse asyncResponse = new TestAsyncResponse();
+		workflowResource.startProcessInstanceByKey(asyncResponse, processKey, variableMapImpl);
+		return asyncResponse;
+	}
+
+	/**
+	 * Private helper method that creates a variable map for a request.
+	 * Errors are handled with junit assertions and will cause the test to fail.
+	 * @param schemaVersion the API schema version, e.g. "v1"
+	 * @param businessKey a unique key that will identify the process instance
+	 * @param request the request
+	 * @param injectedVariables optional variables to inject into the process
+	 * @param serviceInstantiationModel indicates whether this method is being
+	 * invoked for a flow that is designed using the service instantiation model
+	 * @return a variable map
+	 */
+	private Map<String, Object> createVariables(String schemaVersion,
+			String businessKey, String request, Map<String, Object> injectedVariables,
+			boolean serviceInstantiationModel) {
+
+		Map<String, Object> variables = new HashMap<String, Object>();
+
+		// These variables may be overridded by injected variables.
+		variables.put("mso-service-request-timeout", "180");
+		variables.put("isDebugLogEnabled", "true");
+
+		// These variables may not be overridded by injected variables.
+		String[] notAllowed = new String[] {
+				"mso-schema-version",
+				"mso-business-key",
+				"bpmnRequest",
+				"mso-request-id",
+				"mso-service-instance-id"
+		};
+
+		if (injectedVariables != null) {
+			for (String key : injectedVariables.keySet()) {
+				for (String var : notAllowed) {
+					if (var.equals(key)) {
+						String msg = "Cannot specify " + var + " in injected variables";
+						System.out.println(msg);
+						fail(msg);
+					}
+				}
+
+				variables.put(key, injectedVariables.get(key));
+			}
+		}
+
+		variables.put("mso-schema-version", schemaVersion);
+		variables.put("mso-business-key", businessKey);
+		variables.put("bpmnRequest", request);
+
+		if (serviceInstantiationModel) {
+
+			/*
+			 * The request ID and the service instance ID are generated for flows
+			 * that follow the service instantiation model unless "requestId" and
+			 * "serviceInstanceId" are injected variables.
+			 */
+
+			try {
+				msoRequestId = (String) injectedVariables.get("requestId");
+				variables.put("mso-request-id", msoRequestId);
+				msoServiceInstanceId = (String) injectedVariables.get("serviceInstanceId");
+				variables.put("mso-service-instance-id", msoServiceInstanceId);
+			}
+			catch(Exception e) {
+			}
+			if (msoRequestId == null || msoRequestId.trim().equals("")) {
+				System.out.println("No requestId element in injectedVariables");
+				variables.put("mso-request-id", UUID.randomUUID().toString());
+			}
+			if (msoServiceInstanceId == null || msoServiceInstanceId.trim().equals("")) {
+				System.out.println("No seviceInstanceId element in injectedVariables");
+				variables.put("mso-service-instance-id", UUID.randomUUID().toString());
+			}
+
+		} else {
+			msoRequestId = getXMLTextElement(request, "request-id");
+
+			if (msoRequestId == null) {
+				//check in injected variables
+				try {
+					msoRequestId = (String) injectedVariables.get("requestId");
+				}
+				catch(Exception e) {
+				}
+				if (msoRequestId == null || msoRequestId.trim().equals("")) {
+					String msg = "No request-id element in " + request;
+					System.out.println(msg);
+					fail(msg);
+				}
+			}
+
+			variables.put("mso-request-id", msoRequestId);
+
+			// Note: some request types don't have a service-instance-id
+			msoServiceInstanceId = getXMLTextElement(request, "service-instance-id");
+
+			if (msoServiceInstanceId != null) {
+				variables.put("mso-service-instance-id", msoServiceInstanceId);
+			}
+		}
+
+		return variables;
+	}
+
+	/**
+	 * Private helper method that creates a camunda VariableMapImpl from a simple
+	 * variable map.
+	 * @param variables the simple variable map
+	 * @return a VariableMap
+	 */
+	private VariableMapImpl createVariableMapImpl(Map<String, Object> variables) {
+		Map<String, Object> wrappedVariables = new HashMap<String, Object>();
+
+		for (String key : variables.keySet()) {
+			Object value = variables.get(key);
+			wrappedVariables.put(key, wrapVariableValue(value));
+		}
+
+		VariableMapImpl variableMapImpl = new VariableMapImpl();
+		variableMapImpl.put("variables", wrappedVariables);
+		return variableMapImpl;
+	}
+
+	/**
+	 * Private helper method that wraps a variable value for inclusion in a
+	 * camunda VariableMapImpl.
+	 * @param value the variable value
+	 * @return the wrapped variable
+	 */
+	private Map<String, Object> wrapVariableValue(Object value) {
+		HashMap<String, Object> valueMap = new HashMap<String, Object>();
+		valueMap.put("value", value);
+		return valueMap;
+	}
+
+	/**
+	 * Receives a response from an asynchronous process.
+	 * Errors are handled with junit assertions and will cause the test to fail.
+	 * @param businessKey the process business key
+	 * @param asyncResponse the TestAsyncResponse object associated with the test
+	 * @param timeout the timeout in milliseconds
+	 * @return the WorkflowResponse
+	 */
+	public WorkflowResponse receiveResponse(String businessKey,
+			TestAsyncResponse asyncResponse, long timeout) {
+		System.out.println("Waiting " + timeout + "ms for process with business key " + businessKey
+			+ " to send a response");
+
+		long now = System.currentTimeMillis() + timeout;
+		long endTime = now + timeout;
+
+		while (now <= endTime) {
+			Response response = asyncResponse.getResponse();
+
+			if (response != null) {
+				System.out.println("Received a response from process with business key " + businessKey);
+
+				Object entity = response.getEntity();
+
+				if (!(entity instanceof WorkflowResponse)) {
+					String msg = "Response entity is " +
+						(entity == null ? "null" : entity.getClass().getName()) +
+						", expected WorkflowResponse";
+					System.out.println(msg);
+					fail(msg);
+					return null; // unreachable
+				}
+
+				return (WorkflowResponse) entity;
+			}
+
+			try {
+				Thread.sleep(200);
+			} catch (InterruptedException e) {
+				String msg = "Interrupted waiting for a response from process with business key " +
+					businessKey;
+				System.out.println(msg);
+				fail(msg);
+				return null; // unreachable
+			}
+
+			now = System.currentTimeMillis();
+		}
+
+		String msg = "No response received from process with business key " + businessKey +
+			" within " + timeout + "ms";
+		System.out.println(msg);
+		fail("Process with business key " + businessKey + " did not end within 10000ms");
+		return null; // unreachable
+	}
+
+	/**
+	 * Runs a program to inject SDNC callback data into the test environment.
+	 * A program is essentially just a list of keys that identify callback data
+	 * to be injected, in sequence. An example program:
+	 * <pre>
+	 *     reserve, assign, delete:ERR
+	 * </pre>
+	 * Errors are handled with junit assertions and will cause the test to fail.
+	 * @param callbacks an object containing callback data for the program
+	 * @param program the program to execute
+	 */
+	protected void injectSDNCRestCallbacks(CallbackSet callbacks, String program) {
+
+		String[] cmds = program.replaceAll("\\s+", "").split(",");
+
+		for (String cmd : cmds) {
+			String action = cmd;
+			String modifier = "STD";
+
+			if (cmd.contains(":")) {
+				String[] parts = cmd.split(":");
+				action = parts[0];
+				modifier = parts[1];
+			}
+
+			String content = null;
+
+			if ("STD".equals(modifier)) {
+				content = callbacks.get(action);
+
+				if (content == null) {
+					String msg = "No callback defined for '" + action + "' SDNC request";
+					System.out.println(msg);
+					fail(msg);
+				}
+			} else if ("ERR".equals(modifier)) {
+				content = "{\"SDNCServiceError\":{\"sdncRequestId\":\"((REQUEST-ID))\",\"responseCode\":\"500\",\"responseMessage\":\"SIMULATED ERROR FROM SDNC ADAPTER\",\"ackFinalIndicator\":\"Y\"}}";
+			} else {
+				String msg = "Invalid SDNC program modifier: '" + modifier + "'";
+				System.out.println(msg);
+				fail(msg);
+			}
+
+			if (!injectSDNCRestCallback(content, 10000)) {
+				fail("Failed to inject SDNC '" + action + "' callback");
+			}
+
+			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {
+				fail("Interrupted after injection of SDNC '" + action + "' callback");
+			}
+		}
+	}
+
+	/**
+	 * Runs a program to inject SDNC events into the test environment.
+	 * A program is essentially just a list of keys that identify event data
+	 * to be injected, in sequence. An example program:
+	 * <pre>
+	 *     event1, event2
+	 * </pre>
+	 * Errors are handled with junit assertions and will cause the test to fail.
+	 * Defaults the Event Type to "SDNCAEvent" for backward compatibility.
+	 * @param callbacks an object containing event data for the program
+	 * @param program the program to execute
+	 */
+	protected void injectSDNCEvents(CallbackSet callbacks, String program) {
+		injectSDNCEvents(callbacks, program, "SDNCAEvent");
+	}
+
+	/**
+	 * Runs a program to inject SDNC events into the test environment.
+	 * A program is essentially just a list of keys that identify event data
+	 * to be injected, in sequence. An example program:
+	 * <pre>
+	 *     event1, event2
+	 * </pre>
+	 * Errors are handled with junit assertions and will cause the test to fail.
+	 * @param callbacks an object containing event data for the program
+	 * @param program the program to execute
+	 * @param eventType (i.e. "SDNCAEvent", "SNIROResponse", etc.)
+	 */
+	protected void injectSDNCEvents(CallbackSet callbacks, String program, String eventType) {
+
+		String[] cmds = program.replaceAll("\\s+", "").split(",");
+
+		for (String cmd : cmds) {
+			String action = cmd;
+			String modifier = "STD";
+
+			if (cmd.contains(":")) {
+				String[] parts = cmd.split(":");
+				action = parts[0];
+				modifier = parts[1];
+			}
+
+			String content = null;
+
+			if ("STD".equals(modifier)) {
+				content = callbacks.get(action);
+
+				if (content == null) {
+					String msg = "No SDNC event callback defined for '" + action + "'";
+					System.out.println(msg);
+					fail(msg);
+				}
+			} else {
+				String msg = "Invalid SDNC program modifier: '" + modifier + "'";
+				System.out.println(msg);
+				fail(msg);
+			}
+
+			if (!injectWorkflowMessage(eventType, content, 10000)) {
+				fail("Failed to inject SDNC '" + action + "' event");
+			}
+
+			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {
+				fail("Interrupted after injection of SDNC '" + action + "' event");
+			}
+		}
+	}
+
+	/**
+	 * Runs a program to inject SDNC callback data into the test environment.
+	 * A program is essentially just a list of keys that identify callback data
+	 * to be injected, in sequence. An example program:
+	 * <pre>
+	 *     reserve, assign, delete:ERR
+	 * </pre>
+	 * Errors are handled with junit assertions and will cause the test to fail.
+	 * @param callbacks an object containing callback data for the program
+	 * @param program the program to execute
+	 */
+	public void injectSDNCCallbacks(CallbackSet callbacks, String program) {
+
+		String[] cmds = program.replaceAll("\\s+", "").split(",");
+
+		for (String cmd : cmds) {
+			String action = cmd;
+			String modifier = "STD";
+
+			if (cmd.contains(":")) {
+				String[] parts = cmd.split(":");
+				action = parts[0];
+				modifier = parts[1];
+			}
+
+			String content = null;
+			int respCode = 200;
+			String respMsg = "OK";
+
+			if ("STD".equals(modifier)) {
+				content = callbacks.get(action);
+
+				if (content == null) {
+					String msg = "No callback defined for '" + action + "' SDNC request";
+					System.out.println(msg);
+					fail(msg);
+				}
+
+				respCode = 200;
+				respMsg = "OK";
+			} else if ("ERR".equals(modifier)) {
+				content = "<svc-request-id>((REQUEST-ID))</svc-request-id><response-code>500</response-code><response-message>SIMULATED ERROR FROM SDNC ADAPTER</response-message>";
+				respCode = 500;
+				respMsg = "SERVER ERROR";
+			} else {
+				String msg = "Invalid SDNC program modifier: '" + modifier + "'";
+				System.out.println(msg);
+				fail(msg);
+			}
+
+			if (!injectSDNCCallback(respCode, respMsg, content, 10000)) {
+				fail("Failed to inject SDNC '" + action + "' callback");
+			}
+
+			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {
+				fail("Interrupted after injection of SDNC '" + action + "' callback");
+			}
+		}
+	}
+
+	/**
+	 * Runs a program to inject VNF adapter REST callback data into the test environment.
+	 * A program is essentially just a list of keys that identify callback data
+	 * to be injected, in sequence. An example program:
+	 * <pre>
+	 *     create, rollback
+	 * </pre>
+	 * Errors are handled with junit assertions and will cause the test to fail.
+	 * @param callbacks an object containing callback data for the program
+	 * @param program the program to execute
+	 */
+	public void injectVNFRestCallbacks(CallbackSet callbacks, String program) {
+
+		String[] cmds = program.replaceAll("\\s+", "").split(",");
+
+		for (String cmd : cmds) {
+			String action = cmd;
+			String modifier = "STD";
+
+			if (cmd.contains(":")) {
+				String[] parts = cmd.split(":");
+				action = parts[0];
+				modifier = parts[1];
+			}
+
+			String content = null;
+
+			if ("STD".equals(modifier)) {
+				content = callbacks.get(action);
+
+				if (content == null) {
+					String msg = "No callback defined for '" + action + "' VNF REST request";
+					System.out.println(msg);
+					fail(msg);
+				}
+			} else if ("ERR".equals(modifier)) {
+				content = "SIMULATED ERROR FROM VNF ADAPTER";
+			} else {
+				String msg = "Invalid VNF REST program modifier: '" + modifier + "'";
+				System.out.println(msg);
+				fail(msg);
+			}
+
+			if (!injectVnfAdapterRestCallback(content, 10000)) {
+				fail("Failed to inject VNF REST '" + action + "' callback");
+			}
+
+			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {
+				fail("Interrupted after injection of VNF REST '" + action + "' callback");
+			}
+		}
+	}
+
+	/**
+	 * Runs a program to inject VNF callback data into the test environment.
+	 * A program is essentially just a list of keys that identify callback data
+	 * to be injected, in sequence. An example program:
+	 * <pre>
+	 *     createVnf, deleteVnf
+	 * </pre>
+	 * Errors are handled with junit assertions and will cause the test to fail.
+	 * @param callbacks an object containing callback data for the program
+	 * @param program the program to execute
+	 */
+	protected void injectVNFCallbacks(CallbackSet callbacks, String program) {
+
+		String[] cmds = program.replaceAll("\\s+", "").split(",");
+
+		for (String cmd : cmds) {
+			String action = cmd;
+			String modifier = "STD";
+
+			if (cmd.contains(":")) {
+				String[] parts = cmd.split(":");
+				action = parts[0];
+				modifier = parts[1];
+			}
+
+			String content = null;
+
+			if ("STD".equals(modifier)) {
+				content = callbacks.get(action);
+
+				if (content == null) {
+					String msg = "No callback defined for '" + action + "' VNF request";
+					System.out.println(msg);
+					fail(msg);
+				}
+
+			} else if ("ERR".equals(modifier)) {
+				String msg = "Currently unsupported VNF program modifier: '" + modifier + "'";
+				System.out.println(msg);
+				fail(msg);
+			} else {
+				String msg = "Invalid VNF program modifier: '" + modifier + "'";
+				System.out.println(msg);
+				fail(msg);
+			}
+
+			boolean injected = false;
+
+			if (content.contains("createVnfNotification")) {
+				injected = injectCreateVNFCallback(content, 10000);
+			} else if (content.contains("deleteVnfNotification")) {
+				injected = injectDeleteVNFCallback(content, 10000);
+			} else if (content.contains("updateVnfNotification")) {
+				injected = injectUpdateVNFCallback(content, 10000);
+			}
+
+			if (!injected) {
+				String msg = "Failed to inject VNF '" + action + "' callback";
+				System.out.println(msg);
+				fail(msg);
+			}
+
+			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {
+				fail("Interrupted after injection of VNF '" + action + "' callback");
+			}
+		}
+	}
+
+	/**
+	 * Waits for the number of running processes with the specified process
+	 * definition key to equal a particular count.
+	 * @param processKey the process definition key
+	 * @param count the desired count
+	 * @param timeout the timeout in milliseconds
+	 */
+	public void waitForRunningProcessCount(String processKey, int count, long timeout) {
+		System.out.println("Waiting " + timeout + "ms for there to be " + count + " "
+			+ processKey + " instances");
+
+		long now = System.currentTimeMillis() + timeout;
+		long endTime = now + timeout;
+		int last = -1;
+
+		while (now <= endTime) {
+			int actual = processEngineRule.getRuntimeService()
+				.createProcessInstanceQuery()
+				.processDefinitionKey(processKey)
+				.list().size();
+
+			if (actual != last) {
+				System.out.println("There are now " + actual + " "
+					+ processKey + " instances");
+				last = actual;
+			}
+
+			if (actual == count) {
+				return;
+			}
+
+			try {
+				Thread.sleep(200);
+			} catch (InterruptedException e) {
+				String msg = "Interrupted waiting for there to be " + count + " "
+					+ processKey + " instances";
+				System.out.println(msg);
+				fail(msg);
+			}
+
+			now = System.currentTimeMillis();
+		}
+
+		String msg = "Timed out waiting for there to be " + count + " "
+			+ processKey + " instances";
+		System.out.println(msg);
+		fail(msg);
+	}
+
+	/**
+	 * Waits for the specified process variable to be set.
+	 * @param processKey the process definition key
+	 * @param variable the variable name
+	 * @param timeout the timeout in milliseconds
+	 * @return the variable value, or null if it cannot be obtained
+	 *         in the specified time
+	 */
+	protected Object getProcessVariable(String processKey, String variable,
+			long timeout) {
+
+		System.out.println("Waiting " + timeout + "ms for "
+			+ processKey + "." + variable + " to be set");
+
+		long now = System.currentTimeMillis() + timeout;
+		long endTime = now + timeout;
+
+		ProcessInstance processInstance = null;
+		Object value = null;
+
+		while (value == null) {
+			if (now > endTime) {
+				if (processInstance == null) {
+					System.out.println("Timed out waiting for "
+						+ processKey + " to start");
+				} else {
+					System.out.println("Timed out waiting for "
+						+ processKey + "[" + processInstance.getId()
+						+ "]." + variable + " to be set");
+				}
+
+				return null;
+			}
+
+			if (processInstance == null) {
+				processInstance = processEngineRule.getRuntimeService()
+					.createProcessInstanceQuery()
+					.processDefinitionKey(processKey)
+					.singleResult();
+			}
+
+			if (processInstance != null) {
+				value = processEngineRule.getRuntimeService()
+					.getVariable(processInstance.getId(), variable);
+			}
+
+			try {
+				Thread.sleep(200);
+			} catch (InterruptedException e) {
+				System.out.println("Interrupted waiting for "
+					+ processKey + "." + variable + " to be set");
+				return null;
+			}
+
+			now = System.currentTimeMillis();
+		}
+
+		System.out.println(processKey + "["
+			+ processInstance.getId() + "]." + variable + "="
+			+ value);
+
+		return value;
+	}
+
+	/**
+	 * Injects a single SDNC adapter callback request. The specified callback data
+	 * may contain the placeholder string ((REQUEST-ID)) which is replaced with
+	 * the actual SDNC request ID. Note: this is not the requestId in the original
+	 * MSO request.
+	 * @param content the content of the callback
+	 * @param timeout the timeout in milliseconds
+	 * @return true if the callback could be injected, false otherwise
+	 */
+	protected boolean injectSDNCRestCallback(String content, long timeout) {
+		String sdncRequestId = (String) getProcessVariable("SDNCAdapterRestV1",
+			"SDNCAResponse_CORRELATOR", timeout);
+
+		if (sdncRequestId == null) {
+			return false;
+		}
+
+		content = content.replace("((REQUEST-ID))", sdncRequestId);
+		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
+		content = content.replace("{{REQUEST-ID}}", sdncRequestId);
+
+		System.out.println("Injecting SDNC adapter callback");
+		WorkflowMessageResource workflowMessageResource = new WorkflowMessageResource();
+		workflowMessageResource.setProcessEngineServices4junit(processEngineRule);
+		Response response = workflowMessageResource.deliver("SDNCAResponse", sdncRequestId, content);
+		System.out.println("Workflow response to SDNC adapter callback: " + response);
+		return true;
+	}
+
+	/**
+	 * Injects a single SDNC adapter callback request. The specified callback data
+	 * may contain the placeholder string ((REQUEST-ID)) which is replaced with
+	 * the actual SDNC request ID. Note: this is not the requestId in the original
+	 * MSO request.
+	 * @param content the content of the callback
+	 * @param respCode the response code (normally 200)
+	 * @param respMsg the response message (normally "OK")
+	 * @param timeout the timeout in milliseconds
+	 * @return true if the callback could be injected, false otherwise
+	 */
+	protected boolean injectSDNCCallback(int respCode, String respMsg,
+			String content, long timeout) {
+
+		String sdncRequestId = (String) getProcessVariable("sdncAdapter",
+			"SDNCA_requestId", timeout);
+
+		if (sdncRequestId == null) {
+			return false;
+		}
+
+		content = content.replace("((REQUEST-ID))", sdncRequestId);
+		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
+		content = content.replace("{{REQUEST-ID}}", sdncRequestId);
+
+		System.out.println("Injecting SDNC adapter callback");
+		CallbackHeader callbackHeader = new CallbackHeader();
+		callbackHeader.setRequestId(sdncRequestId);
+		callbackHeader.setResponseCode(String.valueOf(respCode));
+		callbackHeader.setResponseMessage(respMsg);
+		SDNCAdapterCallbackRequest sdncAdapterCallbackRequest = new SDNCAdapterCallbackRequest();
+		sdncAdapterCallbackRequest.setCallbackHeader(callbackHeader);
+		sdncAdapterCallbackRequest.setRequestData(content);
+		SDNCAdapterCallbackServiceImpl callbackService = new SDNCAdapterCallbackServiceImpl();
+		callbackService.setProcessEngineServices4junit(processEngineRule);
+		SDNCAdapterResponse sdncAdapterResponse = callbackService.sdncAdapterCallback(sdncAdapterCallbackRequest);
+		System.out.println("Workflow response to SDNC adapter callback: " + sdncAdapterResponse);
+
+		return true;
+	}
+
+	/**
+	 * Injects a single VNF adapter callback request. The specified callback data
+	 * may contain the placeholder string ((MESSAGE-ID)) which is replaced with
+	 * the actual message ID. Note: this is not the requestId in the original
+	 * MSO request.
+	 * @param content the content of the callback
+	 * @param timeout the timeout in milliseconds
+	 * @return true if the callback could be injected, false otherwise
+	 */
+	protected boolean injectVnfAdapterRestCallback(String content, long timeout) {
+		String messageId = (String) getProcessVariable("vnfAdapterRestV1",
+			"VNFAResponse_CORRELATOR", timeout);
+
+		if (messageId == null) {
+			return false;
+		}
+
+		content = content.replace("((MESSAGE-ID))", messageId);
+		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
+		content = content.replace("{{MESSAGE-ID}}", messageId);
+
+		System.out.println("Injecting VNF adapter callback");
+		WorkflowMessageResource workflowMessageResource = new WorkflowMessageResource();
+		workflowMessageResource.setProcessEngineServices4junit(processEngineRule);
+		Response response = workflowMessageResource.deliver("VNFAResponse", messageId, content);
+		System.out.println("Workflow response to VNF adapter callback: " + response);
+		return true;
+	}
+
+	/**
+	 * Injects a Create VNF adapter callback request. The specified callback data
+	 * may contain the placeholder string ((MESSAGE-ID)) which is replaced with
+	 * the actual message ID.  It may also contain the placeholder string
+	 * ((REQUEST-ID)) which is replaced request ID of the original MSO request.
+	 * @param content the content of the callback
+	 * @param timeout the timeout in milliseconds
+	 * @return true if the callback could be injected, false otherwise
+	 * @throws JAXBException if the content does not adhere to the schema
+	 */
+	protected boolean injectCreateVNFCallback(String content, long timeout) {
+
+		String messageId = (String) getProcessVariable("vnfAdapterCreateV1",
+			"VNFC_messageId", timeout);
+
+		if (messageId == null) {
+			return false;
+		}
+
+		content = content.replace("((MESSAGE-ID))", messageId);
+		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
+		content = content.replace("{{MESSAGE-ID}}", messageId);
+
+		if(content.contains("((REQUEST-ID))")){
+			content = content.replace("((REQUEST-ID))", msoRequestId);
+		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
+			content = content.replace("{{REQUEST-ID}}", msoRequestId);
+		}
+
+		System.out.println("Injecting VNF adapter callback");
+
+		// Is it possible to unmarshal this with JAXB?  I couldn't.
+
+		CreateVnfNotification createVnfNotification = new CreateVnfNotification();
+		XPathTool xpathTool = new VnfNotifyXPathTool();
+		xpathTool.setXML(content);
+
+		try {
+			String completed = xpathTool.evaluate(
+				"/tns:createVnfNotification/tns:completed/text()");
+			createVnfNotification.setCompleted("true".equals(completed));
+
+			String vnfId = xpathTool.evaluate(
+				"/tns:createVnfNotification/tns:vnfId/text()");
+			createVnfNotification.setVnfId(vnfId);
+
+			NodeList entries = (NodeList) xpathTool.evaluate(
+				"/tns:createVnfNotification/tns:outputs/tns:entry",
+				XPathConstants.NODESET);
+
+			CreateVnfNotificationOutputs outputs = new CreateVnfNotificationOutputs();
+
+			for (int i = 0; i < entries.getLength(); i++) {
+				Node node = entries.item(i);
+
+				if (node.getNodeType() == Node.ELEMENT_NODE) {
+					Element entry = (Element) node;
+					String key = entry.getElementsByTagNameNS("*", "key").item(0).getTextContent();
+					String value = entry.getElementsByTagNameNS("*", "value").item(0).getTextContent();
+					outputs.add(key, value);
+				}
+			}
+
+			createVnfNotification.setOutputs(outputs);
+
+			VnfRollback rollback = new VnfRollback();
+
+			String cloudSiteId = xpathTool.evaluate(
+				"/tns:createVnfNotification/tns:rollback/tns:cloudSiteId/text()");
+			rollback.setCloudSiteId(cloudSiteId);
+
+			String requestId = xpathTool.evaluate(
+				"/tns:createVnfNotification/tns:rollback/tns:msoRequest/tns:requestId/text()");
+			String serviceInstanceId = xpathTool.evaluate(
+				"/tns:createVnfNotification/tns:rollback/tns:msoRequest/tns:serviceInstanceId/text()");
+
+			if (requestId != null || serviceInstanceId != null) {
+				MsoRequest msoRequest = new MsoRequest();
+				msoRequest.setRequestId(requestId);
+				msoRequest.setServiceInstanceId(serviceInstanceId);
+				rollback.setMsoRequest(msoRequest);
+			}
+
+			String tenantCreated = xpathTool.evaluate(
+				"/tns:createVnfNotification/tns:rollback/tns:tenantCreated/text()");
+			rollback.setTenantCreated("true".equals(tenantCreated));
+
+			String tenantId = xpathTool.evaluate(
+				"/tns:createVnfNotification/tns:rollback/tns:tenantId/text()");
+			rollback.setTenantId(tenantId);
+
+			String vnfCreated = xpathTool.evaluate(
+				"/tns:createVnfNotification/tns:rollback/tns:vnfCreated/text()");
+			rollback.setVnfCreated("true".equals(vnfCreated));
+
+			String rollbackVnfId = xpathTool.evaluate(
+				"/tns:createVnfNotification/tns:rollback/tns:vnfId/text()");
+			rollback.setVnfId(rollbackVnfId);
+
+			createVnfNotification.setRollback(rollback);
+
+		} catch (Exception e) {
+			System.out.println("Failed to unmarshal VNF callback content:");
+			System.out.println(content);
+			return false;
+		}
+
+		VnfAdapterNotifyServiceImpl notifyService = new VnfAdapterNotifyServiceImpl();
+		notifyService.setProcessEngineServices4junit(processEngineRule);
+
+		notifyService.createVnfNotification(
+			messageId,
+			createVnfNotification.isCompleted(),
+			createVnfNotification.getException(),
+			createVnfNotification.getErrorMessage(),
+			createVnfNotification.getVnfId(),
+			createVnfNotification.getOutputs(),
+			createVnfNotification.getRollback());
+
+		return true;
+	}
+
+	/**
+	 * Injects a Delete VNF adapter callback request. The specified callback data
+	 * may contain the placeholder string ((MESSAGE-ID)) which is replaced with
+	 * the actual message ID.  It may also contain the placeholder string
+	 * ((REQUEST-ID)) which is replaced request ID of the original MSO request.
+	 * @param content the content of the callback
+	 * @param timeout the timeout in milliseconds
+	 * @return true if the callback could be injected, false otherwise
+	 * @throws JAXBException if the content does not adhere to the schema
+	 */
+	protected boolean injectDeleteVNFCallback(String content, long timeout) {
+
+		String messageId = (String) getProcessVariable("vnfAdapterDeleteV1",
+			"VNFDEL_uuid", timeout);
+
+		if (messageId == null) {
+			return false;
+		}
+
+		content = content.replace("((MESSAGE-ID))", messageId);
+		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
+		content = content.replace("{{MESSAGE-ID}}", messageId);
+
+		System.out.println("Injecting VNF adapter delete callback");
+
+		// Is it possible to unmarshal this with JAXB?  I couldn't.
+
+		DeleteVnfNotification deleteVnfNotification = new DeleteVnfNotification();
+		XPathTool xpathTool = new VnfNotifyXPathTool();
+		xpathTool.setXML(content);
+
+		try {
+			String completed = xpathTool.evaluate(
+				"/tns:deleteVnfNotification/tns:completed/text()");
+			deleteVnfNotification.setCompleted("true".equals(completed));
+			// if notification failure, set the exception and error message
+			if (deleteVnfNotification.isCompleted() == false) {
+				deleteVnfNotification.setException(MsoExceptionCategory.INTERNAL);
+				deleteVnfNotification.setErrorMessage(xpathTool.evaluate(
+						"/tns:deleteVnfNotification/tns:errorMessage/text()")) ;
+			}
+
+		} catch (Exception e) {
+			System.out.println("Failed to unmarshal VNF Delete callback content:");
+			System.out.println(content);
+			return false;
+		}
+
+		VnfAdapterNotifyServiceImpl notifyService = new VnfAdapterNotifyServiceImpl();
+		notifyService.setProcessEngineServices4junit(processEngineRule);
+
+		notifyService.deleteVnfNotification(
+			messageId,
+			deleteVnfNotification.isCompleted(),
+			deleteVnfNotification.getException(),
+			deleteVnfNotification.getErrorMessage());
+
+		return true;
+	}
+
+	/**
+	 * Injects a Update VNF adapter callback request. The specified callback data
+	 * may contain the placeholder string ((MESSAGE-ID)) which is replaced with
+	 * the actual message ID.  It may also contain the placeholder string
+	 * ((REQUEST-ID)) which is replaced request ID of the original MSO request.
+	 * @param content the content of the callback
+	 * @param timeout the timeout in milliseconds
+	 * @return true if the callback could be injected, false otherwise
+	 * @throws JAXBException if the content does not adhere to the schema
+	 */
+	protected boolean injectUpdateVNFCallback(String content, long timeout) {
+
+		String messageId = (String) getProcessVariable("vnfAdapterUpdate",
+			"VNFU_messageId", timeout);
+
+		if (messageId == null) {
+			return false;
+		}
+
+		content = content.replace("((MESSAGE-ID))", messageId);
+		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
+		content = content.replace("{{MESSAGE-ID}}", messageId);
+
+		content = content.replace("((REQUEST-ID))", msoRequestId);
+		// Deprecated usage.  All test code should switch to the (( ... )) syntax.
+		content = content.replace("{{REQUEST-ID}}", msoRequestId);
+
+		System.out.println("Injecting VNF adapter callback");
+
+		// Is it possible to unmarshal this with JAXB?  I couldn't.
+
+		UpdateVnfNotification updateVnfNotification = new UpdateVnfNotification();
+		XPathTool xpathTool = new VnfNotifyXPathTool();
+		xpathTool.setXML(content);
+
+		try {
+			String completed = xpathTool.evaluate(
+				"/tns:updateVnfNotification/tns:completed/text()");
+			updateVnfNotification.setCompleted("true".equals(completed));
+
+			NodeList entries = (NodeList) xpathTool.evaluate(
+				"/tns:updateVnfNotification/tns:outputs/tns:entry",
+				XPathConstants.NODESET);
+
+			UpdateVnfNotificationOutputs outputs = new UpdateVnfNotificationOutputs();
+
+			for (int i = 0; i < entries.getLength(); i++) {
+				Node node = entries.item(i);
+
+				if (node.getNodeType() == Node.ELEMENT_NODE) {
+					Element entry = (Element) node;
+					String key = entry.getElementsByTagNameNS("*", "key").item(0).getTextContent();
+					String value = entry.getElementsByTagNameNS("*", "value").item(0).getTextContent();
+					outputs.add(key, value);
+				}
+			}
+
+			updateVnfNotification.setOutputs(outputs);
+
+			VnfRollback rollback = new VnfRollback();
+
+			String cloudSiteId = xpathTool.evaluate(
+				"/tns:updateVnfNotification/tns:rollback/tns:cloudSiteId/text()");
+			rollback.setCloudSiteId(cloudSiteId);
+
+			String requestId = xpathTool.evaluate(
+				"/tns:updateVnfNotification/tns:rollback/tns:msoRequest/tns:requestId/text()");
+			String serviceInstanceId = xpathTool.evaluate(
+				"/tns:updateVnfNotification/tns:rollback/tns:msoRequest/tns:serviceInstanceId/text()");
+
+			if (requestId != null || serviceInstanceId != null) {
+				MsoRequest msoRequest = new MsoRequest();
+				msoRequest.setRequestId(requestId);
+				msoRequest.setServiceInstanceId(serviceInstanceId);
+				rollback.setMsoRequest(msoRequest);
+			}
+
+			String tenantCreated = xpathTool.evaluate(
+				"/tns:updateVnfNotification/tns:rollback/tns:tenantCreated/text()");
+			rollback.setTenantCreated("true".equals(tenantCreated));
+
+			String tenantId = xpathTool.evaluate(
+				"/tns:updateVnfNotification/tns:rollback/tns:tenantId/text()");
+			rollback.setTenantId(tenantId);
+
+			String vnfCreated = xpathTool.evaluate(
+				"/tns:updateVnfNotification/tns:rollback/tns:vnfCreated/text()");
+			rollback.setVnfCreated("true".equals(vnfCreated));
+
+			String rollbackVnfId = xpathTool.evaluate(
+				"/tns:updateVnfNotification/tns:rollback/tns:vnfId/text()");
+			rollback.setVnfId(rollbackVnfId);
+
+			updateVnfNotification.setRollback(rollback);
+
+		} catch (Exception e) {
+			System.out.println("Failed to unmarshal VNF callback content:");
+			System.out.println(content);
+			return false;
+		}
+
+		VnfAdapterNotifyServiceImpl notifyService = new VnfAdapterNotifyServiceImpl();
+		notifyService.setProcessEngineServices4junit(processEngineRule);
+
+		notifyService.updateVnfNotification(
+			messageId,
+			updateVnfNotification.isCompleted(),
+			updateVnfNotification.getException(),
+			updateVnfNotification.getErrorMessage(),
+			updateVnfNotification.getOutputs(),
+			updateVnfNotification.getRollback());
+
+		return true;
+	}
+
+	/**
+	 * Injects a workflow message. The specified callback data may contain the
+	 * placeholder string ((CORRELATOR)) which is replaced with the actual
+	 * correlator value.
+	 * @param content the message type
+	 * @param content the message content
+	 * @param timeout the timeout in milliseconds
+	 * @return true if the event could be injected, false otherwise
+	 */
+	protected boolean injectWorkflowMessage(String messageType, String content, long timeout) {
+		String correlator = (String) getProcessVariable("ReceiveWorkflowMessage",
+			messageType + "_CORRELATOR", timeout);
+
+		if (correlator == null) {
+			return false;
+		}
+
+		content = content.replace("((CORRELATOR))", correlator);
+
+		System.out.println("Injecting " + messageType + " message");
+		WorkflowMessageResource workflowMessageResource = new WorkflowMessageResource();
+		workflowMessageResource.setProcessEngineServices4junit(processEngineRule);
+		Response response = workflowMessageResource.deliver(messageType, correlator, content);
+		System.out.println("Workflow response to " + messageType + " message: " + response);
+		return true;
+	}
+
+	/**
+	 * Wait for the process to end.
+	 * @param businessKey the process business key
+	 * @param timeout the amount of time to wait, in milliseconds
+	 */
+	public void waitForProcessEnd(String businessKey, long timeout) {
+		System.out.println("Waiting " + timeout + "ms for process with business key " +
+			businessKey + " to end");
+
+		long now = System.currentTimeMillis() + timeout;
+		long endTime = now + timeout;
+
+		while (now <= endTime) {
+			if (isProcessEnded(businessKey)) {
+				System.out.println("Process with business key " + businessKey + " has ended");
+				return;
+			}
+
+			try {
+				Thread.sleep(200);
+			} catch (InterruptedException e) {
+				String msg = "Interrupted waiting for process with business key " +
+					businessKey + " to end";
+				System.out.println(msg);
+				fail(msg);
+			}
+
+			now = System.currentTimeMillis();
+		}
+
+		String msg = "Process with business key " + businessKey +
+			" did not end within " + timeout + "ms";
+		System.out.println(msg);
+		fail(msg);
+	}
+
+	/**
+	 * Verifies that the specified historic process variable has the specified value.
+	 * If the variable does not have the specified value, the test is failed.
+	 * @param businessKey the process business key
+	 * @param variable the variable name
+	 * @param value the expected variable value
+	 */
+	public void checkVariable(String businessKey, String variable, Object value) {
+		if (!isProcessEnded(businessKey)) {
+			fail("Cannot get historic variable " + variable + " because process with business key " +
+				businessKey + " has not ended");
+		}
+
+		Object variableValue = getVariableFromHistory(businessKey, variable);
+		assertEquals(value, variableValue);
+	}
+
+	/**
+	 * Checks to see if the specified process is ended.
+	 * @param businessKey the process business Key
+	 * @return true if the process is ended
+	 */
+	protected boolean isProcessEnded(String businessKey) {
+		HistoricProcessInstance processInstance = processEngineRule.getHistoryService()
+			.createHistoricProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();
+		return processInstance != null && processInstance.getEndTime() != null;
+	}
+
+	/**
+	 * Gets a variable value from a historical process instance.
+	 * @param businessKey the process business key
+	 * @param variableName the variable name
+	 * @return the variable value, or null if the variable could not be
+	 * obtained
+	 */
+	public Object getVariableFromHistory(String businessKey, String variableName) {
+		try {
+			HistoricProcessInstance processInstance = processEngineRule.getHistoryService()
+				.createHistoricProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();
+
+			if (processInstance == null) {
+				return null;
+			}
+
+			HistoricVariableInstance v = processEngineRule.getHistoryService()
+				.createHistoricVariableInstanceQuery().processInstanceId(processInstance.getId())
+				.variableName(variableName).singleResult();
+			return v == null ? null : v.getValue();
+		} catch (Exception e) {
+			System.out.println("Error retrieving variable " + variableName +
+				" from historical process with business key " + businessKey + ": " + e);
+			return null;
+		}
+	}
+
+	/**
+	 * Gets the value of a subflow variable from the specified subflow's
+	 * historical process instance.
+	 *
+	 * @param subflowName - the name of the subflow that contains the variable
+	 * @param variableName the variable name
+	 *
+	 * @return the variable value, or null if the variable could not be obtained
+	 *
+	 */
+	protected Object getVariableFromSubflowHistory(String subflowName, String variableName) {
+		try {
+			List<HistoricProcessInstance> processInstanceList = processEngineRule.getHistoryService()
+					.createHistoricProcessInstanceQuery().processDefinitionName(subflowName).list();
+
+			Collections.sort(processInstanceList, new Comparator<HistoricProcessInstance>() {
+			    public int compare(HistoricProcessInstance m1, HistoricProcessInstance m2) {
+			        return m1.getStartTime().compareTo(m2.getStartTime());
+			    }
+			});
+
+			HistoricProcessInstance processInstance = processInstanceList.get(0);
+
+			if (processInstanceList == null) {
+				return null;
+			}
+
+			HistoricVariableInstance v = processEngineRule.getHistoryService()
+				.createHistoricVariableInstanceQuery().processInstanceId(processInstance.getId())
+				.variableName(variableName).singleResult();
+			return v == null ? null : v.getValue();
+		} catch (Exception e) {
+			System.out.println("Error retrieving variable " + variableName +
+					" from sub flow: " + subflowName + ", Exception is: " + e);
+			return null;
+		}
+	}
+
+	/**
+	 * Gets the value of a subflow variable from the subflow's
+	 * historical process x instance.
+	 *
+	 * @param subflowName - the name of the subflow that contains the variable
+	 * @param variableName the variable name
+	 * @param subflowInstanceIndex - the instance of the subflow (use when same subflow is called more than once from mainflow)
+	 *
+	 * @return the variable value, or null if the variable could not be obtained
+	 */
+	protected Object getVariableFromSubflowHistory(int subflowInstanceIndex, String subflowName, String variableName) {
+		try {
+			List<HistoricProcessInstance> processInstanceList = processEngineRule.getHistoryService()
+					.createHistoricProcessInstanceQuery().processDefinitionName(subflowName).list();
+
+			Collections.sort(processInstanceList, new Comparator<HistoricProcessInstance>() {
+			    public int compare(HistoricProcessInstance m1, HistoricProcessInstance m2) {
+			        return m1.getStartTime().compareTo(m2.getStartTime());
+			    }
+			});
+
+			HistoricProcessInstance processInstance = processInstanceList.get(subflowInstanceIndex);
+
+			if (processInstanceList == null) {
+				return null;
+			}
+
+			HistoricVariableInstance v = processEngineRule.getHistoryService()
+				.createHistoricVariableInstanceQuery().processInstanceId(processInstance.getId())
+				.variableName(variableName).singleResult();
+			return v == null ? null : v.getValue();
+		} catch (Exception e) {
+			System.out.println("Error retrieving variable " + variableName +
+				" from " + subflowInstanceIndex + " instance index of sub flow: " + subflowName + ", Exception is: " + e);
+			return null;
+		}
+	}
+
+
+	/**
+	 * Extracts text from an XML element. This method is not namespace aware
+	 * (namespaces are ignored).  The first matching element is selected.
+	 * @param xml the XML document or fragment
+	 * @param tag the desired element, e.g. "<name>"
+	 * @return the element text, or null if the element was not found
+	 */
+	protected String getXMLTextElement(String xml, String tag) {
+		xml = removeXMLNamespaces(xml);
+
+		if (!tag.startsWith("<")) {
+			tag = "<" + tag + ">";
+		}
+
+		int start = xml.indexOf(tag);
+
+		if (start == -1) {
+			return null;
+		}
+
+		int end = xml.indexOf('<', start + tag.length());
+
+		if (end == -1) {
+			return null;
+		}
+
+		return xml.substring(start + tag.length(), end);
+	}
+
+	/**
+	 * Removes namespace definitions and prefixes from XML, if any.
+	 */
+	private String removeXMLNamespaces(String xml) {
+		// remove xmlns declaration
+		xml = xml.replaceAll("xmlns.*?(\"|\').*?(\"|\')", "");
+
+		// remove opening tag prefix
+		xml = xml.replaceAll("(<)(\\w+:)(.*?>)", "$1$3");
+
+		// remove closing tags prefix
+		xml = xml.replaceAll("(</)(\\w+:)(.*?>)", "$1$3");
+
+		// remove extra spaces left when xmlns declarations are removed
+		xml = xml.replaceAll("\\s+>", ">");
+
+		return xml;
+	}
+
+	/**
+	 * Asserts that two XML documents are semantically equivalent.  Differences
+	 * in whitespace or in namespace usage do not affect the comparison.
+	 * @param expected the expected XML
+	 * @param actual the XML to test
+	 * @throws SAXException
+	 * @throws IOException
+	 */
+    public static void assertXMLEquals(String expected, String actual)
+    		throws SAXException, IOException {
+    	XMLUnit.setIgnoreWhitespace(true);
+    	XMLUnit.setIgnoreAttributeOrder(true);
+    	DetailedDiff diff = new DetailedDiff(XMLUnit.compareXML(expected, actual));
+    	List<?> allDifferences = diff.getAllDifferences();
+    	assertEquals("Differences found: " + diff.toString(), 0, allDifferences.size());
+    }
+
+	/**
+	 * A test implementation of AsynchronousResponse.
+	 */
+	public class TestAsyncResponse implements AsynchronousResponse {
+		Response response = null;
+
+		/**
+		 * {@inheritDoc}
+		 */
+		@Override
+		public synchronized void setResponse(Response response) {
+			this.response = response;
+		}
+
+		/**
+		 * Gets the response.
+		 * @return the response, or null if none has been produced yet
+		 */
+		public synchronized Response getResponse() {
+			return response;
+		}
+	}
+
+	/**
+	 * An object that contains callback data for a "program".
+	 */
+	public class CallbackSet {
+		private final Map<String, String> map = new HashMap<String, String>();
+
+		/**
+		 * Add callback data to the set.
+		 * @param action the action with which the data is associated
+		 * @param content the callback data
+		 */
+		public void put(String action, String content) {
+			map.put(action, content);
+		}
+
+		/**
+		 * Retrieve callback data from the set.
+		 * @param action the action with which the data is associated
+		 * @return the callback data, or null if there is none for the specified operation
+		 */
+		public String get(String action) {
+			return map.get(action);
+		}
+	}
+
+	/**
+	 * A tool for evaluating XPath expressions.
+	 */
+	protected class XPathTool {
+		private final DocumentBuilderFactory factory;
+		private final SimpleNamespaceContext context = new SimpleNamespaceContext();
+		private final XPath xpath = XPathFactory.newInstance().newXPath();
+		private String xml = null;
+		private Document doc = null;
+
+		/**
+		 * Constructor.
+		 */
+		public XPathTool() {
+			factory = DocumentBuilderFactory.newInstance();
+			factory.setNamespaceAware(true);
+			xpath.setNamespaceContext(context);
+		}
+
+		/**
+		 * Adds a namespace.
+		 * @param prefix the namespace prefix
+		 * @param uri the namespace uri
+		 */
+		public synchronized void addNamespace(String prefix, String uri) {
+			context.add(prefix, uri);
+		}
+
+		/**
+		 * Sets the XML content to be operated on.
+		 * @param xml the XML content
+		 */
+		public synchronized void setXML(String xml) {
+			this.xml = xml;
+			this.doc = null;
+		}
+
+		/**
+		 * Returns the document object.
+		 * @return the document object, or null if XML has not been set
+		 * @throws SAXException
+		 * @throws IOException
+		 * @throws ParserConfigurationException
+		 */
+		public synchronized Document getDocument()
+				throws ParserConfigurationException, IOException, SAXException {
+			if (xml == null) {
+				return null;
+			}
+
+			buildDocument();
+			return doc;
+		}
+
+		/**
+		 * Evaluates the specified XPath expression and returns a string result.
+		 * This method throws exceptions on error.
+		 * @param expression the expression
+		 * @return the result object
+		 * @throws ParserConfigurationException
+		 * @throws IOException
+		 * @throws SAXException
+		 * @throws XPathExpressionException on error
+		 */
+		public synchronized String evaluate(String expression)
+				throws ParserConfigurationException, SAXException,
+				IOException, XPathExpressionException {
+			return (String) evaluate(expression, XPathConstants.STRING);
+		}
+
+		/**
+		 * Evaluates the specified XPath expression.
+		 * This method throws exceptions on error.
+		 * @param expression the expression
+		 * @param returnType the return type
+		 * @return the result object
+		 * @throws ParserConfigurationException
+		 * @throws IOException
+		 * @throws SAXException
+		 * @throws XPathExpressionException on error
+		 */
+		public synchronized Object evaluate(String expression, QName returnType)
+				throws ParserConfigurationException, SAXException,
+				IOException, XPathExpressionException {
+
+			buildDocument();
+			XPathExpression expr = xpath.compile(expression);
+			return expr.evaluate(doc, returnType);
+		}
+
+		/**
+		 * Private helper method that builds the document object.
+		 * Assumes the calling method is synchronized.
+		 * @throws ParserConfigurationException
+		 * @throws IOException
+		 * @throws SAXException
+		 */
+		private void buildDocument() throws ParserConfigurationException,
+				IOException, SAXException {
+			if (doc == null) {
+				if (xml == null) {
+					throw new IOException("XML input is null");
+				}
+
+				DocumentBuilder builder = factory.newDocumentBuilder();
+				InputSource source = new InputSource(new StringReader(xml));
+				doc = builder.parse(source);
+			}
+		}
+	}
+
+	/**
+	 * A NamespaceContext class based on a Map.
+	 */
+	private class SimpleNamespaceContext implements NamespaceContext {
+		private Map<String, String> prefixMap = new HashMap<String, String>();
+		private Map<String, String> uriMap = new HashMap<String, String>();
+
+		public synchronized void add(String prefix, String uri) {
+			prefixMap.put(prefix, uri);
+			uriMap.put(uri, prefix);
+		}
+
+		@Override
+		public synchronized String getNamespaceURI(String prefix) {
+			return prefixMap.get(prefix);
+		}
+
+		@Override
+		public Iterator<String> getPrefixes(String uri) {
+			List<String> list = new ArrayList<String>();
+			String prefix = uriMap.get(uri);
+			if (prefix != null) {
+				list.add(prefix);
+			}
+			return list.iterator();
+		}
+
+		@Override
+		public String getPrefix(String uri) {
+			return uriMap.get(uri);
+		}
+	}
+
+	/**
+	 * A VnfNotify XPathTool.
+	 */
+	protected class VnfNotifyXPathTool extends XPathTool {
+		public VnfNotifyXPathTool() {
+			addNamespace("tns", "http://org.openecomp.mso/vnfNotify");
+		}
+	}
+
+	/**
+	 * Helper class to make it easier to create this type.
+	 */
+	private static class CreateVnfNotificationOutputs
+			extends org.openecomp.mso.bpmn.common.adapter.vnf.CreateVnfNotification.Outputs {
+		public void add(String key, String value) {
+			Entry entry = new Entry();
+			entry.setKey(key);
+			entry.setValue(value);
+			getEntry().add(entry);
+		}
+	}
+
+	/**
+	 * Helper class to make it easier to create this type.
+	 */
+	private static class UpdateVnfNotificationOutputs
+			extends org.openecomp.mso.bpmn.common.adapter.vnf.UpdateVnfNotification.Outputs {
+		public void add(String key, String value) {
+			Entry entry = new Entry();
+			entry.setKey(key);
+			entry.setValue(value);
+			getEntry().add(entry);
+		}
+	}
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTestTransformer.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTestTransformer.java
index 4aa6fbe..c4b236a 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTestTransformer.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTestTransformer.java
@@ -1,21 +1,21 @@
-package org.openecomp.mso.bpmn.common;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Allows a subclass of WorkflowTest to specify one or more WireMock
- * response transformers.  A transformer must be declared as a public
- * static field in the subclass.  For example:
- * <pre>
- *     @WorkflowTestTransformer
- *     public static final ResponseTransformer sdncAdapterMockTransformer =
- *         new SDNCAdapterMockTransformer();
- * </pre>
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.FIELD)
-public @interface WorkflowTestTransformer {
+package org.openecomp.mso.bpmn.common;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Allows a subclass of WorkflowTest to specify one or more WireMock
+ * response transformers.  A transformer must be declared as a public
+ * static field in the subclass.  For example:
+ * <pre>
+ *     @WorkflowTestTransformer
+ *     public static final ResponseTransformer sdncAdapterMockTransformer =
+ *         new SDNCAdapterMockTransformer();
+ * </pre>
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface WorkflowTestTransformer {
 }
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/CRTGVNF_queryAAIResponseVolume.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/CRTGVNF_queryAAIResponseVolume.xml
index 52d2b01..182d7c9 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/CRTGVNF_queryAAIResponseVolume.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/CRTGVNF_queryAAIResponseVolume.xml
@@ -1,22 +1,22 @@
-  <volume-group xmlns="http://com.att.aai.inventory/v6">
-         <volume-group-id>a8399879-31b3-4973-be26-0a0cbe776b58</volume-group-id>
-         <volume-group-name>MoG_CinderVolumes_2</volume-group-name>
-         <heat-stack-id>MoG_CinderVolumes_2/19387dc6-060f-446e-b41f-dcfd29c73845</heat-stack-id>
-         <vnf-type>VmogSvc/moge2e2</vnf-type>
-         <orchestration-status>Active</orchestration-status>
-         <resource-version>1458839419</resource-version>
-         <relationship-list>
-            <relationship>
-               <related-to>tenant</related-to>
-               <related-link>https://aai-app-e2e.test.att.com:8443/aai/v6/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
-               <relationship-data>
-                  <relationship-key>tenant.tenant-id</relationship-key>
-                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
-               </relationship-data>
-               <related-to-property>
-                  <property-key>tenant.tenant-name</property-key>
-                  <property-value>MOG-25208-D-01</property-value>
-               </related-to-property>
-            </relationship>
-         </relationship-list>
+  <volume-group xmlns="http://com.aai.inventory/v6">
+         <volume-group-id>a8399879-31b3-4973-be26-0a0cbe776b58</volume-group-id>
+         <volume-group-name>MoG_CinderVolumes_2</volume-group-name>
+         <heat-stack-id>MoG_CinderVolumes_2/19387dc6-060f-446e-b41f-dcfd29c73845</heat-stack-id>
+         <vnf-type>VmogSvc/moge2e2</vnf-type>
+         <orchestration-status>Active</orchestration-status>
+         <resource-version>1458839419</resource-version>
+         <relationship-list>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v6/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+               </relationship-data>
+               <related-to-property>
+                  <property-key>tenant.tenant-name</property-key>
+                  <property-value>MOG-25208-D-01</property-value>
+               </related-to-property>
+            </relationship>
+         </relationship-list>
       </volume-group>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/CRTGVNF_queryAAIResponseVolume_idsNotMatch.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/CRTGVNF_queryAAIResponseVolume_idsNotMatch.xml
index 79e7d84..9b91bc5 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/CRTGVNF_queryAAIResponseVolume_idsNotMatch.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/CRTGVNF_queryAAIResponseVolume_idsNotMatch.xml
@@ -1,22 +1,22 @@
-  <volume-group xmlns="http://com.att.aai.inventory/v6">
-         <volume-group-id>a8399879-31b3-4973-be26-0a0cbe776b58</volume-group-id>
-         <volume-group-name>MoG_CinderVolumes_2</volume-group-name>
-         <heat-stack-id>MoG_CinderVolumes_2/19387dc6-060f-446e-b41f-dcfd29c73845</heat-stack-id>
-         <vnf-type>VmogSvc/moge2e2</vnf-type>
-         <orchestration-status>Active</orchestration-status>
-         <resource-version>1458839419</resource-version>
-         <relationship-list>
-            <relationship>
-               <related-to>tenant</related-to>
-               <related-link>https://aai-app-e2e.test.att.com:8443/aai/v6/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
-               <relationship-data>
-                  <relationship-key>tenant.tenant-id</relationship-key>
-                  <relationship-value>83464847234ee8937416c65507d267</relationship-value>
-               </relationship-data>
-               <related-to-property>
-                  <property-key>tenant.tenant-name</property-key>
-                  <property-value>MOG-25208-D-01</property-value>
-               </related-to-property>
-            </relationship>
-         </relationship-list>
+  <volume-group xmlns="http://com.aai.inventory/v6">
+         <volume-group-id>a8399879-31b3-4973-be26-0a0cbe776b58</volume-group-id>
+         <volume-group-name>MoG_CinderVolumes_2</volume-group-name>
+         <heat-stack-id>MoG_CinderVolumes_2/19387dc6-060f-446e-b41f-dcfd29c73845</heat-stack-id>
+         <vnf-type>VmogSvc/moge2e2</vnf-type>
+         <orchestration-status>Active</orchestration-status>
+         <resource-version>1458839419</resource-version>
+         <relationship-list>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v6/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>83464847234ee8937416c65507d267</relationship-value>
+               </relationship-data>
+               <related-to-property>
+                  <property-key>tenant.tenant-name</property-key>
+                  <property-value>MOG-25208-D-01</property-value>
+               </related-to-property>
+            </relationship>
+         </relationship-list>
       </volume-group>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/CreateServiceInstance/createServiceInstance_genericQueryByInstanceName_AAIResponse_200.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/CreateServiceInstance/createServiceInstance_genericQueryByInstanceName_AAIResponse_200.xml
index 742ec13..fce5afa 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/CreateServiceInstance/createServiceInstance_genericQueryByInstanceName_AAIResponse_200.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/CreateServiceInstance/createServiceInstance_genericQueryByInstanceName_AAIResponse_200.xml
@@ -1,13 +1,13 @@
-<search-results xmlns="http://com.att.aai.inventory">
-      <service-instances> 
-	   <service-instance>
-         <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
-         <persona-model-id>gg0e927b-6087-5574-9ef8-c5e4d5847db5</persona-model-id>
-         <persona-model-version>V1.0</persona-model-version>
-         <service-instance-name>vMOG-AKRON-1234</service-instance-name>
-         <resource-version>1462561835</resource-version>
-         <relationship-list/> 
-         <metadata/> 
-		</service-instance>
-      </service-instances> 		
+<search-results xmlns="http://com.aai.inventory">
+      <service-instances> 
+	   <service-instance>
+         <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
+         <persona-model-id>gg0e927b-6087-5574-9ef8-c5e4d5847db5</persona-model-id>
+         <persona-model-version>V1.0</persona-model-version>
+         <service-instance-name>vMOG-AKRON-1234</service-instance-name>
+         <resource-version>1462561835</resource-version>
+         <relationship-list/> 
+         <metadata/> 
+		</service-instance>
+      </service-instances> 		
       </search-results>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GENDSI_getServiceInstanceResponse.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GENDSI_getServiceInstanceResponse.xml
index 4aeac5c..30b0afb 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GENDSI_getServiceInstanceResponse.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/GENDSI_getServiceInstanceResponse.xml
@@ -1,35 +1,35 @@
-  <service-subscription xmlns="http://com.att.aai.inventory">
-         <service-type>SDN-ETHERNET-INTERNET</service-type>
-         <resource-version>1234</resource-version>
-         <service-instances>
-            <service-instance>
-               <service-instance-id>MIS/1604/0026/SW_INTERNET</service-instance-id>
-               <relationship-list>
-                  <relationship>
-                     <related-to>cvlan-tag</related-to>
-                     <related-link>https://aai-ext1.test.att.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/port-groups/port-group/slcp1447vbc.ipag/cvlan-tags/cvlan-tag/2003/</related-link>
-                     <relationship-data>
-                        <relationship-key>cvlan-tag.cvlan-tag</relationship-key>
-                        <relationship-value>2003</relationship-value>
-                     </relationship-data>
-                     <relationship-data>
-                        <relationship-key>port-group.interface-id</relationship-key>
-                        <relationship-value>slcp1447vbc.ipag</relationship-value>
-                     </relationship-data>
-                     <relationship-data>
-                        <relationship-key>vce.vnf-id</relationship-key>
-                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
-                     </relationship-data>
-                  </relationship>
-                  <relationship>
-                     <related-to>vce</related-to>
-					 <related-link>https://aai-ext1.test.att.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/</related-link>
-                     <relationship-data>
-                        <relationship-key>vce.vnf-id</relationship-key>
-                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
-                     </relationship-data>
-                  </relationship>
-               </relationship-list>
-            </service-instance>
-         </service-instances>
+  <service-subscription xmlns="http://com.aai.inventory">
+         <service-type>SDN-ETHERNET-INTERNET</service-type>
+         <resource-version>1234</resource-version>
+         <service-instances>
+            <service-instance>
+               <service-instance-id>MIS/1604/0026/SW_INTERNET</service-instance-id>
+               <relationship-list>
+                  <relationship>
+                     <related-to>cvlan-tag</related-to>
+                     <related-link>https://aai-ext1.test.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/port-groups/port-group/slcp1447vbc.ipag/cvlan-tags/cvlan-tag/2003/</related-link>
+                     <relationship-data>
+                        <relationship-key>cvlan-tag.cvlan-tag</relationship-key>
+                        <relationship-value>2003</relationship-value>
+                     </relationship-data>
+                     <relationship-data>
+                        <relationship-key>port-group.interface-id</relationship-key>
+                        <relationship-value>slcp1447vbc.ipag</relationship-value>
+                     </relationship-data>
+                     <relationship-data>
+                        <relationship-key>vce.vnf-id</relationship-key>
+                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
+                     </relationship-data>
+                  </relationship>
+                  <relationship>
+                     <related-to>vce</related-to>
+					 <related-link>https://aai-ext1.test.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/</related-link>
+                     <relationship-data>
+                        <relationship-key>vce.vnf-id</relationship-key>
+                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
+                     </relationship-data>
+                  </relationship>
+               </relationship-list>
+            </service-instance>
+         </service-instances>
       </service-subscription>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfByNameResponse.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfByNameResponse.xml
index a397e5b..a609a35 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfByNameResponse.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfByNameResponse.xml
@@ -1,23 +1,23 @@
-<generic-vnfs xmlns="http://com.att.aai.inventory/v3">
-         <generic-vnf>
-            <vnf-id>2f1cc940-455f-4ee2-9411-a7899cd4f124</vnf-id>
-            <vnf-name>testVnfName123</vnf-name>
-            <vnf-type>mmsc-capacity</vnf-type>
-            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-            <equipment-role>vMMSC</equipment-role>
-            <orchestration-status>pending-create</orchestration-status>
-            <resource-version>testReVer123</resource-version>
-            <relationship-list>
-               <relationship>
-                  <related-to>nothing</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
-                  </relationship-data>
-               </relationship>
-            </relationship-list>
-            <l-interfaces/>
-            <lag-interfaces/>
-         </generic-vnf>
+<generic-vnfs xmlns="http://com.aai.inventory/v3">
+         <generic-vnf>
+            <vnf-id>2f1cc940-455f-4ee2-9411-a7899cd4f124</vnf-id>
+            <vnf-name>testVnfName123</vnf-name>
+            <vnf-type>mmsc-capacity</vnf-type>
+            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+            <equipment-role>vMMSC</equipment-role>
+            <orchestration-status>pending-create</orchestration-status>
+            <resource-version>testReVer123</resource-version>
+            <relationship-list>
+               <relationship>
+                  <related-to>nothing</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
+                  </relationship-data>
+               </relationship>
+            </relationship-list>
+            <l-interfaces/>
+            <lag-interfaces/>
+         </generic-vnf>
       </generic-vnfs>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse.xml
index 3227a03..2b70f0b 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse.xml
@@ -1,90 +1,90 @@
-<generic-vnfs xmlns="http://com.att.aai.inventory/v3">
-         <generic-vnf>
-            <vnf-id>2f1cc940-455f-4ee2-9411-a7899cd4f124</vnf-id>
-            <vnf-name>testVnfName123</vnf-name>
-            <vnf-type>mmsc-capacity</vnf-type>
-            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-            <equipment-role>vMMSC</equipment-role>
-            <orchestration-status>pending-create</orchestration-status>
-            <relationship-list>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
-                  </relationship-data>
-               </relationship>
-            </relationship-list>
-            <l-interfaces/>
-            <lag-interfaces/>
-         </generic-vnf>
-         <generic-vnf>
-            <vnf-id>802767b3-18a6-4432-96db-25522786aee0</vnf-id>
-            <vnf-name>ZRDM1MMSC03</vnf-name>
-            <vnf-type>mmsc-capacity</vnf-type>
-            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-            <equipment-role>vMMSC</equipment-role>
-            <orchestration-status>pending-create</orchestration-status>
-            <relationship-list>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
-                  </relationship-data>
-               </relationship>
-            </relationship-list>
-            <l-interfaces/>
-            <lag-interfaces/>
-         </generic-vnf>
+<generic-vnfs xmlns="http://com.aai.inventory/v3">
+         <generic-vnf>
+            <vnf-id>2f1cc940-455f-4ee2-9411-a7899cd4f124</vnf-id>
+            <vnf-name>testVnfName123</vnf-name>
+            <vnf-type>mmsc-capacity</vnf-type>
+            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+            <equipment-role>vMMSC</equipment-role>
+            <orchestration-status>pending-create</orchestration-status>
+            <relationship-list>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
+                  </relationship-data>
+               </relationship>
+            </relationship-list>
+            <l-interfaces/>
+            <lag-interfaces/>
+         </generic-vnf>
+         <generic-vnf>
+            <vnf-id>802767b3-18a6-4432-96db-25522786aee0</vnf-id>
+            <vnf-name>ZRDM1MMSC03</vnf-name>
+            <vnf-type>mmsc-capacity</vnf-type>
+            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+            <equipment-role>vMMSC</equipment-role>
+            <orchestration-status>pending-create</orchestration-status>
+            <relationship-list>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
+                  </relationship-data>
+               </relationship>
+            </relationship-list>
+            <l-interfaces/>
+            <lag-interfaces/>
+         </generic-vnf>
       </generic-vnfs>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse_hasRelationships.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse_hasRelationships.xml
index 3227a03..2b70f0b 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse_hasRelationships.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse_hasRelationships.xml
@@ -1,90 +1,90 @@
-<generic-vnfs xmlns="http://com.att.aai.inventory/v3">
-         <generic-vnf>
-            <vnf-id>2f1cc940-455f-4ee2-9411-a7899cd4f124</vnf-id>
-            <vnf-name>testVnfName123</vnf-name>
-            <vnf-type>mmsc-capacity</vnf-type>
-            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-            <equipment-role>vMMSC</equipment-role>
-            <orchestration-status>pending-create</orchestration-status>
-            <relationship-list>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
-                  </relationship-data>
-               </relationship>
-            </relationship-list>
-            <l-interfaces/>
-            <lag-interfaces/>
-         </generic-vnf>
-         <generic-vnf>
-            <vnf-id>802767b3-18a6-4432-96db-25522786aee0</vnf-id>
-            <vnf-name>ZRDM1MMSC03</vnf-name>
-            <vnf-type>mmsc-capacity</vnf-type>
-            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-            <equipment-role>vMMSC</equipment-role>
-            <orchestration-status>pending-create</orchestration-status>
-            <relationship-list>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.att.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
-                  </relationship-data>
-               </relationship>
-            </relationship-list>
-            <l-interfaces/>
-            <lag-interfaces/>
-         </generic-vnf>
+<generic-vnfs xmlns="http://com.aai.inventory/v3">
+         <generic-vnf>
+            <vnf-id>2f1cc940-455f-4ee2-9411-a7899cd4f124</vnf-id>
+            <vnf-name>testVnfName123</vnf-name>
+            <vnf-type>mmsc-capacity</vnf-type>
+            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+            <equipment-role>vMMSC</equipment-role>
+            <orchestration-status>pending-create</orchestration-status>
+            <relationship-list>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
+                  </relationship-data>
+               </relationship>
+            </relationship-list>
+            <l-interfaces/>
+            <lag-interfaces/>
+         </generic-vnf>
+         <generic-vnf>
+            <vnf-id>802767b3-18a6-4432-96db-25522786aee0</vnf-id>
+            <vnf-name>ZRDM1MMSC03</vnf-name>
+            <vnf-type>mmsc-capacity</vnf-type>
+            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+            <equipment-role>vMMSC</equipment-role>
+            <orchestration-status>pending-create</orchestration-status>
+            <relationship-list>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
+                  </relationship-data>
+               </relationship>
+               <relationship>
+                  <related-to>l3-network</related-to>
+                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
+                  <relationship-data>
+                     <relationship-key>l3-network.network-id</relationship-key>
+                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
+                  </relationship-data>
+               </relationship>
+            </relationship-list>
+            <l-interfaces/>
+            <lag-interfaces/>
+         </generic-vnf>
       </generic-vnfs>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlById.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlById.xml
index 28ce8ef..b1f640f 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlById.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlById.xml
@@ -1,6 +1,6 @@
-    <search-results xmlns="http://com.att.aai.inventory">
-         <result-data>
-            <resource-type>service-instance</resource-type>
-            <resource-link>https://aai-ext1.test.att.com:8443/aai/v7/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/123456789/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET</resource-link>
-         </result-data>
+    <search-results xmlns="http://com.aai.inventory">
+         <result-data>
+            <resource-type>service-instance</resource-type>
+            <resource-link>https://aai-ext1.test.com:8443/aai/v7/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/123456789/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET</resource-link>
+         </result-data>
       </search-results>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlByName.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlByName.xml
index 28ce8ef..b1f640f 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlByName.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlByName.xml
@@ -1,6 +1,6 @@
-    <search-results xmlns="http://com.att.aai.inventory">
-         <result-data>
-            <resource-type>service-instance</resource-type>
-            <resource-link>https://aai-ext1.test.att.com:8443/aai/v7/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/123456789/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET</resource-link>
-         </result-data>
+    <search-results xmlns="http://com.aai.inventory">
+         <result-data>
+            <resource-type>service-instance</resource-type>
+            <resource-link>https://aai-ext1.test.com:8443/aai/v7/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/123456789/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET</resource-link>
+         </result-data>
       </search-results>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceInstance.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceInstance.xml
index 5ffdda2..84d8600 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceInstance.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceInstance.xml
@@ -1,30 +1,30 @@
-<service-instance>
-               <service-instance-id>MIS/1604/0026/SW_INTERNET</service-instance-id>
-               <resource-version>123456789</resource-version>
-               <relationship-list>
-                  <relationship>
-                     <related-to>cvlan-tag</related-to>
-                     <related-link>https://aai-ext1.test.att.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/port-groups/port-group/slcp1447vbc.ipag/cvlan-tags/cvlan-tag/2003/</related-link>
-                     <relationship-data>
-                        <relationship-key>cvlan-tag.cvlan-tag</relationship-key>
-                        <relationship-value>2003</relationship-value>
-                     </relationship-data>
-                     <relationship-data>
-                        <relationship-key>port-group.interface-id</relationship-key>
-                        <relationship-value>slcp1447vbc.ipag</relationship-value>
-                     </relationship-data>
-                     <relationship-data>
-                        <relationship-key>vce.vnf-id</relationship-key>
-                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
-                     </relationship-data>
-                  </relationship>
-                  <relationship>
-                     <related-to>vce</related-to>
-					 <related-link>https://aai-ext1.test.att.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/</related-link>
-                     <relationship-data>
-                        <relationship-key>vce.vnf-id</relationship-key>
-                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
-                     </relationship-data>
-                  </relationship>
-               </relationship-list>
+<service-instance>
+               <service-instance-id>MIS/1604/0026/SW_INTERNET</service-instance-id>
+               <resource-version>123456789</resource-version>
+               <relationship-list>
+                  <relationship>
+                     <related-to>cvlan-tag</related-to>
+                     <related-link>https://aai-ext1.test.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/port-groups/port-group/slcp1447vbc.ipag/cvlan-tags/cvlan-tag/2003/</related-link>
+                     <relationship-data>
+                        <relationship-key>cvlan-tag.cvlan-tag</relationship-key>
+                        <relationship-value>2003</relationship-value>
+                     </relationship-data>
+                     <relationship-data>
+                        <relationship-key>port-group.interface-id</relationship-key>
+                        <relationship-value>slcp1447vbc.ipag</relationship-value>
+                     </relationship-data>
+                     <relationship-data>
+                        <relationship-key>vce.vnf-id</relationship-key>
+                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
+                     </relationship-data>
+                  </relationship>
+                  <relationship>
+                     <related-to>vce</related-to>
+					 <related-link>https://aai-ext1.test.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/</related-link>
+                     <relationship-data>
+                        <relationship-key>vce.vnf-id</relationship-key>
+                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
+                     </relationship-data>
+                  </relationship>
+               </relationship-list>
             </service-instance>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceSubscription.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceSubscription.xml
index 41815d4..85cd5d6 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceSubscription.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceSubscription.xml
@@ -1,34 +1,34 @@
-<service-subscription xmlns="http://com.att.aai.inventory">
-     <service-type>SDN-ETHERNET-INTERNET</service-type>
-     <resource-version>1234</resource-version>
-		<service-instance>
-               <service-instance-id>MIS/1604/0026/SW_INTERNET</service-instance-id>
-               <resource-version>123456789</resource-version>
-               <relationship-list>
-                  <relationship>
-                     <related-to>cvlan-tag</related-to>
-                     <related-link>https://aai-ext1.test.att.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/port-groups/port-group/slcp1447vbc.ipag/cvlan-tags/cvlan-tag/2003/</related-link>
-                     <relationship-data>
-                        <relationship-key>cvlan-tag.cvlan-tag</relationship-key>
-                        <relationship-value>2003</relationship-value>
-                     </relationship-data>
-                     <relationship-data>
-                        <relationship-key>port-group.interface-id</relationship-key>
-                        <relationship-value>slcp1447vbc.ipag</relationship-value>
-                     </relationship-data>
-                     <relationship-data>
-                        <relationship-key>vce.vnf-id</relationship-key>
-                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
-                     </relationship-data>
-                  </relationship>
-                  <relationship>
-                     <related-to>vce</related-to>
-					 <related-link>https://aai-ext1.test.att.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/</related-link>
-                     <relationship-data>
-                        <relationship-key>vce.vnf-id</relationship-key>
-                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
-                     </relationship-data>
-                  </relationship>
-               </relationship-list>
-            </service-instance>
+<service-subscription xmlns="http://com.aai.inventory">
+     <service-type>SDN-ETHERNET-INTERNET</service-type>
+     <resource-version>1234</resource-version>
+		<service-instance>
+               <service-instance-id>MIS/1604/0026/SW_INTERNET</service-instance-id>
+               <resource-version>123456789</resource-version>
+               <relationship-list>
+                  <relationship>
+                     <related-to>cvlan-tag</related-to>
+                     <related-link>https://aai-ext1.test.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/port-groups/port-group/slcp1447vbc.ipag/cvlan-tags/cvlan-tag/2003/</related-link>
+                     <relationship-data>
+                        <relationship-key>cvlan-tag.cvlan-tag</relationship-key>
+                        <relationship-value>2003</relationship-value>
+                     </relationship-data>
+                     <relationship-data>
+                        <relationship-key>port-group.interface-id</relationship-key>
+                        <relationship-value>slcp1447vbc.ipag</relationship-value>
+                     </relationship-data>
+                     <relationship-data>
+                        <relationship-key>vce.vnf-id</relationship-key>
+                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
+                     </relationship-data>
+                  </relationship>
+                  <relationship>
+                     <related-to>vce</related-to>
+					 <related-link>https://aai-ext1.test.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/</related-link>
+                     <relationship-data>
+                        <relationship-key>vce.vnf-id</relationship-key>
+                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
+                     </relationship-data>
+                  </relationship>
+               </relationship-list>
+            </service-instance>
       </service-subscription>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceByNameResponse.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceByNameResponse.xml
index a83e06e..7ada696 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceByNameResponse.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceByNameResponse.xml
@@ -1,97 +1,97 @@
-<vce xmlns="http://com.att.aai.inventory">
-         <vnf-id>1936628a-d22f-4943-8587-a57bab2ece7a</vnf-id>
-         <vnf-name>testVnfName123</vnf-name>
-         <vnf-name2>US0112SLCP1VBRT076</vnf-name2>
-         <vnf-type>esx-vce</vnf-type>
-         <prov-status>NVTPROV</prov-status>
-         <orchestration-status>created</orchestration-status>
-         <resource-version>0000020</resource-version>
-         <heat-stack-id>slcp1476vbc/94a3c72b-94d5-444b-9a1f-647a36c2181d</heat-stack-id>
-         <mso-catalog-key/>
-         <vpe-id>VPESAT-mtanjrsv126</vpe-id>
-         <ipv4-oam-address>135.21.249.160</ipv4-oam-address>
-         <port-groups>
-            <port-group>
-               <interface-id>slcp1476vbc.vpe</interface-id>
-               <neutron-network-id>e7568706-a2a9-45f8-aef8-95a0e2910953</neutron-network-id>
-               <neutron-network-name>dvspg-VCE_VPE-slcp1476vbc</neutron-network-name>
-               <interface-role>Internet</interface-role>
-               <port-group-name>dvspg-VCE_VPE-slcp1476vbc</port-group-name>
-               <resource-version>0000020</resource-version>
-               <switch-name>dvs-slcp1-01</switch-name>
-               <orchestration-status>created</orchestration-status>
-               <heat-stack-id>dvspg-VCE_VPE-slcp1476vbc/c1299f74-da35-4228-b1e0-d2fd07176196</heat-stack-id>
-               <mso-catalog-key/>
-               <cvlan-tags>
-                  <cvlan-tag-entry>
-                     <cvlan-tag>3012</cvlan-tag>
-                     <resource-version>0000020</resource-version>
-                  </cvlan-tag-entry>
-               </cvlan-tags>
-            </port-group>
-            <port-group>
-               <interface-id>slcp1476vbc.ipag</interface-id>
-               <neutron-network-id>3477ddb6-b925-4971-ab62-c84b69634c49</neutron-network-id>
-               <neutron-network-name>dvspg-IPAG_VCE-slcp1476vbc</neutron-network-name>
-               <interface-role>Customer</interface-role>
-               <port-group-name>dvspg-IPAG_VCE-slcp1476vbc</port-group-name>
-               <switch-name>dvs-slcp1-01</switch-name>
-               <resource-version>0000020</resource-version>
-               <orchestration-status>created</orchestration-status>
-               <heat-stack-id>dvspg-IPAG_VCE-slcp1476vbc/1e9c033a-2eef-47f5-9d48-98e0b59538e7</heat-stack-id>
-               <mso-catalog-key/>
-               <cvlan-tags>
-                  <cvlan-tag-entry>
-                     <cvlan-tag>2003</cvlan-tag>
-                     <resource-version>0000020</resource-version>
-                  </cvlan-tag-entry>
-               </cvlan-tags>
-            </port-group>
-         </port-groups>
-         <relationship-list>
-            <relationship>
-               <related-to>service-instance</related-to>
-               <related-link>https://aai-ext1.test.att.com:8443/aai/v2/business/customers/customer/011216-1602-SDNC001/service-subscriptions/service-subscription/SDN-ETHERNET-INTERNET/service-instances/service-instance/SDNC%2FVLXM%2F0112001%2F%2FSW_INTERNET/</related-link>
-               <relationship-data>
-                  <relationship-key>service-instance.service-instance-id</relationship-key>
-                  <relationship-value>SDNC/VLXM/0112001//SW_INTERNET</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>service-subscription.service-type</relationship-key>
-                  <relationship-value>SDN-ETHERNET-INTERNET</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>customer.global-customer-id</relationship-key>
-                  <relationship-value>011216-1602-SDNC001</relationship-value>
-               </relationship-data>
-            </relationship>
-            <relationship>
-               <related-to>vserver</related-to>
-               <related-link>https://aai-ext1.test.att.com:8443/aai/servers/v2/3d5f3fe23821416fac2b69af65248c74/vservers/ecab47d5-3450-4507-ada9-2b3c58485c51/</related-link>
-               <relationship-data>
-                  <relationship-key>vserver.vserver-id</relationship-key>
-                  <relationship-value>ecab47d5-3450-4507-ada9-2b3c58485c51</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>tenant.tenant-id</relationship-key>
-                  <relationship-value>3d5f3fe23821416fac2b69af65248c74</relationship-value>
-               </relationship-data>
-            </relationship>
-            <relationship>
-               <related-to>complex</related-to>
-               <related-link>https://aai-ext1.test.att.com:8443/aai/v2/cloud-infrastructure/complexes/complex/MDTWNJ21A4/</related-link>
-               <relationship-data>
-                  <relationship-key>complex.physical-location-id</relationship-key>
-                  <relationship-value>MDTWNJ21A4</relationship-value>
-               </relationship-data>
-            </relationship>
-            <relationship>
-               <related-to>availability-zone</related-to>
-               <related-link>https://aai-ext1.test.att.com:8443/aai/v2/cloud-infrastructure/availability-zones/availability-zone/slcp1-esx-az01/</related-link>
-               <relationship-data>
-                  <relationship-key>availability-zone.availability-zone-name</relationship-key>
-                  <relationship-value>slcp1-esx-az01</relationship-value>
-               </relationship-data>
-            </relationship>
-         </relationship-list>
+<vce xmlns="http://com.aai.inventory">
+         <vnf-id>1936628a-d22f-4943-8587-a57bab2ece7a</vnf-id>
+         <vnf-name>testVnfName123</vnf-name>
+         <vnf-name2>US0112SLCP1VBRT076</vnf-name2>
+         <vnf-type>esx-vce</vnf-type>
+         <prov-status>NVTPROV</prov-status>
+         <orchestration-status>created</orchestration-status>
+         <resource-version>0000020</resource-version>
+         <heat-stack-id>slcp1476vbc/94a3c72b-94d5-444b-9a1f-647a36c2181d</heat-stack-id>
+         <mso-catalog-key/>
+         <vpe-id>VPESAT-mtanjrsv126</vpe-id>
+         <ipv4-oam-address>135.21.249.160</ipv4-oam-address>
+         <port-groups>
+            <port-group>
+               <interface-id>slcp1476vbc.vpe</interface-id>
+               <neutron-network-id>e7568706-a2a9-45f8-aef8-95a0e2910953</neutron-network-id>
+               <neutron-network-name>dvspg-VCE_VPE-slcp1476vbc</neutron-network-name>
+               <interface-role>Internet</interface-role>
+               <port-group-name>dvspg-VCE_VPE-slcp1476vbc</port-group-name>
+               <resource-version>0000020</resource-version>
+               <switch-name>dvs-slcp1-01</switch-name>
+               <orchestration-status>created</orchestration-status>
+               <heat-stack-id>dvspg-VCE_VPE-slcp1476vbc/c1299f74-da35-4228-b1e0-d2fd07176196</heat-stack-id>
+               <mso-catalog-key/>
+               <cvlan-tags>
+                  <cvlan-tag-entry>
+                     <cvlan-tag>3012</cvlan-tag>
+                     <resource-version>0000020</resource-version>
+                  </cvlan-tag-entry>
+               </cvlan-tags>
+            </port-group>
+            <port-group>
+               <interface-id>slcp1476vbc.ipag</interface-id>
+               <neutron-network-id>3477ddb6-b925-4971-ab62-c84b69634c49</neutron-network-id>
+               <neutron-network-name>dvspg-IPAG_VCE-slcp1476vbc</neutron-network-name>
+               <interface-role>Customer</interface-role>
+               <port-group-name>dvspg-IPAG_VCE-slcp1476vbc</port-group-name>
+               <switch-name>dvs-slcp1-01</switch-name>
+               <resource-version>0000020</resource-version>
+               <orchestration-status>created</orchestration-status>
+               <heat-stack-id>dvspg-IPAG_VCE-slcp1476vbc/1e9c033a-2eef-47f5-9d48-98e0b59538e7</heat-stack-id>
+               <mso-catalog-key/>
+               <cvlan-tags>
+                  <cvlan-tag-entry>
+                     <cvlan-tag>2003</cvlan-tag>
+                     <resource-version>0000020</resource-version>
+                  </cvlan-tag-entry>
+               </cvlan-tags>
+            </port-group>
+         </port-groups>
+         <relationship-list>
+            <relationship>
+               <related-to>service-instance</related-to>
+               <related-link>https://aai-ext1.test.com:8443/aai/v2/business/customers/customer/011216-1602-SDNC001/service-subscriptions/service-subscription/SDN-ETHERNET-INTERNET/service-instances/service-instance/SDNC%2FVLXM%2F0112001%2F%2FSW_INTERNET/</related-link>
+               <relationship-data>
+                  <relationship-key>service-instance.service-instance-id</relationship-key>
+                  <relationship-value>SDNC/VLXM/0112001//SW_INTERNET</relationship-value>
+               </relationship-data>
+               <relationship-data>
+                  <relationship-key>service-subscription.service-type</relationship-key>
+                  <relationship-value>SDN-ETHERNET-INTERNET</relationship-value>
+               </relationship-data>
+               <relationship-data>
+                  <relationship-key>customer.global-customer-id</relationship-key>
+                  <relationship-value>011216-1602-SDNC001</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>vserver</related-to>
+               <related-link>https://aai-ext1.test.com:8443/aai/servers/v2/3d5f3fe23821416fac2b69af65248c74/vservers/ecab47d5-3450-4507-ada9-2b3c58485c51/</related-link>
+               <relationship-data>
+                  <relationship-key>vserver.vserver-id</relationship-key>
+                  <relationship-value>ecab47d5-3450-4507-ada9-2b3c58485c51</relationship-value>
+               </relationship-data>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>3d5f3fe23821416fac2b69af65248c74</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>complex</related-to>
+               <related-link>https://aai-ext1.test.com:8443/aai/v2/cloud-infrastructure/complexes/complex/MDTWNJ21A4/</related-link>
+               <relationship-data>
+                  <relationship-key>complex.physical-location-id</relationship-key>
+                  <relationship-value>MDTWNJ21A4</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>availability-zone</related-to>
+               <related-link>https://aai-ext1.test.com:8443/aai/v2/cloud-infrastructure/availability-zones/availability-zone/slcp1-esx-az01/</related-link>
+               <relationship-data>
+                  <relationship-key>availability-zone.availability-zone-name</relationship-key>
+                  <relationship-value>slcp1-esx-az01</relationship-value>
+               </relationship-data>
+            </relationship>
+         </relationship-list>
       </vce>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceResponse.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceResponse.xml
index a83e06e..5dc3033 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceResponse.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceResponse.xml
@@ -1,97 +1,97 @@
-<vce xmlns="http://com.att.aai.inventory">
-         <vnf-id>1936628a-d22f-4943-8587-a57bab2ece7a</vnf-id>
-         <vnf-name>testVnfName123</vnf-name>
-         <vnf-name2>US0112SLCP1VBRT076</vnf-name2>
-         <vnf-type>esx-vce</vnf-type>
-         <prov-status>NVTPROV</prov-status>
-         <orchestration-status>created</orchestration-status>
-         <resource-version>0000020</resource-version>
-         <heat-stack-id>slcp1476vbc/94a3c72b-94d5-444b-9a1f-647a36c2181d</heat-stack-id>
-         <mso-catalog-key/>
-         <vpe-id>VPESAT-mtanjrsv126</vpe-id>
-         <ipv4-oam-address>135.21.249.160</ipv4-oam-address>
-         <port-groups>
-            <port-group>
-               <interface-id>slcp1476vbc.vpe</interface-id>
-               <neutron-network-id>e7568706-a2a9-45f8-aef8-95a0e2910953</neutron-network-id>
-               <neutron-network-name>dvspg-VCE_VPE-slcp1476vbc</neutron-network-name>
-               <interface-role>Internet</interface-role>
-               <port-group-name>dvspg-VCE_VPE-slcp1476vbc</port-group-name>
-               <resource-version>0000020</resource-version>
-               <switch-name>dvs-slcp1-01</switch-name>
-               <orchestration-status>created</orchestration-status>
-               <heat-stack-id>dvspg-VCE_VPE-slcp1476vbc/c1299f74-da35-4228-b1e0-d2fd07176196</heat-stack-id>
-               <mso-catalog-key/>
-               <cvlan-tags>
-                  <cvlan-tag-entry>
-                     <cvlan-tag>3012</cvlan-tag>
-                     <resource-version>0000020</resource-version>
-                  </cvlan-tag-entry>
-               </cvlan-tags>
-            </port-group>
-            <port-group>
-               <interface-id>slcp1476vbc.ipag</interface-id>
-               <neutron-network-id>3477ddb6-b925-4971-ab62-c84b69634c49</neutron-network-id>
-               <neutron-network-name>dvspg-IPAG_VCE-slcp1476vbc</neutron-network-name>
-               <interface-role>Customer</interface-role>
-               <port-group-name>dvspg-IPAG_VCE-slcp1476vbc</port-group-name>
-               <switch-name>dvs-slcp1-01</switch-name>
-               <resource-version>0000020</resource-version>
-               <orchestration-status>created</orchestration-status>
-               <heat-stack-id>dvspg-IPAG_VCE-slcp1476vbc/1e9c033a-2eef-47f5-9d48-98e0b59538e7</heat-stack-id>
-               <mso-catalog-key/>
-               <cvlan-tags>
-                  <cvlan-tag-entry>
-                     <cvlan-tag>2003</cvlan-tag>
-                     <resource-version>0000020</resource-version>
-                  </cvlan-tag-entry>
-               </cvlan-tags>
-            </port-group>
-         </port-groups>
-         <relationship-list>
-            <relationship>
-               <related-to>service-instance</related-to>
-               <related-link>https://aai-ext1.test.att.com:8443/aai/v2/business/customers/customer/011216-1602-SDNC001/service-subscriptions/service-subscription/SDN-ETHERNET-INTERNET/service-instances/service-instance/SDNC%2FVLXM%2F0112001%2F%2FSW_INTERNET/</related-link>
-               <relationship-data>
-                  <relationship-key>service-instance.service-instance-id</relationship-key>
-                  <relationship-value>SDNC/VLXM/0112001//SW_INTERNET</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>service-subscription.service-type</relationship-key>
-                  <relationship-value>SDN-ETHERNET-INTERNET</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>customer.global-customer-id</relationship-key>
-                  <relationship-value>011216-1602-SDNC001</relationship-value>
-               </relationship-data>
-            </relationship>
-            <relationship>
-               <related-to>vserver</related-to>
-               <related-link>https://aai-ext1.test.att.com:8443/aai/servers/v2/3d5f3fe23821416fac2b69af65248c74/vservers/ecab47d5-3450-4507-ada9-2b3c58485c51/</related-link>
-               <relationship-data>
-                  <relationship-key>vserver.vserver-id</relationship-key>
-                  <relationship-value>ecab47d5-3450-4507-ada9-2b3c58485c51</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>tenant.tenant-id</relationship-key>
-                  <relationship-value>3d5f3fe23821416fac2b69af65248c74</relationship-value>
-               </relationship-data>
-            </relationship>
-            <relationship>
-               <related-to>complex</related-to>
-               <related-link>https://aai-ext1.test.att.com:8443/aai/v2/cloud-infrastructure/complexes/complex/MDTWNJ21A4/</related-link>
-               <relationship-data>
-                  <relationship-key>complex.physical-location-id</relationship-key>
-                  <relationship-value>MDTWNJ21A4</relationship-value>
-               </relationship-data>
-            </relationship>
-            <relationship>
-               <related-to>availability-zone</related-to>
-               <related-link>https://aai-ext1.test.att.com:8443/aai/v2/cloud-infrastructure/availability-zones/availability-zone/slcp1-esx-az01/</related-link>
-               <relationship-data>
-                  <relationship-key>availability-zone.availability-zone-name</relationship-key>
-                  <relationship-value>slcp1-esx-az01</relationship-value>
-               </relationship-data>
-            </relationship>
-         </relationship-list>
+<vce xmlns="http://com.aai.inventory">
+         <vnf-id>1936628a-d22f-4943-8587-a57bab2ece7a</vnf-id>
+         <vnf-name>testVnfName123</vnf-name>
+         <vnf-name2>US0112SLCP1VBRT076</vnf-name2>
+         <vnf-type>esx-vce</vnf-type>
+         <prov-status>NVTPROV</prov-status>
+         <orchestration-status>created</orchestration-status>
+         <resource-version>0000020</resource-version>
+         <heat-stack-id>slcp1476vbc/94a3c72b-94d5-444b-9a1f-647a36c2181d</heat-stack-id>
+         <mso-catalog-key/>
+         <vpe-id>VPESAT-mtanjrsv126</vpe-id>
+         <ipv4-oam-address>135.21.249.160</ipv4-oam-address>
+         <port-groups>
+            <port-group>
+               <interface-id>slcp1476vbc.vpe</interface-id>
+               <neutron-network-id>e7568706-a2a9-45f8-aef8-95a0e2910953</neutron-network-id>
+               <neutron-network-name>dvspg-VCE_VPE-slcp1476vbc</neutron-network-name>
+               <interface-role>Internet</interface-role>
+               <port-group-name>dvspg-VCE_VPE-slcp1476vbc</port-group-name>
+               <resource-version>0000020</resource-version>
+               <switch-name>dvs-slcp1-01</switch-name>
+               <orchestration-status>created</orchestration-status>
+               <heat-stack-id>dvspg-VCE_VPE-slcp1476vbc/c1299f74-da35-4228-b1e0-d2fd07176196</heat-stack-id>
+               <mso-catalog-key/>
+               <cvlan-tags>
+                  <cvlan-tag-entry>
+                     <cvlan-tag>3012</cvlan-tag>
+                     <resource-version>0000020</resource-version>
+                  </cvlan-tag-entry>
+               </cvlan-tags>
+            </port-group>
+            <port-group>
+               <interface-id>slcp1476vbc.ipag</interface-id>
+               <neutron-network-id>3477ddb6-b925-4971-ab62-c84b69634c49</neutron-network-id>
+               <neutron-network-name>dvspg-IPAG_VCE-slcp1476vbc</neutron-network-name>
+               <interface-role>Customer</interface-role>
+               <port-group-name>dvspg-IPAG_VCE-slcp1476vbc</port-group-name>
+               <switch-name>dvs-slcp1-01</switch-name>
+               <resource-version>0000020</resource-version>
+               <orchestration-status>created</orchestration-status>
+               <heat-stack-id>dvspg-IPAG_VCE-slcp1476vbc/1e9c033a-2eef-47f5-9d48-98e0b59538e7</heat-stack-id>
+               <mso-catalog-key/>
+               <cvlan-tags>
+                  <cvlan-tag-entry>
+                     <cvlan-tag>2003</cvlan-tag>
+                     <resource-version>0000020</resource-version>
+                  </cvlan-tag-entry>
+               </cvlan-tags>
+            </port-group>
+         </port-groups>
+         <relationship-list>
+            <relationship>
+               <related-to>service-instance</related-to>
+               <related-link>https://aai-ext1.test.com:8443/aai/v2/business/customers/customer/011216-1602-SDNC001/service-subscriptions/service-subscription/SDN-ETHERNET-INTERNET/service-instances/service-instance/SDNC%2FVLXM%2F0112001%2F%2FSW_INTERNET/</related-link>
+               <relationship-data>
+                  <relationship-key>service-instance.service-instance-id</relationship-key>
+                  <relationship-value>SDNC/VLXM/0112001//SW_INTERNET</relationship-value>
+               </relationship-data>
+               <relationship-data>
+                  <relationship-key>service-subscription.service-type</relationship-key>
+                  <relationship-value>SDN-ETHERNET-INTERNET</relationship-value>
+               </relationship-data>
+               <relationship-data>
+                  <relationship-key>customer.global-customer-id</relationship-key>
+                  <relationship-value>011216-1602-SDNC001</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>vserver</related-to>
+               <related-link>https://aai-ext1.test.com:8443/aai/servers/v2/3d5f3fe23821416fac2b69af65248c74/vservers/ecab47d5-3450-4507-ada9-2b3c58485c51/</related-link>
+               <relationship-data>
+                  <relationship-key>vserver.vserver-id</relationship-key>
+                  <relationship-value>ecab47d5-3450-4507-ada9-2b3c58485c51</relationship-value>
+               </relationship-data>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>3d5f3fe23821416fac2b69af65248c74</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>complex</related-to>
+               <related-link>https://aai-ext1.test.com:8443/aai/v2/cloud-infrastructure/complexes/complex/MDTWNJ21A4/</related-link>
+               <relationship-data>
+                  <relationship-key>complex.physical-location-id</relationship-key>
+                  <relationship-value>MDTWNJ21A4</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>availability-zone</related-to>
+               <related-link>https://aai-ext1.test..com:8443/aai/v2/cloud-infrastructure/availability-zones/availability-zone/slcp1-esx-az01/</related-link>
+               <relationship-data>
+                  <relationship-key>availability-zone.availability-zone-name</relationship-key>
+                  <relationship-value>slcp1-esx-az01</relationship-value>
+               </relationship-data>
+            </relationship>
+         </relationship-list>
       </vce>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/SDN-ETHERNET-INTERNET/SDNCAdapterV1mock/sdncadaptercallbackrequest.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/SDN-ETHERNET-INTERNET/SDNCAdapterV1mock/sdncadaptercallbackrequest.xml
index b720047..3d1e039 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/SDN-ETHERNET-INTERNET/SDNCAdapterV1mock/sdncadaptercallbackrequest.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/SDN-ETHERNET-INTERNET/SDNCAdapterV1mock/sdncadaptercallbackrequest.xml
@@ -1,350 +1,350 @@
-<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 xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">				&lt;layer3-service-list xmlns="com:att:sdnctl:l3api"&gt;
-					&lt;service-instance-id&gt;FK/VLXM/003717//SW_INTERNET&lt;/service-instance-id&gt;
-					&lt;service-status&gt;
-						&lt;rpc-name&gt;service-configuration-operation&lt;/rpc-name&gt;
-						&lt;rpc-action&gt;activate&lt;/rpc-action&gt;
-						&lt;request-status&gt;synccomplete&lt;/request-status&gt;
-						&lt;final-indicator&gt;N&lt;/final-indicator&gt;
-						&lt;l3sdn-action&gt;Layer3ServiceActivateRequest&lt;/l3sdn-action&gt;
-						&lt;l3sdn-subaction&gt;SUPP&lt;/l3sdn-subaction&gt;
-						&lt;response-timestamp&gt;2015-04-28T21:32:11.386Z&lt;/response-timestamp&gt;
-					&lt;/service-status&gt;
-					&lt;service-data&gt;
-						&lt;internet-evc-access-information&gt;
-							&lt;ip-version&gt;ds&lt;/ip-version&gt;
-							&lt;internet-evc-speed-value&gt;8&lt;/internet-evc-speed-value&gt;
-							&lt;internet-evc-speed-units&gt;Mbps&lt;/internet-evc-speed-units&gt;
-						&lt;/internet-evc-access-information&gt;
-						&lt;vr-lan xmlns="com:att:sdnctl:l3api"&gt;
-							&lt;vr-lan-interface&gt;
-								&lt;static-routes&gt;
-									&lt;v6-static-routes&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-static-route-prefix&gt;2001:1890:12e3:2da::&lt;/v6-static-route-prefix&gt;
-										&lt;v6-static-route-prefix-length&gt;28&lt;/v6-static-route-prefix-length&gt;
-									&lt;/v6-static-routes&gt;
-									&lt;v4-static-routes&gt;
-										&lt;v4-static-route-prefix&gt;255.255.252.1&lt;/v4-static-route-prefix&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
-										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
-									&lt;/v4-static-routes&gt;
-									&lt;v6-static-routes&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-static-route-prefix&gt;2001:1890:12e3:2da::&lt;/v6-static-route-prefix&gt;
-										&lt;v6-static-route-prefix-length&gt;28&lt;/v6-static-route-prefix-length&gt;
-									&lt;/v6-static-routes&gt;
-									&lt;v4-static-routes&gt;
-										&lt;v4-static-route-prefix&gt;255.255.252.2&lt;/v4-static-route-prefix&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
-										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
-									&lt;/v4-static-routes&gt;
-									&lt;v4-static-routes&gt;
-										&lt;v4-static-route-prefix&gt;255.255.252.3&lt;/v4-static-route-prefix&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
-										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
-									&lt;/v4-static-routes&gt;
-								&lt;/static-routes&gt;
-								&lt;dhcp&gt;
-									&lt;v6-dhcp-server-enabled&gt;N&lt;/v6-dhcp-server-enabled&gt;
-									&lt;v4-dhcp-server-enabled&gt;Y&lt;/v4-dhcp-server-enabled&gt;
-									&lt;use-v6-default-pool&gt;N&lt;/use-v6-default-pool&gt;
-									&lt;excluded-v4-dhcp-addresses-from-default-pool&gt;
-									  &lt;excluded-v4-address&gt;192.168.1.7&lt;/excluded-v4-address&gt;
-									&lt;/excluded-v4-dhcp-addresses-from-default-pool&gt;
-									&lt;excluded-v4-dhcp-addresses-from-default-pool&gt;
-									  &lt;excluded-v4-address&gt;192.168.1.8&lt;/excluded-v4-address&gt;
-									&lt;/excluded-v4-dhcp-addresses-from-default-pool&gt;
-									&lt;v4-dhcp-pools&gt;
-										&lt;v4-dhcp-relay-next-hop-address&gt;1.1.1.1&lt;/v4-dhcp-relay-next-hop-address&gt;
-										&lt;v4-dhcp-pool-prefix-length&gt;28&lt;/v4-dhcp-pool-prefix-length&gt;
-										&lt;excluded-v4-addresses&gt;
-											&lt;excluded-v4-address&gt;192.168.1.5&lt;/excluded-v4-address&gt;
-										&lt;/excluded-v4-addresses&gt;
-										&lt;v4-dhcp-relay-gateway-address&gt;2.2.2.1&lt;/v4-dhcp-relay-gateway-address&gt;
-										&lt;excluded-v4-addresses&gt;
-											&lt;excluded-v4-address&gt;192.168.1.6&lt;/excluded-v4-address&gt;
-										&lt;/excluded-v4-addresses&gt;
-										&lt;v4-dhcp-pool-prefix&gt;192.155.2.3&lt;/v4-dhcp-pool-prefix&gt;
-									&lt;/v4-dhcp-pools&gt;
-									&lt;v4-dhcp-pools&gt;
-										&lt;v4-dhcp-relay-next-hop-address&gt;1.1.1.2&lt;/v4-dhcp-relay-next-hop-address&gt;
-										&lt;v4-dhcp-pool-prefix-length&gt;28&lt;/v4-dhcp-pool-prefix-length&gt;
-										&lt;excluded-v4-addresses&gt;
-											&lt;excluded-v4-address&gt;192.168.1.6&lt;/excluded-v4-address&gt;
-										&lt;/excluded-v4-addresses&gt;
-										&lt;v4-dhcp-relay-gateway-address&gt;2.2.2.2&lt;/v4-dhcp-relay-gateway-address&gt;
-										&lt;excluded-v4-addresses&gt;
-											&lt;excluded-v4-address&gt;192.168.1.7&lt;/excluded-v4-address&gt;
-										&lt;/excluded-v4-addresses&gt;
-										&lt;v4-dhcp-pool-prefix&gt;192.155.2.4&lt;/v4-dhcp-pool-prefix&gt;
-									&lt;/v4-dhcp-pools&gt;									
-									&lt;use-v4-default-pool&gt;Y&lt;/use-v4-default-pool&gt;
-									&lt;excluded-v6-dhcp-addresses-from-default-pool&gt;
-									  &lt;excluded-v6-address&gt;1:5&lt;/excluded-v6-address&gt;
-									&lt;/excluded-v6-dhcp-addresses-from-default-pool&gt;
-									&lt;excluded-v6-dhcp-addresses-from-default-pool&gt;
-									  &lt;excluded-v6-address&gt;1:6&lt;/excluded-v6-address&gt;
-									&lt;/excluded-v6-dhcp-addresses-from-default-pool&gt;
-									&lt;v6-dhcp-pools&gt;
-										&lt;v6-dhcp-relay-next-hop-address&gt;4:4&lt;/v6-dhcp-relay-next-hop-address&gt;
-										&lt;v6-dhcp-pool-prefix-length&gt;28&lt;/v6-dhcp-pool-prefix-length&gt;
-										&lt;excluded-v6-addresses&gt;
-											&lt;excluded-v6-address&gt;1:1&lt;/excluded-v6-address&gt;
-										&lt;/excluded-v6-addresses&gt;
-										&lt;v6-dhcp-relay-gateway-address&gt;3:3&lt;/v6-dhcp-relay-gateway-address&gt;
-										&lt;excluded-v6-addresses&gt;
-											&lt;excluded-v6-address&gt;2:2&lt;/excluded-v6-address&gt;
-										&lt;/excluded-v6-addresses&gt;
-										&lt;v6-dhcp-pool-prefix&gt;0:0&lt;/v6-dhcp-pool-prefix&gt;
-									&lt;/v6-dhcp-pools&gt;
-									&lt;v6-dhcp-pools&gt;
-										&lt;v6-dhcp-relay-next-hop-address&gt;4:4&lt;/v6-dhcp-relay-next-hop-address&gt;
-										&lt;v6-dhcp-pool-prefix-length&gt;28&lt;/v6-dhcp-pool-prefix-length&gt;
-										&lt;excluded-v6-addresses&gt;
-											&lt;excluded-v6-address&gt;1:1&lt;/excluded-v6-address&gt;
-										&lt;/excluded-v6-addresses&gt;
-										&lt;v6-dhcp-relay-gateway-address&gt;3:3&lt;/v6-dhcp-relay-gateway-address&gt;
-										&lt;excluded-v6-addresses&gt;
-											&lt;excluded-v6-address&gt;2:2&lt;/excluded-v6-address&gt;
-										&lt;/excluded-v6-addresses&gt;
-										&lt;v6-dhcp-pool-prefix&gt;0:0&lt;/v6-dhcp-pool-prefix&gt;
-									&lt;/v6-dhcp-pools&gt;									
-								&lt;/dhcp&gt;
-								&lt;firewall-lite&gt;
-									&lt;stateful-firewall-lite-v6-enabled&gt;N&lt;/stateful-firewall-lite-v6-enabled&gt;
-									&lt;stateful-firewall-lite-v4-enabled&gt;Y&lt;/stateful-firewall-lite-v4-enabled&gt;
-									&lt;v4-firewall-packet-filters&gt;
-									  &lt;v4-firewall-prefix&gt;0.0.0.1&lt;/v4-firewall-prefix&gt;
-									  &lt;v4-firewall-prefix-length&gt;1&lt;/v4-firewall-prefix-length&gt;
-									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
-									  &lt;udp-ports&gt;
-									    &lt;port-number&gt;1&lt;/port-number&gt;
-									  &lt;/udp-ports&gt;
-									  &lt;tcp-ports&gt;
-									    &lt;port-number&gt;1&lt;/port-number&gt;
-									  &lt;/tcp-ports&gt;
-									&lt;/v4-firewall-packet-filters&gt;
-									&lt;v4-firewall-packet-filters&gt;
-									  &lt;v4-firewall-prefix&gt;0.0.0.2&lt;/v4-firewall-prefix&gt;
-									  &lt;v4-firewall-prefix-length&gt;2&lt;/v4-firewall-prefix-length&gt;
-									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
-									  &lt;udp-ports&gt;
-									    &lt;port-number&gt;2&lt;/port-number&gt;
-									  &lt;/udp-ports&gt;
-									  &lt;tcp-ports&gt;
-									    &lt;port-number&gt;2&lt;/port-number&gt;
-									  &lt;/tcp-ports&gt;
-									&lt;/v4-firewall-packet-filters&gt;
-									&lt;v6-firewall-packet-filters&gt;
-									  &lt;v6-firewall-prefix&gt;:&lt;/v6-firewall-prefix&gt;
-									  &lt;v6-firewall-prefix-length&gt;0&lt;/v6-firewall-prefix-length&gt;
-									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
-									  &lt;udp-ports&gt;
-									    &lt;port-number&gt;3&lt;/port-number&gt;
-									  &lt;/udp-ports&gt;
-									  &lt;tcp-ports&gt;
-									    &lt;port-number&gt;3&lt;/port-number&gt;
-									  &lt;/tcp-ports&gt;
-									&lt;/v6-firewall-packet-filters&gt;
-									&lt;v6-firewall-packet-filters&gt;
-									  &lt;v6-firewall-prefix&gt;:&lt;/v6-firewall-prefix&gt;
-									  &lt;v6-firewall-prefix-length&gt;1&lt;/v6-firewall-prefix-length&gt;
-									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
-									  &lt;udp-ports&gt;
-									    &lt;port-number&gt;4&lt;/port-number&gt;
-									  &lt;/udp-ports&gt;
-									  &lt;tcp-ports&gt;
-									    &lt;port-number&gt;4&lt;/port-number&gt;
-									  &lt;/tcp-ports&gt;
-									&lt;/v6-firewall-packet-filters&gt;
-								&lt;/firewall-lite&gt;
-								&lt;pat&gt;
-									&lt;v4-pat-pools&gt;
-										&lt;v4-pat-pool-prefix&gt;192.168.1.44&lt;/v4-pat-pool-prefix&gt;
-										&lt;v4-pat-pool-next-hop-address&gt;192.168.1.5&lt;/v4-pat-pool-next-hop-address&gt;
-										&lt;v4-pat-pool-prefix-length&gt;0&lt;/v4-pat-pool-prefix-length&gt;
-									&lt;/v4-pat-pools&gt;
-									&lt;use-v4-default-pool&gt;Y&lt;/use-v4-default-pool&gt;
-									&lt;v4-pat-enabled&gt;N&lt;/v4-pat-enabled&gt;
-									&lt;v4-pat-pools&gt;
-										&lt;v4-pat-pool-prefix&gt;192.168.1.45&lt;/v4-pat-pool-prefix&gt;
-										&lt;v4-pat-pool-next-hop-address&gt;192.168.1.6&lt;/v4-pat-pool-next-hop-address&gt;
-										&lt;v4-pat-pool-prefix-length&gt;28&lt;/v4-pat-pool-prefix-length&gt;
-									&lt;/v4-pat-pools&gt;
-								&lt;/pat&gt;
-								&lt;nat&gt;
-								  &lt;v4-nat-enabled&gt;Y&lt;/v4-nat-enabled&gt;
-								  &lt;v4-nat-mapping-entries&gt;
-								    &lt;v4-nat-internal&gt;0.0.0.0&lt;/v4-nat-internal&gt;
-								    &lt;v4-nat-next-hop-address&gt;0.0.0.0&lt;/v4-nat-next-hop-address&gt;
-								    &lt;v4-nat-external&gt;0.0.0.0&lt;/v4-nat-external&gt;
-								  &lt;/v4-nat-mapping-entries&gt;
-								  &lt;v4-nat-mapping-entries&gt;
-								    &lt;v4-nat-internal&gt;0.0.0.1&lt;/v4-nat-internal&gt;
-								    &lt;v4-nat-next-hop-address&gt;0.0.0.1&lt;/v4-nat-next-hop-address&gt;
-								    &lt;v4-nat-external&gt;0.0.0.1&lt;/v4-nat-external&gt;
-								  &lt;/v4-nat-mapping-entries&gt;
-								&lt;/nat&gt;
-								&lt;vr-designation&gt;primary&lt;/vr-designation&gt;
-								&lt;v4-vce-loopback-address&gt;162.200.3.144&lt;/v4-vce-loopback-address&gt;
-								&lt;v6-vr-lan-prefix-length&gt;64&lt;/v6-vr-lan-prefix-length&gt;
-								&lt;v6-vce-wan-address&gt;2001:1890:12e3:2da::&lt;/v6-vce-wan-address&gt;
-								&lt;v6-vr-lan-prefix&gt;2620:0:10d0:f:ffff:ffff:ffff:fffe&lt;/v6-vr-lan-prefix&gt;
-								&lt;v4-vr-lan-prefix-length&gt;24&lt;/v4-vr-lan-prefix-length&gt;
-								&lt;v4-vr-lan-prefix&gt;10.192.27.254&lt;/v4-vr-lan-prefix&gt;
-								&lt;v4-public-lan-prefixes&gt;
-									&lt;t-provided-v4-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.2&lt;/v4-next-hop-address&gt;
-										&lt;v4-lan-public-prefix&gt;192.168.1.1&lt;/v4-lan-public-prefix&gt;
-										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-									&lt;/t-provided-v4-lan-public-prefixes&gt;
-									&lt;t-provided-v4-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.72&lt;/v4-next-hop-address&gt;
-										&lt;v4-lan-public-prefix&gt;192.168.1.71&lt;/v4-lan-public-prefix&gt;
-										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-									&lt;/t-provided-v4-lan-public-prefixes&gt;
-									&lt;t-provided-v4-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.68&lt;/v4-next-hop-address&gt;
-										&lt;v4-lan-public-prefix&gt;192.168.1.67&lt;/v4-lan-public-prefix&gt;
-										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-									&lt;/t-provided-v4-lan-public-prefixes&gt;
-								&lt;/v4-public-lan-prefixes&gt;
-								&lt;v6-public-lan-prefixes&gt;
-									&lt;t-provided-v6-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
-										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-									&lt;/t-provided-v6-lan-public-prefixes&gt;
-									&lt;t-provided-v6-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:3da::&lt;/v6-lan-public-prefix&gt;
-										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-									&lt;/t-provided-v6-lan-public-prefixes&gt;
-									&lt;t-provided-v6-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:4da::&lt;/v6-lan-public-prefix&gt;
-										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-									&lt;/t-provided-v6-lan-public-prefixes&gt;
-								&lt;/v6-public-lan-prefixes&gt;
-							&lt;/vr-lan-interface&gt;
-							&lt;routing-protocol&gt;none&lt;/routing-protocol&gt;
-						&lt;/vr-lan&gt;
-&lt;ucpe-vms-service-information&gt;				
- &lt;transport-service-information&gt;
-    &lt;transport-service-type&gt;AVPN&lt;/transport-service-type&gt;
-	&lt;access-circuit-info&gt;
-	   &lt;access-circuit-id&gt;1&lt;/access-circuit-id&gt;
-	   &lt;dual-mode&gt;Active&lt;/dual-mode&gt;
-	&lt;/access-circuit-info&gt;
-	&lt;access-circuit-info&gt;
-	   &lt;access-circuit-id&gt;2&lt;/access-circuit-id&gt;
-	   &lt;dual-mode&gt;Standby&lt;/dual-mode&gt;
-	&lt;/access-circuit-info&gt;	
- &lt;/transport-service-information&gt;
- &lt;ucpe-information&gt;
-    &lt;ucpe-host-name&gt;hostname&lt;/ucpe-host-name&gt;
-    &lt;ucpe-activation-code&gt;activecode&lt;/ucpe-activation-code&gt;
-    &lt;out-of-band-management-modem&gt;OOB&lt;/out-of-band-management-modem&gt;
-  &lt;/ucpe-information&gt;
-  &lt;vnf-list&gt;
-	&lt;vnf-information&gt; 
-		&lt;vnf-instance-id&gt;1&lt;/vnf-instance-id&gt; 
-		&lt;vnf-sequence-number&gt;1&lt;/vnf-sequence-number&gt;
-		&lt;vnf-type&gt;ZZ&lt;/vnf-type&gt;
-		&lt;vnf-vendor&gt;JUNIPER&lt;/vnf-vendor&gt;
-		&lt;vnf-model&gt;MODEL1&lt;/vnf-model&gt;
-		&lt;vnf-id&gt;1&lt;/vnf-id&gt;
-		&lt;prov-status&gt;1&lt;/prov-status&gt;
-		&lt;operational-state&gt;1&lt;/operational-state&gt;
-		&lt;orchestration-status&gt;1&lt;/orchestration-status&gt;
-		&lt;equipment-role&gt;1&lt;/equipment-role&gt;
-    &lt;/vnf-information&gt;
-	&lt;vnf-information&gt; 
-		&lt;vnf-instance-id&gt;2&lt;/vnf-instance-id&gt; 
-		&lt;vnf-sequence-number&gt;2&lt;/vnf-sequence-number&gt;
-		&lt;vnf-type&gt;HY&lt;/vnf-type&gt;
-		&lt;vnf-vendor&gt;JUNIPER&lt;/vnf-vendor&gt;
-		&lt;vnf-model&gt;MODEL2&lt;/vnf-model&gt;
-		&lt;vnf-id&gt;2&lt;/vnf-id&gt;
-		&lt;prov-status&gt;2&lt;/prov-status&gt;
-		&lt;operational-state&gt;2&lt;/operational-state&gt;
-		&lt;orchestration-status&gt;2&lt;/orchestration-status&gt;
-		&lt;equipment-role&gt;2&lt;/equipment-role&gt;
-    &lt;/vnf-information&gt;					
-  &lt;/vnf-list&gt;
- &lt;/ucpe-vms-service-information&gt;										
-						&lt;request-information&gt;
-							&lt;request-action&gt;Layer3ServiceActivateRequest&lt;/request-action&gt;
-							&lt;order-number&gt;4281555&lt;/order-number&gt;
-							&lt;request-id&gt;155415ab-b4a7-4382-b4c6-d17d9sm42855&lt;/request-id&gt;
-							&lt;notification-url&gt;https://csi-tst-q22.it.att.com:22443/Services/com/cingular/csi/sdn/SendManagedNetworkStatusNotification.jws&lt;/notification-url&gt;
-							&lt;source&gt;OMX&lt;/source&gt;
-							&lt;order-version&gt;1&lt;/order-version&gt;
-						&lt;/request-information&gt;
-						&lt;sdnc-request-header&gt;
-							&lt;svc-action&gt;activate&lt;/svc-action&gt;
-							&lt;svc-notification-url&gt;https://msojra.mtsnjdcp1.aic.cip.att.com:8443/adapters/rest/SDNCNotify&lt;/svc-notification-url&gt;
-							&lt;svc-request-id&gt;5b1f3c5d-cdf9-488d-8a4b-d3f1229d7760&lt;/svc-request-id&gt;
-						&lt;/sdnc-request-header&gt;
-						&lt;l2-homing-information&gt;
-							&lt;topology&gt;MultiPoint&lt;/topology&gt;
-							&lt;preferred-aic-clli&gt;MTSNJA4LCP1&lt;/preferred-aic-clli&gt;
-							&lt;evc-name&gt;AS/VLXM/003717//SW&lt;/evc-name&gt;
-						&lt;/l2-homing-information&gt;
-						&lt;service-information&gt;
-							&lt;service-instance-id&gt;FK/VLXM/003717//SW_INTERNET&lt;/service-instance-id&gt;
-							&lt;subscriber-name&gt;ST E2E Test42855_1300004281555&lt;/subscriber-name&gt;
-							&lt;service-type&gt;SDN-ETHERNET-INTERNET&lt;/service-type&gt;
-						&lt;/service-information&gt;
-						&lt;internet-service-change-details&gt;
-							&lt;internet-evc-speed-value&gt;10&lt;/internet-evc-speed-value&gt;
-							&lt;internet-evc-speed-units&gt;Kbps&lt;/internet-evc-speed-units&gt;
-							&lt;t-provided-v4-lan-public-prefixes&gt;
-							   &lt;request-index&gt;1&lt;/request-index&gt;
-							   &lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
-							   &lt;v4-lan-public-prefix&gt;192.168.1.15&lt;/v4-lan-public-prefix&gt;
-							   &lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-							&lt;/t-provided-v4-lan-public-prefixes&gt;
-							&lt;t-provided-v4-lan-public-prefixes&gt;
-							   &lt;request-index&gt;2&lt;/request-index&gt;
-							   &lt;v4-next-hop-address&gt;192.168.1.16&lt;/v4-next-hop-address&gt;
-							   &lt;v4-lan-public-prefix&gt;192.168.1.16&lt;/v4-lan-public-prefix&gt;
-							   &lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-							&lt;/t-provided-v4-lan-public-prefixes&gt;
-							&lt;t-provided-v6-lan-public-prefixes&gt;
-							   &lt;request-index&gt;1&lt;/request-index&gt;
-							   &lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-							   &lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
-							   &lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-							&lt;/t-provided-v6-lan-public-prefixes&gt;
-							&lt;t-provided-v6-lan-public-prefixes&gt;
-							   &lt;request-index&gt;1&lt;/request-index&gt;
-							   &lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-							   &lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
-							   &lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-							&lt;/t-provided-v6-lan-public-prefixes&gt;
-						&lt;/internet-service-change-details&gt;
-					&lt;/service-data&gt;
-				&lt;/layer3-service-list&gt;
-</RequestData>
-</SDNCAdapterCallbackRequest>
-</v1:SDNCAdapterCallback>
-</soapenv:Body>
+<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 xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">				&lt;layer3-service-list xmlns="com:att:sdnctl:l3api"&gt;
+					&lt;service-instance-id&gt;FK/VLXM/003717//SW_INTERNET&lt;/service-instance-id&gt;
+					&lt;service-status&gt;
+						&lt;rpc-name&gt;service-configuration-operation&lt;/rpc-name&gt;
+						&lt;rpc-action&gt;activate&lt;/rpc-action&gt;
+						&lt;request-status&gt;synccomplete&lt;/request-status&gt;
+						&lt;final-indicator&gt;N&lt;/final-indicator&gt;
+						&lt;l3sdn-action&gt;Layer3ServiceActivateRequest&lt;/l3sdn-action&gt;
+						&lt;l3sdn-subaction&gt;SUPP&lt;/l3sdn-subaction&gt;
+						&lt;response-timestamp&gt;2015-04-28T21:32:11.386Z&lt;/response-timestamp&gt;
+					&lt;/service-status&gt;
+					&lt;service-data&gt;
+						&lt;internet-evc-access-information&gt;
+							&lt;ip-version&gt;ds&lt;/ip-version&gt;
+							&lt;internet-evc-speed-value&gt;8&lt;/internet-evc-speed-value&gt;
+							&lt;internet-evc-speed-units&gt;Mbps&lt;/internet-evc-speed-units&gt;
+						&lt;/internet-evc-access-information&gt;
+						&lt;vr-lan xmlns="com:att:sdnctl:l3api"&gt;
+							&lt;vr-lan-interface&gt;
+								&lt;static-routes&gt;
+									&lt;v6-static-routes&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-static-route-prefix&gt;2001:1890:12e3:2da::&lt;/v6-static-route-prefix&gt;
+										&lt;v6-static-route-prefix-length&gt;28&lt;/v6-static-route-prefix-length&gt;
+									&lt;/v6-static-routes&gt;
+									&lt;v4-static-routes&gt;
+										&lt;v4-static-route-prefix&gt;255.255.252.1&lt;/v4-static-route-prefix&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
+										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
+									&lt;/v4-static-routes&gt;
+									&lt;v6-static-routes&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-static-route-prefix&gt;2001:1890:12e3:2da::&lt;/v6-static-route-prefix&gt;
+										&lt;v6-static-route-prefix-length&gt;28&lt;/v6-static-route-prefix-length&gt;
+									&lt;/v6-static-routes&gt;
+									&lt;v4-static-routes&gt;
+										&lt;v4-static-route-prefix&gt;255.255.252.2&lt;/v4-static-route-prefix&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
+										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
+									&lt;/v4-static-routes&gt;
+									&lt;v4-static-routes&gt;
+										&lt;v4-static-route-prefix&gt;255.255.252.3&lt;/v4-static-route-prefix&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
+										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
+									&lt;/v4-static-routes&gt;
+								&lt;/static-routes&gt;
+								&lt;dhcp&gt;
+									&lt;v6-dhcp-server-enabled&gt;N&lt;/v6-dhcp-server-enabled&gt;
+									&lt;v4-dhcp-server-enabled&gt;Y&lt;/v4-dhcp-server-enabled&gt;
+									&lt;use-v6-default-pool&gt;N&lt;/use-v6-default-pool&gt;
+									&lt;excluded-v4-dhcp-addresses-from-default-pool&gt;
+									  &lt;excluded-v4-address&gt;192.168.1.7&lt;/excluded-v4-address&gt;
+									&lt;/excluded-v4-dhcp-addresses-from-default-pool&gt;
+									&lt;excluded-v4-dhcp-addresses-from-default-pool&gt;
+									  &lt;excluded-v4-address&gt;192.168.1.8&lt;/excluded-v4-address&gt;
+									&lt;/excluded-v4-dhcp-addresses-from-default-pool&gt;
+									&lt;v4-dhcp-pools&gt;
+										&lt;v4-dhcp-relay-next-hop-address&gt;1.1.1.1&lt;/v4-dhcp-relay-next-hop-address&gt;
+										&lt;v4-dhcp-pool-prefix-length&gt;28&lt;/v4-dhcp-pool-prefix-length&gt;
+										&lt;excluded-v4-addresses&gt;
+											&lt;excluded-v4-address&gt;192.168.1.5&lt;/excluded-v4-address&gt;
+										&lt;/excluded-v4-addresses&gt;
+										&lt;v4-dhcp-relay-gateway-address&gt;2.2.2.1&lt;/v4-dhcp-relay-gateway-address&gt;
+										&lt;excluded-v4-addresses&gt;
+											&lt;excluded-v4-address&gt;192.168.1.6&lt;/excluded-v4-address&gt;
+										&lt;/excluded-v4-addresses&gt;
+										&lt;v4-dhcp-pool-prefix&gt;192.155.2.3&lt;/v4-dhcp-pool-prefix&gt;
+									&lt;/v4-dhcp-pools&gt;
+									&lt;v4-dhcp-pools&gt;
+										&lt;v4-dhcp-relay-next-hop-address&gt;1.1.1.2&lt;/v4-dhcp-relay-next-hop-address&gt;
+										&lt;v4-dhcp-pool-prefix-length&gt;28&lt;/v4-dhcp-pool-prefix-length&gt;
+										&lt;excluded-v4-addresses&gt;
+											&lt;excluded-v4-address&gt;192.168.1.6&lt;/excluded-v4-address&gt;
+										&lt;/excluded-v4-addresses&gt;
+										&lt;v4-dhcp-relay-gateway-address&gt;2.2.2.2&lt;/v4-dhcp-relay-gateway-address&gt;
+										&lt;excluded-v4-addresses&gt;
+											&lt;excluded-v4-address&gt;192.168.1.7&lt;/excluded-v4-address&gt;
+										&lt;/excluded-v4-addresses&gt;
+										&lt;v4-dhcp-pool-prefix&gt;192.155.2.4&lt;/v4-dhcp-pool-prefix&gt;
+									&lt;/v4-dhcp-pools&gt;									
+									&lt;use-v4-default-pool&gt;Y&lt;/use-v4-default-pool&gt;
+									&lt;excluded-v6-dhcp-addresses-from-default-pool&gt;
+									  &lt;excluded-v6-address&gt;1:5&lt;/excluded-v6-address&gt;
+									&lt;/excluded-v6-dhcp-addresses-from-default-pool&gt;
+									&lt;excluded-v6-dhcp-addresses-from-default-pool&gt;
+									  &lt;excluded-v6-address&gt;1:6&lt;/excluded-v6-address&gt;
+									&lt;/excluded-v6-dhcp-addresses-from-default-pool&gt;
+									&lt;v6-dhcp-pools&gt;
+										&lt;v6-dhcp-relay-next-hop-address&gt;4:4&lt;/v6-dhcp-relay-next-hop-address&gt;
+										&lt;v6-dhcp-pool-prefix-length&gt;28&lt;/v6-dhcp-pool-prefix-length&gt;
+										&lt;excluded-v6-addresses&gt;
+											&lt;excluded-v6-address&gt;1:1&lt;/excluded-v6-address&gt;
+										&lt;/excluded-v6-addresses&gt;
+										&lt;v6-dhcp-relay-gateway-address&gt;3:3&lt;/v6-dhcp-relay-gateway-address&gt;
+										&lt;excluded-v6-addresses&gt;
+											&lt;excluded-v6-address&gt;2:2&lt;/excluded-v6-address&gt;
+										&lt;/excluded-v6-addresses&gt;
+										&lt;v6-dhcp-pool-prefix&gt;0:0&lt;/v6-dhcp-pool-prefix&gt;
+									&lt;/v6-dhcp-pools&gt;
+									&lt;v6-dhcp-pools&gt;
+										&lt;v6-dhcp-relay-next-hop-address&gt;4:4&lt;/v6-dhcp-relay-next-hop-address&gt;
+										&lt;v6-dhcp-pool-prefix-length&gt;28&lt;/v6-dhcp-pool-prefix-length&gt;
+										&lt;excluded-v6-addresses&gt;
+											&lt;excluded-v6-address&gt;1:1&lt;/excluded-v6-address&gt;
+										&lt;/excluded-v6-addresses&gt;
+										&lt;v6-dhcp-relay-gateway-address&gt;3:3&lt;/v6-dhcp-relay-gateway-address&gt;
+										&lt;excluded-v6-addresses&gt;
+											&lt;excluded-v6-address&gt;2:2&lt;/excluded-v6-address&gt;
+										&lt;/excluded-v6-addresses&gt;
+										&lt;v6-dhcp-pool-prefix&gt;0:0&lt;/v6-dhcp-pool-prefix&gt;
+									&lt;/v6-dhcp-pools&gt;									
+								&lt;/dhcp&gt;
+								&lt;firewall-lite&gt;
+									&lt;stateful-firewall-lite-v6-enabled&gt;N&lt;/stateful-firewall-lite-v6-enabled&gt;
+									&lt;stateful-firewall-lite-v4-enabled&gt;Y&lt;/stateful-firewall-lite-v4-enabled&gt;
+									&lt;v4-firewall-packet-filters&gt;
+									  &lt;v4-firewall-prefix&gt;0.0.0.1&lt;/v4-firewall-prefix&gt;
+									  &lt;v4-firewall-prefix-length&gt;1&lt;/v4-firewall-prefix-length&gt;
+									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
+									  &lt;udp-ports&gt;
+									    &lt;port-number&gt;1&lt;/port-number&gt;
+									  &lt;/udp-ports&gt;
+									  &lt;tcp-ports&gt;
+									    &lt;port-number&gt;1&lt;/port-number&gt;
+									  &lt;/tcp-ports&gt;
+									&lt;/v4-firewall-packet-filters&gt;
+									&lt;v4-firewall-packet-filters&gt;
+									  &lt;v4-firewall-prefix&gt;0.0.0.2&lt;/v4-firewall-prefix&gt;
+									  &lt;v4-firewall-prefix-length&gt;2&lt;/v4-firewall-prefix-length&gt;
+									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
+									  &lt;udp-ports&gt;
+									    &lt;port-number&gt;2&lt;/port-number&gt;
+									  &lt;/udp-ports&gt;
+									  &lt;tcp-ports&gt;
+									    &lt;port-number&gt;2&lt;/port-number&gt;
+									  &lt;/tcp-ports&gt;
+									&lt;/v4-firewall-packet-filters&gt;
+									&lt;v6-firewall-packet-filters&gt;
+									  &lt;v6-firewall-prefix&gt;:&lt;/v6-firewall-prefix&gt;
+									  &lt;v6-firewall-prefix-length&gt;0&lt;/v6-firewall-prefix-length&gt;
+									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
+									  &lt;udp-ports&gt;
+									    &lt;port-number&gt;3&lt;/port-number&gt;
+									  &lt;/udp-ports&gt;
+									  &lt;tcp-ports&gt;
+									    &lt;port-number&gt;3&lt;/port-number&gt;
+									  &lt;/tcp-ports&gt;
+									&lt;/v6-firewall-packet-filters&gt;
+									&lt;v6-firewall-packet-filters&gt;
+									  &lt;v6-firewall-prefix&gt;:&lt;/v6-firewall-prefix&gt;
+									  &lt;v6-firewall-prefix-length&gt;1&lt;/v6-firewall-prefix-length&gt;
+									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
+									  &lt;udp-ports&gt;
+									    &lt;port-number&gt;4&lt;/port-number&gt;
+									  &lt;/udp-ports&gt;
+									  &lt;tcp-ports&gt;
+									    &lt;port-number&gt;4&lt;/port-number&gt;
+									  &lt;/tcp-ports&gt;
+									&lt;/v6-firewall-packet-filters&gt;
+								&lt;/firewall-lite&gt;
+								&lt;pat&gt;
+									&lt;v4-pat-pools&gt;
+										&lt;v4-pat-pool-prefix&gt;192.168.1.44&lt;/v4-pat-pool-prefix&gt;
+										&lt;v4-pat-pool-next-hop-address&gt;192.168.1.5&lt;/v4-pat-pool-next-hop-address&gt;
+										&lt;v4-pat-pool-prefix-length&gt;0&lt;/v4-pat-pool-prefix-length&gt;
+									&lt;/v4-pat-pools&gt;
+									&lt;use-v4-default-pool&gt;Y&lt;/use-v4-default-pool&gt;
+									&lt;v4-pat-enabled&gt;N&lt;/v4-pat-enabled&gt;
+									&lt;v4-pat-pools&gt;
+										&lt;v4-pat-pool-prefix&gt;192.168.1.45&lt;/v4-pat-pool-prefix&gt;
+										&lt;v4-pat-pool-next-hop-address&gt;192.168.1.6&lt;/v4-pat-pool-next-hop-address&gt;
+										&lt;v4-pat-pool-prefix-length&gt;28&lt;/v4-pat-pool-prefix-length&gt;
+									&lt;/v4-pat-pools&gt;
+								&lt;/pat&gt;
+								&lt;nat&gt;
+								  &lt;v4-nat-enabled&gt;Y&lt;/v4-nat-enabled&gt;
+								  &lt;v4-nat-mapping-entries&gt;
+								    &lt;v4-nat-internal&gt;0.0.0.0&lt;/v4-nat-internal&gt;
+								    &lt;v4-nat-next-hop-address&gt;0.0.0.0&lt;/v4-nat-next-hop-address&gt;
+								    &lt;v4-nat-external&gt;0.0.0.0&lt;/v4-nat-external&gt;
+								  &lt;/v4-nat-mapping-entries&gt;
+								  &lt;v4-nat-mapping-entries&gt;
+								    &lt;v4-nat-internal&gt;0.0.0.1&lt;/v4-nat-internal&gt;
+								    &lt;v4-nat-next-hop-address&gt;0.0.0.1&lt;/v4-nat-next-hop-address&gt;
+								    &lt;v4-nat-external&gt;0.0.0.1&lt;/v4-nat-external&gt;
+								  &lt;/v4-nat-mapping-entries&gt;
+								&lt;/nat&gt;
+								&lt;vr-designation&gt;primary&lt;/vr-designation&gt;
+								&lt;v4-vce-loopback-address&gt;162.200.3.144&lt;/v4-vce-loopback-address&gt;
+								&lt;v6-vr-lan-prefix-length&gt;64&lt;/v6-vr-lan-prefix-length&gt;
+								&lt;v6-vce-wan-address&gt;2001:1890:12e3:2da::&lt;/v6-vce-wan-address&gt;
+								&lt;v6-vr-lan-prefix&gt;2620:0:10d0:f:ffff:ffff:ffff:fffe&lt;/v6-vr-lan-prefix&gt;
+								&lt;v4-vr-lan-prefix-length&gt;24&lt;/v4-vr-lan-prefix-length&gt;
+								&lt;v4-vr-lan-prefix&gt;10.192.27.254&lt;/v4-vr-lan-prefix&gt;
+								&lt;v4-public-lan-prefixes&gt;
+									&lt;t-provided-v4-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.2&lt;/v4-next-hop-address&gt;
+										&lt;v4-lan-public-prefix&gt;192.168.1.1&lt;/v4-lan-public-prefix&gt;
+										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+									&lt;/t-provided-v4-lan-public-prefixes&gt;
+									&lt;t-provided-v4-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.72&lt;/v4-next-hop-address&gt;
+										&lt;v4-lan-public-prefix&gt;192.168.1.71&lt;/v4-lan-public-prefix&gt;
+										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+									&lt;/t-provided-v4-lan-public-prefixes&gt;
+									&lt;t-provided-v4-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.68&lt;/v4-next-hop-address&gt;
+										&lt;v4-lan-public-prefix&gt;192.168.1.67&lt;/v4-lan-public-prefix&gt;
+										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+									&lt;/t-provided-v4-lan-public-prefixes&gt;
+								&lt;/v4-public-lan-prefixes&gt;
+								&lt;v6-public-lan-prefixes&gt;
+									&lt;t-provided-v6-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
+										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+									&lt;/t-provided-v6-lan-public-prefixes&gt;
+									&lt;t-provided-v6-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:3da::&lt;/v6-lan-public-prefix&gt;
+										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+									&lt;/t-provided-v6-lan-public-prefixes&gt;
+									&lt;t-provided-v6-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:4da::&lt;/v6-lan-public-prefix&gt;
+										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+									&lt;/t-provided-v6-lan-public-prefixes&gt;
+								&lt;/v6-public-lan-prefixes&gt;
+							&lt;/vr-lan-interface&gt;
+							&lt;routing-protocol&gt;none&lt;/routing-protocol&gt;
+						&lt;/vr-lan&gt;
+&lt;ucpe-vms-service-information&gt;				
+ &lt;transport-service-information&gt;
+    &lt;transport-service-type&gt;AVPN&lt;/transport-service-type&gt;
+	&lt;access-circuit-info&gt;
+	   &lt;access-circuit-id&gt;1&lt;/access-circuit-id&gt;
+	   &lt;dual-mode&gt;Active&lt;/dual-mode&gt;
+	&lt;/access-circuit-info&gt;
+	&lt;access-circuit-info&gt;
+	   &lt;access-circuit-id&gt;2&lt;/access-circuit-id&gt;
+	   &lt;dual-mode&gt;Standby&lt;/dual-mode&gt;
+	&lt;/access-circuit-info&gt;	
+ &lt;/transport-service-information&gt;
+ &lt;ucpe-information&gt;
+    &lt;ucpe-host-name&gt;hostname&lt;/ucpe-host-name&gt;
+    &lt;ucpe-activation-code&gt;activecode&lt;/ucpe-activation-code&gt;
+    &lt;out-of-band-management-modem&gt;OOB&lt;/out-of-band-management-modem&gt;
+  &lt;/ucpe-information&gt;
+  &lt;vnf-list&gt;
+	&lt;vnf-information&gt; 
+		&lt;vnf-instance-id&gt;1&lt;/vnf-instance-id&gt; 
+		&lt;vnf-sequence-number&gt;1&lt;/vnf-sequence-number&gt;
+		&lt;vnf-type&gt;ZZ&lt;/vnf-type&gt;
+		&lt;vnf-vendor&gt;JUNIPER&lt;/vnf-vendor&gt;
+		&lt;vnf-model&gt;MODEL1&lt;/vnf-model&gt;
+		&lt;vnf-id&gt;1&lt;/vnf-id&gt;
+		&lt;prov-status&gt;1&lt;/prov-status&gt;
+		&lt;operational-state&gt;1&lt;/operational-state&gt;
+		&lt;orchestration-status&gt;1&lt;/orchestration-status&gt;
+		&lt;equipment-role&gt;1&lt;/equipment-role&gt;
+    &lt;/vnf-information&gt;
+	&lt;vnf-information&gt; 
+		&lt;vnf-instance-id&gt;2&lt;/vnf-instance-id&gt; 
+		&lt;vnf-sequence-number&gt;2&lt;/vnf-sequence-number&gt;
+		&lt;vnf-type&gt;HY&lt;/vnf-type&gt;
+		&lt;vnf-vendor&gt;JUNIPER&lt;/vnf-vendor&gt;
+		&lt;vnf-model&gt;MODEL2&lt;/vnf-model&gt;
+		&lt;vnf-id&gt;2&lt;/vnf-id&gt;
+		&lt;prov-status&gt;2&lt;/prov-status&gt;
+		&lt;operational-state&gt;2&lt;/operational-state&gt;
+		&lt;orchestration-status&gt;2&lt;/orchestration-status&gt;
+		&lt;equipment-role&gt;2&lt;/equipment-role&gt;
+    &lt;/vnf-information&gt;					
+  &lt;/vnf-list&gt;
+ &lt;/ucpe-vms-service-information&gt;										
+						&lt;request-information&gt;
+							&lt;request-action&gt;Layer3ServiceActivateRequest&lt;/request-action&gt;
+							&lt;order-number&gt;4281555&lt;/order-number&gt;
+							&lt;request-id&gt;155415ab-b4a7-4382-b4c6-d17d9sm42855&lt;/request-id&gt;
+							&lt;notification-url&gt;https://csi-tst-q22.it.com:22443/Services/com/cingular/csi/sdn/SendManagedNetworkStatusNotification.jws&lt;/notification-url&gt;
+							&lt;source&gt;OMX&lt;/source&gt;
+							&lt;order-version&gt;1&lt;/order-version&gt;
+						&lt;/request-information&gt;
+						&lt;sdnc-request-header&gt;
+							&lt;svc-action&gt;activate&lt;/svc-action&gt;
+							&lt;svc-notification-url&gt;https://msojra.mtsnjdcp1.aic.cip.com:8443/adapters/rest/SDNCNotify&lt;/svc-notification-url&gt;
+							&lt;svc-request-id&gt;5b1f3c5d-cdf9-488d-8a4b-d3f1229d7760&lt;/svc-request-id&gt;
+						&lt;/sdnc-request-header&gt;
+						&lt;l2-homing-information&gt;
+							&lt;topology&gt;MultiPoint&lt;/topology&gt;
+							&lt;preferred-aic-clli&gt;MTSNJA4LCP1&lt;/preferred-aic-clli&gt;
+							&lt;evc-name&gt;AS/VLXM/003717//SW&lt;/evc-name&gt;
+						&lt;/l2-homing-information&gt;
+						&lt;service-information&gt;
+							&lt;service-instance-id&gt;FK/VLXM/003717//SW_INTERNET&lt;/service-instance-id&gt;
+							&lt;subscriber-name&gt;ST E2E Test42855_1300004281555&lt;/subscriber-name&gt;
+							&lt;service-type&gt;SDN-ETHERNET-INTERNET&lt;/service-type&gt;
+						&lt;/service-information&gt;
+						&lt;internet-service-change-details&gt;
+							&lt;internet-evc-speed-value&gt;10&lt;/internet-evc-speed-value&gt;
+							&lt;internet-evc-speed-units&gt;Kbps&lt;/internet-evc-speed-units&gt;
+							&lt;t-provided-v4-lan-public-prefixes&gt;
+							   &lt;request-index&gt;1&lt;/request-index&gt;
+							   &lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
+							   &lt;v4-lan-public-prefix&gt;192.168.1.15&lt;/v4-lan-public-prefix&gt;
+							   &lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+							&lt;/t-provided-v4-lan-public-prefixes&gt;
+							&lt;t-provided-v4-lan-public-prefixes&gt;
+							   &lt;request-index&gt;2&lt;/request-index&gt;
+							   &lt;v4-next-hop-address&gt;192.168.1.16&lt;/v4-next-hop-address&gt;
+							   &lt;v4-lan-public-prefix&gt;192.168.1.16&lt;/v4-lan-public-prefix&gt;
+							   &lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+							&lt;/t-provided-v4-lan-public-prefixes&gt;
+							&lt;t-provided-v6-lan-public-prefixes&gt;
+							   &lt;request-index&gt;1&lt;/request-index&gt;
+							   &lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+							   &lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
+							   &lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+							&lt;/t-provided-v6-lan-public-prefixes&gt;
+							&lt;t-provided-v6-lan-public-prefixes&gt;
+							   &lt;request-index&gt;1&lt;/request-index&gt;
+							   &lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+							   &lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
+							   &lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+							&lt;/t-provided-v6-lan-public-prefixes&gt;
+						&lt;/internet-service-change-details&gt;
+					&lt;/service-data&gt;
+				&lt;/layer3-service-list&gt;
+</RequestData>
+</SDNCAdapterCallbackRequest>
+</v1:SDNCAdapterCallback>
+</soapenv:Body>
 </soapenv:Envelope>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryInstance_Success.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryInstance_Success.xml
index a7ac309..09f01fb 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryInstance_Success.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryInstance_Success.xml
@@ -1,4 +1,4 @@
-<result-data>
-  <resource-type>service-instance</resource-type>
-  <resource-link>https://aai-conexus-e2e.test.att.com:8443/aai/v8/business/customers/customer/8310000058863/service-subscriptions/service-subscription/vMOG/service-instances/service-instance/f70e927b-6087-4974-9ef8-c5e4d5847ca4</resource-link>
+<result-data>
+  <resource-type>service-instance</resource-type>
+  <resource-link>https://aai-conexus-e2e.test.com:8443/aai/v8/business/customers/customer/8310000058863/service-subscriptions/service-subscription/vMOG/service-instances/service-instance/f70e927b-6087-4974-9ef8-c5e4d5847ca4</resource-link>
 </result-data>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_NoPayload_Success.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_NoPayload_Success.xml
index d8d10db..1965586 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_NoPayload_Success.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkId_AAIResponse_NoPayload_Success.xml
@@ -1,73 +1,73 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<l3-network xmlns="http://com.att.aai.inventory/v8">
-         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
-         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
-         <network-type>CONTRAIL_EXTERNAL</network-type>
-         <network-role>dmz_direct</network-role>
-         <network-technology>contrail</network-technology>
-         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-         <network-role-instance>0</network-role-instance>
-         <orchestration-status>pending-create</orchestration-status>
-   		 <physical-network-name>networkName</physical-network-name>
-   		 <is-provider-network>false</is-provider-network>
-   		 <is-shared-network>true</is-shared-network>
-   	 	 <is-external-network>false</is-external-network>         
-         <subnets>
-            <subnet>
-               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
-               <gateway-address>107.239.52.1</gateway-address>
-               <network-start-address>107.239.52.0</network-start-address>
-               <cidr-mask>24</cidr-mask>
-               <ip-version>4</ip-version>
-               <orchestration-status>pending-create</orchestration-status>
-               <dhcp-enabled>true</dhcp-enabled>
-   	  		   <subnet-name>subnetName</subnet-name>
-               <relationship-list/>
-            </subnet>
-         </subnets>
-	  	 <segmentation-assignments>
-	  		<segmentation-id>413</segmentation-id>
-	  		<resource-version>4132176</resource-version>
-	  	 </segmentation-assignments>         
-         <relationship-list>
-            <relationship>
-               <related-to>vpn-binding</related-to>
-               <related-link>https://aai-app-e2e.test.att.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.att.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.att.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.att.com:8443/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg</related-link>
-				<relationship-data>
-					<relationship-key>network-policy.network-policy-id</relationship-key>
-					<relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0cg</relationship-value>
-				</relationship-data>
-			</relationship>
-			<relationship>
-			   <related-to>route-table-reference</related-to>
-			   <relationship-data>
-				  <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
-				  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
-			   </relationship-data>
-			</relationship>			
-         </relationship-list>
-</l3-network>
+<?xml version="1.0" encoding="UTF-8"?>
+<l3-network xmlns="http://com.aai.inventory/v8">
+         <network-id>49c86598-f766-46f8-84f8-8d1c1b10f9b4</network-id>
+         <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
+         <network-type>CONTRAIL_EXTERNAL</network-type>
+         <network-role>dmz_direct</network-role>
+         <network-technology>contrail</network-technology>
+         <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+         <network-role-instance>0</network-role-instance>
+         <orchestration-status>pending-create</orchestration-status>
+   		 <physical-network-name>networkName</physical-network-name>
+   		 <is-provider-network>false</is-provider-network>
+   		 <is-shared-network>true</is-shared-network>
+   	 	 <is-external-network>false</is-external-network>         
+         <subnets>
+            <subnet>
+               <subnet-id>57e9a1ff-d14f-4071-a828-b19ae98eb2fc</subnet-id>
+               <gateway-address>107.239.52.1</gateway-address>
+               <network-start-address>107.239.52.0</network-start-address>
+               <cidr-mask>24</cidr-mask>
+               <ip-version>4</ip-version>
+               <orchestration-status>pending-create</orchestration-status>
+               <dhcp-enabled>true</dhcp-enabled>
+   	  		   <subnet-name>subnetName</subnet-name>
+               <relationship-list/>
+            </subnet>
+         </subnets>
+	  	 <segmentation-assignments>
+	  		<segmentation-id>413</segmentation-id>
+	  		<resource-version>4132176</resource-version>
+	  	 </segmentation-assignments>         
+         <relationship-list>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/85f015d0-2e32-4c30-96d2-87a1a27f8017/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>85f015d0-2e32-4c30-96d2-87a1a27f8017</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>vpn-binding</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/vpn-bindings/vpn-binding/c980a6ef-3b88-49f0-9751-dbad8608d0a6/</related-link>
+               <relationship-data>
+                  <relationship-key>vpn-binding.vpn-id</relationship-key>
+                  <relationship-value>c980a6ef-3b88-49f0-9751-dbad8608d0a6</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+               <related-to>tenant</related-to>
+               <related-link>https://aai-app-e2e.test.com:8443/aai/v8/cloud-infrastructure/tenants/tenant/7dd5365547234ee8937416c65507d266/</related-link>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>7dd5365547234ee8937416c65507d266</relationship-value>
+               </relationship-data>
+            </relationship>
+            <relationship>
+				<related-to>network-policy</related-to>
+				<related-link>https://aai-app-e2e.test.com:8443/aai/v8/network/network-policies/network-policy/cee6d136-e378-4678-a024-2cd15f0ee0cg</related-link>
+				<relationship-data>
+					<relationship-key>network-policy.network-policy-id</relationship-key>
+					<relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0cg</relationship-value>
+				</relationship-data>
+			</relationship>
+			<relationship>
+			   <related-to>route-table-reference</related-to>
+			   <relationship-data>
+				  <relationship-key>route-table-reference.route-table-reference-id</relationship-key>
+				  <relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0hi</relationship-value>
+			   </relationship-data>
+			</relationship>			
+         </relationship-list>
+</l3-network>
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml
index 292b5e8..48f652c 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef1_AAIResponse_Success.xml
@@ -1,20 +1,20 @@
-<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
-                   statusCode="200">
-   <rest:headers>
-      <rest:header name="Transfer-Encoding" value="chunked"/>
-      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
-      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
-      <rest:header name="X-AAI-TXID"
-                   value="mtcnjv9aaas01.mtcnj.aic.cip.att.com-20160314-20:53:33:487-134392"/>
-      <rest:header name="Content-Type" value="application/xml"/>
-      <rest:header name="Server" value="Apache-Coyote/1.1"/>
-      <rest:header name="Cache-Control" value="private"/>
-   </rest:headers>
-   <rest:payload contentType="text/xml">
-      <route-table-references xmlns="http://com.att.aai.inventory/v8">
-         <route-table-reference-id>5938baec-03ca-2bd5-a3f1-d54x123e253a</route-table-reference-id>
-         <route-table-reference-fqdn>refFQDN1</route-table-reference-fqdn>
-         <resource-version>12345</resource-version>
-      </route-table-references>
-   </rest:payload>
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <route-table-references xmlns="http://com.aai.inventory/v8">
+         <route-table-reference-id>5938baec-03ca-2bd5-a3f1-d54x123e253a</route-table-reference-id>
+         <route-table-reference-fqdn>refFQDN1</route-table-reference-fqdn>
+         <resource-version>12345</resource-version>
+      </route-table-references>
+   </rest:payload>
 </rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml
index 910f701..c911d32 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/UpdateNetworkV2/updateNetwork_queryNetworkTableRef2_AAIResponse_Success.xml
@@ -1,20 +1,20 @@
-<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
-                   statusCode="200">
-   <rest:headers>
-      <rest:header name="Transfer-Encoding" value="chunked"/>
-      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
-      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
-      <rest:header name="X-AAI-TXID"
-                   value="mtcnjv9aaas01.mtcnj.aic.cip.att.com-20160314-20:53:33:487-134392"/>
-      <rest:header name="Content-Type" value="application/xml"/>
-      <rest:header name="Server" value="Apache-Coyote/1.1"/>
-      <rest:header name="Cache-Control" value="private"/>
-   </rest:headers>
-   <rest:payload contentType="text/xml">
-      <route-table-references xmlns="http://com.att.aai.inventory/v8">
-         <route-table-reference-id>5938baec-03ca-2bd5-a3f1-d54x123e253a</route-table-reference-id>
-         <route-table-reference-fqdn>refFQDN2</route-table-reference-fqdn>
-         <resource-version>12345</resource-version>
-      </route-table-references>
-   </rest:payload>
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <route-table-references xmlns="http://com.aai.inventory/v8">
+         <route-table-reference-id>5938baec-03ca-2bd5-a3f1-d54x123e253a</route-table-reference-id>
+         <route-table-reference-fqdn>refFQDN2</route-table-reference-fqdn>
+         <resource-version>12345</resource-version>
+      </route-table-references>
+   </rest:payload>
 </rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/AddNetworkPolicy_AAIResponse_Success.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/AddNetworkPolicy_AAIResponse_Success.xml
index d968bcc..d3f9c1e 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/AddNetworkPolicy_AAIResponse_Success.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/AddNetworkPolicy_AAIResponse_Success.xml
@@ -1,21 +1,21 @@
-<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
-                   statusCode="200">
-   <rest:headers>
-      <rest:header name="Transfer-Encoding" value="chunked"/>
-      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
-      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
-      <rest:header name="X-AAI-TXID"
-                   value="mtcnjv9aaas01.mtcnj.aic.cip.att.com-20160314-20:53:33:487-134392"/>
-      <rest:header name="Content-Type" value="application/xml"/>
-      <rest:header name="Server" value="Apache-Coyote/1.1"/>
-      <rest:header name="Cache-Control" value="private"/>
-   </rest:headers>
-   <rest:payload contentType="text/xml">
-      <network-policy xmlns="http://com.att.aai.inventory/v8">
-         <network-policy-id>9a7b327d9-287aa00-82c4b0-105757</network-policy-id>
-         <network-policy-fqdn>fqdn123</network-policy-fqdn>
-         <heat-stack-id>slowburn</heat-stack-id>
-         <resource-version>145878989</resource-version>
-      </network-policy>
-   </rest:payload>
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <network-policy xmlns="http://com.aai.inventory/v8">
+         <network-policy-id>9a7b327d9-287aa00-82c4b0-105757</network-policy-id>
+         <network-policy-fqdn>fqdn123</network-policy-fqdn>
+         <heat-stack-id>slowburn</heat-stack-id>
+         <resource-version>145878989</resource-version>
+      </network-policy>
+   </rest:payload>
 </rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/GenericVnf.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/GenericVnf.xml
index 60f3d01..c159e2e 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/GenericVnf.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/GenericVnf.xml
@@ -1,38 +1,38 @@
-<generic-vnf xmlns="http://com.att.aai.inventory/v7">
-	<vnf-id>skask</vnf-id>
-	<vnf-name>STMTN5MMSC20</vnf-name>
-	<vnf-type>pcrf-capacity</vnf-type>
-	<service-id>SDN-MOBILITY</service-id>
-	<equipment-role>vPCRF</equipment-role>
-	<orchestration-status>pending-create</orchestration-status>
-	<in-maint>false</in-maint>
-	<is-closed-loop-disabled>false</is-closed-loop-disabled>
-	<persona-model-id>introvert</persona-model-id>
-	<persona-model-version>2.0</persona-model-version>
-	<resource-version>0000020</resource-version>
-	<vf-modules>
-		<vf-module>
-			<vf-module-id>lukewarm</vf-module-id>
-			<vf-module-name>PCRF::module-0-0</vf-module-name>
-			<persona-model-id>introvert</persona-model-id>
-			<persona-model-version>2.0</persona-model-version>
-			<is-base-vf-module>true</is-base-vf-module>
-			<heat-stack-id>fastburn</heat-stack-id>
-			<orchestration-status>pending-create</orchestration-status>
-			<resource-version>0000074</resource-version>
-		</vf-module>
-		<vf-module>
-			<vf-module-id>supercool</vf-module-id>
-			<vf-module-name>PCRF::module-1-0</vf-module-name>
-			<persona-model-id>extrovert</persona-model-id>
-			<persona-model-version>2.0</persona-model-version>
-			<is-base-vf-module>false</is-base-vf-module>
-			<heat-stack-id>slowburn</heat-stack-id>
-			<orchestration-status>pending-create</orchestration-status>
-			<resource-version>0000075</resource-version>
-		</vf-module>
-	</vf-modules>
-	<relationship-list/>
-	<l-interfaces/>
-	<lag-interfaces/>
-</generic-vnf>
+<generic-vnf xmlns="http://com.aai.inventory/v7">
+	<vnf-id>skask</vnf-id>
+	<vnf-name>STMTN5MMSC20</vnf-name>
+	<vnf-type>pcrf-capacity</vnf-type>
+	<service-id>SDN-MOBILITY</service-id>
+	<equipment-role>vPCRF</equipment-role>
+	<orchestration-status>pending-create</orchestration-status>
+	<in-maint>false</in-maint>
+	<is-closed-loop-disabled>false</is-closed-loop-disabled>
+	<persona-model-id>introvert</persona-model-id>
+	<persona-model-version>2.0</persona-model-version>
+	<resource-version>0000020</resource-version>
+	<vf-modules>
+		<vf-module>
+			<vf-module-id>lukewarm</vf-module-id>
+			<vf-module-name>PCRF::module-0-0</vf-module-name>
+			<persona-model-id>introvert</persona-model-id>
+			<persona-model-version>2.0</persona-model-version>
+			<is-base-vf-module>true</is-base-vf-module>
+			<heat-stack-id>fastburn</heat-stack-id>
+			<orchestration-status>pending-create</orchestration-status>
+			<resource-version>0000074</resource-version>
+		</vf-module>
+		<vf-module>
+			<vf-module-id>supercool</vf-module-id>
+			<vf-module-name>PCRF::module-1-0</vf-module-name>
+			<persona-model-id>extrovert</persona-model-id>
+			<persona-model-version>2.0</persona-model-version>
+			<is-base-vf-module>false</is-base-vf-module>
+			<heat-stack-id>slowburn</heat-stack-id>
+			<orchestration-status>pending-create</orchestration-status>
+			<resource-version>0000075</resource-version>
+		</vf-module>
+	</vf-modules>
+	<relationship-list/>
+	<l-interfaces/>
+	<lag-interfaces/>
+</generic-vnf>
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/QueryNetworkPolicy_AAIResponse_Success.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/QueryNetworkPolicy_AAIResponse_Success.xml
index 0442afc..94e0042 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/QueryNetworkPolicy_AAIResponse_Success.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/QueryNetworkPolicy_AAIResponse_Success.xml
@@ -1,21 +1,21 @@
-<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
-                   statusCode="200">
-   <rest:headers>
-      <rest:header name="Transfer-Encoding" value="chunked"/>
-      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
-      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
-      <rest:header name="X-AAI-TXID"
-                   value="mtcnjv9aaas01.mtcnj.aic.cip.att.com-20160314-20:53:33:487-134392"/>
-      <rest:header name="Content-Type" value="application/xml"/>
-      <rest:header name="Server" value="Apache-Coyote/1.1"/>
-      <rest:header name="Cache-Control" value="private"/>
-   </rest:headers>
-   <rest:payload contentType="text/xml">
-      <network-policy xmlns="http://com.att.aai.inventory/v8">
-         <network-policy-id>9a7b327d9-287aa00-82c4b0-105757</network-policy-id>
-         <network-policy-fqdn>GN_EVPN_Test</network-policy-fqdn>
-         <heat-stack-id>195159195</heat-stack-id>
-         <resource-version>14567890</resource-version>
-      </network-policy>
-   </rest:payload>
+<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
+                   statusCode="200">
+   <rest:headers>
+      <rest:header name="Transfer-Encoding" value="chunked"/>
+      <rest:header name="Date" value="Mon,14 Mar 2016 20:53:33 GMT"/>
+      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
+      <rest:header name="X-AAI-TXID"
+                   value="mtcnjv9aaas01.mtcnj.aic.cip.com-20160314-20:53:33:487-134392"/>
+      <rest:header name="Content-Type" value="application/xml"/>
+      <rest:header name="Server" value="Apache-Coyote/1.1"/>
+      <rest:header name="Cache-Control" value="private"/>
+   </rest:headers>
+   <rest:payload contentType="text/xml">
+      <network-policy xmlns="http://com.aai.inventory/v8">
+         <network-policy-id>9a7b327d9-287aa00-82c4b0-105757</network-policy-id>
+         <network-policy-fqdn>GN_EVPN_Test</network-policy-fqdn>
+         <heat-stack-id>195159195</heat-stack-id>
+         <resource-version>14567890</resource-version>
+      </network-policy>
+   </rest:payload>
 </rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallback.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallback.xml
index b143e3b..7c67095 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallback.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallback.xml
@@ -1,315 +1,315 @@
-<output xmlns="com:att:sdnctl:vnf">
-<vnf-list xmlns="com:att:sdnctl:vnf">
-	<vnf-id>bd1b3789-6474-4935-94b2-90b656e035d0</vnf-id>
-	<service-data>
-		<vnf-id>bd1b3789-6474-4935-94b2-90b656e035d0</vnf-id>
-		<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>
-		</sdnc-request-header>
-		<service-information>
-			<subscriber-name>notsurewecare</subscriber-name>
-			<service-instance-id>bd1b3789-6474-4935-94b2-90b656e035d0</service-instance-id>
-			<service-type>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-type>
-			<service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-		</service-information>
-		<oper-status>
-			<order-status>PendingCreate</order-status>
-		</oper-status>
-		<vnf-request-information>
-			<aic-cloud-region>VNN1CA52LCP</aic-cloud-region>
-			<vnf-name>ZVNNMOGX01_base</vnf-name>
-			<generic-vnf-id>afd0f02a-1ddb-43bb-aded-5113e46e82ae</generic-vnf-id>
-			<generic-vnf-type>ZVNN1MOGX01-SVC/ZVNN1MOGX01 - VF AUG 1 1</generic-vnf-type>
-			<generic-vnf-name>ZVNN1MOGX01</generic-vnf-name>
-			<tenant>33d209df14ac4c08ad60747185d2f3e0</tenant>
-			<vnf-id>bd1b3789-6474-4935-94b2-90b656e035d0</vnf-id>
-			<vnf-type>ZVNN1MOGX01 - VF AUG 1::module-0</vnf-type>
-		</vnf-request-information>
-		<vnf-topology-information>
-			<vnf-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-vms>
-					<vm-type>ps</vm-type>
-					<vm-names>
-						<vm-name>ZVNN1MOGX01MPS001</vm-name>
-					</vm-names>
-					<vm-names>
-						<vm-name>ZVNN1MOGX01MPS002</vm-name>
-					</vm-names>
-					<vm-names>
-						<vm-name>ZVNN1MOGX01MPS003</vm-name>
-					</vm-names>
-					<vm-names>
-						<vm-name>ZVNN1MOGX01MPS004</vm-name>
-					</vm-names>
-					<vm-count>4</vm-count>
-					<vm-networks>
-						<network-role>mog_cor_B</network-role>
-						<network-ips>
-							<ip-address>107.224.36.251</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.224.36.252</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.224.36.253</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.224.36.254</ip-address>
-						</network-ips>
-						<use-dhcp>N</use-dhcp>
-					</vm-networks>
-				</vnf-vms>
-				<vnf-vms>
-					<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>
-						<use-dhcp>N</use-dhcp>
-					</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>
-						<use-dhcp>N</use-dhcp>
-					</vm-networks>
-				</vnf-vms>
-				<vnf-vms>
-					<vm-type>oam</vm-type>
-					<vm-names>
-						<vm-name>ZVNN1MOGX01OAM001</vm-name>
-					</vm-names>
-					<vm-names>
-						<vm-name>ZVNN1MOGX01OAM002</vm-name>
-					</vm-names>
-					<vm-count>2</vm-count>
-					<vm-networks>
-						<network-role>mog_oam</network-role>
-						<network-ips>
-							<ip-address>107.239.167.252</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.239.167.251</ip-address>
-						</network-ips>
-						<use-dhcp>N</use-dhcp>
-					</vm-networks>
-					<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>
-						<use-dhcp>N</use-dhcp>
-					</vm-networks>
-				</vnf-vms>
-				<vnf-vms>
-					<vm-type>pd</vm-type>
-					<vm-names>
-						<vm-name>ZVNN1MOGX01MPD001</vm-name>
-					</vm-names>
-					<vm-names>
-						<vm-name>ZVNN1MOGX01MPD002</vm-name>
-					</vm-names>
-					<vm-count>2</vm-count>
-					<vm-networks>
-						<network-role>mog_dmz</network-role>
-						<network-ips>
-							<ip-address>107.225.25.253</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.225.25.254</ip-address>
-						</network-ips>
-						<use-dhcp>N</use-dhcp>
-						<floating-ip>107.225.254.253</floating-ip>
-					</vm-networks>
-					<vm-networks>
-						<network-role>mog_oam</network-role>
-						<network-ips>
-							<ip-address>107.239.167.254</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.239.167.253</ip-address>
-						</network-ips>
-						<use-dhcp>N</use-dhcp>
-						<floating-ip>107.239.167.249</floating-ip>
-					</vm-networks>
-					<vm-networks>
-						<network-role>mog_exn</network-role>
-						<network-ips>
-							<ip-address>107.224.46.253</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.224.46.254</ip-address>
-						</network-ips>
-						<use-dhcp>N</use-dhcp>
-						<floating-ip>107.224.46.252</floating-ip>
-					</vm-networks>
-					<vm-networks>
-						<network-role>mog_cor_B</network-role>
-						<network-ips>
-							<ip-address>107.224.36.247</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.224.36.248</ip-address>
-						</network-ips>
-						<use-dhcp>N</use-dhcp>
-						<floating-ip>107.224.41.252</floating-ip>
-					</vm-networks>
-					<vm-networks>
-						<network-role>mog_gn</network-role>
-						<network-ips>
-							<ip-address>107.224.41.253</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.224.41.254</ip-address>
-						</network-ips>
-						<use-dhcp>N</use-dhcp>
-						<floating-ip>107.224.41.252</floating-ip>
-					</vm-networks>
-					<vm-networks>
-						<network-role>mog_cor_A</network-role>
-						<network-ips>
-							<ip-address>107.224.38.253</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.224.38.254</ip-address>
-						</network-ips>
-						<use-dhcp>N</use-dhcp>
-					</vm-networks>
-				</vnf-vms>
-				<vnf-vms>
-					<vm-type>sm</vm-type>
-					<vm-names>
-						<vm-name>ZVNN1MOGX01MSM001</vm-name>
-					</vm-names>
-					<vm-names>
-						<vm-name>ZVNN1MOGX01MSM002</vm-name>
-					</vm-names>
-					<vm-names>
-						<vm-name>ZVNN1MOGX01MSM003</vm-name>
-					</vm-names>
-					<vm-names>
-						<vm-name>ZVNN1MOGX01MSM004</vm-name>
-					</vm-names>
-					<vm-count>4</vm-count>
-					<vm-networks>
-						<network-role>mog_cor_B</network-role>
-						<network-ips>
-							<ip-address>107.224.36.243</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.224.36.244</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.224.36.245</ip-address>
-						</network-ips>
-						<network-ips>
-							<ip-address>107.224.36.246</ip-address>
-						</network-ips>
-						<use-dhcp>N</use-dhcp>
-					</vm-networks>
-				</vnf-vms>
-			</vnf-assignments>
-			<vnf-topology-identifier>
-				<vnf-name>ZVNNMOGX01_base</vnf-name>
-				<service-type>SDN-MOBILITY</service-type>
-				<vnf-type>ZVNN1MOGX01 - VF AUG 1::module-0</vnf-type>
-				<generic-vnf-type>ZVNN1MOGX01-SVC/ZVNN1MOGX01 - VF AUG 1 1</generic-vnf-type>
-				<generic-vnf-name>ZVNN1MOGX01</generic-vnf-name>
-			</vnf-topology-identifier>
-		</vnf-topology-information>
-		<request-information>
-			<request-id>9ddf628a-9eca-430e-8974-22d520a31be1</request-id>
-			<notification-url/>
-			<source>PORTAL</source>
-			<request-action>VNFActivateRequest</request-action>
-		</request-information>
-	</service-data>
-	<service-status>
-		<response-code>200</response-code>
-		<final-indicator>Y</final-indicator>
-		<request-status>synccomplete</request-status>
-		<response-timestamp>2016-08-05T16:15:19.398Z</response-timestamp>
-		<rpc-name>vnf-topology-operation</rpc-name>
-		<vnfsdn-action>VNFActivateRequest</vnfsdn-action>
-		<rpc-action>assign</rpc-action>
-	</service-status>
-</vnf-list>
-
-</output>
+<output xmlns="com:att:sdnctl:vnf">
+<vnf-list xmlns="com:att:sdnctl:vnf">
+	<vnf-id>bd1b3789-6474-4935-94b2-90b656e035d0</vnf-id>
+	<service-data>
+		<vnf-id>bd1b3789-6474-4935-94b2-90b656e035d0</vnf-id>
+		<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.net:8443/adapters/rest/SDNCNotify</svc-notification-url>
+		</sdnc-request-header>
+		<service-information>
+			<subscriber-name>notsurewecare</subscriber-name>
+			<service-instance-id>bd1b3789-6474-4935-94b2-90b656e035d0</service-instance-id>
+			<service-type>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-type>
+			<service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+		</service-information>
+		<oper-status>
+			<order-status>PendingCreate</order-status>
+		</oper-status>
+		<vnf-request-information>
+			<aic-cloud-region>VNN1CA52LCP</aic-cloud-region>
+			<vnf-name>ZVNNMOGX01_base</vnf-name>
+			<generic-vnf-id>afd0f02a-1ddb-43bb-aded-5113e46e82ae</generic-vnf-id>
+			<generic-vnf-type>ZVNN1MOGX01-SVC/ZVNN1MOGX01 - VF AUG 1 1</generic-vnf-type>
+			<generic-vnf-name>ZVNN1MOGX01</generic-vnf-name>
+			<tenant>33d209df14ac4c08ad60747185d2f3e0</tenant>
+			<vnf-id>bd1b3789-6474-4935-94b2-90b656e035d0</vnf-id>
+			<vnf-type>ZVNN1MOGX01 - VF AUG 1::module-0</vnf-type>
+		</vnf-request-information>
+		<vnf-topology-information>
+			<vnf-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-vms>
+					<vm-type>ps</vm-type>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01MPS001</vm-name>
+					</vm-names>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01MPS002</vm-name>
+					</vm-names>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01MPS003</vm-name>
+					</vm-names>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01MPS004</vm-name>
+					</vm-names>
+					<vm-count>4</vm-count>
+					<vm-networks>
+						<network-role>mog_cor_B</network-role>
+						<network-ips>
+							<ip-address>107.224.36.251</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.224.36.252</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.224.36.253</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.224.36.254</ip-address>
+						</network-ips>
+						<use-dhcp>N</use-dhcp>
+					</vm-networks>
+				</vnf-vms>
+				<vnf-vms>
+					<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>
+						<use-dhcp>N</use-dhcp>
+					</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>
+						<use-dhcp>N</use-dhcp>
+					</vm-networks>
+				</vnf-vms>
+				<vnf-vms>
+					<vm-type>oam</vm-type>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01OAM001</vm-name>
+					</vm-names>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01OAM002</vm-name>
+					</vm-names>
+					<vm-count>2</vm-count>
+					<vm-networks>
+						<network-role>mog_oam</network-role>
+						<network-ips>
+							<ip-address>107.239.167.252</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.239.167.251</ip-address>
+						</network-ips>
+						<use-dhcp>N</use-dhcp>
+					</vm-networks>
+					<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>
+						<use-dhcp>N</use-dhcp>
+					</vm-networks>
+				</vnf-vms>
+				<vnf-vms>
+					<vm-type>pd</vm-type>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01MPD001</vm-name>
+					</vm-names>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01MPD002</vm-name>
+					</vm-names>
+					<vm-count>2</vm-count>
+					<vm-networks>
+						<network-role>mog_dmz</network-role>
+						<network-ips>
+							<ip-address>107.225.25.253</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.225.25.254</ip-address>
+						</network-ips>
+						<use-dhcp>N</use-dhcp>
+						<floating-ip>107.225.254.253</floating-ip>
+					</vm-networks>
+					<vm-networks>
+						<network-role>mog_oam</network-role>
+						<network-ips>
+							<ip-address>107.239.167.254</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.239.167.253</ip-address>
+						</network-ips>
+						<use-dhcp>N</use-dhcp>
+						<floating-ip>107.239.167.249</floating-ip>
+					</vm-networks>
+					<vm-networks>
+						<network-role>mog_exn</network-role>
+						<network-ips>
+							<ip-address>107.224.46.253</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.224.46.254</ip-address>
+						</network-ips>
+						<use-dhcp>N</use-dhcp>
+						<floating-ip>107.224.46.252</floating-ip>
+					</vm-networks>
+					<vm-networks>
+						<network-role>mog_cor_B</network-role>
+						<network-ips>
+							<ip-address>107.224.36.247</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.224.36.248</ip-address>
+						</network-ips>
+						<use-dhcp>N</use-dhcp>
+						<floating-ip>107.224.41.252</floating-ip>
+					</vm-networks>
+					<vm-networks>
+						<network-role>mog_gn</network-role>
+						<network-ips>
+							<ip-address>107.224.41.253</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.224.41.254</ip-address>
+						</network-ips>
+						<use-dhcp>N</use-dhcp>
+						<floating-ip>107.224.41.252</floating-ip>
+					</vm-networks>
+					<vm-networks>
+						<network-role>mog_cor_A</network-role>
+						<network-ips>
+							<ip-address>107.224.38.253</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.224.38.254</ip-address>
+						</network-ips>
+						<use-dhcp>N</use-dhcp>
+					</vm-networks>
+				</vnf-vms>
+				<vnf-vms>
+					<vm-type>sm</vm-type>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01MSM001</vm-name>
+					</vm-names>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01MSM002</vm-name>
+					</vm-names>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01MSM003</vm-name>
+					</vm-names>
+					<vm-names>
+						<vm-name>ZVNN1MOGX01MSM004</vm-name>
+					</vm-names>
+					<vm-count>4</vm-count>
+					<vm-networks>
+						<network-role>mog_cor_B</network-role>
+						<network-ips>
+							<ip-address>107.224.36.243</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.224.36.244</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.224.36.245</ip-address>
+						</network-ips>
+						<network-ips>
+							<ip-address>107.224.36.246</ip-address>
+						</network-ips>
+						<use-dhcp>N</use-dhcp>
+					</vm-networks>
+				</vnf-vms>
+			</vnf-assignments>
+			<vnf-topology-identifier>
+				<vnf-name>ZVNNMOGX01_base</vnf-name>
+				<service-type>SDN-MOBILITY</service-type>
+				<vnf-type>ZVNN1MOGX01 - VF AUG 1::module-0</vnf-type>
+				<generic-vnf-type>ZVNN1MOGX01-SVC/ZVNN1MOGX01 - VF AUG 1 1</generic-vnf-type>
+				<generic-vnf-name>ZVNN1MOGX01</generic-vnf-name>
+			</vnf-topology-identifier>
+		</vnf-topology-information>
+		<request-information>
+			<request-id>9ddf628a-9eca-430e-8974-22d520a31be1</request-id>
+			<notification-url/>
+			<source>PORTAL</source>
+			<request-action>VNFActivateRequest</request-action>
+		</request-information>
+	</service-data>
+	<service-status>
+		<response-code>200</response-code>
+		<final-indicator>Y</final-indicator>
+		<request-status>synccomplete</request-status>
+		<response-timestamp>2016-08-05T16:15:19.398Z</response-timestamp>
+		<rpc-name>vnf-topology-operation</rpc-name>
+		<vnfsdn-action>VNFActivateRequest</vnfsdn-action>
+		<rpc-action>assign</rpc-action>
+	</service-status>
+</vnf-list>
+
+</output>
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVfModule.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVfModule.xml
index c9f9cf3..9b69fdc 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVfModule.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/SDNCTopologyQueryCallbackVfModule.xml
@@ -1,141 +1,141 @@
-<output xmlns="com:att:sdnctl:vnf">
-	<vnf-list xmlns="com:att:sdnctl:vnf">
-	<vnf-id>28455973-1ee5-4ad1-8d35-c4732679743a</vnf-id>
-	<service-status>
-		<response-code>200</response-code>
-		<final-indicator>Y</final-indicator>
-		<request-status>synccomplete</request-status>
-		<response-timestamp>2016-06-08T19:44:59.138Z</response-timestamp>
-		<rpc-name>vnf-topology-operation</rpc-name>
-		<vnfsdn-action>VNFActivateRequest</vnfsdn-action>
-		<rpc-action>assign</rpc-action>
-	</service-status>
-	<service-data>
-		<vnf-id>28455973-1ee5-4ad1-8d35-c4732679743</vnf-id>
-		<service-information>
-			<subscriber-name>notsurewecare</subscriber-name>
-			<service-instance-id>28455973-1ee5-4ad1-8d35-c4732679743a</service-instance-id>
-			<service-type>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-type>
-			<service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-		</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:28080/adapters/rest/SDNCNotify</svc-notification-url>
-			<svc-action>assign</svc-action>
-		</sdnc-request-header>
-		<vnf-request-information>
-			<aic-cloud-region>AAIAIC25</aic-cloud-region>
-			<vnf-name>MSOTEST06-vSAMP3::base::module-0</vnf-name>
-			<generic-vnf-id>91ad7ab0-9ffd-471d-971c-3eb913a2cc75</generic-vnf-id>
-			<generic-vnf-type>Test/vSAMP3 1</generic-vnf-type>
-			<generic-vnf-name>MSOTEST06</generic-vnf-name>
-			<tenant>4ae1d3446a4c48b2bec44b6cfba06d68</tenant>
-			<vnf-id>28455973-1ee5-4ad1-8d35-c4732679743a</vnf-id>
-			<vnf-type>vSAMP3::base::module-0</vnf-type>
-		</vnf-request-information>
-		<oper-status>
-			<order-status>PendingCreate</order-status>			
-		</oper-status>
-		<vnf-topology-information>
-			<vnf-parameters>
-				<vnf-parameter-name>image</vnf-parameter-name>
-				<vnf-parameter-value>Ubuntu_Perf</vnf-parameter-value>
-			</vnf-parameters>
-			<vnf-parameters>
-				<vnf-parameter-name>flavor</vnf-parameter-name>
-				<vnf-parameter-value>m1.small</vnf-parameter-value>
-			</vnf-parameters>
-			<vnf-assignments>
-				<vnf-networks>
-					<network-role>int_imbl</network-role>
-					<network-id>680b7453-0ec4-4d96-b355-280d981d418f</network-id>
-					<network-name>Nimbus-25193-T-Willows2_int_imbl_net_1</network-name>
-					<contrail-network-fqdn>default-domain:Nimbus-25193-T-Willows2:Nimbus-25193-T-Willows2_int_imbl_net_1</contrail-network-fqdn>
-					<subnet-id></subnet-id>
-					<ipv6-subnet-id>775607fb-e16a-45ef-94a7-82fba0d16eec</ipv6-subnet-id>
-					<neutron-id>640d07fb-e16a-45ef-94a7-82fba0d169bf</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>sgi_protected</network-role>
-					<network-id>f9039ce9-e3cf-4716-b2d1-ec7912178ea4</network-id>
-					<network-name>Nimbus-25193-T-Willows2_sgi_protected_net_1</network-name>
-					<contrail-network-fqdn>default-domain:Nimbus-25193-T-Willows2:Nimbus-25193-T-Willows2_sgi_protected_net_1</contrail-network-fqdn>
-					<subnet-id>b9999ce9-e3cf-4716-b2d1-ec791217678c</subnet-id>
-					<ipv6-subnet-id></ipv6-subnet-id>
-					<neutron-id>bf11bba8-b971-4ab5-8281-215b3fedcd3c</neutron-id>
-				</vnf-networks>
-				<vnf-vms>
-					<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>
-				</vnf-vms>
-				<availability-zones>
-					<availability-zone>nova</availability-zone>
-				</availability-zones>
-			</vnf-assignments>
-			<vnf-topology-identifier>
-				<vnf-name>MSOTEST06-vSAMP3::base::module-0</vnf-name>
-				<service-type>SDN-MOBILITY</service-type>
-				<vnf-type>vSAMP3::base::module-0</vnf-type>
-				<generic-vnf-type>Test/vSAMP3 1</generic-vnf-type>
-				<generic-vnf-name>MSOTEST06</generic-vnf-name>
-			</vnf-topology-identifier>			
-		</vnf-topology-information>
-		<request-information>
-			<request-id>5e168556-a5c6-4813-bff3-cc03007afbbc</request-id>
-			<notification-url></notification-url>
-			<source>SoapUI-bns-vf-base-vSAMP3-9001</source>
-			<request-action>VNFActivateRequest</request-action>			
-		</request-information>
-	</service-data>
-</vnf-list>
-</output>
+<output xmlns="com:att:sdnctl:vnf">
+	<vnf-list xmlns="com:att:sdnctl:vnf">
+	<vnf-id>28455973-1ee5-4ad1-8d35-c4732679743a</vnf-id>
+	<service-status>
+		<response-code>200</response-code>
+		<final-indicator>Y</final-indicator>
+		<request-status>synccomplete</request-status>
+		<response-timestamp>2016-06-08T19:44:59.138Z</response-timestamp>
+		<rpc-name>vnf-topology-operation</rpc-name>
+		<vnfsdn-action>VNFActivateRequest</vnfsdn-action>
+		<rpc-action>assign</rpc-action>
+	</service-status>
+	<service-data>
+		<vnf-id>28455973-1ee5-4ad1-8d35-c4732679743</vnf-id>
+		<service-information>
+			<subscriber-name>notsurewecare</subscriber-name>
+			<service-instance-id>28455973-1ee5-4ad1-8d35-c4732679743a</service-instance-id>
+			<service-type>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-type>
+			<service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
+		</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.com:28080/adapters/rest/SDNCNotify</svc-notification-url>
+			<svc-action>assign</svc-action>
+		</sdnc-request-header>
+		<vnf-request-information>
+			<aic-cloud-region>AAIAIC25</aic-cloud-region>
+			<vnf-name>MSOTEST06-vSAMP3::base::module-0</vnf-name>
+			<generic-vnf-id>91ad7ab0-9ffd-471d-971c-3eb913a2cc75</generic-vnf-id>
+			<generic-vnf-type>Test/vSAMP3 1</generic-vnf-type>
+			<generic-vnf-name>MSOTEST06</generic-vnf-name>
+			<tenant>4ae1d3446a4c48b2bec44b6cfba06d68</tenant>
+			<vnf-id>28455973-1ee5-4ad1-8d35-c4732679743a</vnf-id>
+			<vnf-type>vSAMP3::base::module-0</vnf-type>
+		</vnf-request-information>
+		<oper-status>
+			<order-status>PendingCreate</order-status>			
+		</oper-status>
+		<vnf-topology-information>
+			<vnf-parameters>
+				<vnf-parameter-name>image</vnf-parameter-name>
+				<vnf-parameter-value>Ubuntu_Perf</vnf-parameter-value>
+			</vnf-parameters>
+			<vnf-parameters>
+				<vnf-parameter-name>flavor</vnf-parameter-name>
+				<vnf-parameter-value>m1.small</vnf-parameter-value>
+			</vnf-parameters>
+			<vnf-assignments>
+				<vnf-networks>
+					<network-role>int_imbl</network-role>
+					<network-id>680b7453-0ec4-4d96-b355-280d981d418f</network-id>
+					<network-name>Nimbus-25193-T-Willows2_int_imbl_net_1</network-name>
+					<contrail-network-fqdn>default-domain:Nimbus-25193-T-Willows2:Nimbus-25193-T-Willows2_int_imbl_net_1</contrail-network-fqdn>
+					<subnet-id></subnet-id>
+					<ipv6-subnet-id>775607fb-e16a-45ef-94a7-82fba0d16eec</ipv6-subnet-id>
+					<neutron-id>640d07fb-e16a-45ef-94a7-82fba0d169bf</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>sgi_protected</network-role>
+					<network-id>f9039ce9-e3cf-4716-b2d1-ec7912178ea4</network-id>
+					<network-name>Nimbus-25193-T-Willows2_sgi_protected_net_1</network-name>
+					<contrail-network-fqdn>default-domain:Nimbus-25193-T-Willows2:Nimbus-25193-T-Willows2_sgi_protected_net_1</contrail-network-fqdn>
+					<subnet-id>b9999ce9-e3cf-4716-b2d1-ec791217678c</subnet-id>
+					<ipv6-subnet-id></ipv6-subnet-id>
+					<neutron-id>bf11bba8-b971-4ab5-8281-215b3fedcd3c</neutron-id>
+				</vnf-networks>
+				<vnf-vms>
+					<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>
+				</vnf-vms>
+				<availability-zones>
+					<availability-zone>nova</availability-zone>
+				</availability-zones>
+			</vnf-assignments>
+			<vnf-topology-identifier>
+				<vnf-name>MSOTEST06-vSAMP3::base::module-0</vnf-name>
+				<service-type>SDN-MOBILITY</service-type>
+				<vnf-type>vSAMP3::base::module-0</vnf-type>
+				<generic-vnf-type>Test/vSAMP3 1</generic-vnf-type>
+				<generic-vnf-name>MSOTEST06</generic-vnf-name>
+			</vnf-topology-identifier>			
+		</vnf-topology-information>
+		<request-information>
+			<request-id>5e168556-a5c6-4813-bff3-cc03007afbbc</request-id>
+			<notification-url></notification-url>
+			<source>SoapUI-bns-vf-base-vSAMP3-9001</source>
+			<request-action>VNFActivateRequest</request-action>			
+		</request-information>
+	</service-data>
+</vnf-list>
+</output>
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VfModule-lukewarm.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VfModule-lukewarm.xml
index ad3c359..cfbf903 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VfModule-lukewarm.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VfModule-lukewarm.xml
@@ -1,10 +1,10 @@
-<vf-module xmlns="http://com.att.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>
-	<orchestration-status>pending-create</orchestration-status>
-	<is-base-vf-module>true</is-base-vf-module>
-	<resource-version>330-90</resource-version>
-	<persona-model-id>introvert</persona-model-id>
-	<persona-model-version>2.0</persona-model-version>
+<vf-module xmlns="http://com.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>
+	<orchestration-status>pending-create</orchestration-status>
+	<is-base-vf-module>true</is-base-vf-module>
+	<resource-version>330-90</resource-version>
+	<persona-model-id>introvert</persona-model-id>
+	<persona-model-version>2.0</persona-model-version>
 </vf-module>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VfModule-new.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VfModule-new.xml
index eba91a7..27c8ecf 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VfModule-new.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VfModule-new.xml
@@ -1,9 +1,9 @@
-<vf-module xmlns="http://com.att.aai.inventory/v7">
-	<vf-module-id>b37d96db-7d2c-47ce-bf61-a6c7b82fe161</vf-module-id>
-	<vf-module-name>PCRF::module-0-2</vf-module-name>
-	<persona-model-id>00000000-0000-0000-0000-000000000000</persona-model-id>
-	<persona-model-version>1.0</persona-model-version>
-	<is-base-vf-module>false</is-base-vf-module>
-	<orchestration-status>pending-create</orchestration-status>
-	<resource-version>330-90</resource-version>
+<vf-module xmlns="http://com.aai.inventory/v7">
+	<vf-module-id>b37d96db-7d2c-47ce-bf61-a6c7b82fe161</vf-module-id>
+	<vf-module-name>PCRF::module-0-2</vf-module-name>
+	<persona-model-id>00000000-0000-0000-0000-000000000000</persona-model-id>
+	<persona-model-version>1.0</persona-model-version>
+	<is-base-vf-module>false</is-base-vf-module>
+	<orchestration-status>pending-create</orchestration-status>
+	<resource-version>330-90</resource-version>
 </vf-module>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VfModule-supercool.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VfModule-supercool.xml
index 6d365f7..3370e33 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VfModule-supercool.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VfModule-supercool.xml
@@ -1,27 +1,27 @@
-<vf-module xmlns="http://com.att.aai.inventory/v7">
-	<vf-module-id>supercool</vf-module-id>
-	<vf-module-name>PCRF::module-2</vf-module-name>
-	<heat-stack-id>fastburn</heat-stack-id>
-	<orchestration-status>pending-create</orchestration-status>
-	<is-base-vf-module>false</is-base-vf-module>
-	<resource-version>330-89</resource-version>
-	<persona-model-id>introvert</persona-model-id>
-	<persona-model-version>2.0</persona-model-version>
-	<relationship-list>
-		<relationship>
-			<related-to>volume-group</related-to>
-			<relationship-data>
-				<relationship-key>cloud-region.cloud-owner</relationship-key>
-				<relationship-value>att-aic</relationship-value>
-			</relationship-data>
-			<relationship-data>
-				<relationship-key>cloud-region.cloud-region-id</relationship-key>
-				<relationship-value>pdk1</relationship-value>
-			</relationship-data>
-			<relationship-data>
-				<relationship-key>volume-group.volume-group-id</relationship-key>
-				<relationship-value>78987</relationship-value>
-			</relationship-data>
-		</relationship>
-	</relationship-list>
+<vf-module xmlns="http://com.aai.inventory/v7">
+	<vf-module-id>supercool</vf-module-id>
+	<vf-module-name>PCRF::module-2</vf-module-name>
+	<heat-stack-id>fastburn</heat-stack-id>
+	<orchestration-status>pending-create</orchestration-status>
+	<is-base-vf-module>false</is-base-vf-module>
+	<resource-version>330-89</resource-version>
+	<persona-model-id>introvert</persona-model-id>
+	<persona-model-version>2.0</persona-model-version>
+	<relationship-list>
+		<relationship>
+			<related-to>volume-group</related-to>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-owner</relationship-key>
+				<relationship-value>att-aic</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>cloud-region.cloud-region-id</relationship-key>
+				<relationship-value>pdk1</relationship-value>
+			</relationship-data>
+			<relationship-data>
+				<relationship-key>volume-group.volume-group-id</relationship-key>
+				<relationship-value>78987</relationship-value>
+			</relationship-data>
+		</relationship>
+	</relationship-list>
 </vf-module>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VolumeGroup.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VolumeGroup.xml
index 241e5e3..b44c977 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VolumeGroup.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/VfModularity/VolumeGroup.xml
@@ -1,25 +1,25 @@
-  <volume-group xmlns="http://com.att.aai.inventory/v7">
-         <volume-group-id>78987</volume-group-id>
-         <volume-group-name>Volume_2</volume-group-name>
-         <heat-stack-id>slowburn</heat-stack-id>
-         <vnf-type>pcrf-capacity</vnf-type>
-         <orchestration-status>Active</orchestration-status>
-         <resource-version>0000020</resource-version>
-         <relationship-list>
-            <relationship>
-               <related-to>tenant</related-to>
-               <relationship-data>
-                  <relationship-key>cloud-region.cloud-owner</relationship-key>
-                  <relationship-value>att-aic</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>cloud-region.cloud-region-id</relationship-key>
-                  <relationship-value>MDTWNJ21</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>tenant.tenant-id</relationship-key>
-                  <relationship-value>fba1bd1e195a404cacb9ce17a9b2b421</relationship-value>
-               </relationship-data>
-            </relationship>
-         </relationship-list>
+  <volume-group xmlns="http://com.aai.inventory/v7">
+         <volume-group-id>78987</volume-group-id>
+         <volume-group-name>Volume_2</volume-group-name>
+         <heat-stack-id>slowburn</heat-stack-id>
+         <vnf-type>pcrf-capacity</vnf-type>
+         <orchestration-status>Active</orchestration-status>
+         <resource-version>0000020</resource-version>
+         <relationship-list>
+            <relationship>
+               <related-to>tenant</related-to>
+               <relationship-data>
+                  <relationship-key>cloud-region.cloud-owner</relationship-key>
+                  <relationship-value>att-aic</relationship-value>
+               </relationship-data>
+               <relationship-data>
+                  <relationship-key>cloud-region.cloud-region-id</relationship-key>
+                  <relationship-value>MDTWNJ21</relationship-value>
+               </relationship-data>
+               <relationship-data>
+                  <relationship-key>tenant.tenant-id</relationship-key>
+                  <relationship-value>fba1bd1e195a404cacb9ce17a9b2b421</relationship-value>
+               </relationship-data>
+            </relationship>
+         </relationship-list>
       </volume-group>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/aai-volume-group-id-info.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/aai-volume-group-id-info.xml
index 37c5155..396f553 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/aai-volume-group-id-info.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/aai-volume-group-id-info.xml
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<tns:volume-group xmlns:tns="http://com.att.aai.inventory/v6" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://com.att.aai.inventory/v6 aai_schema_v6.xsd ">
-  <tns:volume-group-id>VOLUME_GROUP_ID_1</tns:volume-group-id>
-  <tns:volume-group-name>VOLUME_GROUP_ID_1_NAME</tns:volume-group-name>
-  <tns:heat-stack-id>heat-stack-id</tns:heat-stack-id>
-  <tns:vnf-type>vnf-type</tns:vnf-type>
-  <tns:orchestration-status>OK</tns:orchestration-status>
-  <tns:resource-version>1</tns:resource-version>
-  <tns:relationship-list>
-            <tns:relationship>
-               <tns:related-to>tenant</tns:related-to>
-              	 <tns:relationship-data>
-                  <tns:relationship-key>cloud-region.cloud-owner</tns:relationship-key>
-                  <tns:relationship-value>att-aic</tns:relationship-value>
-               </tns:relationship-data>
-               <tns:relationship-data>
-                  <tns:relationship-key>cloud-region.cloud-region-id</tns:relationship-key>
-                  <tns:relationship-value>pdk1</tns:relationship-value>
-               </tns:relationship-data>
-               <tns:relationship-data>
-                  <tns:relationship-key>tenant.tenant-id</tns:relationship-key>
-                  <tns:relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0cg</tns:relationship-value>
-               </tns:relationship-data>
-              </tns:relationship>
-   </tns:relationship-list>
- </tns:volume-group>
- 
-
+<?xml version="1.0" encoding="UTF-8"?>
+<tns:volume-group xmlns:tns="http://com.aai.inventory/v6" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://com.aai.inventory/v6 aai_schema_v6.xsd ">
+  <tns:volume-group-id>VOLUME_GROUP_ID_1</tns:volume-group-id>
+  <tns:volume-group-name>VOLUME_GROUP_ID_1_NAME</tns:volume-group-name>
+  <tns:heat-stack-id>heat-stack-id</tns:heat-stack-id>
+  <tns:vnf-type>vnf-type</tns:vnf-type>
+  <tns:orchestration-status>OK</tns:orchestration-status>
+  <tns:resource-version>1</tns:resource-version>
+  <tns:relationship-list>
+            <tns:relationship>
+               <tns:related-to>tenant</tns:related-to>
+              	 <tns:relationship-data>
+                  <tns:relationship-key>cloud-region.cloud-owner</tns:relationship-key>
+                  <tns:relationship-value>att-aic</tns:relationship-value>
+               </tns:relationship-data>
+               <tns:relationship-data>
+                  <tns:relationship-key>cloud-region.cloud-region-id</tns:relationship-key>
+                  <tns:relationship-value>pdk1</tns:relationship-value>
+               </tns:relationship-data>
+               <tns:relationship-data>
+                  <tns:relationship-key>tenant.tenant-id</tns:relationship-key>
+                  <tns:relationship-value>cee6d136-e378-4678-a024-2cd15f0ee0cg</tns:relationship-value>
+               </tns:relationship-data>
+              </tns:relationship>
+   </tns:relationship-list>
+ </tns:volume-group>
+ 
+
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/mso.bpmn.urn.properties b/bpmn/MSOCommonBPMN/src/test/resources/mso.bpmn.urn.properties
index f1a8222..133f585 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/mso.bpmn.urn.properties
+++ b/bpmn/MSOCommonBPMN/src/test/resources/mso.bpmn.urn.properties
@@ -1,86 +1,86 @@
-# Default URN Mappings for unit tests
-
-mso.rollback=true
-
-canopi.auth=757A94191D685FD2092AC1490730A4FC
-csi.aots.addincidentmanagement.endpoint=http://localhost:28090/AddIncidentManagementTicketRequest
-csi.networkstatus.endpoint=http://localhost:28090/SendManagedNetworkStatusNotification
-mso.csi.pwd=4EA237303511EFBBC37F17A351562131
-mso.csi.usrname=mso
-mso.msoKey=07a7159d3bf51a0e53be7a8f89699be7
-
-mso.adapters.completemsoprocess.endpoint=http://localhost:28090/CompleteMsoProcess
-
-mso.adapters.db.endpoint=http://localhost:28090/dbadapters/RequestsDbAdapter
-mso.adapters.db.auth=757A94191D685FD2092AC1490730A4FC
-
-mso.adapters.network.endpoint=http://localhost:28090/networks/NetworkAdapter
-mso.adapters.network.rest.endpoint=http://localhost:28090/networks/NetworkAdapter
-
-mso.adapters.po.auth=757A94191D685FD2092AC1490730A4FC
-mso.adapters.po.password=3141634BF7E070AA289CF2892C986C0B
-mso.po.timeout=PT60S
-
-aai.auth=757A94191D685FD2092AC1490730A4FC
-
-mso.adapters.sdnc.endpoint=http://localhost:28090/SDNCAdapter
-mso.adapters.sdnc.rest.endpoint=http://localhost:28090/SDNCAdapter/v1/sdnc
-mso.adapters.sdnc.timeout=PT60S
-mso.sdnc.firewall.yang.model=http://com/openecomp/svc/mis/firewall-lite-gui
-mso.sdnc.firewall.yang.model.version=2015-05-15
-mso.sdnc.password=3141634BF7E070AA289CF2892C986C0B
-mso.sdnc.timeout.firewall.minutes=20
-mso.callbackRetryAttempts=5
-mso.sdnc.timeout=PT10S
-mso.sdnc.timeout.ucpe.async.hours=120
-mso.sdnc.timeout.ucpe.async.minutes=5
-mso.workflow.message.endpoint=http://localhost:28080/mso/WorkflowMesssage
-mso.workflow.sdncadapter.callback=http://localhost:28080/mso/SDNCAdapterCallbackService
-
-mso.catalog.db.endpoint=http://localhost:28090/
-
-mso.adapters.tenant.endpoint=http://localhost:28090/tenantAdapterMock
-mso.adapters.vnf-async.endpoint=http://localhost:28090/vnfs/VnfAdapterAsync
-mso.adapters.vnf.endpoint=http://localhost:28090/vnfs/VnfAdapter
-mso.adapters.vnf.rest.endpoint=http://localhost:28090/vnfs/v1/vnfs
-mso.workflow.vnfadapter.create.callback=http://localhost:28080/mso/vnfAdapterNotify
-mso.workflow.vnfadapter.delete.callback=http://localhost:28080/mso/vnfAdapterNotify
-mso.workflow.vnfadapter.query.callback=http://localhost:28080/mso/services/VNFAdapterQuerCallbackV1
-mso.workflow.vnfadapter.rollback.callback=http://localhost:28080/mso/vnfAdapterNotify
-mso.workflow.createvce.delay.seconds=1
-mso.infra.customer.id=testCustIdInfra
-
-aai.endpoint=http://localhost:28090
-
-# AAI version mappings
-
-# Example to override default version for a resource:
-#mso.workflow.default.aai.vce.version=6
-#mso.workflow.default.aai.v6.vce.uri=/aai/v6/network/vces/vce
-
-mso.workflow.global.default.aai.version=8
-mso.workflow.default.aai.cloud-region.version=9
-mso.workflow.default.aai.generic-vnf.version=9
-
-mso.workflow.default.aai.v9.cloud-region.uri=/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/att-aic
-mso.workflow.default.aai.v8.customer.uri=/aai/v8/business/customers/customer
-mso.workflow.default.aai.v8.generic-query.uri=/aai/v8/search/generic-query
-mso.workflow.default.aai.v9.generic-vnf.uri=/aai/v9/network/generic-vnfs/generic-vnf
-mso.workflow.default.aai.v8.l3-network.uri=/aai/v8/network/l3-networks/l3-network
-mso.workflow.default.aai.v8.network-policy.uri=/aai/v8/network/network-policies/network-policy
-mso.workflow.default.aai.v8.nodes-query.uri=/aai/v8/search/nodes-query
-mso.workflow.default.aai.v8.route-table-reference.uri=/aai/v8/network/route-table-references/route-table-reference
-mso.workflow.default.aai.v8.tenant.uri=/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant
-mso.workflow.default.aai.v8.vce.uri=/aai/v8/network/vces/vce
-mso.workflow.default.aai.v8.vpn-binding.uri=/aai/v8/network/vpn-bindings/vpn-binding
-
-
-log.debug.CompleteMsoProcess=true
-log.debug.CreateNetworkInstanceInfra=true
-log.debug.CreateServiceInstanceInfra=true
-log.debug.DeleteNetworkInstanceInfra=true
-log.debug.FalloutHandler=true
-log.debug.GenericGetService=true
-log.debug.sdncAdapter=true
-log.debug.UpdateNetworkInstanceInfra=true
+# Default URN Mappings for unit tests
+
+mso.rollback=true
+
+canopi.auth=757A94191D685FD2092AC1490730A4FC
+csi.aots.addincidentmanagement.endpoint=http://localhost:28090/AddIncidentManagementTicketRequest
+csi.networkstatus.endpoint=http://localhost:28090/SendManagedNetworkStatusNotification
+mso.csi.pwd=4EA237303511EFBBC37F17A351562131
+mso.csi.usrname=mso
+mso.msoKey=07a7159d3bf51a0e53be7a8f89699be7
+
+mso.adapters.completemsoprocess.endpoint=http://localhost:28090/CompleteMsoProcess
+
+mso.adapters.db.endpoint=http://localhost:28090/dbadapters/RequestsDbAdapter
+mso.adapters.db.auth=757A94191D685FD2092AC1490730A4FC
+
+mso.adapters.network.endpoint=http://localhost:28090/networks/NetworkAdapter
+mso.adapters.network.rest.endpoint=http://localhost:28090/networks/NetworkAdapter
+
+mso.adapters.po.auth=757A94191D685FD2092AC1490730A4FC
+mso.adapters.po.password=3141634BF7E070AA289CF2892C986C0B
+mso.po.timeout=PT60S
+
+aai.auth=757A94191D685FD2092AC1490730A4FC
+
+mso.adapters.sdnc.endpoint=http://localhost:28090/SDNCAdapter
+mso.adapters.sdnc.rest.endpoint=http://localhost:28090/SDNCAdapter/v1/sdnc
+mso.adapters.sdnc.timeout=PT60S
+mso.sdnc.firewall.yang.model=http://com/openecomp/svc/mis/firewall-lite-gui
+mso.sdnc.firewall.yang.model.version=2015-05-15
+mso.sdnc.password=3141634BF7E070AA289CF2892C986C0B
+mso.sdnc.timeout.firewall.minutes=20
+mso.callbackRetryAttempts=5
+mso.sdnc.timeout=PT10S
+mso.sdnc.timeout.ucpe.async.hours=120
+mso.sdnc.timeout.ucpe.async.minutes=5
+mso.workflow.message.endpoint=http://localhost:28080/mso/WorkflowMesssage
+mso.workflow.sdncadapter.callback=http://localhost:28080/mso/SDNCAdapterCallbackService
+
+mso.catalog.db.endpoint=http://localhost:28090/
+
+mso.adapters.tenant.endpoint=http://localhost:28090/tenantAdapterMock
+mso.adapters.vnf-async.endpoint=http://localhost:28090/vnfs/VnfAdapterAsync
+mso.adapters.vnf.endpoint=http://localhost:28090/vnfs/VnfAdapter
+mso.adapters.vnf.rest.endpoint=http://localhost:28090/vnfs/v1/vnfs
+mso.workflow.vnfadapter.create.callback=http://localhost:28080/mso/vnfAdapterNotify
+mso.workflow.vnfadapter.delete.callback=http://localhost:28080/mso/vnfAdapterNotify
+mso.workflow.vnfadapter.query.callback=http://localhost:28080/mso/services/VNFAdapterQuerCallbackV1
+mso.workflow.vnfadapter.rollback.callback=http://localhost:28080/mso/vnfAdapterNotify
+mso.workflow.createvce.delay.seconds=1
+mso.infra.customer.id=testCustIdInfra
+
+aai.endpoint=http://localhost:28090
+
+# AAI version mappings
+
+# Example to override default version for a resource:
+#mso.workflow.default.aai.vce.version=6
+#mso.workflow.default.aai.v6.vce.uri=/aai/v6/network/vces/vce
+
+mso.workflow.global.default.aai.version=8
+mso.workflow.default.aai.cloud-region.version=9
+mso.workflow.default.aai.generic-vnf.version=9
+
+mso.workflow.default.aai.v9.cloud-region.uri=/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/att-aic
+mso.workflow.default.aai.v8.customer.uri=/aai/v8/business/customers/customer
+mso.workflow.default.aai.v8.generic-query.uri=/aai/v8/search/generic-query
+mso.workflow.default.aai.v9.generic-vnf.uri=/aai/v9/network/generic-vnfs/generic-vnf
+mso.workflow.default.aai.v8.l3-network.uri=/aai/v8/network/l3-networks/l3-network
+mso.workflow.default.aai.v8.network-policy.uri=/aai/v8/network/network-policies/network-policy
+mso.workflow.default.aai.v8.nodes-query.uri=/aai/v8/search/nodes-query
+mso.workflow.default.aai.v8.route-table-reference.uri=/aai/v8/network/route-table-references/route-table-reference
+mso.workflow.default.aai.v8.tenant.uri=/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant
+mso.workflow.default.aai.v8.vce.uri=/aai/v8/network/vces/vce
+mso.workflow.default.aai.v8.vpn-binding.uri=/aai/v8/network/vpn-bindings/vpn-binding
+mso.workflow.notification.name=GenericNotificationService
+
+log.debug.CompleteMsoProcess=true
+log.debug.CreateNetworkInstanceInfra=true
+log.debug.CreateServiceInstanceInfra=true
+log.debug.DeleteNetworkInstanceInfra=true
+log.debug.FalloutHandler=true
+log.debug.GenericGetService=true
+log.debug.sdncAdapter=true
+log.debug.UpdateNetworkInstanceInfra=true
 log.debug.VnfAdapterRestV1=true
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/sdncCallbackErrorResponse.xml b/bpmn/MSOCommonBPMN/src/test/resources/sdncCallbackErrorResponse.xml
index df3a4c4..136917c 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/sdncCallbackErrorResponse.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/sdncCallbackErrorResponse.xml
@@ -1 +1 @@
-<SDNCAdapterCallbackRequest xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1"><CallbackHeader><RequestId>1a152f97-566e-4f22-b17b-761f807bfedc</RequestId><ResponseCode>404</ResponseCode><ResponseMessage>Error processing request to SDNC. Not Found. https://sdncodl.it.us.aic.cip.att.com:8443/restconf/config/L3SDN-API:services/layer3-service-list/AS%2FVLXM%2F000199%2F%2FSB_INTERNET. SDNC Returned-[error-type:application, error-tag:data-missing, error-message:Request could not be completed because the relevant data model content does not exist.]</ResponseMessage></CallbackHeader></SDNCAdapterCallbackRequest>
\ No newline at end of file
+<SDNCAdapterCallbackRequest xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1"><CallbackHeader><RequestId>1a152f97-566e-4f22-b17b-761f807bfedc</RequestId><ResponseCode>404</ResponseCode><ResponseMessage>Error processing request to SDNC. Not Found. https://sdncodl.it.us.aic.cip.com:8443/restconf/config/L3SDN-API:services/layer3-service-list/AS%2FVLXM%2F000199%2F%2FSB_INTERNET. SDNC Returned-[error-type:application, error-tag:data-missing, error-message:Request could not be completed because the relevant data model content does not exist.]</ResponseMessage></CallbackHeader></SDNCAdapterCallbackRequest>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/sdncDeleteResponse.xml b/bpmn/MSOCommonBPMN/src/test/resources/sdncDeleteResponse.xml
index d656d04..c8a2e30 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/sdncDeleteResponse.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/sdncDeleteResponse.xml
@@ -1,212 +1,212 @@
-<?xml version="1.0" encoding="UTF-8"?> 
-<sdncadapterworkflow:SDNCAdapterWorkflowResponse
-	xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
-	<sdncadapterworkflow:response-data>
-		<tag0:RequestData
-			xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1"
-			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">
-			<output xmlns="com:att:sdnctl:nbncapi">
-				<ack-final-indicator>Y</ack-final-indicator>
-  <svc-request-id>SK-2016-10-22-001</svc-request-id>
-  <nbnc-response-information>
-    <response-info>
-      <result>SUCCESS</result>
-      <aai-status>ERROR</aai-status>
-    </response-info>
-    <virtual-datacenter-list>
-      <vdc-id>15001417</vdc-id>
-      <router-list>
-        <router-name>ALPRTR2</router-name>
-        <ipe-loopback-address>1.1.1.2</ipe-loopback-address>
-        <vlan-list>
-          <vlan-id>1255.ae81</vlan-id>
-          <border-element-type>VDBE</border-element-type>
-          <border-element-tangibility>VIRTUAL</border-element-tangibility>
-          <port-id></port-id>
-          <border-element-id>ALPVDBE1</border-element-id>
-          <border-element-v4-subnet>3.1.1.0/22</border-element-v4-subnet>
-          <lag-id>ae81</lag-id>
-          <border-element-v6-subnet>3:1:1::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <vlan-list>
-          <vlan-id>1995.ae81</vlan-id>
-          <border-element-type>ASBG</border-element-type>
-          <border-element-tangibility>VIRTUAL</border-element-tangibility>
-          <port-id></port-id>
-          <border-element-id>ALPASBG1</border-element-id>
-          <border-element-v4-subnet>3.1.1.0/22</border-element-v4-subnet>
-          <lag-id>ae81</lag-id>
-          <border-element-v6-subnet>3:1:1::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <vlan-list>
-          <vlan-id>85.xe-10/0/2</vlan-id>
-          <border-element-type>BGF2</border-element-type>
-          <border-element-tangibility>PHYSICAL</border-element-tangibility>
-          <port-id>xe-10/0/2</port-id>
-          <border-element-id>ALPBGF2</border-element-id>
-          <border-element-v4-subnet>3.1.2.0/22</border-element-v4-subnet>
-          <lag-id></lag-id>
-          <border-element-v6-subnet>3:1:2::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <vlan-list>
-          <vlan-id>85.xe-10/0/1</vlan-id>
-          <border-element-type>BGF1</border-element-type>
-          <border-element-tangibility>PHYSICAL</border-element-tangibility>
-          <port-id>xe-10/0/1</port-id>
-          <border-element-id>ALPBGF1</border-element-id>
-          <border-element-v4-subnet>3.1.2.0/22</border-element-v4-subnet>
-          <lag-id></lag-id>
-          <border-element-v6-subnet>3:1:2::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <ipe-id>2</ipe-id>
-      </router-list>
-      <router-list>
-        <router-name>ALPRTR1</router-name>
-        <ipe-loopback-address>1.1.1.1</ipe-loopback-address>
-        <vlan-list>
-          <vlan-id>1255.ae81</vlan-id>
-          <border-element-type>VDBE</border-element-type>
-          <border-element-tangibility>VIRTUAL</border-element-tangibility>
-          <port-id></port-id>
-          <border-element-id>ALPVDBE1</border-element-id>
-          <border-element-v4-subnet>3.1.1.0/22</border-element-v4-subnet>
-          <lag-id>ae81</lag-id>
-          <border-element-v6-subnet>3:1:1::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <vlan-list>
-          <vlan-id>1995.ae81</vlan-id>
-          <border-element-type>ASBG</border-element-type>
-          <border-element-tangibility>VIRTUAL</border-element-tangibility>
-          <port-id></port-id>
-          <border-element-id>ALPASBG1</border-element-id>
-         <border-element-v4-subnet>3.1.1.0/22</border-element-v4-subnet>
-          <lag-id>ae81</lag-id>
-          <border-element-v6-subnet>3:1:1::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <vlan-list>
-          <vlan-id>85.xe-10/0/2</vlan-id>
-          <border-element-type>BGF2</border-element-type>
-          <border-element-tangibility>PHYSICAL</border-element-tangibility>
-          <port-id>xe-10/0/2</port-id>
-          <border-element-id>ALPBGF2</border-element-id>
-          <border-element-v4-subnet>3.1.2.0/22</border-element-v4-subnet>
-          <lag-id></lag-id>
-          <border-element-v6-subnet>3:1:2::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <vlan-list>
-          <vlan-id>85.xe-10/0/1</vlan-id>
-          <border-element-type>BGF1</border-element-type>
-          <border-element-tangibility>PHYSICAL</border-element-tangibility>
-          <port-id>xe-10/0/1</port-id>
-          <border-element-id>ALPBGF1</border-element-id>
-          <border-element-v4-subnet>3.1.2.0/22</border-element-v4-subnet>
-          <lag-id></lag-id>
-          <border-element-v6-subnet>3:1:2::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <ipe-id>1</ipe-id>
-      </router-list>
-    </virtual-datacenter-list>
-    <virtual-datacenter-list>
-      <vdc-id>15001418</vdc-id>
-      <router-list>
-        <router-name>SANRTR1</router-name>
-        <ipe-loopback-address>2.1.1.1</ipe-loopback-address>
-        <vlan-list>
-          <vlan-id>1255.ae81</vlan-id>
-          <border-element-type>VDBE</border-element-type>
-          <border-element-tangibility>VIRTUAL</border-element-tangibility>
-          <port-id></port-id>
-          <border-element-id>SANVDBE1</border-element-id>
-          <border-element-v4-subnet>4.1.1.0/22</border-element-v4-subnet>
-          <lag-id>ae81</lag-id>
-          <border-element-v6-subnet>4:1:1::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <vlan-list>
-          <vlan-id>1995.ae81</vlan-id>
-          <border-element-type>ASBG</border-element-type>
-          <border-element-tangibility>VIRTUAL</border-element-tangibility>
-          <port-id></port-id>
-          <border-element-id>SANASBG1</border-element-id>
-          <border-element-v4-subnet>4.1.1.0/22</border-element-v4-subnet>
-          <lag-id>ae81</lag-id>
-          <border-element-v6-subnet>4:1:1::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <vlan-list>
-          <vlan-id>85.xe-10/0/2</vlan-id>
-          <border-element-type>BGF2</border-element-type>
-          <border-element-tangibility>PHYSICAL</border-element-tangibility>
-          <port-id>xe-10/0/2</port-id>
-          <border-element-id>SANBGF2</border-element-id>
-          <border-element-v4-subnet>4.1.2.0/22</border-element-v4-subnet>
-          <lag-id></lag-id>
-          <border-element-v6-subnet>4:1:2::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <vlan-list>
-          <vlan-id>85.xe-10/0/1</vlan-id>
-          <border-element-type>BGF1</border-element-type>
-          <border-element-tangibility>PHYSICAL</border-element-tangibility>
-          <port-id>xe-10/0/1</port-id>
-          <border-element-id>SANBGF1</border-element-id>
-          <border-element-v4-subnet>4.1.2.0/22</border-element-v4-subnet>
-          <lag-id></lag-id>
-          <border-element-v6-subnet>4:1:2::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <ipe-id>1</ipe-id>
-      </router-list>
-      <router-list>
-        <router-name>SANRTR2</router-name>
-        <ipe-loopback-address>2.1.1.2</ipe-loopback-address>
-        <vlan-list>
-          <vlan-id>1255.ae81</vlan-id>
-          <border-element-type>VDBE</border-element-type>
-          <border-element-tangibility>VIRTUAL</border-element-tangibility>
-          <port-id></port-id>
-          <border-element-id>SANVDBE1</border-element-id>
-          <border-element-v4-subnet>4.1.1.0/22</border-element-v4-subnet>
-          <lag-id>ae81</lag-id>
-          <border-element-v6-subnet>4:1:1::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <vlan-list>
-          <vlan-id>1995.ae81</vlan-id>
-          <border-element-type>ASBG</border-element-type>
-          <border-element-tangibility>VIRTUAL</border-element-tangibility>
-          <port-id></port-id>
-          <border-element-id>SANASBG1</border-element-id>
-          <border-element-v4-subnet>4.1.1.0/22</border-element-v4-subnet>
-          <lag-id>ae81</lag-id>
-          <border-element-v6-subnet>4:1:1::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <vlan-list>
-          <vlan-id>85.xe-10/0/2</vlan-id>
-          <border-element-type>BGF2</border-element-type>
-          <border-element-tangibility>PHYSICAL</border-element-tangibility>
-          <port-id>xe-10/0/2</port-id>
-          <border-element-id>SANBGF2</border-element-id>
-          <border-element-v4-subnet>4.1.2.0/22</border-element-v4-subnet>
-          <lag-id></lag-id>
-          <border-element-v6-subnet>4:1:2::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <vlan-list>
-          <vlan-id>85.xe-10/0/1</vlan-id>
-          <border-element-type>BGF1</border-element-type>
-          <border-element-tangibility>PHYSICAL</border-element-tangibility>
-          <port-id>xe-10/0/1</port-id>
-          <border-element-id>SANBGF1</border-element-id>
-          <border-element-v4-subnet>4.1.2.0/22</border-element-v4-subnet>
-          <lag-id></lag-id>
-          <border-element-v6-subnet>4:1:2::0/22</border-element-v6-subnet>
-        </vlan-list>
-        <ipe-id>2</ipe-id>
-      </router-list>
-    </virtual-datacenter-list>
-    <service-type>ATT-COLLABORATE</service-type>
-    <interface-status>DISABLE</interface-status>
-    <customer-id>custid-888</customer-id>
-    <service-instance-id>SII-2016-10-22-001</service-instance-id>
-    <provision-type>CUSTOMER</provision-type>
-    <vni-id>100668</vni-id>
-  </nbnc-response-information>
-			</output>
-		</tag0:RequestData>
-	</sdncadapterworkflow:response-data>
+<?xml version="1.0" encoding="UTF-8"?> 
+<sdncadapterworkflow:SDNCAdapterWorkflowResponse
+	xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
+	<sdncadapterworkflow:response-data>
+		<tag0:RequestData
+			xmlns:tag0="http://org.openecomp/workflow/sdnc/adapter/schema/v1"
+			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">
+			<output xmlns="com:att:sdnctl:nbncapi">
+				<ack-final-indicator>Y</ack-final-indicator>
+  <svc-request-id>SK-2016-10-22-001</svc-request-id>
+  <nbnc-response-information>
+    <response-info>
+      <result>SUCCESS</result>
+      <aai-status>ERROR</aai-status>
+    </response-info>
+    <virtual-datacenter-list>
+      <vdc-id>15001417</vdc-id>
+      <router-list>
+        <router-name>ALPRTR2</router-name>
+        <ipe-loopback-address>1.1.1.2</ipe-loopback-address>
+        <vlan-list>
+          <vlan-id>1255.ae81</vlan-id>
+          <border-element-type>VDBE</border-element-type>
+          <border-element-tangibility>VIRTUAL</border-element-tangibility>
+          <port-id></port-id>
+          <border-element-id>ALPVDBE1</border-element-id>
+          <border-element-v4-subnet>3.1.1.0/22</border-element-v4-subnet>
+          <lag-id>ae81</lag-id>
+          <border-element-v6-subnet>3:1:1::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <vlan-list>
+          <vlan-id>1995.ae81</vlan-id>
+          <border-element-type>ASBG</border-element-type>
+          <border-element-tangibility>VIRTUAL</border-element-tangibility>
+          <port-id></port-id>
+          <border-element-id>ALPASBG1</border-element-id>
+          <border-element-v4-subnet>3.1.1.0/22</border-element-v4-subnet>
+          <lag-id>ae81</lag-id>
+          <border-element-v6-subnet>3:1:1::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <vlan-list>
+          <vlan-id>85.xe-10/0/2</vlan-id>
+          <border-element-type>BGF2</border-element-type>
+          <border-element-tangibility>PHYSICAL</border-element-tangibility>
+          <port-id>xe-10/0/2</port-id>
+          <border-element-id>ALPBGF2</border-element-id>
+          <border-element-v4-subnet>3.1.2.0/22</border-element-v4-subnet>
+          <lag-id></lag-id>
+          <border-element-v6-subnet>3:1:2::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <vlan-list>
+          <vlan-id>85.xe-10/0/1</vlan-id>
+          <border-element-type>BGF1</border-element-type>
+          <border-element-tangibility>PHYSICAL</border-element-tangibility>
+          <port-id>xe-10/0/1</port-id>
+          <border-element-id>ALPBGF1</border-element-id>
+          <border-element-v4-subnet>3.1.2.0/22</border-element-v4-subnet>
+          <lag-id></lag-id>
+          <border-element-v6-subnet>3:1:2::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <ipe-id>2</ipe-id>
+      </router-list>
+      <router-list>
+        <router-name>ALPRTR1</router-name>
+        <ipe-loopback-address>1.1.1.1</ipe-loopback-address>
+        <vlan-list>
+          <vlan-id>1255.ae81</vlan-id>
+          <border-element-type>VDBE</border-element-type>
+          <border-element-tangibility>VIRTUAL</border-element-tangibility>
+          <port-id></port-id>
+          <border-element-id>ALPVDBE1</border-element-id>
+          <border-element-v4-subnet>3.1.1.0/22</border-element-v4-subnet>
+          <lag-id>ae81</lag-id>
+          <border-element-v6-subnet>3:1:1::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <vlan-list>
+          <vlan-id>1995.ae81</vlan-id>
+          <border-element-type>ASBG</border-element-type>
+          <border-element-tangibility>VIRTUAL</border-element-tangibility>
+          <port-id></port-id>
+          <border-element-id>ALPASBG1</border-element-id>
+         <border-element-v4-subnet>3.1.1.0/22</border-element-v4-subnet>
+          <lag-id>ae81</lag-id>
+          <border-element-v6-subnet>3:1:1::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <vlan-list>
+          <vlan-id>85.xe-10/0/2</vlan-id>
+          <border-element-type>BGF2</border-element-type>
+          <border-element-tangibility>PHYSICAL</border-element-tangibility>
+          <port-id>xe-10/0/2</port-id>
+          <border-element-id>ALPBGF2</border-element-id>
+          <border-element-v4-subnet>3.1.2.0/22</border-element-v4-subnet>
+          <lag-id></lag-id>
+          <border-element-v6-subnet>3:1:2::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <vlan-list>
+          <vlan-id>85.xe-10/0/1</vlan-id>
+          <border-element-type>BGF1</border-element-type>
+          <border-element-tangibility>PHYSICAL</border-element-tangibility>
+          <port-id>xe-10/0/1</port-id>
+          <border-element-id>ALPBGF1</border-element-id>
+          <border-element-v4-subnet>3.1.2.0/22</border-element-v4-subnet>
+          <lag-id></lag-id>
+          <border-element-v6-subnet>3:1:2::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <ipe-id>1</ipe-id>
+      </router-list>
+    </virtual-datacenter-list>
+    <virtual-datacenter-list>
+      <vdc-id>15001418</vdc-id>
+      <router-list>
+        <router-name>SANRTR1</router-name>
+        <ipe-loopback-address>2.1.1.1</ipe-loopback-address>
+        <vlan-list>
+          <vlan-id>1255.ae81</vlan-id>
+          <border-element-type>VDBE</border-element-type>
+          <border-element-tangibility>VIRTUAL</border-element-tangibility>
+          <port-id></port-id>
+          <border-element-id>SANVDBE1</border-element-id>
+          <border-element-v4-subnet>4.1.1.0/22</border-element-v4-subnet>
+          <lag-id>ae81</lag-id>
+          <border-element-v6-subnet>4:1:1::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <vlan-list>
+          <vlan-id>1995.ae81</vlan-id>
+          <border-element-type>ASBG</border-element-type>
+          <border-element-tangibility>VIRTUAL</border-element-tangibility>
+          <port-id></port-id>
+          <border-element-id>SANASBG1</border-element-id>
+          <border-element-v4-subnet>4.1.1.0/22</border-element-v4-subnet>
+          <lag-id>ae81</lag-id>
+          <border-element-v6-subnet>4:1:1::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <vlan-list>
+          <vlan-id>85.xe-10/0/2</vlan-id>
+          <border-element-type>BGF2</border-element-type>
+          <border-element-tangibility>PHYSICAL</border-element-tangibility>
+          <port-id>xe-10/0/2</port-id>
+          <border-element-id>SANBGF2</border-element-id>
+          <border-element-v4-subnet>4.1.2.0/22</border-element-v4-subnet>
+          <lag-id></lag-id>
+          <border-element-v6-subnet>4:1:2::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <vlan-list>
+          <vlan-id>85.xe-10/0/1</vlan-id>
+          <border-element-type>BGF1</border-element-type>
+          <border-element-tangibility>PHYSICAL</border-element-tangibility>
+          <port-id>xe-10/0/1</port-id>
+          <border-element-id>SANBGF1</border-element-id>
+          <border-element-v4-subnet>4.1.2.0/22</border-element-v4-subnet>
+          <lag-id></lag-id>
+          <border-element-v6-subnet>4:1:2::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <ipe-id>1</ipe-id>
+      </router-list>
+      <router-list>
+        <router-name>SANRTR2</router-name>
+        <ipe-loopback-address>2.1.1.2</ipe-loopback-address>
+        <vlan-list>
+          <vlan-id>1255.ae81</vlan-id>
+          <border-element-type>VDBE</border-element-type>
+          <border-element-tangibility>VIRTUAL</border-element-tangibility>
+          <port-id></port-id>
+          <border-element-id>SANVDBE1</border-element-id>
+          <border-element-v4-subnet>4.1.1.0/22</border-element-v4-subnet>
+          <lag-id>ae81</lag-id>
+          <border-element-v6-subnet>4:1:1::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <vlan-list>
+          <vlan-id>1995.ae81</vlan-id>
+          <border-element-type>ASBG</border-element-type>
+          <border-element-tangibility>VIRTUAL</border-element-tangibility>
+          <port-id></port-id>
+          <border-element-id>SANASBG1</border-element-id>
+          <border-element-v4-subnet>4.1.1.0/22</border-element-v4-subnet>
+          <lag-id>ae81</lag-id>
+          <border-element-v6-subnet>4:1:1::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <vlan-list>
+          <vlan-id>85.xe-10/0/2</vlan-id>
+          <border-element-type>BGF2</border-element-type>
+          <border-element-tangibility>PHYSICAL</border-element-tangibility>
+          <port-id>xe-10/0/2</port-id>
+          <border-element-id>SANBGF2</border-element-id>
+          <border-element-v4-subnet>4.1.2.0/22</border-element-v4-subnet>
+          <lag-id></lag-id>
+          <border-element-v6-subnet>4:1:2::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <vlan-list>
+          <vlan-id>85.xe-10/0/1</vlan-id>
+          <border-element-type>BGF1</border-element-type>
+          <border-element-tangibility>PHYSICAL</border-element-tangibility>
+          <port-id>xe-10/0/1</port-id>
+          <border-element-id>SANBGF1</border-element-id>
+          <border-element-v4-subnet>4.1.2.0/22</border-element-v4-subnet>
+          <lag-id></lag-id>
+          <border-element-v6-subnet>4:1:2::0/22</border-element-v6-subnet>
+        </vlan-list>
+        <ipe-id>2</ipe-id>
+      </router-list>
+    </virtual-datacenter-list>
+    <service-type>COLLABORATE</service-type>
+    <interface-status>DISABLE</interface-status>
+    <customer-id>custid-888</customer-id>
+    <service-instance-id>SII-2016-10-22-001</service-instance-id>
+    <provision-type>CUSTOMER</provision-type>
+    <vni-id>100668</vni-id>
+  </nbnc-response-information>
+			</output>
+		</tag0:RequestData>
+	</sdncadapterworkflow:response-data>
 </sdncadapterworkflow:SDNCAdapterWorkflowResponse> 
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/sdncadaptercallbackrequest.xml b/bpmn/MSOCommonBPMN/src/test/resources/sdncadaptercallbackrequest.xml
index 89e4fef..754dc20 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/sdncadaptercallbackrequest.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/sdncadaptercallbackrequest.xml
@@ -1,342 +1,342 @@
-<SDNCAdapterCallbackRequest xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
-    <CallbackHeader>
-        <RequestId>2f7d1b38-2b78-4ef2-8ad6-1552d88620fa</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;layer3-service-list xmlns="com:att:sdnctl:l3api"&gt;
-					&lt;service-instance-id&gt;FK/VLXM/003717//SW_INTERNET&lt;/service-instance-id&gt;
-					&lt;service-status&gt;
-						&lt;rpc-name&gt;service-configuration-operation&lt;/rpc-name&gt;
-						&lt;rpc-action&gt;activate&lt;/rpc-action&gt;
-						&lt;request-status&gt;synccomplete&lt;/request-status&gt;
-						&lt;final-indicator&gt;N&lt;/final-indicator&gt;
-						&lt;l3sdn-action&gt;Layer3ServiceActivateRequest&lt;/l3sdn-action&gt;
-						&lt;l3sdn-subaction&gt;SUPP&lt;/l3sdn-subaction&gt;
-						&lt;response-timestamp&gt;2015-04-28T21:32:11.386Z&lt;/response-timestamp&gt;
-					&lt;/service-status&gt;
-					&lt;service-data&gt;
-						&lt;internet-evc-access-information&gt;
-							&lt;ip-version&gt;ds&lt;/ip-version&gt;
-							&lt;internet-evc-speed-value&gt;8&lt;/internet-evc-speed-value&gt;
-							&lt;internet-evc-speed-units&gt;Mbps&lt;/internet-evc-speed-units&gt;
-						&lt;/internet-evc-access-information&gt;
-						&lt;vr-lan xmlns="com:att:sdnctl:l3api"&gt;
-							&lt;vr-lan-interface&gt;
-								&lt;static-routes&gt;
-									&lt;v6-static-routes&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-static-route-prefix&gt;2001:1890:12e3:2da::&lt;/v6-static-route-prefix&gt;
-										&lt;v6-static-route-prefix-length&gt;28&lt;/v6-static-route-prefix-length&gt;
-									&lt;/v6-static-routes&gt;
-									&lt;v4-static-routes&gt;
-										&lt;v4-static-route-prefix&gt;255.255.252.1&lt;/v4-static-route-prefix&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
-										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
-									&lt;/v4-static-routes&gt;
-									&lt;v6-static-routes&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-static-route-prefix&gt;2001:1890:12e3:2da::&lt;/v6-static-route-prefix&gt;
-										&lt;v6-static-route-prefix-length&gt;28&lt;/v6-static-route-prefix-length&gt;
-									&lt;/v6-static-routes&gt;
-									&lt;v4-static-routes&gt;
-										&lt;v4-static-route-prefix&gt;255.255.252.2&lt;/v4-static-route-prefix&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
-										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
-									&lt;/v4-static-routes&gt;
-									&lt;v4-static-routes&gt;
-										&lt;v4-static-route-prefix&gt;255.255.252.3&lt;/v4-static-route-prefix&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
-										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
-									&lt;/v4-static-routes&gt;
-								&lt;/static-routes&gt;
-								&lt;dhcp&gt;
-									&lt;v6-dhcp-server-enabled&gt;N&lt;/v6-dhcp-server-enabled&gt;
-									&lt;v4-dhcp-server-enabled&gt;Y&lt;/v4-dhcp-server-enabled&gt;
-									&lt;use-v6-default-pool&gt;N&lt;/use-v6-default-pool&gt;
-									&lt;excluded-v4-dhcp-addresses-from-default-pool&gt;
-									  &lt;excluded-v4-address&gt;192.168.1.7&lt;/excluded-v4-address&gt;
-									&lt;/excluded-v4-dhcp-addresses-from-default-pool&gt;
-									&lt;excluded-v4-dhcp-addresses-from-default-pool&gt;
-									  &lt;excluded-v4-address&gt;192.168.1.8&lt;/excluded-v4-address&gt;
-									&lt;/excluded-v4-dhcp-addresses-from-default-pool&gt;
-									&lt;v4-dhcp-pools&gt;
-										&lt;v4-dhcp-relay-next-hop-address&gt;1.1.1.1&lt;/v4-dhcp-relay-next-hop-address&gt;
-										&lt;v4-dhcp-pool-prefix-length&gt;28&lt;/v4-dhcp-pool-prefix-length&gt;
-										&lt;excluded-v4-addresses&gt;
-											&lt;excluded-v4-address&gt;192.168.1.5&lt;/excluded-v4-address&gt;
-										&lt;/excluded-v4-addresses&gt;
-										&lt;v4-dhcp-relay-gateway-address&gt;2.2.2.1&lt;/v4-dhcp-relay-gateway-address&gt;
-										&lt;excluded-v4-addresses&gt;
-											&lt;excluded-v4-address&gt;192.168.1.6&lt;/excluded-v4-address&gt;
-										&lt;/excluded-v4-addresses&gt;
-										&lt;v4-dhcp-pool-prefix&gt;192.155.2.3&lt;/v4-dhcp-pool-prefix&gt;
-									&lt;/v4-dhcp-pools&gt;
-									&lt;v4-dhcp-pools&gt;
-										&lt;v4-dhcp-relay-next-hop-address&gt;1.1.1.2&lt;/v4-dhcp-relay-next-hop-address&gt;
-										&lt;v4-dhcp-pool-prefix-length&gt;28&lt;/v4-dhcp-pool-prefix-length&gt;
-										&lt;excluded-v4-addresses&gt;
-											&lt;excluded-v4-address&gt;192.168.1.6&lt;/excluded-v4-address&gt;
-										&lt;/excluded-v4-addresses&gt;
-										&lt;v4-dhcp-relay-gateway-address&gt;2.2.2.2&lt;/v4-dhcp-relay-gateway-address&gt;
-										&lt;excluded-v4-addresses&gt;
-											&lt;excluded-v4-address&gt;192.168.1.7&lt;/excluded-v4-address&gt;
-										&lt;/excluded-v4-addresses&gt;
-										&lt;v4-dhcp-pool-prefix&gt;192.155.2.4&lt;/v4-dhcp-pool-prefix&gt;
-									&lt;/v4-dhcp-pools&gt;									
-									&lt;use-v4-default-pool&gt;Y&lt;/use-v4-default-pool&gt;
-									&lt;excluded-v6-dhcp-addresses-from-default-pool&gt;
-									  &lt;excluded-v6-address&gt;1:5&lt;/excluded-v6-address&gt;
-									&lt;/excluded-v6-dhcp-addresses-from-default-pool&gt;
-									&lt;excluded-v6-dhcp-addresses-from-default-pool&gt;
-									  &lt;excluded-v6-address&gt;1:6&lt;/excluded-v6-address&gt;
-									&lt;/excluded-v6-dhcp-addresses-from-default-pool&gt;
-									&lt;v6-dhcp-pools&gt;
-										&lt;v6-dhcp-relay-next-hop-address&gt;4:4&lt;/v6-dhcp-relay-next-hop-address&gt;
-										&lt;v6-dhcp-pool-prefix-length&gt;28&lt;/v6-dhcp-pool-prefix-length&gt;
-										&lt;excluded-v6-addresses&gt;
-											&lt;excluded-v6-address&gt;1:1&lt;/excluded-v6-address&gt;
-										&lt;/excluded-v6-addresses&gt;
-										&lt;v6-dhcp-relay-gateway-address&gt;3:3&lt;/v6-dhcp-relay-gateway-address&gt;
-										&lt;excluded-v6-addresses&gt;
-											&lt;excluded-v6-address&gt;2:2&lt;/excluded-v6-address&gt;
-										&lt;/excluded-v6-addresses&gt;
-										&lt;v6-dhcp-pool-prefix&gt;0:0&lt;/v6-dhcp-pool-prefix&gt;
-									&lt;/v6-dhcp-pools&gt;
-									&lt;v6-dhcp-pools&gt;
-										&lt;v6-dhcp-relay-next-hop-address&gt;4:4&lt;/v6-dhcp-relay-next-hop-address&gt;
-										&lt;v6-dhcp-pool-prefix-length&gt;28&lt;/v6-dhcp-pool-prefix-length&gt;
-										&lt;excluded-v6-addresses&gt;
-											&lt;excluded-v6-address&gt;1:1&lt;/excluded-v6-address&gt;
-										&lt;/excluded-v6-addresses&gt;
-										&lt;v6-dhcp-relay-gateway-address&gt;3:3&lt;/v6-dhcp-relay-gateway-address&gt;
-										&lt;excluded-v6-addresses&gt;
-											&lt;excluded-v6-address&gt;2:2&lt;/excluded-v6-address&gt;
-										&lt;/excluded-v6-addresses&gt;
-										&lt;v6-dhcp-pool-prefix&gt;0:0&lt;/v6-dhcp-pool-prefix&gt;
-									&lt;/v6-dhcp-pools&gt;									
-								&lt;/dhcp&gt;
-								&lt;firewall-lite&gt;
-									&lt;stateful-firewall-lite-v6-enabled&gt;N&lt;/stateful-firewall-lite-v6-enabled&gt;
-									&lt;stateful-firewall-lite-v4-enabled&gt;Y&lt;/stateful-firewall-lite-v4-enabled&gt;
-									&lt;v4-firewall-packet-filters&gt;
-									  &lt;v4-firewall-prefix&gt;0.0.0.1&lt;/v4-firewall-prefix&gt;
-									  &lt;v4-firewall-prefix-length&gt;1&lt;/v4-firewall-prefix-length&gt;
-									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
-									  &lt;udp-ports&gt;
-									    &lt;port-number&gt;1&lt;/port-number&gt;
-									  &lt;/udp-ports&gt;
-									  &lt;tcp-ports&gt;
-									    &lt;port-number&gt;1&lt;/port-number&gt;
-									  &lt;/tcp-ports&gt;
-									&lt;/v4-firewall-packet-filters&gt;
-									&lt;v4-firewall-packet-filters&gt;
-									  &lt;v4-firewall-prefix&gt;0.0.0.2&lt;/v4-firewall-prefix&gt;
-									  &lt;v4-firewall-prefix-length&gt;2&lt;/v4-firewall-prefix-length&gt;
-									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
-									  &lt;udp-ports&gt;
-									    &lt;port-number&gt;2&lt;/port-number&gt;
-									  &lt;/udp-ports&gt;
-									  &lt;tcp-ports&gt;
-									    &lt;port-number&gt;2&lt;/port-number&gt;
-									  &lt;/tcp-ports&gt;
-									&lt;/v4-firewall-packet-filters&gt;
-									&lt;v6-firewall-packet-filters&gt;
-									  &lt;v6-firewall-prefix&gt;:&lt;/v6-firewall-prefix&gt;
-									  &lt;v6-firewall-prefix-length&gt;0&lt;/v6-firewall-prefix-length&gt;
-									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
-									  &lt;udp-ports&gt;
-									    &lt;port-number&gt;3&lt;/port-number&gt;
-									  &lt;/udp-ports&gt;
-									  &lt;tcp-ports&gt;
-									    &lt;port-number&gt;3&lt;/port-number&gt;
-									  &lt;/tcp-ports&gt;
-									&lt;/v6-firewall-packet-filters&gt;
-									&lt;v6-firewall-packet-filters&gt;
-									  &lt;v6-firewall-prefix&gt;:&lt;/v6-firewall-prefix&gt;
-									  &lt;v6-firewall-prefix-length&gt;1&lt;/v6-firewall-prefix-length&gt;
-									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
-									  &lt;udp-ports&gt;
-									    &lt;port-number&gt;4&lt;/port-number&gt;
-									  &lt;/udp-ports&gt;
-									  &lt;tcp-ports&gt;
-									    &lt;port-number&gt;4&lt;/port-number&gt;
-									  &lt;/tcp-ports&gt;
-									&lt;/v6-firewall-packet-filters&gt;
-								&lt;/firewall-lite&gt;
-								&lt;pat&gt;
-									&lt;v4-pat-pools&gt;
-										&lt;v4-pat-pool-prefix&gt;192.168.1.44&lt;/v4-pat-pool-prefix&gt;
-										&lt;v4-pat-pool-next-hop-address&gt;192.168.1.5&lt;/v4-pat-pool-next-hop-address&gt;
-										&lt;v4-pat-pool-prefix-length&gt;0&lt;/v4-pat-pool-prefix-length&gt;
-									&lt;/v4-pat-pools&gt;
-									&lt;use-v4-default-pool&gt;Y&lt;/use-v4-default-pool&gt;
-									&lt;v4-pat-enabled&gt;N&lt;/v4-pat-enabled&gt;
-									&lt;v4-pat-pools&gt;
-										&lt;v4-pat-pool-prefix&gt;192.168.1.45&lt;/v4-pat-pool-prefix&gt;
-										&lt;v4-pat-pool-next-hop-address&gt;192.168.1.6&lt;/v4-pat-pool-next-hop-address&gt;
-										&lt;v4-pat-pool-prefix-length&gt;28&lt;/v4-pat-pool-prefix-length&gt;
-									&lt;/v4-pat-pools&gt;
-								&lt;/pat&gt;
-								&lt;nat&gt;
-								  &lt;v4-nat-enabled&gt;Y&lt;/v4-nat-enabled&gt;
-								  &lt;v4-nat-mapping-entries&gt;
-								    &lt;v4-nat-internal&gt;0.0.0.0&lt;/v4-nat-internal&gt;
-								    &lt;v4-nat-next-hop-address&gt;0.0.0.0&lt;/v4-nat-next-hop-address&gt;
-								    &lt;v4-nat-external&gt;0.0.0.0&lt;/v4-nat-external&gt;
-								  &lt;/v4-nat-mapping-entries&gt;
-								  &lt;v4-nat-mapping-entries&gt;
-								    &lt;v4-nat-internal&gt;0.0.0.1&lt;/v4-nat-internal&gt;
-								    &lt;v4-nat-next-hop-address&gt;0.0.0.1&lt;/v4-nat-next-hop-address&gt;
-								    &lt;v4-nat-external&gt;0.0.0.1&lt;/v4-nat-external&gt;
-								  &lt;/v4-nat-mapping-entries&gt;
-								&lt;/nat&gt;
-								&lt;vr-designation&gt;primary&lt;/vr-designation&gt;
-								&lt;v4-vce-loopback-address&gt;162.200.3.144&lt;/v4-vce-loopback-address&gt;
-								&lt;v6-vr-lan-prefix-length&gt;64&lt;/v6-vr-lan-prefix-length&gt;
-								&lt;v6-vce-wan-address&gt;2001:1890:12e3:2da::&lt;/v6-vce-wan-address&gt;
-								&lt;v6-vr-lan-prefix&gt;2620:0:10d0:f:ffff:ffff:ffff:fffe&lt;/v6-vr-lan-prefix&gt;
-								&lt;v4-vr-lan-prefix-length&gt;24&lt;/v4-vr-lan-prefix-length&gt;
-								&lt;v4-vr-lan-prefix&gt;10.192.27.254&lt;/v4-vr-lan-prefix&gt;
-								&lt;v4-public-lan-prefixes&gt;
-									&lt;t-provided-v4-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.2&lt;/v4-next-hop-address&gt;
-										&lt;v4-lan-public-prefix&gt;192.168.1.1&lt;/v4-lan-public-prefix&gt;
-										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-									&lt;/t-provided-v4-lan-public-prefixes&gt;
-									&lt;t-provided-v4-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.72&lt;/v4-next-hop-address&gt;
-										&lt;v4-lan-public-prefix&gt;192.168.1.71&lt;/v4-lan-public-prefix&gt;
-										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-									&lt;/t-provided-v4-lan-public-prefixes&gt;
-									&lt;t-provided-v4-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v4-next-hop-address&gt;192.168.1.68&lt;/v4-next-hop-address&gt;
-										&lt;v4-lan-public-prefix&gt;192.168.1.67&lt;/v4-lan-public-prefix&gt;
-										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-									&lt;/t-provided-v4-lan-public-prefixes&gt;
-								&lt;/v4-public-lan-prefixes&gt;
-								&lt;v6-public-lan-prefixes&gt;
-									&lt;t-provided-v6-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
-										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-									&lt;/t-provided-v6-lan-public-prefixes&gt;
-									&lt;t-provided-v6-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:3da::&lt;/v6-lan-public-prefix&gt;
-										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-									&lt;/t-provided-v6-lan-public-prefixes&gt;
-									&lt;t-provided-v6-lan-public-prefixes&gt;
-										&lt;request-index&gt;1&lt;/request-index&gt;
-										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:4da::&lt;/v6-lan-public-prefix&gt;
-										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-									&lt;/t-provided-v6-lan-public-prefixes&gt;
-								&lt;/v6-public-lan-prefixes&gt;
-							&lt;/vr-lan-interface&gt;
-							&lt;routing-protocol&gt;none&lt;/routing-protocol&gt;
-						&lt;/vr-lan&gt;
-&lt;ucpe-vms-service-information&gt;				
- &lt;transport-service-information&gt;
-    &lt;transport-service-type&gt;AVPN&lt;/transport-service-type&gt;
-	&lt;access-circuit-info&gt;
-	   &lt;access-circuit-id&gt;1&lt;/access-circuit-id&gt;
-	   &lt;dual-mode&gt;Active&lt;/dual-mode&gt;
-	&lt;/access-circuit-info&gt;
-	&lt;access-circuit-info&gt;
-	   &lt;access-circuit-id&gt;2&lt;/access-circuit-id&gt;
-	   &lt;dual-mode&gt;Standby&lt;/dual-mode&gt;
-	&lt;/access-circuit-info&gt;	
- &lt;/transport-service-information&gt;
- &lt;ucpe-information&gt;
-    &lt;ucpe-host-name&gt;hostname&lt;/ucpe-host-name&gt;
-    &lt;ucpe-activation-code&gt;activecode&lt;/ucpe-activation-code&gt;
-    &lt;out-of-band-management-modem&gt;OOB&lt;/out-of-band-management-modem&gt;
-  &lt;/ucpe-information&gt;
-  &lt;vnf-list&gt;
-	&lt;vnf-information&gt; 
-		&lt;vnf-instance-id&gt;1&lt;/vnf-instance-id&gt; 
-		&lt;vnf-sequence-number&gt;1&lt;/vnf-sequence-number&gt;
-		&lt;vnf-type&gt;ZZ&lt;/vnf-type&gt;
-		&lt;vnf-vendor&gt;JUNIPER&lt;/vnf-vendor&gt;
-		&lt;vnf-model&gt;MODEL1&lt;/vnf-model&gt;
-		&lt;vnf-id&gt;1&lt;/vnf-id&gt;
-		&lt;prov-status&gt;1&lt;/prov-status&gt;
-		&lt;operational-state&gt;1&lt;/operational-state&gt;
-		&lt;orchestration-status&gt;1&lt;/orchestration-status&gt;
-		&lt;equipment-role&gt;1&lt;/equipment-role&gt;
-    &lt;/vnf-information&gt;
-	&lt;vnf-information&gt; 
-		&lt;vnf-instance-id&gt;2&lt;/vnf-instance-id&gt; 
-		&lt;vnf-sequence-number&gt;2&lt;/vnf-sequence-number&gt;
-		&lt;vnf-type&gt;HY&lt;/vnf-type&gt;
-		&lt;vnf-vendor&gt;JUNIPER&lt;/vnf-vendor&gt;
-		&lt;vnf-model&gt;MODEL2&lt;/vnf-model&gt;
-		&lt;vnf-id&gt;2&lt;/vnf-id&gt;
-		&lt;prov-status&gt;2&lt;/prov-status&gt;
-		&lt;operational-state&gt;2&lt;/operational-state&gt;
-		&lt;orchestration-status&gt;2&lt;/orchestration-status&gt;
-		&lt;equipment-role&gt;2&lt;/equipment-role&gt;
-    &lt;/vnf-information&gt;					
-  &lt;/vnf-list&gt;
- &lt;/ucpe-vms-service-information&gt;										
-						&lt;request-information&gt;
-							&lt;request-action&gt;Layer3ServiceActivateRequest&lt;/request-action&gt;
-							&lt;order-number&gt;4281555&lt;/order-number&gt;
-							&lt;request-id&gt;155415ab-b4a7-4382-b4c6-d17d9sm42855&lt;/request-id&gt;
-							&lt;notification-url&gt;https://csi-tst-q22.it.att.com:22443/Services/com/cingular/csi/sdn/SendManagedNetworkStatusNotification.jws&lt;/notification-url&gt;
-							&lt;source&gt;OMX&lt;/source&gt;
-							&lt;order-version&gt;1&lt;/order-version&gt;
-						&lt;/request-information&gt;
-						&lt;sdnc-request-header&gt;
-							&lt;svc-action&gt;activate&lt;/svc-action&gt;
-							&lt;svc-notification-url&gt;https://msojra.mtsnjdcp1.aic.cip.att.com:8443/adapters/rest/SDNCNotify&lt;/svc-notification-url&gt;
-							&lt;svc-request-id&gt;5b1f3c5d-cdf9-488d-8a4b-d3f1229d7760&lt;/svc-request-id&gt;
-						&lt;/sdnc-request-header&gt;
-						&lt;l2-homing-information&gt;
-							&lt;topology&gt;MultiPoint&lt;/topology&gt;
-							&lt;preferred-aic-clli&gt;MTSNJA4LCP1&lt;/preferred-aic-clli&gt;
-							&lt;evc-name&gt;AS/VLXM/003717//SW&lt;/evc-name&gt;
-						&lt;/l2-homing-information&gt;
-						&lt;service-information&gt;
-							&lt;service-instance-id&gt;FK/VLXM/003717//SW_INTERNET&lt;/service-instance-id&gt;
-							&lt;subscriber-name&gt;FOUR SEASONS HEATING &amp; COOLING_8310006378683&lt;/subscriber-name&gt;
-							&lt;service-type&gt;SDN-ETHERNET-INTERNET&lt;/service-type&gt;
-						&lt;/service-information&gt;
-						&lt;internet-service-change-details&gt;
-							&lt;internet-evc-speed-value&gt;10&lt;/internet-evc-speed-value&gt;
-							&lt;internet-evc-speed-units&gt;Kbps&lt;/internet-evc-speed-units&gt;
-							&lt;t-provided-v4-lan-public-prefixes&gt;
-							   &lt;request-index&gt;1&lt;/request-index&gt;
-							   &lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
-							   &lt;v4-lan-public-prefix&gt;192.168.1.15&lt;/v4-lan-public-prefix&gt;
-							   &lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-							&lt;/t-provided-v4-lan-public-prefixes&gt;
-							&lt;t-provided-v4-lan-public-prefixes&gt;
-							   &lt;request-index&gt;2&lt;/request-index&gt;
-							   &lt;v4-next-hop-address&gt;192.168.1.16&lt;/v4-next-hop-address&gt;
-							   &lt;v4-lan-public-prefix&gt;192.168.1.16&lt;/v4-lan-public-prefix&gt;
-							   &lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
-							&lt;/t-provided-v4-lan-public-prefixes&gt;
-							&lt;t-provided-v6-lan-public-prefixes&gt;
-							   &lt;request-index&gt;1&lt;/request-index&gt;
-							   &lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-							   &lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
-							   &lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-							&lt;/t-provided-v6-lan-public-prefixes&gt;
-							&lt;t-provided-v6-lan-public-prefixes&gt;
-							   &lt;request-index&gt;1&lt;/request-index&gt;
-							   &lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
-							   &lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
-							   &lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
-							&lt;/t-provided-v6-lan-public-prefixes&gt;
-						&lt;/internet-service-change-details&gt;
-					&lt;/service-data&gt;
-				&lt;/layer3-service-list&gt;
-</RequestData>
-</SDNCAdapterCallbackRequest>
+<SDNCAdapterCallbackRequest xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+    <CallbackHeader>
+        <RequestId>2f7d1b38-2b78-4ef2-8ad6-1552d88620fa</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;layer3-service-list xmlns="com:att:sdnctl:l3api"&gt;
+					&lt;service-instance-id&gt;FK/VLXM/003717//SW_INTERNET&lt;/service-instance-id&gt;
+					&lt;service-status&gt;
+						&lt;rpc-name&gt;service-configuration-operation&lt;/rpc-name&gt;
+						&lt;rpc-action&gt;activate&lt;/rpc-action&gt;
+						&lt;request-status&gt;synccomplete&lt;/request-status&gt;
+						&lt;final-indicator&gt;N&lt;/final-indicator&gt;
+						&lt;l3sdn-action&gt;Layer3ServiceActivateRequest&lt;/l3sdn-action&gt;
+						&lt;l3sdn-subaction&gt;SUPP&lt;/l3sdn-subaction&gt;
+						&lt;response-timestamp&gt;2015-04-28T21:32:11.386Z&lt;/response-timestamp&gt;
+					&lt;/service-status&gt;
+					&lt;service-data&gt;
+						&lt;internet-evc-access-information&gt;
+							&lt;ip-version&gt;ds&lt;/ip-version&gt;
+							&lt;internet-evc-speed-value&gt;8&lt;/internet-evc-speed-value&gt;
+							&lt;internet-evc-speed-units&gt;Mbps&lt;/internet-evc-speed-units&gt;
+						&lt;/internet-evc-access-information&gt;
+						&lt;vr-lan xmlns="com:att:sdnctl:l3api"&gt;
+							&lt;vr-lan-interface&gt;
+								&lt;static-routes&gt;
+									&lt;v6-static-routes&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-static-route-prefix&gt;2001:1890:12e3:2da::&lt;/v6-static-route-prefix&gt;
+										&lt;v6-static-route-prefix-length&gt;28&lt;/v6-static-route-prefix-length&gt;
+									&lt;/v6-static-routes&gt;
+									&lt;v4-static-routes&gt;
+										&lt;v4-static-route-prefix&gt;255.255.252.1&lt;/v4-static-route-prefix&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
+										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
+									&lt;/v4-static-routes&gt;
+									&lt;v6-static-routes&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-static-route-prefix&gt;2001:1890:12e3:2da::&lt;/v6-static-route-prefix&gt;
+										&lt;v6-static-route-prefix-length&gt;28&lt;/v6-static-route-prefix-length&gt;
+									&lt;/v6-static-routes&gt;
+									&lt;v4-static-routes&gt;
+										&lt;v4-static-route-prefix&gt;255.255.252.2&lt;/v4-static-route-prefix&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
+										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
+									&lt;/v4-static-routes&gt;
+									&lt;v4-static-routes&gt;
+										&lt;v4-static-route-prefix&gt;255.255.252.3&lt;/v4-static-route-prefix&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
+										&lt;v4-static-route-prefix-length&gt;28&lt;/v4-static-route-prefix-length&gt;
+									&lt;/v4-static-routes&gt;
+								&lt;/static-routes&gt;
+								&lt;dhcp&gt;
+									&lt;v6-dhcp-server-enabled&gt;N&lt;/v6-dhcp-server-enabled&gt;
+									&lt;v4-dhcp-server-enabled&gt;Y&lt;/v4-dhcp-server-enabled&gt;
+									&lt;use-v6-default-pool&gt;N&lt;/use-v6-default-pool&gt;
+									&lt;excluded-v4-dhcp-addresses-from-default-pool&gt;
+									  &lt;excluded-v4-address&gt;192.168.1.7&lt;/excluded-v4-address&gt;
+									&lt;/excluded-v4-dhcp-addresses-from-default-pool&gt;
+									&lt;excluded-v4-dhcp-addresses-from-default-pool&gt;
+									  &lt;excluded-v4-address&gt;192.168.1.8&lt;/excluded-v4-address&gt;
+									&lt;/excluded-v4-dhcp-addresses-from-default-pool&gt;
+									&lt;v4-dhcp-pools&gt;
+										&lt;v4-dhcp-relay-next-hop-address&gt;1.1.1.1&lt;/v4-dhcp-relay-next-hop-address&gt;
+										&lt;v4-dhcp-pool-prefix-length&gt;28&lt;/v4-dhcp-pool-prefix-length&gt;
+										&lt;excluded-v4-addresses&gt;
+											&lt;excluded-v4-address&gt;192.168.1.5&lt;/excluded-v4-address&gt;
+										&lt;/excluded-v4-addresses&gt;
+										&lt;v4-dhcp-relay-gateway-address&gt;2.2.2.1&lt;/v4-dhcp-relay-gateway-address&gt;
+										&lt;excluded-v4-addresses&gt;
+											&lt;excluded-v4-address&gt;192.168.1.6&lt;/excluded-v4-address&gt;
+										&lt;/excluded-v4-addresses&gt;
+										&lt;v4-dhcp-pool-prefix&gt;192.155.2.3&lt;/v4-dhcp-pool-prefix&gt;
+									&lt;/v4-dhcp-pools&gt;
+									&lt;v4-dhcp-pools&gt;
+										&lt;v4-dhcp-relay-next-hop-address&gt;1.1.1.2&lt;/v4-dhcp-relay-next-hop-address&gt;
+										&lt;v4-dhcp-pool-prefix-length&gt;28&lt;/v4-dhcp-pool-prefix-length&gt;
+										&lt;excluded-v4-addresses&gt;
+											&lt;excluded-v4-address&gt;192.168.1.6&lt;/excluded-v4-address&gt;
+										&lt;/excluded-v4-addresses&gt;
+										&lt;v4-dhcp-relay-gateway-address&gt;2.2.2.2&lt;/v4-dhcp-relay-gateway-address&gt;
+										&lt;excluded-v4-addresses&gt;
+											&lt;excluded-v4-address&gt;192.168.1.7&lt;/excluded-v4-address&gt;
+										&lt;/excluded-v4-addresses&gt;
+										&lt;v4-dhcp-pool-prefix&gt;192.155.2.4&lt;/v4-dhcp-pool-prefix&gt;
+									&lt;/v4-dhcp-pools&gt;									
+									&lt;use-v4-default-pool&gt;Y&lt;/use-v4-default-pool&gt;
+									&lt;excluded-v6-dhcp-addresses-from-default-pool&gt;
+									  &lt;excluded-v6-address&gt;1:5&lt;/excluded-v6-address&gt;
+									&lt;/excluded-v6-dhcp-addresses-from-default-pool&gt;
+									&lt;excluded-v6-dhcp-addresses-from-default-pool&gt;
+									  &lt;excluded-v6-address&gt;1:6&lt;/excluded-v6-address&gt;
+									&lt;/excluded-v6-dhcp-addresses-from-default-pool&gt;
+									&lt;v6-dhcp-pools&gt;
+										&lt;v6-dhcp-relay-next-hop-address&gt;4:4&lt;/v6-dhcp-relay-next-hop-address&gt;
+										&lt;v6-dhcp-pool-prefix-length&gt;28&lt;/v6-dhcp-pool-prefix-length&gt;
+										&lt;excluded-v6-addresses&gt;
+											&lt;excluded-v6-address&gt;1:1&lt;/excluded-v6-address&gt;
+										&lt;/excluded-v6-addresses&gt;
+										&lt;v6-dhcp-relay-gateway-address&gt;3:3&lt;/v6-dhcp-relay-gateway-address&gt;
+										&lt;excluded-v6-addresses&gt;
+											&lt;excluded-v6-address&gt;2:2&lt;/excluded-v6-address&gt;
+										&lt;/excluded-v6-addresses&gt;
+										&lt;v6-dhcp-pool-prefix&gt;0:0&lt;/v6-dhcp-pool-prefix&gt;
+									&lt;/v6-dhcp-pools&gt;
+									&lt;v6-dhcp-pools&gt;
+										&lt;v6-dhcp-relay-next-hop-address&gt;4:4&lt;/v6-dhcp-relay-next-hop-address&gt;
+										&lt;v6-dhcp-pool-prefix-length&gt;28&lt;/v6-dhcp-pool-prefix-length&gt;
+										&lt;excluded-v6-addresses&gt;
+											&lt;excluded-v6-address&gt;1:1&lt;/excluded-v6-address&gt;
+										&lt;/excluded-v6-addresses&gt;
+										&lt;v6-dhcp-relay-gateway-address&gt;3:3&lt;/v6-dhcp-relay-gateway-address&gt;
+										&lt;excluded-v6-addresses&gt;
+											&lt;excluded-v6-address&gt;2:2&lt;/excluded-v6-address&gt;
+										&lt;/excluded-v6-addresses&gt;
+										&lt;v6-dhcp-pool-prefix&gt;0:0&lt;/v6-dhcp-pool-prefix&gt;
+									&lt;/v6-dhcp-pools&gt;									
+								&lt;/dhcp&gt;
+								&lt;firewall-lite&gt;
+									&lt;stateful-firewall-lite-v6-enabled&gt;N&lt;/stateful-firewall-lite-v6-enabled&gt;
+									&lt;stateful-firewall-lite-v4-enabled&gt;Y&lt;/stateful-firewall-lite-v4-enabled&gt;
+									&lt;v4-firewall-packet-filters&gt;
+									  &lt;v4-firewall-prefix&gt;0.0.0.1&lt;/v4-firewall-prefix&gt;
+									  &lt;v4-firewall-prefix-length&gt;1&lt;/v4-firewall-prefix-length&gt;
+									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
+									  &lt;udp-ports&gt;
+									    &lt;port-number&gt;1&lt;/port-number&gt;
+									  &lt;/udp-ports&gt;
+									  &lt;tcp-ports&gt;
+									    &lt;port-number&gt;1&lt;/port-number&gt;
+									  &lt;/tcp-ports&gt;
+									&lt;/v4-firewall-packet-filters&gt;
+									&lt;v4-firewall-packet-filters&gt;
+									  &lt;v4-firewall-prefix&gt;0.0.0.2&lt;/v4-firewall-prefix&gt;
+									  &lt;v4-firewall-prefix-length&gt;2&lt;/v4-firewall-prefix-length&gt;
+									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
+									  &lt;udp-ports&gt;
+									    &lt;port-number&gt;2&lt;/port-number&gt;
+									  &lt;/udp-ports&gt;
+									  &lt;tcp-ports&gt;
+									    &lt;port-number&gt;2&lt;/port-number&gt;
+									  &lt;/tcp-ports&gt;
+									&lt;/v4-firewall-packet-filters&gt;
+									&lt;v6-firewall-packet-filters&gt;
+									  &lt;v6-firewall-prefix&gt;:&lt;/v6-firewall-prefix&gt;
+									  &lt;v6-firewall-prefix-length&gt;0&lt;/v6-firewall-prefix-length&gt;
+									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
+									  &lt;udp-ports&gt;
+									    &lt;port-number&gt;3&lt;/port-number&gt;
+									  &lt;/udp-ports&gt;
+									  &lt;tcp-ports&gt;
+									    &lt;port-number&gt;3&lt;/port-number&gt;
+									  &lt;/tcp-ports&gt;
+									&lt;/v6-firewall-packet-filters&gt;
+									&lt;v6-firewall-packet-filters&gt;
+									  &lt;v6-firewall-prefix&gt;:&lt;/v6-firewall-prefix&gt;
+									  &lt;v6-firewall-prefix-length&gt;1&lt;/v6-firewall-prefix-length&gt;
+									  &lt;allow-icmp-ping&gt;Y&lt;/allow-icmp-ping&gt;
+									  &lt;udp-ports&gt;
+									    &lt;port-number&gt;4&lt;/port-number&gt;
+									  &lt;/udp-ports&gt;
+									  &lt;tcp-ports&gt;
+									    &lt;port-number&gt;4&lt;/port-number&gt;
+									  &lt;/tcp-ports&gt;
+									&lt;/v6-firewall-packet-filters&gt;
+								&lt;/firewall-lite&gt;
+								&lt;pat&gt;
+									&lt;v4-pat-pools&gt;
+										&lt;v4-pat-pool-prefix&gt;192.168.1.44&lt;/v4-pat-pool-prefix&gt;
+										&lt;v4-pat-pool-next-hop-address&gt;192.168.1.5&lt;/v4-pat-pool-next-hop-address&gt;
+										&lt;v4-pat-pool-prefix-length&gt;0&lt;/v4-pat-pool-prefix-length&gt;
+									&lt;/v4-pat-pools&gt;
+									&lt;use-v4-default-pool&gt;Y&lt;/use-v4-default-pool&gt;
+									&lt;v4-pat-enabled&gt;N&lt;/v4-pat-enabled&gt;
+									&lt;v4-pat-pools&gt;
+										&lt;v4-pat-pool-prefix&gt;192.168.1.45&lt;/v4-pat-pool-prefix&gt;
+										&lt;v4-pat-pool-next-hop-address&gt;192.168.1.6&lt;/v4-pat-pool-next-hop-address&gt;
+										&lt;v4-pat-pool-prefix-length&gt;28&lt;/v4-pat-pool-prefix-length&gt;
+									&lt;/v4-pat-pools&gt;
+								&lt;/pat&gt;
+								&lt;nat&gt;
+								  &lt;v4-nat-enabled&gt;Y&lt;/v4-nat-enabled&gt;
+								  &lt;v4-nat-mapping-entries&gt;
+								    &lt;v4-nat-internal&gt;0.0.0.0&lt;/v4-nat-internal&gt;
+								    &lt;v4-nat-next-hop-address&gt;0.0.0.0&lt;/v4-nat-next-hop-address&gt;
+								    &lt;v4-nat-external&gt;0.0.0.0&lt;/v4-nat-external&gt;
+								  &lt;/v4-nat-mapping-entries&gt;
+								  &lt;v4-nat-mapping-entries&gt;
+								    &lt;v4-nat-internal&gt;0.0.0.1&lt;/v4-nat-internal&gt;
+								    &lt;v4-nat-next-hop-address&gt;0.0.0.1&lt;/v4-nat-next-hop-address&gt;
+								    &lt;v4-nat-external&gt;0.0.0.1&lt;/v4-nat-external&gt;
+								  &lt;/v4-nat-mapping-entries&gt;
+								&lt;/nat&gt;
+								&lt;vr-designation&gt;primary&lt;/vr-designation&gt;
+								&lt;v4-vce-loopback-address&gt;162.200.3.144&lt;/v4-vce-loopback-address&gt;
+								&lt;v6-vr-lan-prefix-length&gt;64&lt;/v6-vr-lan-prefix-length&gt;
+								&lt;v6-vce-wan-address&gt;2001:1890:12e3:2da::&lt;/v6-vce-wan-address&gt;
+								&lt;v6-vr-lan-prefix&gt;2620:0:10d0:f:ffff:ffff:ffff:fffe&lt;/v6-vr-lan-prefix&gt;
+								&lt;v4-vr-lan-prefix-length&gt;24&lt;/v4-vr-lan-prefix-length&gt;
+								&lt;v4-vr-lan-prefix&gt;10.192.27.254&lt;/v4-vr-lan-prefix&gt;
+								&lt;v4-public-lan-prefixes&gt;
+									&lt;t-provided-v4-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.2&lt;/v4-next-hop-address&gt;
+										&lt;v4-lan-public-prefix&gt;192.168.1.1&lt;/v4-lan-public-prefix&gt;
+										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+									&lt;/t-provided-v4-lan-public-prefixes&gt;
+									&lt;t-provided-v4-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.72&lt;/v4-next-hop-address&gt;
+										&lt;v4-lan-public-prefix&gt;192.168.1.71&lt;/v4-lan-public-prefix&gt;
+										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+									&lt;/t-provided-v4-lan-public-prefixes&gt;
+									&lt;t-provided-v4-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v4-next-hop-address&gt;192.168.1.68&lt;/v4-next-hop-address&gt;
+										&lt;v4-lan-public-prefix&gt;192.168.1.67&lt;/v4-lan-public-prefix&gt;
+										&lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+									&lt;/t-provided-v4-lan-public-prefixes&gt;
+								&lt;/v4-public-lan-prefixes&gt;
+								&lt;v6-public-lan-prefixes&gt;
+									&lt;t-provided-v6-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
+										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+									&lt;/t-provided-v6-lan-public-prefixes&gt;
+									&lt;t-provided-v6-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:3da::&lt;/v6-lan-public-prefix&gt;
+										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+									&lt;/t-provided-v6-lan-public-prefixes&gt;
+									&lt;t-provided-v6-lan-public-prefixes&gt;
+										&lt;request-index&gt;1&lt;/request-index&gt;
+										&lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+										&lt;v6-lan-public-prefix&gt;2001:1890:12e3:4da::&lt;/v6-lan-public-prefix&gt;
+										&lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+									&lt;/t-provided-v6-lan-public-prefixes&gt;
+								&lt;/v6-public-lan-prefixes&gt;
+							&lt;/vr-lan-interface&gt;
+							&lt;routing-protocol&gt;none&lt;/routing-protocol&gt;
+						&lt;/vr-lan&gt;
+&lt;ucpe-vms-service-information&gt;				
+ &lt;transport-service-information&gt;
+    &lt;transport-service-type&gt;AVPN&lt;/transport-service-type&gt;
+	&lt;access-circuit-info&gt;
+	   &lt;access-circuit-id&gt;1&lt;/access-circuit-id&gt;
+	   &lt;dual-mode&gt;Active&lt;/dual-mode&gt;
+	&lt;/access-circuit-info&gt;
+	&lt;access-circuit-info&gt;
+	   &lt;access-circuit-id&gt;2&lt;/access-circuit-id&gt;
+	   &lt;dual-mode&gt;Standby&lt;/dual-mode&gt;
+	&lt;/access-circuit-info&gt;	
+ &lt;/transport-service-information&gt;
+ &lt;ucpe-information&gt;
+    &lt;ucpe-host-name&gt;hostname&lt;/ucpe-host-name&gt;
+    &lt;ucpe-activation-code&gt;activecode&lt;/ucpe-activation-code&gt;
+    &lt;out-of-band-management-modem&gt;OOB&lt;/out-of-band-management-modem&gt;
+  &lt;/ucpe-information&gt;
+  &lt;vnf-list&gt;
+	&lt;vnf-information&gt; 
+		&lt;vnf-instance-id&gt;1&lt;/vnf-instance-id&gt; 
+		&lt;vnf-sequence-number&gt;1&lt;/vnf-sequence-number&gt;
+		&lt;vnf-type&gt;ZZ&lt;/vnf-type&gt;
+		&lt;vnf-vendor&gt;JUNIPER&lt;/vnf-vendor&gt;
+		&lt;vnf-model&gt;MODEL1&lt;/vnf-model&gt;
+		&lt;vnf-id&gt;1&lt;/vnf-id&gt;
+		&lt;prov-status&gt;1&lt;/prov-status&gt;
+		&lt;operational-state&gt;1&lt;/operational-state&gt;
+		&lt;orchestration-status&gt;1&lt;/orchestration-status&gt;
+		&lt;equipment-role&gt;1&lt;/equipment-role&gt;
+    &lt;/vnf-information&gt;
+	&lt;vnf-information&gt; 
+		&lt;vnf-instance-id&gt;2&lt;/vnf-instance-id&gt; 
+		&lt;vnf-sequence-number&gt;2&lt;/vnf-sequence-number&gt;
+		&lt;vnf-type&gt;HY&lt;/vnf-type&gt;
+		&lt;vnf-vendor&gt;JUNIPER&lt;/vnf-vendor&gt;
+		&lt;vnf-model&gt;MODEL2&lt;/vnf-model&gt;
+		&lt;vnf-id&gt;2&lt;/vnf-id&gt;
+		&lt;prov-status&gt;2&lt;/prov-status&gt;
+		&lt;operational-state&gt;2&lt;/operational-state&gt;
+		&lt;orchestration-status&gt;2&lt;/orchestration-status&gt;
+		&lt;equipment-role&gt;2&lt;/equipment-role&gt;
+    &lt;/vnf-information&gt;					
+  &lt;/vnf-list&gt;
+ &lt;/ucpe-vms-service-information&gt;										
+						&lt;request-information&gt;
+							&lt;request-action&gt;Layer3ServiceActivateRequest&lt;/request-action&gt;
+							&lt;order-number&gt;4281555&lt;/order-number&gt;
+							&lt;request-id&gt;155415ab-b4a7-4382-b4c6-d17d9sm42855&lt;/request-id&gt;
+							&lt;notification-url&gt;https://csi-tst-q22.it.com:22443/Services/com/cingular/csi/sdn/SendManagedNetworkStatusNotification.jws&lt;/notification-url&gt;
+							&lt;source&gt;OMX&lt;/source&gt;
+							&lt;order-version&gt;1&lt;/order-version&gt;
+						&lt;/request-information&gt;
+						&lt;sdnc-request-header&gt;
+							&lt;svc-action&gt;activate&lt;/svc-action&gt;
+							&lt;svc-notification-url&gt;https://msojra.mtsnjdcp1.aic.cip.com:8443/adapters/rest/SDNCNotify&lt;/svc-notification-url&gt;
+							&lt;svc-request-id&gt;5b1f3c5d-cdf9-488d-8a4b-d3f1229d7760&lt;/svc-request-id&gt;
+						&lt;/sdnc-request-header&gt;
+						&lt;l2-homing-information&gt;
+							&lt;topology&gt;MultiPoint&lt;/topology&gt;
+							&lt;preferred-aic-clli&gt;MTSNJA4LCP1&lt;/preferred-aic-clli&gt;
+							&lt;evc-name&gt;AS/VLXM/003717//SW&lt;/evc-name&gt;
+						&lt;/l2-homing-information&gt;
+						&lt;service-information&gt;
+							&lt;service-instance-id&gt;FK/VLXM/003717//SW_INTERNET&lt;/service-instance-id&gt;
+							&lt;subscriber-name&gt;FOUR SEASONS HEATING &amp; COOLING_8310006378683&lt;/subscriber-name&gt;
+							&lt;service-type&gt;SDN-ETHERNET-INTERNET&lt;/service-type&gt;
+						&lt;/service-information&gt;
+						&lt;internet-service-change-details&gt;
+							&lt;internet-evc-speed-value&gt;10&lt;/internet-evc-speed-value&gt;
+							&lt;internet-evc-speed-units&gt;Kbps&lt;/internet-evc-speed-units&gt;
+							&lt;t-provided-v4-lan-public-prefixes&gt;
+							   &lt;request-index&gt;1&lt;/request-index&gt;
+							   &lt;v4-next-hop-address&gt;192.168.1.15&lt;/v4-next-hop-address&gt;
+							   &lt;v4-lan-public-prefix&gt;192.168.1.15&lt;/v4-lan-public-prefix&gt;
+							   &lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+							&lt;/t-provided-v4-lan-public-prefixes&gt;
+							&lt;t-provided-v4-lan-public-prefixes&gt;
+							   &lt;request-index&gt;2&lt;/request-index&gt;
+							   &lt;v4-next-hop-address&gt;192.168.1.16&lt;/v4-next-hop-address&gt;
+							   &lt;v4-lan-public-prefix&gt;192.168.1.16&lt;/v4-lan-public-prefix&gt;
+							   &lt;v4-lan-public-prefix-length&gt;28&lt;/v4-lan-public-prefix-length&gt;
+							&lt;/t-provided-v4-lan-public-prefixes&gt;
+							&lt;t-provided-v6-lan-public-prefixes&gt;
+							   &lt;request-index&gt;1&lt;/request-index&gt;
+							   &lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+							   &lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
+							   &lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+							&lt;/t-provided-v6-lan-public-prefixes&gt;
+							&lt;t-provided-v6-lan-public-prefixes&gt;
+							   &lt;request-index&gt;1&lt;/request-index&gt;
+							   &lt;v6-next-hop-address&gt;2001:1890:12e3:2da::&lt;/v6-next-hop-address&gt;
+							   &lt;v6-lan-public-prefix&gt;2001:1890:12e3:2da::&lt;/v6-lan-public-prefix&gt;
+							   &lt;v6-lan-public-prefix-length&gt;28&lt;/v6-lan-public-prefix-length&gt;
+							&lt;/t-provided-v6-lan-public-prefixes&gt;
+						&lt;/internet-service-change-details&gt;
+					&lt;/service-data&gt;
+				&lt;/layer3-service-list&gt;
+</RequestData>
+</SDNCAdapterCallbackRequest>
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/sdncadaptercallbackrequest_404CallBack.xml b/bpmn/MSOCommonBPMN/src/test/resources/sdncadaptercallbackrequest_404CallBack.xml
index 5808444..aa481ea 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/sdncadaptercallbackrequest_404CallBack.xml
+++ b/bpmn/MSOCommonBPMN/src/test/resources/sdncadaptercallbackrequest_404CallBack.xml
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<SDNCAdapterCallbackRequest
-	xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
-	<CallbackHeader>
-		<RequestId>39542e39-ccc3-4d1a-8b79-04ce88526613</RequestId>
-		<ResponseCode>404</ResponseCode>
-		<ResponseMessage>Error processing request to SDNC. Not Found.
-			https://sdncodl.us.aic.cip.att.com:8443/restconf/config/L3SDN-API:services/layer3-service-list/MVM%2FVLXP%2F000855%2F%2FShakeout.
-			SDNC Returned-[error-type:application, error-tag:data-missing,
-			error-message:Request could not be completed because the relevant
-			data model content does not exist.]</ResponseMessage>
-	</CallbackHeader>
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<SDNCAdapterCallbackRequest
+	xmlns="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+	<CallbackHeader>
+		<RequestId>39542e39-ccc3-4d1a-8b79-04ce88526613</RequestId>
+		<ResponseCode>404</ResponseCode>
+		<ResponseMessage>Error processing request to SDNC. Not Found.
+			https://sdncodl.us.aic.cip.com:8443/restconf/config/L3SDN-API:services/layer3-service-list/MVM%2FVLXP%2F000855%2F%2FShakeout.
+			SDNC Returned-[error-type:application, error-tag:data-missing,
+			error-message:Request could not be completed because the relevant
+			data model content does not exist.]</ResponseMessage>
+	</CallbackHeader>
 </SDNCAdapterCallbackRequest>
\ No newline at end of file
