Containerization feature of SO

Change-Id: I95381232eeefcd247a66a5cec370a8ce1c288e18
Issue-ID: SO-670
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/AllBaseTaskTestSuite.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/AllBaseTaskTestSuite.java
new file mode 100644
index 0000000..1808187
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/AllBaseTaskTestSuite.java
@@ -0,0 +1,33 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so;
+
+import org.junit.runner.RunWith;
+
+import com.googlecode.junittoolbox.SuiteClasses;
+import com.googlecode.junittoolbox.WildcardPatternSuite;
+
+@RunWith(WildcardPatternSuite.class)
+@SuiteClasses({"**/common/aai/tasks/*Test.class", "**/bpmn/sdno/tasks/*Test.class", "**/buildingblock/SniroHomingTest.class"})
+public class AllBaseTaskTestSuite {
+	// the class remains empty,
+	// used only as a holder for the above annotations
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/AllTestSuites.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/AllTestSuites.java
new file mode 100644
index 0000000..98e613e
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/AllTestSuites.java
@@ -0,0 +1,32 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so;
+import org.junit.runner.RunWith;
+
+import com.googlecode.junittoolbox.SuiteClasses;
+import com.googlecode.junittoolbox.WildcardPatternSuite;
+
+@RunWith(WildcardPatternSuite.class)
+@SuiteClasses({"**/*Test.class"})
+public class AllTestSuites {
+  // the class remains empty,
+  // used only as a holder for the above annotations
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/BaseTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/BaseTest.java
new file mode 100644
index 0000000..2bec24e
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/BaseTest.java
@@ -0,0 +1,209 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.so;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.camunda.bpm.engine.RepositoryService;
+import org.camunda.bpm.engine.RuntimeService;
+import org.camunda.bpm.model.bpmn.Bpmn;
+import org.camunda.bpm.model.bpmn.BpmnModelInstance;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.onap.so.bpmn.buildingblock.SniroHomingV2;
+import org.onap.so.bpmn.common.DelegateExecutionImpl;
+import org.onap.so.bpmn.common.InjectionHelper;
+import org.onap.so.bpmn.common.MockLoggerDelegate;
+import org.onap.so.bpmn.infrastructure.aai.tasks.AAIFlagTasks;
+import org.onap.so.bpmn.sdno.tasks.SDNOHealthCheckTasks;
+import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetup;
+import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupMapperLayer;
+import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
+import org.onap.so.client.aai.mapper.AAIObjectMapper;
+import org.onap.so.client.adapter.network.NetworkAdapterClientImpl;
+import org.onap.so.client.adapter.network.mapper.NetworkAdapterObjectMapper;
+import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.client.orchestration.AAIVnfResources;
+import org.onap.so.client.orchestration.SDNOHealthCheckResources;
+import org.onap.so.client.sdnc.SDNCClient;
+import org.onap.so.client.sniro.SniroClient;
+import org.onap.so.db.catalog.client.CatalogDbClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.embedded.LocalServerPort;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.boot.test.mock.mockito.SpyBean;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
+import org.springframework.http.HttpHeaders;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@ActiveProfiles("test")
+@ContextConfiguration
+@AutoConfigureWireMock(port = 0)
+public abstract class BaseTest extends BuildingBlockTestDataSetup {
+	
+
+	protected Map<String, Object> variables = new HashMap<>();
+
+	protected TestRestTemplate restTemplate = new TestRestTemplate();
+
+	protected HttpHeaders headers = new HttpHeaders();
+	
+	@Value("${wiremock.server.port")
+	protected String wireMockPort;
+	
+	@Autowired
+	protected RuntimeService runtimeService;
+
+	@Autowired
+	private RepositoryService repositoryService;
+	/*
+	 * Mocked for injection via autowiring
+	 */
+	
+	@Value("${mso.catalog.db.spring.endpoint}")
+	protected String endpoint;
+	
+	@MockBean
+	protected CatalogDbClient MOCK_catalogDbClient;
+	
+	@SpyBean
+	protected InjectionHelper MOCK_injectionHelper;
+
+	@SpyBean
+	protected NetworkAdapterObjectMapper MOCK_networkAdapterObjectMapper;
+
+	@SpyBean
+	protected AAIObjectMapper MOCK_aaiObjectMapper;
+	@SpyBean
+	protected NetworkAdapterClientImpl MOCK_networkAdapterClient;
+	@SpyBean
+	protected SDNCClient MOCK_sdncClient;
+	
+	@SpyBean
+	protected AAIFlagTasks aaiFlagTasks;
+	
+	@SpyBean
+	protected AAIVnfResources aaiVnfResources;
+	
+	@SpyBean
+	protected ExceptionBuilder exceptionUtil;
+	
+	@SpyBean
+	protected SDNOHealthCheckResources MOCK_sdnoHealthCheckResources;
+	
+
+	
+
+
+
+
+	/*
+	 *  Classes that cannot be simply mocked because they are both
+	 *  needed for testing another class, and must be autowired when
+	 *  being tested themselves....or classes with private methods that
+	 *  must be stubbed during testing
+	 */
+
+
+	
+	
+	@SpyBean
+	protected BBInputSetupMapperLayer SPY_bbInputSetupMapperLayer;
+	@SpyBean
+	protected BBInputSetupUtils SPY_bbInputSetupUtils;
+	@SpyBean
+	protected BBInputSetup SPY_bbInputSetup;
+	@SpyBean
+	protected SniroHomingV2 sniroHoming;
+	
+	@SpyBean
+	protected SniroClient sniroClient;
+	
+	@SpyBean
+	protected SDNOHealthCheckTasks sdnoHealthCheckTasks;	
+	
+	/*
+	 *  Mocked for injection via the IntectionHelper
+	 */
+	
+
+	
+	@Before
+	public void baseTestBefore() {
+		variables.put("gBuildingBlockExecution", new DelegateExecutionImpl(new HashMap<>()));
+	
+		
+	}
+
+	@LocalServerPort
+	private int port;
+	
+	protected String readFile(String path) throws IOException {
+		return readFile(path, Charset.defaultCharset());
+	}
+	
+	protected String readFile(String path, Charset encoding) throws IOException {
+		byte[] encoded = Files.readAllBytes(Paths.get(path));
+		return new String(encoded, encoding);
+	}
+	
+	protected String readJsonFileAsString(String fileLocation) throws IOException{
+		ObjectMapper mapper = new ObjectMapper();
+		JsonNode jsonNode = mapper.readTree(new File(fileLocation));
+		return jsonNode.asText();
+	}
+
+	protected String createURLWithPort(String uri) {
+		return "http://localhost:" + port + uri;
+	}
+	/**
+	 * Create and deploy a process model with one logger delegate as service task.
+	 *
+	 * @param origProcessKey
+	 *            key to call
+	 * @param mockProcessName
+	 *            process name
+	 * @param fileName
+	 *            file name without extension
+	 */
+	protected void mockSubprocess(String origProcessKey, String mockProcessName, String fileName) {
+		BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(origProcessKey).name(mockProcessName)
+				.startEvent().name("Start Point").serviceTask().name("Log Something for Test")
+				.camundaClass(MockLoggerDelegate.class.getName()).endEvent().name("End Point").done();
+		repositoryService.createDeployment().addModelInstance(fileName + ".bpmn", modelInstance).deploy();
+	}
+	
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/BaseUnitTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/BaseUnitTest.java
new file mode 100644
index 0000000..5719ce1
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/BaseUnitTest.java
@@ -0,0 +1,25 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so;
+
+public abstract class BaseUnitTest extends BuildingBlockTestDataSetup{
+
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/BuildingBlockTestDataSetup.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/BuildingBlockTestDataSetup.java
new file mode 100644
index 0000000..9e6cfdb
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/BuildingBlockTestDataSetup.java
@@ -0,0 +1,665 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.so;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.assertj.core.util.Arrays;
+import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.rules.ExpectedException;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.common.DelegateExecutionImpl;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.LineOfBusiness;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.Platform;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.Project;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceProxy;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceSubscription;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBondingLink;
+import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
+import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
+import org.onap.so.bpmn.servicedecomposition.generalobjects.OrchestrationContext;
+import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
+import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestParameters;
+import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoConfiguration;
+import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
+import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoNetwork;
+import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoServiceInstance;
+import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoVfModule;
+import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
+import org.onap.so.client.exception.BBObjectNotFoundException;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.AllottedResource;
+import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoAllottedResource;
+import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoServiceProxy;
+
+public class BuildingBlockTestDataSetup{
+	private int collectionCounter;
+	private int configurationCounter;
+	private int customerCounter;
+	private int genericVnfCounter;
+	private int instanceGroupCounter;
+	private int l3NetworkCounter;
+	private int owningEntityCounter;
+	private int pnfCounter;
+	private int projectCounter;
+	private int serviceInstanceCounter;
+	private int serviceProxyCounter;
+	private int serviceSubscriptionCounter;
+	private int vfModuleCounter;
+	private int volumeGroupCounter;
+	private int vpnBindingCounter;
+	private int vpnBondingLinkCounter;
+	
+	protected BuildingBlockExecution execution;
+	
+	protected GeneralBuildingBlock gBBInput;
+	
+	protected HashMap<ResourceKey, String> lookupKeyMap;
+	
+	protected ExtractPojosForBB extractPojosForBB = new ExtractPojosForBB();
+	
+	@Rule
+	public ExpectedException expectedException = ExpectedException.none();
+	
+	protected DelegateExecution delegateExecution;
+	
+	@Before
+	public void buildingBlockTestDataSetupBefore() {
+		collectionCounter = 0;
+		configurationCounter = 0;
+		customerCounter = 0;
+		genericVnfCounter = 0;
+		instanceGroupCounter = 0;
+		l3NetworkCounter = 0;
+		owningEntityCounter = 0;
+		pnfCounter = 0;
+		projectCounter = 0;
+		serviceInstanceCounter = 0;
+		serviceProxyCounter = 0;
+		serviceSubscriptionCounter = 0;
+		vfModuleCounter = 0;
+		volumeGroupCounter = 0;
+		vpnBindingCounter = 0;
+		vpnBondingLinkCounter = 0;
+		
+		execution = new DelegateExecutionImpl(new ExecutionImpl());
+		execution.setVariable("testProcessKey", "testProcessKeyValue");
+		
+		gBBInput = new GeneralBuildingBlock();
+		execution.setVariable("gBBInput", gBBInput);
+		
+		lookupKeyMap = new HashMap<ResourceKey, String>();
+		execution.setVariable("lookupKeyMap", lookupKeyMap);
+		
+	    ExecutionImpl mockExecutionImpl = mock(ExecutionImpl.class);
+    	doReturn("test").when(mockExecutionImpl).getProcessInstanceId();
+    	
+    	ExecutionImpl executionImpl = new ExecutionImpl();
+    	executionImpl.setProcessInstance(mockExecutionImpl);
+    	
+    	delegateExecution = (DelegateExecution) executionImpl;
+    	delegateExecution.setVariable("testProcessKey", "testProcessKeyValue");
+	}
+	
+	public Map<String, String> buildUserInput() {
+		Map<String, String> userInput = new HashMap<>();
+		userInput.put("testUserInputKey", "testUserInputValue");
+		
+		return userInput;
+	}
+	
+	public Map<String, String> setUserInput() {
+		Map<String, String> userInput = buildUserInput();
+		
+		gBBInput.setUserInput(userInput);
+		
+		return userInput;
+	}
+	
+	public RequestContext buildRequestContext() {
+		RequestContext requestContext = new RequestContext();
+		requestContext.setMsoRequestId(UUID.randomUUID().toString());
+		requestContext.setProductFamilyId("testProductFamilyId");
+		requestContext.setRequestorId("testRequestorId");
+		
+		requestContext.setUserParams(new HashMap<>());
+		
+        Map<String,Object> dataMap = new HashMap<>();
+        dataMap.put("vpnId","testVpnId");
+        dataMap.put("vpnRegion","testVpnRegion");
+        dataMap.put("vpnRt","testVpnRt");
+        dataMap.put("vpnName","vpnName");
+        dataMap.put("vpnRegion", Arrays.asList(new String[] {"USA", "EMEA", "APAC"}));
+        
+        HashMap<String,Object> userParams = new HashMap<>();
+        userParams.put("vpnData",dataMap);
+		
+		List<Map<String,Object>> userParamsList = new ArrayList<>();
+		userParamsList.add(userParams);
+		
+		RequestParameters requestParameters = new RequestParameters();
+		requestParameters.setUserParams(userParamsList);
+		requestContext.setRequestParameters(requestParameters);
+		
+		return requestContext;
+	}
+	
+	public RequestContext setRequestContext() {
+		RequestContext requestContext = buildRequestContext();
+		
+		gBBInput.setRequestContext(requestContext);
+		
+		return requestContext;
+	}
+	
+	public CloudRegion buildCloudRegion() {
+		CloudRegion cloudRegion = new CloudRegion();
+		cloudRegion.setLcpCloudRegionId("testLcpCloudRegionId");
+		cloudRegion.setTenantId("testTenantId");
+		cloudRegion.setCloudOwner("testCloudOwner");
+		
+		return cloudRegion;
+	}
+	
+	public CloudRegion setCloudRegion() {
+		CloudRegion cloudRegion = buildCloudRegion();
+		
+		gBBInput.setCloudRegion(cloudRegion);
+		
+		return cloudRegion;
+	}
+	
+	public OrchestrationContext buildOrchestrationContext() {
+		OrchestrationContext orchestrationContext = new OrchestrationContext();
+		
+		return orchestrationContext;
+	}
+	
+	public OrchestrationContext setOrchestrationContext() {
+		OrchestrationContext orchestrationContext = buildOrchestrationContext();
+		
+		gBBInput.setOrchContext(orchestrationContext);
+		
+		return orchestrationContext;
+	}
+	
+	public Collection buildCollection() {
+		collectionCounter++;
+		
+		Collection collection = new Collection();
+		collection.setId("testId" + collectionCounter);
+		collection.setInstanceGroup(buildInstanceGroup());
+		
+		return collection;
+	}
+	
+	public Configuration buildConfiguration() {
+		configurationCounter++;
+		
+		Configuration configuration = new Configuration();
+		configuration.setConfigurationId("testConfigurationId" + configurationCounter);
+		configuration.setConfigurationName("testConfigurationName" + configurationCounter);
+		
+		ModelInfoConfiguration modelInfoConfiguration = new ModelInfoConfiguration();
+		modelInfoConfiguration.setModelVersionId("testModelVersionId" + configurationCounter);
+		modelInfoConfiguration.setModelInvariantId("testModelInvariantId" + configurationCounter);
+		modelInfoConfiguration.setModelCustomizationId("testModelCustomizationId" + configurationCounter);
+		
+		configuration.setModelInfoConfiguration(modelInfoConfiguration);
+		
+		return configuration;
+	}
+	
+	public OwningEntity buildOwningEntity() {
+		owningEntityCounter++;
+		
+		OwningEntity owningEntity = new OwningEntity();
+		owningEntity.setOwningEntityId("testOwningEntityId" + owningEntityCounter);
+		owningEntity.setOwningEntityName("testOwningEntityName" + owningEntityCounter);
+		
+		return owningEntity;
+	}
+	
+	public Project buildProject() {
+		projectCounter++;
+		
+		Project project = new Project();
+		project.setProjectName("testProjectName" + projectCounter);
+		
+		return project;
+	}
+	
+	public ServiceSubscription buildServiceSubscription() {
+		serviceSubscriptionCounter++;
+		
+		ServiceSubscription serviceSubscription = new ServiceSubscription();
+		serviceSubscription.setTempUbSubAccountId("testTempUbSubAccountId" + serviceSubscriptionCounter);
+		serviceSubscription.setServiceType("testServiceType" + serviceSubscriptionCounter);
+		
+		return serviceSubscription;
+	}
+	
+	public Customer buildCustomer() {
+		customerCounter++;
+		
+		Customer customer = new Customer();
+		customer.setGlobalCustomerId("testGlobalCustomerId" + customerCounter);
+		customer.setSubscriberType("testSubscriberType" + customerCounter);
+
+		customer.setServiceSubscription(buildServiceSubscription());
+		
+		return customer;
+	}
+	
+	public ServiceInstance buildServiceInstance() {
+		serviceInstanceCounter++;
+		
+		ServiceInstance serviceInstance = new ServiceInstance();
+		serviceInstance.setServiceInstanceId("testServiceInstanceId" + serviceInstanceCounter);
+		serviceInstance.setServiceInstanceName("testServiceInstanceName" + serviceInstanceCounter);
+		
+		ModelInfoServiceInstance modelInfoServiceInstance = new ModelInfoServiceInstance();
+		modelInfoServiceInstance.setModelInvariantUuid("testModelInvariantUUID" + serviceInstanceCounter);
+		modelInfoServiceInstance.setModelUuid("testModelUUID" + serviceInstanceCounter);
+		modelInfoServiceInstance.setModelVersion("testModelVersion" + serviceInstanceCounter);
+		modelInfoServiceInstance.setModelName("testModelName" + serviceInstanceCounter);
+		modelInfoServiceInstance.setServiceType("testServiceType" + serviceInstanceCounter);
+		serviceInstance.setModelInfoServiceInstance(modelInfoServiceInstance);
+		
+		serviceInstance.setProject(buildProject());
+		
+		serviceInstance.setOwningEntity(buildOwningEntity());
+		
+		serviceInstance.setCollection(buildCollection());
+		
+		serviceInstance.getConfigurations().add(buildConfiguration());
+		
+		return serviceInstance;
+	}
+	
+	public ServiceInstance setServiceInstance() {
+		ServiceInstance serviceInstance = buildServiceInstance();
+		
+		if(gBBInput.getCustomer() == null) {
+			gBBInput.setCustomer(buildCustomer());
+		}
+		gBBInput.getCustomer().getServiceSubscription().getServiceInstances().add(serviceInstance);
+		lookupKeyMap.put(ResourceKey.SERVICE_INSTANCE_ID, serviceInstance.getServiceInstanceId());
+		
+		return serviceInstance;
+	}
+	
+	public Customer setCustomer() {
+		if(gBBInput.getCustomer() != null) return gBBInput.getCustomer();
+		Customer customer = new Customer();
+		customer.setGlobalCustomerId("testGlobalCustomerId");
+		customer.setSubscriberType("testSubscriberType");
+
+		customer.setServiceSubscription(buildServiceSubscription());
+
+		gBBInput.setCustomer(customer);
+		
+		return customer;
+	}
+	
+	public Collection setCollection() {
+		Collection collection = new Collection();
+		collection.setId("testId");
+		
+		ServiceInstance serviceInstance = null;
+		
+		try {
+			serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
+		} catch(BBObjectNotFoundException e) {
+			serviceInstance = setServiceInstance();
+		}
+		
+		serviceInstance.setCollection(collection);
+		
+		return collection;
+	}
+	
+	public InstanceGroup setInstanceGroup() {
+		InstanceGroup instanceGroup = new InstanceGroup();
+		instanceGroup.setId("testId");
+		instanceGroup.setInstanceGroupFunction("testInstanceGroupFunction");
+		
+		Collection collection = null;
+		
+		try {
+			ServiceInstance serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
+			collection = serviceInstance.getCollection();
+			
+			if (collection == null) {
+				collection = setCollection();
+			}
+		} catch(BBObjectNotFoundException e) {
+			collection = setCollection();
+		}
+		
+		collection.setInstanceGroup(instanceGroup);
+		
+		return instanceGroup;
+	}
+	
+	public VpnBinding buildVpnBinding() {
+		vpnBindingCounter++;
+		
+		VpnBinding vpnBinding = new VpnBinding();
+		vpnBinding.setVpnId("testVpnId" + vpnBindingCounter);
+		vpnBinding.setVpnName("testVpnName" + vpnBindingCounter);
+		vpnBinding.setCustomerVpnId("testCustomerVpnId" + vpnBindingCounter);
+		
+		return vpnBinding;
+	}
+	
+	public VpnBinding setVpnBinding() {
+		VpnBinding vpnBinding = buildVpnBinding();
+		
+		Customer customer = gBBInput.getCustomer();
+
+		if(customer == null){
+			customer = buildCustomer();
+		}
+
+		customer.getVpnBindings().add(vpnBinding);
+		lookupKeyMap.put(ResourceKey.VPN_ID, vpnBinding.getVpnId());
+		
+		return vpnBinding;
+	}
+	
+	public InstanceGroup buildInstanceGroup() {
+		instanceGroupCounter++;
+		
+		InstanceGroup instanceGroup = new InstanceGroup();
+		instanceGroup.setId("testId" + instanceGroupCounter);
+		instanceGroup.setInstanceGroupFunction("testInstanceGroupFunction" + instanceGroupCounter);
+		
+		return instanceGroup;
+	}
+	
+	public L3Network buildL3Network() {
+		l3NetworkCounter++;
+		
+		L3Network network = new L3Network();
+		network.setNetworkId("testNetworkId" + l3NetworkCounter);
+		network.setNetworkName("testNetworkName" + l3NetworkCounter);
+		network.setNetworkType("testNetworkType" + l3NetworkCounter);
+		
+		ModelInfoNetwork modelInfoNetwork = new ModelInfoNetwork();
+		modelInfoNetwork.setModelInvariantUUID("testModelInvariantUUID" + l3NetworkCounter);
+		modelInfoNetwork.setModelName("testModelName" + l3NetworkCounter);
+		modelInfoNetwork.setModelVersion("testModelVersion" + l3NetworkCounter);
+		modelInfoNetwork.setModelUUID("testModelUUID" + l3NetworkCounter);
+		network.setModelInfoNetwork(modelInfoNetwork);
+		
+		return network;
+	}
+	
+	public L3Network setL3Network() {
+		L3Network network = buildL3Network();
+		
+		ServiceInstance serviceInstance = null;
+		
+		try {
+			serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
+		} catch(BBObjectNotFoundException e) {
+			serviceInstance = setServiceInstance();
+		}
+		
+		serviceInstance.getNetworks().add(network);
+		lookupKeyMap.put(ResourceKey.NETWORK_ID, network.getNetworkId());
+		
+		return network;
+	}
+	
+	public GenericVnf buildGenericVnf() {
+		genericVnfCounter++;
+		
+		GenericVnf genericVnf = new GenericVnf();
+		genericVnf.setVnfId("testVnfId" + genericVnfCounter);
+		genericVnf.setVnfName("testVnfName" + genericVnfCounter);
+		genericVnf.setVnfType("testVnfType" + genericVnfCounter);
+		
+		Platform platform = new Platform();
+		platform.setPlatformName("testPlatformName");
+		genericVnf.setPlatform(platform);
+		
+		LineOfBusiness lob = new LineOfBusiness();
+		lob.setLineOfBusinessName("testLineOfBusinessName");
+		genericVnf.setLineOfBusiness(lob);
+		
+		ModelInfoGenericVnf modelInfoGenericVnf = new ModelInfoGenericVnf();
+		modelInfoGenericVnf.setModelName("testModelName" + genericVnfCounter);
+		modelInfoGenericVnf.setModelCustomizationUuid("testModelCustomizationUUID" + genericVnfCounter);
+		modelInfoGenericVnf.setModelInvariantUuid("testModelInvariantUUID" + genericVnfCounter);
+		modelInfoGenericVnf.setModelVersion("testModelVersion" + genericVnfCounter);
+		modelInfoGenericVnf.setModelUuid("testModelUUID" + genericVnfCounter);
+		genericVnf.setModelInfoGenericVnf(modelInfoGenericVnf);
+		
+		return genericVnf;
+	}
+	
+	public GenericVnf setGenericVnf() {
+		GenericVnf genericVnf = buildGenericVnf();
+		
+		ServiceInstance serviceInstance = null;
+		
+		try {
+			serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
+		} catch(BBObjectNotFoundException e) {
+			serviceInstance = setServiceInstance();
+		}
+		
+		serviceInstance.getVnfs().add(genericVnf);
+		lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, genericVnf.getVnfId());
+		
+		return genericVnf;
+	}
+	
+	public VfModule buildVfModule() {
+		vfModuleCounter++;
+		
+		VfModule vfModule = new VfModule();
+		vfModule.setVfModuleId("testVfModuleId" + vfModuleCounter);
+		vfModule.setVfModuleName("testVfModuleName" + vfModuleCounter);
+		
+		ModelInfoVfModule modelInfoVfModule = new ModelInfoVfModule();
+		modelInfoVfModule.setModelInvariantUUID("testModelInvariantUUID" + vfModuleCounter);
+		modelInfoVfModule.setModelVersion("testModelVersion" + vfModuleCounter);
+		modelInfoVfModule.setModelUUID("testModelUUID" + vfModuleCounter);
+		modelInfoVfModule.setModelName("testModelName" + vfModuleCounter);
+		modelInfoVfModule.setModelCustomizationUUID("testModelCustomizationUUID" + vfModuleCounter);
+		vfModule.setModelInfoVfModule(modelInfoVfModule);
+		
+		return vfModule;
+	}
+	
+	public VfModule setVfModule() {
+		VfModule vfModule = buildVfModule();
+		
+		GenericVnf genericVnf = null;
+		
+		try {
+			genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
+		} catch(BBObjectNotFoundException e) {
+			genericVnf = setGenericVnf();
+		}
+		
+		genericVnf.getVfModules().add(vfModule);
+		lookupKeyMap.put(ResourceKey.VF_MODULE_ID, vfModule.getVfModuleId());
+		
+		return vfModule;
+	}
+	
+	public VolumeGroup buildVolumeGroup() {
+		volumeGroupCounter++;
+		
+		VolumeGroup volumeGroup = new VolumeGroup();
+		volumeGroup.setVolumeGroupId("testVolumeGroupId" + volumeGroupCounter);
+		volumeGroup.setVolumeGroupName("testVolumeGroupName" + volumeGroupCounter);
+		volumeGroup.setHeatStackId("testHeatStackId" + volumeGroupCounter);
+		
+		return volumeGroup;
+	}
+	
+	public VolumeGroup setVolumeGroup() {
+		VolumeGroup volumeGroup = buildVolumeGroup();
+		
+		GenericVnf genericVnf = null;
+		
+		try {
+			genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
+		} catch(BBObjectNotFoundException e) {
+			genericVnf = setGenericVnf();
+		}
+		
+		genericVnf.getVolumeGroups().add(volumeGroup);
+		lookupKeyMap.put(ResourceKey.VOLUME_GROUP_ID, volumeGroup.getVolumeGroupId());
+		
+		return volumeGroup;
+	}
+	
+	public Pnf buildPnf() {
+		pnfCounter++;
+		
+		Pnf pnf = new Pnf();
+		pnf.setPnfId("testPnfId" + pnfCounter);
+		pnf.setPnfName("testPnfName" + pnfCounter);
+		
+		return pnf;
+	}
+	
+	public ServiceProxy buildServiceProxy() {
+		serviceProxyCounter++;
+		
+        ServiceProxy serviceProxy = new ServiceProxy();
+        serviceProxy.setServiceInstance(buildServiceInstance());
+        serviceProxy.getServiceInstance().getVnfs().add(buildGenericVnf());
+        
+        Pnf primaryPnf = buildPnf();
+        primaryPnf.setRole("Primary");
+        serviceProxy.getServiceInstance().getPnfs().add(primaryPnf);
+        
+        Pnf secondaryPnf = buildPnf();
+        secondaryPnf.setRole("Secondary");
+        serviceProxy.getServiceInstance().getPnfs().add(secondaryPnf);
+        
+        return serviceProxy;
+	}
+	
+	public VpnBondingLink buildVpnBondingLink() {
+		vpnBondingLinkCounter++;
+		
+		VpnBondingLink vpnBondingLink = new VpnBondingLink();
+		vpnBondingLink.setVpnBondingLinkId("testVpnBondingLinkId" + vpnBondingLinkCounter);
+		
+		Configuration vnrConfiguration = buildConfiguration();
+		vnrConfiguration.setNetwork(buildL3Network());		
+		vpnBondingLink.setVnrConfiguration(vnrConfiguration);
+
+		vpnBondingLink.setVrfConfiguration(buildConfiguration());
+		
+        vpnBondingLink.setInfrastructureServiceProxy(buildServiceProxy());
+        
+        vpnBondingLink.setTransportServiceProxy(buildServiceProxy());
+		
+		return vpnBondingLink;
+	}
+	
+	public VpnBondingLink setVpnBondingLink() {
+		VpnBondingLink vpnBondingLink = buildVpnBondingLink();
+		
+		ServiceInstance serviceInstance = null;
+		
+		try {
+			serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
+		} catch(BBObjectNotFoundException e) {
+			serviceInstance = setServiceInstance();
+		}
+		
+		serviceInstance.getVpnBondingLinks().add(vpnBondingLink);
+		lookupKeyMap.put(ResourceKey.VPN_BONDING_LINK_ID, vpnBondingLink.getVpnBondingLinkId());
+
+
+		return vpnBondingLink;
+	}
+	
+	public Customer setAvpnCustomer() {
+		Customer customer = buildCustomer();
+		
+		gBBInput.setCustomer(customer);
+		
+		return customer;
+	}
+	
+	public ServiceProxy setServiceProxy(String uniqueIdentifier, String type) {
+		ServiceProxy serviceProxy = new ServiceProxy();
+		serviceProxy.setId("testProxyId" + uniqueIdentifier);
+		serviceProxy.setType(type);
+
+		ModelInfoServiceProxy modelInfo = new ModelInfoServiceProxy();
+		modelInfo.setModelInvariantUuid("testProxyModelInvariantUuid" + uniqueIdentifier);
+		modelInfo.setModelName("testProxyModelName" + uniqueIdentifier);
+		modelInfo.setModelUuid("testProxyModelUuid" + uniqueIdentifier);
+		modelInfo.setModelVersion("testProxyModelVersion" + uniqueIdentifier);
+
+		serviceProxy.setModelInfoServiceProxy(modelInfo);
+
+		return serviceProxy;
+	}
+
+	public AllottedResource setAllottedResource(String uniqueIdentifier) {
+		AllottedResource ar = new AllottedResource();
+		ar.setId("testAllottedResourceId" + uniqueIdentifier);
+
+		ModelInfoAllottedResource modelInfo = new ModelInfoAllottedResource();
+		modelInfo.setModelInvariantUuid("testProxyModelInvariantUuid" + uniqueIdentifier);
+		modelInfo.setModelName("testProxyModelName" + uniqueIdentifier);
+		modelInfo.setModelUuid("testProxyModelUuid" + uniqueIdentifier);
+		modelInfo.setModelVersion("testProxyModelVersion" + uniqueIdentifier);
+		
+		ar.setModelInfoAllottedResource(modelInfo);
+		
+		return ar;
+	}
+}
\ No newline at end of file
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/EmbeddedMariaDbConfig.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/EmbeddedMariaDbConfig.java
new file mode 100644
index 0000000..a29df9c
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/EmbeddedMariaDbConfig.java
@@ -0,0 +1,64 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so;
+import ch.vorburger.exec.ManagedProcessException;
+import ch.vorburger.mariadb4j.DBConfigurationBuilder;
+import ch.vorburger.mariadb4j.springframework.MariaDB4jSpringService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import javax.sql.DataSource;
+
+@Configuration
+@Profile({"test"})
+public class EmbeddedMariaDbConfig {
+
+    @Bean
+    MariaDB4jSpringService mariaDB4jSpringService() {
+    	MariaDB4jSpringService service = new MariaDB4jSpringService();
+    	
+    	
+    	service.getConfiguration().addArg("--lower_case_table_names=1");
+        return service;
+    }
+
+    @Bean
+    DataSource dataSource(MariaDB4jSpringService mariaDB4jSpringService,
+                          @Value("${mariaDB4j.databaseName}") String databaseName,
+                          @Value("${spring.datasource.username}") String datasourceUsername,
+                          @Value("${spring.datasource.password}") String datasourcePassword,
+                          @Value("${spring.datasource.driver-class-name}") String datasourceDriver) throws ManagedProcessException {
+        //Create our database with default root user and no password
+        mariaDB4jSpringService.getDB().createDB(databaseName);
+
+        DBConfigurationBuilder config = mariaDB4jSpringService.getConfiguration();
+
+        return DataSourceBuilder
+                .create()
+                .username(datasourceUsername)
+                .password(datasourcePassword)
+                .url(config.getURL(databaseName))
+                .driverClassName(datasourceDriver)
+                .build();
+    }
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/IntegrationTestSuite.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/IntegrationTestSuite.java
new file mode 100644
index 0000000..265b661
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/IntegrationTestSuite.java
@@ -0,0 +1,32 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so;
+import org.junit.runner.RunWith;
+
+import com.googlecode.junittoolbox.SuiteClasses;
+import com.googlecode.junittoolbox.WildcardPatternSuite;
+
+@RunWith(WildcardPatternSuite.class)
+@SuiteClasses({"**/*IT.class"})
+public class IntegrationTestSuite {
+  // the class remains empty,
+  // used only as a holder for the above annotations
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/SerializableChecker.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/SerializableChecker.java
new file mode 100644
index 0000000..97c17d5
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/SerializableChecker.java
@@ -0,0 +1,181 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so;
+
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public final class SerializableChecker
+{
+    public static class SerializationFailure
+    {
+        private final String mContainingClass;
+        private final String mMemberName;
+
+        public SerializationFailure(String inNonSerializableClass, String inMemberName)
+        {
+            mContainingClass = inNonSerializableClass;
+            mMemberName = inMemberName;
+        }
+
+        public String getContainingClass()
+        {
+            return mContainingClass;
+        }
+
+        public String getMemberName()
+        {
+            return mMemberName;
+        }
+
+        public String getBadMemberString()
+        {
+            if (mMemberName == null)
+                return mContainingClass;
+            return mContainingClass + "." + mMemberName;
+        }
+
+        @Override
+        public String toString()
+        {
+            return "SerializationFailure [mNonSerializableClass=" + mContainingClass + ", mMemberName=" + mMemberName + "]";
+        }
+    }
+
+    private static class SerializationCheckerData
+    {
+        private Set<Class<?>> mSerializableClasses;
+
+        SerializationCheckerData()
+        {
+            mSerializableClasses = new HashSet<Class<?>>();
+        }
+
+        boolean isAlreadyChecked(Class<?> inClass)
+        {
+            return mSerializableClasses.contains(inClass);
+        }
+
+        void addSerializableClass(Class<?> inClass)
+        {
+            mSerializableClasses.add(inClass);
+        }
+    }
+
+    private SerializableChecker()
+    { }
+
+    public static SerializationFailure isFullySerializable(Class<?> inClass)
+    {
+        if (!isSerializable(inClass))
+            return new SerializationFailure(inClass.getName(), null);
+
+        return isFullySerializable(inClass, new SerializationCheckerData());
+    }
+
+    private static SerializationFailure isFullySerializable(Class<?> inClass, SerializationCheckerData inSerializationCheckerData)
+    {
+        for (Field field : declaredFields(inClass))
+        {
+            Class<?> fieldDeclaringClass = field.getType();
+
+            if (field.getType() == Object.class)
+                continue;
+
+            if (Modifier.isStatic(field.getModifiers()))
+                continue;
+
+            if (field.isSynthetic())
+                continue;
+
+            if (fieldDeclaringClass.isInterface() || fieldDeclaringClass.isPrimitive())
+                continue;
+
+            if (Modifier.isAbstract(field.getType().getModifiers()))
+                continue;
+
+            if (inSerializationCheckerData.isAlreadyChecked(fieldDeclaringClass))
+                continue;
+
+            if (isSerializable(fieldDeclaringClass))
+            {
+                inSerializationCheckerData.addSerializableClass(inClass);
+
+                SerializationFailure failure = isFullySerializable(field.getType(), inSerializationCheckerData);
+                if (failure != null)
+                    return failure;
+                else
+                    continue;
+            }
+
+            if (Modifier.isTransient(field.getModifiers()))
+                continue;
+
+            return new SerializationFailure(field.getDeclaringClass().getName(), field.getName());
+        }
+        return null;
+    }
+
+    private static boolean isSerializable(Class<?> inClass)
+    {
+        Set<Class<?>> interfaces = getInterfaces(inClass);
+        if (interfaces == null)
+            return false;
+        boolean isSerializable = interfaces.contains(Serializable.class);
+        if (isSerializable)
+            return true;
+
+        for (Class<?> classInterface : interfaces)
+        {
+            if (isSerializable(classInterface))
+                return true;
+        }
+
+        if (inClass.getSuperclass() != null && isSerializable(inClass.getSuperclass()))
+            return true;
+
+        return false;
+    }
+
+    private static Set<Class<?>> getInterfaces(Class<?> inFieldDeclaringClass)
+    {
+        return new HashSet<Class<?>>(Arrays.asList(inFieldDeclaringClass.getInterfaces()));
+    }
+
+    private static List<Field> declaredFields(Class<?> inClass)
+    {
+        List<Field> fields = new ArrayList<Field>(Arrays.asList(inClass.getDeclaredFields()));
+
+        Class<?> parentClasses = inClass.getSuperclass();
+
+        if (parentClasses == null)
+            return fields;
+        fields.addAll(declaredFields(parentClasses));
+
+        return fields;
+        }
+    }
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/TestApplication.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/TestApplication.java
new file mode 100644
index 0000000..314cc0b
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/TestApplication.java
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so;
+
+import java.io.IOException;
+
+import javax.annotation.PreDestroy;
+
+import org.camunda.bpm.spring.boot.starter.annotation.EnableProcessApplication;
+import org.onap.so.bpmn.common.DefaultToShortClassNameBeanNameGenerator;
+import org.onap.so.db.request.data.repository.InfraActiveRequestsRepositoryImpl;
+import org.onap.so.requestsdb.RequestsDBHelper;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.ComponentScan.Filter;
+import org.springframework.context.annotation.FilterType;
+import org.springframework.context.annotation.Profile;
+
+import ch.vorburger.mariadb4j.MariaDB4jService;
+
+@SpringBootApplication
+@Profile("test")
+@EnableProcessApplication("MSO CommonBPMN Test Application")
+@ComponentScan(basePackages = {"org.onap.so"}, nameGenerator = DefaultToShortClassNameBeanNameGenerator.class, excludeFilters = {
+		@Filter(type = FilterType.ANNOTATION, classes = SpringBootApplication.class),
+		@Filter(type = FilterType.ASSIGNABLE_TYPE, classes = RequestsDBHelper.class),
+		@Filter(type = FilterType.ASSIGNABLE_TYPE, classes = InfraActiveRequestsRepositoryImpl.class) })
+public class TestApplication {
+	public static void main(String... args) {
+		SpringApplication.run(TestApplication.class, args);
+		System.getProperties().setProperty("mso.db", "MARIADB");
+		System.getProperties().setProperty("server.name", "Springboot");
+		
+		
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/BaseBPMNTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/BaseBPMNTest.java
new file mode 100644
index 0000000..f6d81ba
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/BaseBPMNTest.java
@@ -0,0 +1,245 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.so.bpmn;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.camunda.bpm.engine.RepositoryService;
+import org.camunda.bpm.engine.RuntimeService;
+import org.camunda.bpm.extension.mockito.mock.FluentJavaDelegateMock;
+import org.camunda.bpm.model.bpmn.Bpmn;
+import org.camunda.bpm.model.bpmn.BpmnModelInstance;
+import org.camunda.bpm.model.bpmn.builder.ServiceTaskBuilder;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.onap.so.TestApplication;
+import org.onap.so.bpmn.common.DelegateExecutionImpl;
+import org.onap.so.bpmn.infrastructure.aai.tasks.AAICommonTasks;
+import org.onap.so.bpmn.infrastructure.aai.tasks.AAICreateTasks;
+import org.onap.so.bpmn.infrastructure.aai.tasks.AAIDeleteTasks;
+import org.onap.so.bpmn.infrastructure.aai.tasks.AAIQueryTasks;
+import org.onap.so.bpmn.infrastructure.aai.tasks.AAIUpdateTasks;
+import org.onap.so.bpmn.infrastructure.adapter.network.tasks.NetworkAdapterCreateTasks;
+import org.onap.so.bpmn.infrastructure.adapter.network.tasks.NetworkAdapterDeleteTasks;
+import org.onap.so.bpmn.infrastructure.adapter.network.tasks.NetworkAdapterUpdateTasks;
+import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterCreateTasks;
+import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterDeleteTasks;
+import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterImpl;
+import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignNetwork;
+import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignNetworkBBUtils;
+import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignVnf;
+import org.onap.so.bpmn.infrastructure.flowspecific.tasks.CreateNetwork;
+import org.onap.so.bpmn.infrastructure.flowspecific.tasks.CreateNetworkCollection;
+import org.onap.so.bpmn.infrastructure.flowspecific.tasks.UnassignNetworkBB;
+import org.onap.so.bpmn.infrastructure.flowspecific.tasks.UnassignVnf;
+import org.onap.so.bpmn.infrastructure.sdnc.tasks.SDNCActivateTasks;
+import org.onap.so.bpmn.infrastructure.sdnc.tasks.SDNCAssignTasks;
+import org.onap.so.bpmn.infrastructure.sdnc.tasks.SDNCChangeAssignTasks;
+import org.onap.so.bpmn.infrastructure.sdnc.tasks.SDNCDeactivateTasks;
+import org.onap.so.bpmn.infrastructure.sdnc.tasks.SDNCQueryTasks;
+import org.onap.so.bpmn.infrastructure.sdnc.tasks.SDNCUnassignTasks;
+import org.onap.so.bpmn.infrastructure.workflow.tasks.OrchestrationStatusValidator;
+import org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowAction;
+import org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionBBTasks;
+import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetup;
+import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
+import org.onap.so.bpmn.servicedecomposition.tasks.ExecuteBuildingBlockRainyDay;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.embedded.LocalServerPort;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.http.HttpHeaders;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@ActiveProfiles("test")
+public abstract class BaseBPMNTest {
+	@Autowired
+	protected RuntimeService runtimeService;
+
+	@Autowired
+	private RepositoryService repositoryService;
+	
+	protected Map<String, Object> variables = new HashMap<>();
+	
+	protected List<String> mockedSubprocessList = new ArrayList<>();
+
+	protected TestRestTemplate restTemplate = new TestRestTemplate();
+
+	protected HttpHeaders headers = new HttpHeaders();
+
+	@MockBean
+	protected AAIUpdateTasks aaiUpdateTasks;
+
+	@MockBean
+	protected AAICreateTasks aaiCreateTasks;
+
+	@MockBean
+	protected AAIQueryTasks aaiQueryTasks;
+
+	@MockBean
+	protected AAIDeleteTasks aaiDeleteTasks;
+
+	@MockBean
+	protected SDNCActivateTasks sdncActivateTasks;
+
+	@MockBean
+	protected SDNCAssignTasks sdncAssignTasks;
+
+	@MockBean
+	protected SDNCUnassignTasks sdncUnassignTasks;
+
+	@MockBean
+	protected SDNCDeactivateTasks sdncDeactivateTasks;
+
+	@MockBean
+	protected SDNCQueryTasks sdncQueryTasks;
+
+	@MockBean
+	protected SDNCChangeAssignTasks sdncChangeAssignTasks;
+
+	@MockBean
+	protected NetworkAdapterDeleteTasks networkAdapterDeleteTasks;
+
+	@MockBean
+	protected NetworkAdapterUpdateTasks networkAdapterUpdateTasks;
+
+	@MockBean
+	protected VnfAdapterCreateTasks vnfAdapterCreateTasks;
+
+	@MockBean
+	protected NetworkAdapterCreateTasks networkAdapterCreateTasks;
+
+	@MockBean
+	protected CreateNetwork createNetwork;
+
+	@MockBean
+	protected AssignNetworkBBUtils assignNetworkBBUtils;
+	
+	@MockBean
+	protected AssignNetwork assignNetwork;
+
+	@MockBean
+	protected CreateNetworkCollection createNetworkCollection;
+
+	@MockBean
+	protected VnfAdapterDeleteTasks vnfAdapterDeleteTasks;
+
+	@MockBean
+	protected AAICommonTasks aaiCommonTasks;
+
+	@MockBean
+	protected AssignVnf assignVnf;
+
+	@MockBean
+	protected UnassignVnf unassignVnf;
+
+	@MockBean
+	protected VnfAdapterImpl vnfAdapterImpl;
+
+	@MockBean
+	protected UnassignNetworkBB unassignNetworkBB;
+
+	@MockBean
+	protected OrchestrationStatusValidator orchestrationStatusValidator;
+	
+	@MockBean
+	protected BBInputSetup bbInputSetup;
+	
+	@MockBean
+	protected BBInputSetupUtils bbInputSetupUtils;
+	
+	@MockBean
+	protected ExecuteBuildingBlockRainyDay executeBuildingBlockRainyDay;
+	
+	@MockBean
+	protected WorkflowAction workflowAction;
+
+	@MockBean
+	protected WorkflowActionBBTasks workflowActionBBTasks;
+	
+	@LocalServerPort
+	private int port;
+
+	protected String createURLWithPort(String uri) {
+		return "http://localhost:" + port + uri;
+	}
+
+	@Before
+	public void baseBefore() {
+		variables.put("gBuildingBlockExecution", new DelegateExecutionImpl(new HashMap<>()));
+	}
+	
+	@After
+	public void baseAfter() {
+		for (String deploymentId : mockedSubprocessList) {
+			repositoryService.deleteDeployment(deploymentId);
+		}
+		mockedSubprocessList.clear();
+	}
+	
+	/**
+	 * Create and deploy a process model with one logger delegate as service task.
+	 *
+	 * @param origProcessKey
+	 *            key to call
+	 * @param mockProcessName
+	 *            process name
+	 * @param fileName
+	 *            file name without extension
+	 */
+	protected void mockSubprocess(String origProcessKey, String mockProcessName, String fileName) {
+		mockSubprocess(origProcessKey, mockProcessName, fileName, new HashMap<String, String>());
+	}
+
+	/**
+	 * Create and deploy a process model with one logger delegate as service task.
+	 *
+	 * @param origProcessKey
+	 *            key to call
+	 * @param mockProcessName
+	 *            process name
+	 * @param fileName
+	 *            file name without extension
+	 * @param outParam
+	 *            output parameters
+	 */
+	protected void mockSubprocess(String origProcessKey, String mockProcessName, String fileName, Map<String, String> outParam) {
+		ServiceTaskBuilder builder = Bpmn
+				.createExecutableProcess(origProcessKey).name(mockProcessName)
+				.startEvent().name("Start_Event")
+				.serviceTask().name("Mock_Delegate")
+				.camundaClass(FluentJavaDelegateMock.class);
+
+		for (String key : outParam.keySet()) {
+			builder.camundaOutputParameter(key, outParam.get(key));
+		}
+		
+		BpmnModelInstance modelInstance = builder.endEvent().name("End_Event").done();
+		mockedSubprocessList.add(repositoryService.createDeployment().addModelInstance(fileName + ".bpmn", modelInstance).deploy().getId());
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/buildingblock/SniroHomingV2BBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/buildingblock/SniroHomingV2BBTest.java
new file mode 100644
index 0000000..c05d42c
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/buildingblock/SniroHomingV2BBTest.java
@@ -0,0 +1,74 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.buildingblock;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.onap.so.BaseTest;
+import org.onap.so.bpmn.buildingblock.SniroHomingV2;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.springframework.boot.test.mock.mockito.MockBean;
+
+
+@Ignore //these test run locally but fail when ran in conjunction with others in jenkins
+public class SniroHomingV2BBTest extends BaseTest{
+
+	@MockBean
+	protected SniroHomingV2 sniroHoming;
+
+	@Test
+	public void testHomingV2_success(){
+		mockSubprocess("ReceiveWorkflowMessage", "Mock ReceiveWorkflowMessage", "GenericStub");
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("HomingV2", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("start", "callSniro", "callReceiveAsync", "processSolution", "end");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void testHomingV2_error_bpmnError(){
+		doThrow(new BpmnError("MSOWorkflowException")).when(sniroHoming).callSniro(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("HomingV2", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("start", "catchBpmnError", "processBpmnError", "endBpmnError")
+				.hasNotPassed("callReceiveAsync");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void testHomingV2_error_javaException(){
+		doThrow(new RuntimeException("Test")).when(sniroHoming).callSniro(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("HomingV2", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("start", "catchJavaException", "processJavaException", "endJavaException")
+				.hasNotPassed("callReceiveAsync");
+		assertThat(pi).isEnded();
+	}
+
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/buildingblock/SniroHomingV2Test.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/buildingblock/SniroHomingV2Test.java
new file mode 100644
index 0000000..bed5915
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/buildingblock/SniroHomingV2Test.java
@@ -0,0 +1,498 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.buildingblock;
+
+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.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Matchers.isA;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.onap.so.BaseTest;
+import org.onap.so.bpmn.mock.FileUtil;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.AllottedResource;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceProxy;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBondingLink;
+import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
+import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestParameters;
+import org.onap.so.bpmn.servicedecomposition.homingobjects.Candidate;
+import org.onap.so.bpmn.servicedecomposition.homingobjects.CandidateType;
+import org.onap.so.client.exception.BadResponseException;
+import org.onap.so.client.sniro.beans.SniroManagerRequest;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+
+public class SniroHomingV2Test extends BaseTest{
+
+	private ServiceInstance serviceInstance;
+
+	private RequestContext requestContext;
+
+	private Customer customer;
+	ObjectMapper mapper = new ObjectMapper();
+
+	private static final String RESOURCE_PATH = "__files/BuildingBlocks/SniroHoming/";
+
+
+    String mockResponse = "{\"transactionId\": \"123456789\", \"requestId\": \"1234\", \"statusMessage\": \"corys cool\", \"requestStatus\": \"accepted\"}";
+
+	@Before
+	public void before() {
+		serviceInstance = setServiceInstance();
+		customer = setCustomer();
+		customer.setGlobalCustomerId("testCustomerId");
+		customer.setSubscriberName("testCustomerName");
+		customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
+
+		requestContext = setRequestContext();
+		requestContext.setMsoRequestId("testRequestId");
+		RequestParameters params = new RequestParameters();
+		params.setaLaCarte(false);
+		params.setSubscriptionServiceType("iptollfree");
+		requestContext.setRequestParameters(params);
+	}
+
+	public void beforeVpnBondingLink(String id){
+		VpnBondingLink bondingLink = new VpnBondingLink();
+		bondingLink.setVpnBondingLinkId("testVpnBondingId" + id);
+		bondingLink.getServiceProxies().add(setServiceProxy("1", "transport"));
+		ServiceProxy sp2 = setServiceProxy("2", "infrastructure");
+		Candidate requiredCandidate = new Candidate();
+		requiredCandidate.setCandidateType(CandidateType.VNF_ID);
+		List<String> c = new ArrayList<String>();
+		c.add("testVnfId");
+		requiredCandidate.setCandidates(c);
+		sp2.addRequiredCandidates(requiredCandidate);
+		bondingLink.getServiceProxies().add(sp2);
+		serviceInstance.getVpnBondingLinks().add(bondingLink);
+
+	}
+
+	public void beforeAllottedResource(){
+		serviceInstance.getAllottedResources().add(setAllottedResource("1"));
+		serviceInstance.getAllottedResources().add(setAllottedResource("2"));
+		serviceInstance.getAllottedResources().add(setAllottedResource("3"));
+	}
+
+	public void beforeVnf(){
+		setGenericVnf();
+	}
+
+    @Test(expected = Test.None.class)
+	public void testCallSniro_success_1VpnLink() throws BadResponseException, IOException{
+    	beforeVpnBondingLink("1");
+
+        stubFor(post(urlEqualTo("/sniro/api/placement/v2"))
+    			.willReturn(aResponse().withStatus(200)
+                .withHeader("Content-Type", "application/json")
+                .withBody(mockResponse)));
+
+		sniroHoming.callSniro(execution);
+
+		String request = FileUtil.readResourceFile(RESOURCE_PATH + "SniroManagerRequest1Vpn.json");
+		request = request.replace("28080", wireMockPort);
+
+		ArgumentCaptor<SniroManagerRequest> argument = ArgumentCaptor.forClass(SniroManagerRequest.class);
+		verify(sniroClient, times(1)).postDemands(argument.capture());
+		assertEquals(request, argument.getValue().toJsonString());
+	}
+
+	@Test
+	public void testCallSniro_success_3VpnLink() throws JsonProcessingException, BadResponseException{
+    	beforeVpnBondingLink("1");
+    	beforeVpnBondingLink("2");
+    	beforeVpnBondingLink("3");
+
+        stubFor(post(urlEqualTo("/sniro/api/placement/v2"))
+    			.willReturn(aResponse().withStatus(200)
+                .withHeader("Content-Type", "application/json")
+                .withBody(mockResponse)));
+
+		sniroHoming.callSniro(execution);
+
+		String request = FileUtil.readResourceFile(RESOURCE_PATH + "SniroManagerRequest3Vpn.json");
+		request = request.replace("28080", wireMockPort);
+
+		ArgumentCaptor<SniroManagerRequest> argument = ArgumentCaptor.forClass(SniroManagerRequest.class);
+		verify(sniroClient, times(1)).postDemands(argument.capture());
+		assertEquals(request, argument.getValue().toJsonString());
+	}
+
+	@Test
+	public void testCallSniro_success_3Allotteds() throws BadResponseException, JsonProcessingException{
+		beforeAllottedResource();
+
+        stubFor(post(urlEqualTo("/sniro/api/placement/v2"))
+    			.willReturn(aResponse().withStatus(200)
+                .withHeader("Content-Type", "application/json")
+                .withBody(mockResponse)));
+
+		sniroHoming.callSniro(execution);
+
+		String request = FileUtil.readResourceFile(RESOURCE_PATH + "SniroManagerRequest3AR.json");
+		request = request.replace("28080", wireMockPort);
+
+		ArgumentCaptor<SniroManagerRequest> argument = ArgumentCaptor.forClass(SniroManagerRequest.class);
+		verify(sniroClient, times(1)).postDemands(argument.capture());
+		assertEquals(request, argument.getValue().toJsonString());
+	}
+
+	@Test
+	public void testCallSniro_success_1Vnf() throws JsonProcessingException, BadResponseException{
+		beforeVnf();
+
+        stubFor(post(urlEqualTo("/sniro/api/placement/v2"))
+    			.willReturn(aResponse().withStatus(200)
+                .withHeader("Content-Type", "application/json")
+                .withBody(mockResponse)));
+
+		sniroHoming.callSniro(execution);
+
+		ArgumentCaptor<SniroManagerRequest> argument = ArgumentCaptor.forClass(SniroManagerRequest.class);
+		verify(sniroClient, times(1)).postDemands(argument.capture());
+		//TODO assertEquals(request, argument.getValue().toJsonString());
+	}
+
+	@Test
+	public void testCallSniro_success_3Allotteds1Vnf() throws JsonProcessingException, BadResponseException{
+		beforeAllottedResource();
+		beforeVnf();
+
+        stubFor(post(urlEqualTo("/sniro/api/placement/v2"))
+    			.willReturn(aResponse().withStatus(200)
+                .withHeader("Content-Type", "application/json")
+                .withBody(mockResponse)));
+
+		sniroHoming.callSniro(execution);
+
+		verify(sniroClient, times(1)).postDemands(isA(SniroManagerRequest.class));
+	}
+
+	@Test(expected = Test.None.class)
+	public void testProcessSolution_success_1VpnLink_1Solution(){
+    	beforeVpnBondingLink("1");
+
+		JSONObject asyncResponse = new JSONObject();
+		asyncResponse.put("transactionId", "testRequestId").put("requestId", "testRequestId").put("requestState", "completed");
+		JSONArray solution1 = new JSONArray();
+		solution1.put(new JSONObject().put("serviceResourceId", "testProxyId1").put("inventoryType", "service").put("solution", new JSONObject()
+				.put("identifierType", "serviceInstanceId").put("identifiers", new JSONArray().put("testServiceInstanceId1")))
+				.put("assignmentInfo", new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "False"))
+						.put(new JSONObject().put("key", "cloudOwner").put("value", "aic")).put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName1"))
+						.put(new JSONObject().put("key", "aicClli").put("value", "testAicClli1")).put(new JSONObject().put("key", "aicVersion").put("value", "3"))
+						.put(new JSONObject().put("key", "vnfId").put("value", "testVnfId1")).put(new JSONObject().put("key", "cloudRegionId").put("value", "testSloudRegionId1"))));
+		solution1.put(new JSONObject().put("serviceResourceId", "testProxyId2").put("inventoryType", "service").put("solution", new JSONObject()
+				.put("identifierType", "serviceInstanceId").put("identifiers", new JSONArray().put("testServiceInstanceId2")))
+				.put("assignmentInfo", new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "False"))
+						.put(new JSONObject().put("key", "cloudOwner").put("value", "aic")).put(new JSONObject().put("key", "primaryPnfName").put("value", "testPrimaryPnfName2"))
+						.put(new JSONObject().put("key", "aicClli").put("value", "testAicClli2")).put(new JSONObject().put("key", "aicVersion").put("value", "3"))
+						.put(new JSONObject().put("key", "secondaryPnfName").put("value", "testSecondaryPnfName2")).put(new JSONObject().put("key", "cloudRegionId").put("value", "testSloudRegionId2"))));
+
+		asyncResponse.put("solutions", new JSONObject().put("placementSolutions", new JSONArray().put(solution1)).put("licenseSolutions", new JSONArray()));
+
+		sniroHoming.processSolution(execution, asyncResponse.toString());
+
+		ServiceInstance si = execution.getGeneralBuildingBlock().getCustomer().getServiceSubscription().getServiceInstances().get(0);
+
+		assertFalse(si.getVpnBondingLinks().isEmpty());
+		VpnBondingLink link = si.getVpnBondingLinks().get(0);
+		assertNotNull(link);
+		assertFalse(link.getServiceProxies().isEmpty());
+
+		assertEquals("testServiceInstanceId1", link.getServiceProxy("testProxyId1").getServiceInstance().getServiceInstanceId());
+		assertNotNull(link.getServiceProxy("testProxyId1").getServiceInstance().getSolutionInfo());
+		assertEquals("testVnfHostName1", link.getServiceProxy("testProxyId1").getServiceInstance().getVnfs().get(0).getVnfName());
+
+		assertEquals("testServiceInstanceId2", link.getServiceProxy("testProxyId2").getServiceInstance().getServiceInstanceId());
+		assertNotNull(link.getServiceProxy("testProxyId2").getServiceInstance().getSolutionInfo());
+		assertFalse(link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().isEmpty());
+		assertEquals("testPrimaryPnfName2", link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(0).getPnfName());
+		assertEquals("primary", link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(0).getRole());
+		assertEquals("testSecondaryPnfName2", link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(1).getPnfName());
+		assertEquals("secondary", link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(1).getRole());
+	}
+
+	@Test
+	public void testProcessSolution_success_1VpnLink_2Solutions(){
+    	beforeVpnBondingLink("1");
+
+		JSONObject asyncResponse = new JSONObject();
+		asyncResponse.put("transactionId", "testRequestId").put("requestId", "testRequestId").put("requestState", "completed");
+		JSONArray solution1 = new JSONArray();
+		solution1.put(new JSONObject().put("serviceResourceId", "testProxyId1").put("inventoryType", "service").put("solution", new JSONObject()
+				.put("identifierType", "serviceInstanceId").put("identifiers", new JSONArray().put("testServiceInstanceId1")))
+				.put("assignmentInfo", new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "False"))
+						.put(new JSONObject().put("key", "cloudOwner").put("value", "aic")).put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName1"))
+						.put(new JSONObject().put("key", "aicClli").put("value", "testAicClli1")).put(new JSONObject().put("key", "aicVersion").put("value", "3"))
+						.put(new JSONObject().put("key", "vnfId").put("value", "testVnfId1")).put(new JSONObject().put("key", "cloudRegionId").put("value", "testSloudRegionId1"))));
+		solution1.put(new JSONObject().put("serviceResourceId", "testProxyId2").put("inventoryType", "service").put("solution", new JSONObject()
+				.put("identifierType", "serviceInstanceId").put("identifiers", new JSONArray().put("testServiceInstanceId2")))
+				.put("assignmentInfo", new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "False"))
+						.put(new JSONObject().put("key", "cloudOwner").put("value", "aic")).put(new JSONObject().put("key", "primaryPnfName").put("value", "testPrimaryPnfName2"))
+						.put(new JSONObject().put("key", "aicClli").put("value", "testAicClli2")).put(new JSONObject().put("key", "aicVersion").put("value", "3"))
+						.put(new JSONObject().put("key", "secondaryPnfName").put("value", "testSecondaryPnfName2")).put(new JSONObject().put("key", "cloudRegionId").put("value", "testSloudRegionId2"))));
+
+		JSONArray solution2 = new JSONArray();
+		solution2.put(new JSONObject().put("serviceResourceId", "testProxyId1").put("inventoryType", "service").put("solution", new JSONObject()
+				.put("identifierType", "serviceInstanceId").put("identifiers", new JSONArray().put("testServiceInstanceId3")))
+				.put("assignmentInfo", new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "False"))
+						.put(new JSONObject().put("key", "cloudOwner").put("value", "aic")).put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName3"))
+						.put(new JSONObject().put("key", "aicClli").put("value", "testAicClli3")).put(new JSONObject().put("key", "aicVersion").put("value", "3"))
+						.put(new JSONObject().put("key", "vnfId").put("value", "testVnfId3")).put(new JSONObject().put("key", "cloudRegionId").put("value", "testSloudRegionId3"))));
+		solution2.put(new JSONObject().put("serviceResourceId", "testProxyId2").put("inventoryType", "service").put("solution", new JSONObject()
+				.put("identifierType", "serviceInstanceId").put("identifiers", new JSONArray().put("testServiceInstanceId4")))
+				.put("assignmentInfo", new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "False"))
+						.put(new JSONObject().put("key", "cloudOwner").put("value", "aic")).put(new JSONObject().put("key", "primaryPnfName").put("value", "testPrimaryPnfName4"))
+						.put(new JSONObject().put("key", "aicClli").put("value", "testAicClli4")).put(new JSONObject().put("key", "aicVersion").put("value", "3"))
+						.put(new JSONObject().put("key", "secondaryPnfName").put("value", "testSecondaryPnfName4")).put(new JSONObject().put("key", "cloudRegionId").put("value", "testSloudRegionId4"))));
+
+		asyncResponse.put("solutions", new JSONObject().put("placementSolutions", new JSONArray().put(solution1).put(solution2)).put("licenseSolutions", new JSONArray()));
+
+		sniroHoming.processSolution(execution, asyncResponse.toString());
+
+		ServiceInstance si = execution.getGeneralBuildingBlock().getCustomer().getServiceSubscription().getServiceInstances().get(0);
+
+		assertFalse(si.getVpnBondingLinks().isEmpty());
+		VpnBondingLink link = si.getVpnBondingLinks().get(0);
+		VpnBondingLink link2 = si.getVpnBondingLinks().get(1);
+		assertNotNull(link);
+		assertFalse(link.getServiceProxies().isEmpty());
+
+		assertEquals("testServiceInstanceId1", link.getServiceProxy("testProxyId1").getServiceInstance().getServiceInstanceId());
+		assertNotNull(link.getServiceProxy("testProxyId1").getServiceInstance().getSolutionInfo());
+		assertEquals("testVnfHostName1", link.getServiceProxy("testProxyId1").getServiceInstance().getVnfs().get(0).getVnfName());
+
+		assertEquals("testServiceInstanceId2", link.getServiceProxy("testProxyId2").getServiceInstance().getServiceInstanceId());
+		assertNotNull(link.getServiceProxy("testProxyId2").getServiceInstance().getSolutionInfo());
+		assertFalse(link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().isEmpty());
+		assertEquals("testPrimaryPnfName2", link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(0).getPnfName());
+		assertEquals("primary", link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(0).getRole());
+		assertEquals("testSecondaryPnfName2", link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(1).getPnfName());
+		assertEquals("secondary", link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(1).getRole());
+
+		assertNotNull(link2);
+		assertFalse(link2.getServiceProxies().isEmpty());
+
+		assertEquals("testServiceInstanceId3", link2.getServiceProxy("testProxyId1").getServiceInstance().getServiceInstanceId());
+		assertNotNull(link2.getServiceProxy("testProxyId1").getServiceInstance().getSolutionInfo());
+		assertEquals("testVnfHostName3", link2.getServiceProxy("testProxyId1").getServiceInstance().getVnfs().get(0).getVnfName());
+
+		assertEquals("testServiceInstanceId4", link2.getServiceProxy("testProxyId2").getServiceInstance().getServiceInstanceId());
+		assertNotNull(link2.getServiceProxy("testProxyId2").getServiceInstance().getSolutionInfo());
+		assertFalse(link2.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().isEmpty());
+		assertEquals("testPrimaryPnfName4", link2.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(0).getPnfName());
+		assertEquals("primary", link2.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(0).getRole());
+		assertEquals("testSecondaryPnfName4", link2.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(1).getPnfName());
+		assertEquals("secondary", link2.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(1).getRole());
+
+	}
+
+	@Test
+	public void testProcessSolution_success_3VpnLink_2Solutions(){
+		//TODO
+	}
+
+	@Test
+	public void testProcessSolution_success_3Allotteds_1Solution(){
+		beforeAllottedResource();
+
+		JSONObject asyncResponse = new JSONObject();
+		asyncResponse.put("transactionId", "testRequestId").put("requestId", "testRequestId").put("requestState", "completed");
+		JSONArray solution1 = new JSONArray();
+		solution1.put(new JSONObject().put("serviceResourceId", "testAllottedResourceId1").put("inventoryType", "service").put("solution", new JSONObject()
+				.put("identifierType", "serviceInstanceId").put("identifiers", new JSONArray().put("testServiceInstanceId1")))
+				.put("assignmentInfo", new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "True"))
+						.put(new JSONObject().put("key", "cloudOwner").put("value", "aic")).put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName1"))
+						.put(new JSONObject().put("key", "aicClli").put("value", "testAicClli1")).put(new JSONObject().put("key", "aicVersion").put("value", "3"))
+						.put(new JSONObject().put("key", "vnfId").put("value", "testVnfId1")).put(new JSONObject().put("key", "cloudRegionId").put("value", "testCloudRegionId1"))));
+		solution1.put(new JSONObject().put("serviceResourceId", "testAllottedResourceId2").put("inventoryType", "service").put("solution", new JSONObject()
+				.put("identifierType", "serviceInstanceId").put("identifiers", new JSONArray().put("testServiceInstanceId2")))
+				.put("assignmentInfo", new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "True"))
+						.put(new JSONObject().put("key", "cloudOwner").put("value", "aic")).put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName2"))
+						.put(new JSONObject().put("key", "aicClli").put("value", "testAicClli2")).put(new JSONObject().put("key", "aicVersion").put("value", "3"))
+						.put(new JSONObject().put("key", "vnfId").put("value", "testVnfId1")).put(new JSONObject().put("key", "cloudRegionId").put("value", "testCloudRegionId2"))));
+		solution1.put(new JSONObject().put("serviceResourceId", "testAllottedResourceId3").put("inventoryType", "cloud").put("solution", new JSONObject()
+				.put("identifierType", "cloudRegionId").put("identifiers", new JSONArray().put("testCloudRegionId3")))
+				.put("assignmentInfo", new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "True"))
+						.put(new JSONObject().put("key", "cloudOwner").put("value", "aic"))
+						.put(new JSONObject().put("key", "aicClli").put("value", "testAicClli2")).put(new JSONObject().put("key", "aicVersion").put("value", "3"))));
+
+		asyncResponse.put("solutions", new JSONObject().put("placementSolutions", new JSONArray().put(solution1)).put("licenseSolutions", new JSONArray()));
+
+		sniroHoming.processSolution(execution, asyncResponse.toString());
+
+		ServiceInstance si = execution.getGeneralBuildingBlock().getCustomer().getServiceSubscription().getServiceInstances().get(0);
+
+		assertFalse(si.getAllottedResources().isEmpty());
+		AllottedResource ar = si.getAllottedResources().get(0);
+		assertNotNull(ar);
+		assertEquals("testServiceInstanceId1", ar.getParentServiceInstance().getServiceInstanceId());
+		assertNotNull(ar.getParentServiceInstance().getSolutionInfo());
+		assertEquals("testVnfHostName1", ar.getParentServiceInstance().getVnfs().get(0).getVnfName());
+
+		AllottedResource ar2 = si.getAllottedResources().get(1);
+		assertNotNull(ar2);
+		assertEquals("testServiceInstanceId2", ar2.getParentServiceInstance().getServiceInstanceId());
+		assertNotNull(ar2.getParentServiceInstance().getSolutionInfo());
+		assertEquals("testVnfHostName2", ar2.getParentServiceInstance().getVnfs().get(0).getVnfName());
+
+		AllottedResource ar3 = si.getAllottedResources().get(2);
+		assertNotNull(ar3);
+		assertNotNull(ar3.getParentServiceInstance().getSolutionInfo());
+		assertEquals("testCloudRegionId3", ar3.getParentServiceInstance().getSolutionInfo().getTargetedCloudRegion().getLcpCloudRegionId());
+	}
+
+	@Test
+	public void testProcessSolution_success_3Allotteds1Vnf_1Solution(){
+		beforeVnf();
+		beforeAllottedResource();
+
+		JSONObject asyncResponse = new JSONObject();
+		asyncResponse.put("transactionId", "testRequestId").put("requestId", "testRequestId").put("requestState", "completed");
+		JSONArray solution1 = new JSONArray();
+		JSONArray licenseSolution = new JSONArray();
+		solution1.put(new JSONObject().put("serviceResourceId", "testAllottedResourceId1").put("inventoryType", "service").put("solution", new JSONObject()
+				.put("identifierType", "serviceInstanceId").put("identifiers", new JSONArray().put("testServiceInstanceId1")))
+				.put("assignmentInfo", new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "True"))
+						.put(new JSONObject().put("key", "cloudOwner").put("value", "aic")).put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName1"))
+						.put(new JSONObject().put("key", "aicClli").put("value", "testAicClli1")).put(new JSONObject().put("key", "aicVersion").put("value", "3"))
+						.put(new JSONObject().put("key", "vnfId").put("value", "testVnfId1")).put(new JSONObject().put("key", "cloudRegionId").put("value", "testCloudRegionId1"))));
+		solution1.put(new JSONObject().put("serviceResourceId", "testAllottedResourceId2").put("inventoryType", "service").put("solution", new JSONObject()
+				.put("identifierType", "serviceInstanceId").put("identifiers", new JSONArray().put("testServiceInstanceId2")))
+				.put("assignmentInfo", new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "True"))
+						.put(new JSONObject().put("key", "cloudOwner").put("value", "aic")).put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName2"))
+						.put(new JSONObject().put("key", "aicClli").put("value", "testAicClli2")).put(new JSONObject().put("key", "aicVersion").put("value", "3"))
+						.put(new JSONObject().put("key", "vnfId").put("value", "testVnfId1")).put(new JSONObject().put("key", "cloudRegionId").put("value", "testCloudRegionId2"))));
+		solution1.put(new JSONObject().put("serviceResourceId", "testAllottedResourceId3").put("inventoryType", "cloud").put("solution", new JSONObject()
+				.put("identifierType", "cloudRegionId").put("identifiers", new JSONArray().put("testCloudRegionId3")))
+				.put("assignmentInfo", new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "True"))
+						.put(new JSONObject().put("key", "cloudOwner").put("value", "aic")).put(new JSONObject().put("key", "aicClli").put("value", "testAicClli2"))
+						.put(new JSONObject().put("key", "aicVersion").put("value", "3"))));
+
+		licenseSolution.put(
+				new JSONObject().put("serviceResourceId", "testVnfId1").put("entitlementPoolUUID", new JSONArray().put("f1d563e8-e714-4393-8f99-cc480144a05e").put("j1d563e8-e714-4393-8f99-cc480144a05e"))
+						.put("licenseKeyGroupUUID", new JSONArray().put("s1d563e8-e714-4393-8f99-cc480144a05e").put("b1d563e8-e714-4393-8f99-cc480144a05e")));
+
+		asyncResponse.put("solutions", new JSONObject().put("placementSolutions", new JSONArray().put(solution1)).put("licenseSolutions", licenseSolution));
+
+		sniroHoming.processSolution(execution, asyncResponse.toString());
+
+		ServiceInstance si = execution.getGeneralBuildingBlock().getCustomer().getServiceSubscription().getServiceInstances().get(0);
+
+		assertFalse(si.getAllottedResources().isEmpty());
+		AllottedResource ar = si.getAllottedResources().get(0);
+		assertNotNull(ar);
+		assertEquals("testServiceInstanceId1", ar.getParentServiceInstance().getServiceInstanceId());
+		assertNotNull(ar.getParentServiceInstance().getSolutionInfo());
+		assertEquals("testVnfHostName1", ar.getParentServiceInstance().getVnfs().get(0).getVnfName());
+
+		AllottedResource ar2 = si.getAllottedResources().get(1);
+		assertNotNull(ar2);
+		assertEquals("testServiceInstanceId2", ar2.getParentServiceInstance().getServiceInstanceId());
+		assertNotNull(ar2.getParentServiceInstance().getSolutionInfo());
+		assertEquals("testVnfHostName2", ar2.getParentServiceInstance().getVnfs().get(0).getVnfName());
+
+		AllottedResource ar3 = si.getAllottedResources().get(2);
+		assertNotNull(ar3);
+		assertNotNull(ar3.getParentServiceInstance().getSolutionInfo());
+		assertEquals("testCloudRegionId3", ar3.getParentServiceInstance().getSolutionInfo().getTargetedCloudRegion().getLcpCloudRegionId());
+
+		GenericVnf vnf = si.getVnfs().get(0);
+		assertNotNull(vnf);
+		assertNotNull(vnf.getLicense());
+		assertEquals(2, vnf.getLicense().getEntitlementPoolUuids().size());
+		assertEquals("s1d563e8-e714-4393-8f99-cc480144a05e", vnf.getLicense().getLicenseKeyGroupUuids().get(0));
+
+	}
+
+	@Test
+	public void testProcessSolution_success_1Vnf_1Solution(){
+		beforeVnf();
+
+		JSONObject asyncResponse = new JSONObject();
+		asyncResponse.put("transactionId", "testRequestId").put("requestId", "testRequestId").put("requestState", "completed");
+		JSONArray licenseSolution = new JSONArray();
+
+		licenseSolution.put(
+				new JSONObject().put("serviceResourceId", "testVnfId1").put("entitlementPoolUUID", new JSONArray().put("f1d563e8-e714-4393-8f99-cc480144a05e").put("j1d563e8-e714-4393-8f99-cc480144a05e"))
+						.put("licenseKeyGroupUUID", new JSONArray().put("s1d563e8-e714-4393-8f99-cc480144a05e").put("b1d563e8-e714-4393-8f99-cc480144a05e")));
+
+		asyncResponse.put("solutions", new JSONObject().put("licenseSolutions", licenseSolution));
+
+		sniroHoming.processSolution(execution, asyncResponse.toString());
+
+		ServiceInstance si = execution.getGeneralBuildingBlock().getCustomer().getServiceSubscription().getServiceInstances().get(0);
+
+		GenericVnf vnf = si.getVnfs().get(0);
+		assertNotNull(vnf);
+		assertNotNull(vnf.getLicense());
+		assertEquals(2, vnf.getLicense().getEntitlementPoolUuids().size());
+		assertEquals(2, vnf.getLicense().getLicenseKeyGroupUuids().size());
+		assertEquals("f1d563e8-e714-4393-8f99-cc480144a05e", vnf.getLicense().getEntitlementPoolUuids().get(0));
+		assertEquals("s1d563e8-e714-4393-8f99-cc480144a05e", vnf.getLicense().getLicenseKeyGroupUuids().get(0));
+
+
+	}
+
+	@Test(expected = BpmnError.class)
+	public void testCallSniro_error_0Resources() throws BadResponseException, JsonProcessingException{
+
+		sniroHoming.callSniro(execution);
+
+		verify(sniroClient, times(0)).postDemands(isA(SniroManagerRequest.class));
+	}
+
+	@Test(expected = BpmnError.class)
+	public void testCallSniro_error_badResponse() throws BadResponseException, JsonProcessingException{
+		beforeAllottedResource();
+
+		mockResponse = "{\"transactionId\": \"123456789\", \"requestId\": \"1234\", \"statusMessage\": \"\", \"requestStatus\": \"failed\"}";
+		stubFor(post(urlEqualTo("/sniro/api/placement/v2"))
+				.willReturn(aResponse().withStatus(200)
+						.withHeader("Content-Type", "application/json")
+						.withBody(mockResponse)));
+
+		sniroHoming.callSniro(execution);
+
+		verify(sniroClient, times(1)).postDemands(isA(SniroManagerRequest.class));
+	}
+
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAICheckVnfInMaintBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAICheckVnfInMaintBBTest.java
new file mode 100644
index 0000000..793a8c0
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAICheckVnfInMaintBBTest.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.common;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.onap.so.BaseTest;
+
+public class AAICheckVnfInMaintBBTest extends BaseTest{
+	
+	@Ignore
+	@Test
+	public void sunnyDayAAICheckVnfInMaintBBTest() throws InterruptedException, IOException {		
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("AAICheckVnfInMaintBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_AAICheckVnfInMaintBB", "Task_CheckVnfInMaint", "End_AAICheckVnfInMaintBB");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDayAAISetVnfInMaintBBTest() {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiFlagTasks).checkVnfInMaintFlag(any(BuildingBlockExecution.class));
+		
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("AAICheckVnfInMaintBB", variables);
+		assertThat(processInstance).isNotNull();
+		assertThat(processInstance).isStarted()
+			.hasPassedInOrder("Start_AAICheckVnfInMaintBB", "Task_CheckVnfInMaint")
+			.hasNotPassed("End_AAICheckVnfInMaintBB");
+		assertThat(processInstance).isEnded();
+	}
+
+
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAISetVnfInMaintBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAISetVnfInMaintBBTest.java
new file mode 100644
index 0000000..890fd6b
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAISetVnfInMaintBBTest.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.common;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.onap.so.BaseTest;
+
+public class AAISetVnfInMaintBBTest extends BaseTest {
+	
+	@Ignore
+	@Test
+	public void sunnyDayAAISetVnfInMaintBBTest() throws InterruptedException, IOException {		
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("AAISetVnfInMaintBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_AAISetVnfInMaintBB", "Task_SetInMaint", "End_AAISetVnfInMaintBB");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDayAAISetVnfInMaintBBTest() {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiFlagTasks).modifyVnfInMaintFlag(any(BuildingBlockExecution.class), any(boolean.class));
+		
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("AAISetVnfInMaintBB", variables);
+		assertThat(processInstance).isNotNull();
+		assertThat(processInstance).isStarted()
+			.hasPassedInOrder("Start_AAISetVnfInMaintBB", "Task_SetInMaint")
+			.hasNotPassed("End_AAISetVnfInMaintBB");
+		assertThat(processInstance).isEnded();
+	}
+
+	
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAIUnsetVnfInMaintBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAIUnsetVnfInMaintBBTest.java
new file mode 100644
index 0000000..c199196
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAIUnsetVnfInMaintBBTest.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.common;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.onap.so.BaseTest;
+
+public class AAIUnsetVnfInMaintBBTest extends BaseTest {
+	
+	@Test
+	@Ignore
+	public void sunnyDayAAISetVnftInMaintBBTest() throws InterruptedException, IOException {		
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("AAIUnsetVnfInMaintBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_AAIUnsetVnfInMaintBB", "Task_UnsetInMaint", "End_AAIUnsetVnfInMaintBB");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDayAAISetVnfInMaintBBTest() {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiFlagTasks).modifyVnfInMaintFlag(any(BuildingBlockExecution.class), any(boolean.class));
+		
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("AAIUnsetVnfInMaintBB", variables);
+		assertThat(processInstance).isNotNull();
+		assertThat(processInstance).isStarted()
+			.hasPassedInOrder("Start_AAIUnsetVnfInMaintBB", "Task_UnsetInMaint")
+			.hasNotPassed("End_AAIUnsetVnfInMaintBB");
+		assertThat(processInstance).isEnded();
+	}
+
+	
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/SDNOHealthCheckBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/SDNOHealthCheckBBTest.java
new file mode 100644
index 0000000..f7c6852
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/SDNOHealthCheckBBTest.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.common;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.onap.so.BaseTest;
+
+public class SDNOHealthCheckBBTest extends BaseTest {
+	
+	@Test
+	@Ignore
+	public void sunnyDaySDNOHealthCheckTest() throws InterruptedException, IOException {		
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("SDNOVnfHealthCheckBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_SDNOHealthCheckBB", "Task_SDNOHealthCheck", "End_SDNOHealthCheckBB");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDaySDNOHealthCheckTest() {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdnoHealthCheckTasks).sdnoHealthCheck(any(BuildingBlockExecution.class));
+		
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("SDNOVnfHealthCheckBB", variables);
+		assertThat(processInstance).isNotNull();
+		assertThat(processInstance).isStarted()
+			.hasPassedInOrder("Start_SDNOHealthCheckBB", "Task_SDNOHealthCheck")
+			.hasNotPassed("End_SDNOHealthCheckBB");
+		assertThat(processInstance).isEnded();
+	}
+
+	
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/process/WorkflowActionBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/process/WorkflowActionBBTest.java
new file mode 100644
index 0000000..ee02f29
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/process/WorkflowActionBBTest.java
@@ -0,0 +1,143 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.process;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+
+@Ignore
+public class WorkflowActionBBTest extends BaseBPMNTest {
+	
+	@Test
+	public void sunnyDaySuccessIsTopLevelFlow() throws InterruptedException, IOException {
+		variables.put("isTopLevelFlow", true);
+		variables.put("completed", true);
+		
+		Map<String, String> map = new HashMap<>();
+		map.put("handlingCode", "Success");
+		mockSubprocess("ExecuteBuildingBlock", "Mocked ExecuteBuildingBlock", "GenericStub", map);
+		mockSubprocess("CompleteMsoProcess", "Mocked CompleteMsoProcess", "GenericStub");
+		
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("WorkflowActionBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_WorkflowActionBB", "Task_RetrieveBBExectuionList", "ExclusiveGateway_isTopLevelFlow", "Task_SendSync",
+				"Task_SelectBB", "Call_ExecuteBB", "ExclusiveGateway_Finished", "ExclusiveGateway_isTopLevelFlowCompleted", "Task_SetupCompleteMsoProcess", "Call_CompleteMsoProcess",
+				"End_WorkflowActionBB");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void sunnyDaySuccessNotTopLevelFlow() throws InterruptedException, IOException {
+		variables.put("isTopLevelFlow", false);
+		variables.put("completed", true);
+
+		Map<String, String> map = new HashMap<>();
+		map.put("handlingCode", "Success");
+		mockSubprocess("ExecuteBuildingBlock", "Mocked ExecuteBuildingBlock", "GenericStub", map);
+		
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("WorkflowActionBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_WorkflowActionBB", "Task_RetrieveBBExectuionList", "ExclusiveGateway_isTopLevelFlow",
+				"Task_SelectBB", "Call_ExecuteBB", "ExclusiveGateway_Finished", "ExclusiveGateway_isTopLevelFlowCompleted", "End_WorkflowActionBB");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void sunnyDayRollback() throws InterruptedException, IOException {
+		variables.put("isTopLevelFlow", false);
+		variables.put("isRollbackNeeded", false);
+
+		Map<String, String> map = new HashMap<>();
+		map.put("handlingCode", "Rollback");
+		mockSubprocess("ExecuteBuildingBlock", "Mocked ExecuteBuildingBlock", "GenericStub", map);
+		
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("WorkflowActionBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_WorkflowActionBB", "Task_RetrieveBBExectuionList", "ExclusiveGateway_isTopLevelFlow",
+				"Task_SelectBB", "Call_ExecuteBB", "ExclusiveGateway_Finished", "Task_RollbackExecutionPath", "Task_UpdateRequestToFailed", "End_RollbackFailed");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDayAbort() throws Exception {
+		variables.put("isTopLevelFlow", true);
+		variables.put("completed", false);
+
+		Map<String, String> map = new HashMap<>();
+		map.put("handlingCode", "Abort");
+		
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(workflowActionBBTasks).abortCallErrorHandling(any(DelegateExecution.class));
+		mockSubprocess("ExecuteBuildingBlock", "Mocked ExecuteBuildingBlock", "GenericStub", map);
+		
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("WorkflowActionBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_WorkflowActionBB", "Task_RetrieveBBExectuionList", "ExclusiveGateway_isTopLevelFlow", "Task_SendSync",
+				"Task_SelectBB", "Call_ExecuteBB", "ExclusiveGateway_Finished", "ExclusiveGateway_isTopLevelFlowAbort", "Task_AbortAndCallErrorHandling", "ErrorStart",
+				"Task_UpdateDb", "ErrorEnd");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void retrieveBBExecutionListerrorHandling() throws Exception {
+		variables.put("isTopLevelFlow", true);
+		variables.put("sentSyncResponse", false);
+		doThrow(new IllegalStateException("TESTING ERRORS")).when(workflowAction).selectExecutionList(any(DelegateExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("WorkflowActionBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_WorkflowActionBB", "Task_RetrieveBBExectuionList", "StartEvent_runtimeError", "ServiceTask_HandleRuntimeError", "EndEvent__runtimeError", "SubProcess_0rze15o");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void errorCatchSubprocessHandlingTest() throws Exception {
+		variables.put("isTopLevelFlow", true);
+		variables.put("sentSyncResponse", false);
+		doThrow(new IllegalStateException("TESTING ERRORS")).when(workflowAction).selectExecutionList(any(DelegateExecution.class));
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(workflowAction).handleRuntimeException(any(DelegateExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("WorkflowActionBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_WorkflowActionBB", "Task_RetrieveBBExectuionList", "StartEvent_runtimeError", "ServiceTask_HandleRuntimeError", "SubProcess_0fuugr9", "ErrorStart", "ExclusiveGateway_10q79b6", "Task_SendSyncAckError", "Task_UpdateDb", "ErrorEnd", "SubProcess_18226x4");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void errorCatchBpmnSubprocessHandlingTest() throws Exception {
+		variables.put("isTopLevelFlow", true);
+		variables.put("sentSyncResponse", false);
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(workflowActionBBTasks).selectBB(any(DelegateExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("WorkflowActionBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_WorkflowActionBB", "Task_RetrieveBBExectuionList","ExclusiveGateway_isTopLevelFlow","Task_SendSync","Task_SelectBB", "ErrorStart", "ExclusiveGateway_10q79b6", "Task_SendSyncAckError", "Task_UpdateDb", "ErrorEnd", "SubProcess_18226x4");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateNetworkBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateNetworkBBTest.java
new file mode 100644
index 0000000..da26b6e
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateNetworkBBTest.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class ActivateNetworkBBTest extends BaseBPMNTest{
+    @Test
+    public void sunnyDayActivateNetwork_Test() throws InterruptedException {
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateNetworkBB", variables);
+        assertThat(pi).isNotNull();
+        assertThat(pi).isStarted().hasPassedInOrder("activateNetwork_startEvent","Activate_Network_SDNC_ServiceTask","Activate_Network_AAI_ServiceTask","activateNetwork_EndEvent");     
+        assertThat(pi).isEnded();
+    }
+
+	@Test
+	public void rainyDayActivateNetwork_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks).updateOrchestrationStatusActiveNetwork(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateNetworkBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("activateNetwork_startEvent","Activate_Network_SDNC_ServiceTask","Activate_Network_AAI_ServiceTask")
+				.hasNotPassed("activateNetwork_EndEvent");
+		assertThat(pi).isEnded().hasVariables("gBuildingBlockExecution");
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateNetworkCollectionBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateNetworkCollectionBBTest.java
new file mode 100644
index 0000000..00eaabb
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateNetworkCollectionBBTest.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class ActivateNetworkCollectionBBTest extends BaseBPMNTest{
+    @Test
+    public void sunnyDayActivateNetworkCollection_Test() throws InterruptedException {
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateNetworkCollectionBB",variables);
+        assertThat(pi).isNotNull();
+        assertThat(pi).isStarted().hasPassedInOrder("activateNetworkCollection_startEvent","Activate_Network_Collection_AAI_ServiceTask","activateNetworkCollection_EndEvent");     
+        assertThat(pi).isEnded();
+    }
+
+	@Test
+	public void rainyDayActivateNetworkCollection_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks).updateOrchestrationStatusActiveNetworkCollection(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateNetworkCollectionBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("activateNetworkCollection_startEvent")
+				.hasNotPassed("activateNetworkCollection_EndEvent");
+		assertThat(pi).isEnded().hasVariables("gBuildingBlockExecution");
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateServiceInstanceBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateServiceInstanceBBTest.java
new file mode 100644
index 0000000..4739a56
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateServiceInstanceBBTest.java
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+
+public class ActivateServiceInstanceBBTest extends BaseBPMNTest{
+	
+	@Test
+	public void sunnyDaySDNC() throws InterruptedException, IOException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateServiceInstanceBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_ActivateServiceInstanceBB", "Task_NoOpServiceInstance",
+				"Task_UpdateServiceOrchestrationStatusToActive", "End_ActivateServiceInstanceBB");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVfModuleBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVfModuleBBTest.java
new file mode 100644
index 0000000..dcf9d7f
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVfModuleBBTest.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class ActivateVfModuleBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDay() throws InterruptedException, IOException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("ActivateVfModuleBB_Start", "ActivateVfModule",
+				"UpdateVfModuleActiveStatus", "ActivateVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDay() throws Exception {
+		doThrow(BpmnError.class).when(aaiUpdateTasks).updateOrchestrationStatusActivateVfModule(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("ActivateVfModuleBB_Start", "ActivateVfModule", "UpdateVfModuleActiveStatus")
+				.hasNotPassed("ActivateVfModuleBB_End");
+		assertThat(pi).isEnded().hasVariables("gBuildingBlockExecution");
+	
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVnfBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVnfBBTest.java
new file mode 100644
index 0000000..0578286
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVnfBBTest.java
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+
+public class ActivateVnfBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDay() throws InterruptedException, IOException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateVnfBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_ActivateVnfBB", "Task_SDNCAdapterVnfTopologyActivate",
+				"Task_ActivateOrchestrationStatusVnf", "End_ActivateVnfBB");
+		assertThat(pi).isEnded();
+	}
+
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVolumeGroupBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVolumeGroupBBTest.java
new file mode 100644
index 0000000..7673652
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVolumeGroupBBTest.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class ActivateVolumeGroupBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDayAssignVolumeGroup_Test() throws InterruptedException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateVolumeGroupBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("ActivateVolumeGroupBB_Start", "ActivateVolumeGroup", "ActivateVolumeGroupBB_End");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDayAssignVolumeGroup_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks).updateOrchestrationStatusActiveVolumeGroup(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateVolumeGroupBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("ActivateVolumeGroupBB_Start", "ActivateVolumeGroup")
+				.hasNotPassed("ActivateVolumeGroupBB_End");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignNetwork1802BBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignNetwork1802BBTest.java
new file mode 100644
index 0000000..14cac83
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignNetwork1802BBTest.java
@@ -0,0 +1,57 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.camunda.bpm.engine.test.Deployment;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+
+public class AssignNetwork1802BBTest extends BaseBPMNTest{
+    @Test
+	@Deployment(resources = { "subprocess/AssignNetworkRollbackBB.bpmn"})
+    public void sunnyDayAssignNetwork_Test() throws InterruptedException {
+
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignNetwork1802BB",variables);
+        assertThat(pi).isNotNull();
+        assertThat(pi).isStarted().hasPassedInOrder("AssignNetworkBB_start","ServiceTask_get_cloud_region","ServiceTask_assign_network_sdnc","ServiceTask_assign_network_aai","AssignNetworkBB_end");     
+        assertThat(pi).isEnded();
+    }
+
+	@Test
+	public void rainyDayAssignNetwork_Test() throws Exception {
+		
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks).updateOrchestrationStatusAssignedNetwork(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignNetwork1802BB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("AssignNetworkBB_start", "ServiceTask_get_cloud_region", "ServiceTask_assign_network_sdnc", "ServiceTask_assign_network_aai")
+				.hasNotPassed("AssignNetworkBB_end");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignNetworkBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignNetworkBBTest.java
new file mode 100644
index 0000000..1e66c55
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignNetworkBBTest.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.camunda.bpm.engine.test.Deployment;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class AssignNetworkBBTest extends BaseBPMNTest{
+    @Test
+	@Deployment(resources = { "subprocess/AssignNetworkRollbackBB.bpmn"})
+    public void sunnyDayAssignNetwork_Test() throws InterruptedException {
+
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignNetworkBB",variables);
+        assertThat(pi).isNotNull();
+        assertThat(pi).isStarted().hasPassedInOrder("AssignNetworkBB_start","networkFoundByName_ExclusiveGateway","ServiceTask_put_network_in_AAI","ServiceTask_connect_to_Tenant","ServiceTask_connect_to_CloudRegion","ServiceTask_connect_to_NCIG","ServiceTask_connect_to_NCSI","ServiceTask_get_cloud_region","ServiceTask_assign_network_sdnc","ServiceTask_assign_network_aai","AssignNetworkBB_end");     
+        assertThat(pi).isEnded();
+    }
+
+	@Test
+	public void rainyDayAssignNetwork_Test() throws Exception {
+		
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks).updateOrchestrationStatusAssignedNetwork(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignNetworkBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("AssignNetworkBB_start", "networkFoundByName_ExclusiveGateway", "ServiceTask_put_network_in_AAI","ServiceTask_connect_to_Tenant","ServiceTask_connect_to_CloudRegion","ServiceTask_connect_to_NCIG","ServiceTask_connect_to_NCSI", "ServiceTask_get_cloud_region", "ServiceTask_assign_network_sdnc", "ServiceTask_assign_network_aai")
+				.hasNotPassed("AssignNetworkBB_end");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignServiceInstanceBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignServiceInstanceBBTest.java
new file mode 100644
index 0000000..e755141
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignServiceInstanceBBTest.java
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+
+public class AssignServiceInstanceBBTest extends BaseBPMNTest{
+	
+	@Test
+	public void sunnyDaySDNC() throws InterruptedException, IOException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignServiceInstanceBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_AssignServiceInstanceBB", "Task_CreateServiceInstance",
+				"Task_CreateProject", "Task_CreateOwningEntity", "Task_AssignServiceInstance",
+				"Task_UpdateServiceOstatusToAssigned", "End_AssignServiceInstanceBB");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignVfModuleBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignVfModuleBBTest.java
new file mode 100644
index 0000000..2645c79
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignVfModuleBBTest.java
@@ -0,0 +1,57 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class AssignVfModuleBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDayAssignVfModule_Test() throws InterruptedException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("AssignVfModuleBB_Start", 
+				"CreateVfModule",
+				"ConnectVfModuleToVolumeGroup",
+				"AssignVfModule",
+				"UpdateVfModuleStatus",				   
+				"AssignVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDayAssignVfModule_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiCreateTasks).createVfModule(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("AssignVfModuleBB_Start", "CreateVfModule")
+				.hasNotPassed("ConnectVfModuleToVolumeGroup", "AssignVfModule", "UpdateVfModuleStatus", "AssignVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignVnfBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignVnfBBTest.java
new file mode 100644
index 0000000..8dc23eb
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignVnfBBTest.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class AssignVnfBBTest extends BaseBPMNTest {
+	@Test
+	public void sunnyDayAssignVnfBBTest() throws InterruptedException, IOException {
+		variables.put("callHoming", true);
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignVnfBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_AssignVnfBB", "Task_CreateVnf", "Task_createPlatform", "Task_createLineOfBusiness", "Task_createInstanceGroups",
+				"Task_callHoming", "Task_SDNCAdapterVnfTopologyAssign", "Task_UpdateVnfOrchestrationStatusAssigned",
+				"End_AssignVnfBB");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDayAssignVnfBBTest() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiCreateTasks)
+				.createVnf(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignVnfBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_AssignVnfBB", "Task_CreateVnf").hasNotPassed(
+				"Task_createPlatform", "Task_createLineOfBusiness", "Task_createInstanceGroups", "Task_SDNCAdapterVnfTopologyAssign",
+				"Task_UpdateVnfOrchestrationStatusAssigned", "End_AssignVnfBB");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignVolumeGroupBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignVolumeGroupBBTest.java
new file mode 100644
index 0000000..32a803e
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignVolumeGroupBBTest.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class AssignVolumeGroupBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDayAssignVolumeGroup_Test() throws InterruptedException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignVolumeGroupBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("AssignVolumeGroupBB_Start", "AssignVolumeGroup", "AssignVolumeGroupBB_End");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDayAssignVolumeGroup_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiCreateTasks).createVolumeGroup(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignVolumeGroupBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("AssignVolumeGroupBB_Start", "AssignVolumeGroup")
+				.hasNotPassed("AssignVolumeGroupBB_End");
+		assertThat(pi).isEnded();;
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ChangeModelServiceInstanceBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ChangeModelServiceInstanceBBTest.java
new file mode 100644
index 0000000..5af503e
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ChangeModelServiceInstanceBBTest.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class ChangeModelServiceInstanceBBTest extends BaseBPMNTest{
+	@Test
+	public void changeModelVnfBBTest() {
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("ChangeModelServiceInstanceBB", variables);
+		assertThat(processInstance).isNotNull();
+		assertThat(processInstance).isStarted().hasPassedInOrder("ChangeModelServiceInstance_Start" ,"SDNCChangeModelServiceInstance", "AAIUpdateModelServiceInstance", "ChangeModelServiceInstance_End");
+		assertThat(processInstance).isEnded();
+	}
+	
+	@Test
+	public void changeModelVnfBBExceptionTest() {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdncChangeAssignTasks).changeModelServiceInstance(any(BuildingBlockExecution.class));
+		
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("ChangeModelServiceInstanceBB", variables);
+		assertThat(processInstance).isNotNull();
+		assertThat(processInstance).isStarted()
+			.hasPassedInOrder("ChangeModelServiceInstance_Start", "SDNCChangeModelServiceInstance")
+			.hasNotPassed("AAIUpdateModel", "ChangeModelServiceInstance_End");
+		assertThat(processInstance).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ChangeModelVfModuleBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ChangeModelVfModuleBBTest.java
new file mode 100644
index 0000000..4720fc0
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ChangeModelVfModuleBBTest.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class ChangeModelVfModuleBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDayChangeModelVfModuleTest() throws InterruptedException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ChangeModelVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("ChangeModelVfModuleBB_Start", "ChangeModelVfModule", "UpdateVfModuleModel", "ChangeModelVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDayChangeModelVfModuleTest() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdncChangeAssignTasks).changeAssignModelVfModule(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ChangeModelVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("ChangeModelVfModuleBB_Start", "ChangeModelVfModule")
+				.hasNotPassed("ChangeModelVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+	
+	
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ChangeModelVnfBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ChangeModelVnfBBTest.java
new file mode 100644
index 0000000..78bf15f
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ChangeModelVnfBBTest.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class ChangeModelVnfBBTest extends BaseBPMNTest{
+	@Test
+	public void changeModelVnfBBTest() {
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("ChangeModelVnfBB", variables);
+		assertThat(processInstance).isNotNull();
+		assertThat(processInstance).isStarted().hasPassedInOrder("ChangeModelVnf_Start" ,"SDNCChangeModel", "AAIUpdateModel", "ChangeModelVnf_End");
+		assertThat(processInstance).isEnded();
+	}
+	
+	@Test
+	public void changeModelVnfBBExceptionTest() {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdncChangeAssignTasks).changeModelVnf(any(BuildingBlockExecution.class));
+		
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("ChangeModelVnfBB", variables);
+		assertThat(processInstance).isNotNull();
+		assertThat(processInstance).isStarted()
+			.hasPassedInOrder("ChangeModelVnf_Start", "SDNCChangeModel")
+			.hasNotPassed("AAIUpdateModel", "ChangeModelVnf_End");
+		assertThat(processInstance).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateCustomerBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateCustomerBBTest.java
new file mode 100644
index 0000000..7cefd58
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateCustomerBBTest.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class CreateCustomerBBTest extends BaseBPMNTest{
+	@Test
+	public void createCustomerBBTest() throws InterruptedException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateCustomerBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("CreateCustomerBB_Start", "CreateCustomerAAI", "CreateCustomerBB_End");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void createCustomerBBExceptionTest() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiCreateTasks).createCustomer(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateCustomerBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("CreateCustomerBB_Start", "CreateCustomerAAI")
+				.hasNotPassed("CreateCustomer_End");
+		assertThat(pi).isEnded();
+	}
+}
+
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateNetworkBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateNetworkBBTest.java
new file mode 100644
index 0000000..cb3ab32
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateNetworkBBTest.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class CreateNetworkBBTest extends BaseBPMNTest{
+    @Test
+    public void sunnyDayCreateNetwork_Test() throws InterruptedException {
+
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateNetworkBB",variables);
+        assertThat(pi).isNotNull();
+        assertThat(pi).isStarted().hasPassedInOrder("createNetwork_startEvent", "QueryNetworkById_ServiceTask", "ServiceTask_get_cloud_region", "QueryVpnBinding_ServiceTask", "QueryNetworkPolicy_ServiceTask", "QueryNetworkTableRef_ServiceTask", "Create_Network_ServiceTask", "Update_Network_AAI_ServiceTask", "createNetwork_EndEvent");     
+        assertThat(pi).isEnded();
+    }
+
+	@Test
+	public void rainyDayCreateNetwork_Test() throws Exception {
+		
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(createNetwork).buildCreateNetworkRequest(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateNetworkBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("createNetwork_startEvent","QueryNetworkById_ServiceTask")
+				.hasNotPassed("End Flow");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateNetworkCollectionBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateNetworkCollectionBBTest.java
new file mode 100644
index 0000000..bd285f1
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateNetworkCollectionBBTest.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class CreateNetworkCollectionBBTest extends BaseBPMNTest{
+    @Test
+    public void sunnyDayCreateNetworkCollection_Test() throws InterruptedException {
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateNetworkCollectionBB",variables);
+        assertThat(pi).isNotNull();
+        assertThat(pi).isStarted().hasPassedInOrder("createNetworkCollection_startEvent", "BuildName_ServiceTask", "ServiceTask_create_NetworkCollection", "ServiceTask_create_NetworkCollectionInstanceGroup", "ServiceTask_Connect_Collection_to_InstanceGroup", "ServiceTask_Connect_Collection_to_ServiceInstance", "createNetworkCollection_EndEvent");     
+        assertThat(pi).isEnded();
+    }
+
+	@Test
+	public void rainyDayCreateNetworkCollection_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiCreateTasks).createNetworkCollectionInstanceGroup(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateNetworkCollectionBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("createNetworkCollection_startEvent", "BuildName_ServiceTask", "ServiceTask_create_NetworkCollection")
+				.hasNotPassed("createNetworkCollection_EndEvent");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateVfModuleBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateVfModuleBBTest.java
new file mode 100644
index 0000000..a3c6a82
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateVfModuleBBTest.java
@@ -0,0 +1,94 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class CreateVfModuleBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDayCreateVfModule_Test() throws InterruptedException {
+		mockSubprocess("VnfAdapter", "Mocked VnfAdapter", "GenericStub");
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("CreateVfModuleBB_Start",
+				"QueryVnf",
+				"QueryVfModule",
+				"CreateVfModule",
+				"VnfAdapter",
+				"UpdateVfModuleStatus",
+				"CreateVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDayCreateVfModuleSDNCQueryVnfError_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdncQueryTasks).queryVnf(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf")
+				.hasNotPassed("QueryVfModule", "CreateVfModule", "VnfAdapter", "UpdateVfModuleStatus", "CreateVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDayCreateVfModuleSDNCQueryVnfModuleError_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdncQueryTasks).queryVfModule(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule")
+				.hasNotPassed("CreateVfModule", "VnfAdapter", "UpdateVfModuleStatus", "CreateVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDayCreateVfModuleVnfAdapterCreateError_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(vnfAdapterCreateTasks).createVfModule(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule")
+				.hasNotPassed("VnfAdapter", "UpdateVfModuleStatus", "CreateVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDayCreateVfModuleUpdateVfModuleStatusError_Test() throws Exception {
+		mockSubprocess("VnfAdapter", "Mocked VnfAdapter", "GenericStub");
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks).updateOrchestrationStatusCreatedVfModule(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule", "VnfAdapter", "UpdateVfModuleStatus")
+				.hasNotPassed("CreateVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateVolumeGroupBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateVolumeGroupBBTest.java
new file mode 100644
index 0000000..980e609
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateVolumeGroupBBTest.java
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class CreateVolumeGroupBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDayCreateVolumeGroup_Test() throws InterruptedException {
+		mockSubprocess("VnfAdapter", "Mocked VnfAdapter", "GenericStub");
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVolumeGroupBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted();
+		assertThat(pi).isEnded();
+		assertThat(pi).hasPassedInOrder("CreateVolumeGroupBB_Start", "QueryVfModuleSDNC", "CreateVolumeGroupVnfAdapter", "Vnf_Adapter","UpdateVolumeGroupAAI", "CreateVolumeGroupBB_End");
+	}
+
+	@Test
+	public void rainyDayCreateVolumeGroup_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(vnfAdapterCreateTasks).createVolumeGroupRequest(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVolumeGroupBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted();
+		assertThat(pi).isEnded();
+		assertThat(pi).hasPassedInOrder("CreateVolumeGroupBB_Start", "QueryVfModuleSDNC", "CreateVolumeGroupVnfAdapter")
+				.hasNotPassed("Vnf_Adapter", "UpdateVolumeGroupAAI", "CreateVolumeGroupBB_End");
+	}
+}
+
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateNetworkBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateNetworkBBTest.java
new file mode 100644
index 0000000..fd8cb9f
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateNetworkBBTest.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class DeactivateNetworkBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDayDeactivateNetworkBB_Test() throws InterruptedException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeactivateNetworkBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("DeactivateNetworkBB_Start", "DeactivateNetworkSDNC", "DeactivateNetworkAAI", "DeactivateNetworkBB_End");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDayDeactivateNetworkBB_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdncDeactivateTasks).deactivateNetwork(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeactivateNetworkBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("DeactivateNetworkBB_Start", "DeactivateNetworkSDNC")
+				.hasNotPassed("DeactivateNetworkAAI", "DeactivateNetworkBB_End");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateServiceInstanceBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateServiceInstanceBBTest.java
new file mode 100644
index 0000000..6c7aedf
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateServiceInstanceBBTest.java
@@ -0,0 +1,44 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+/**
+ * Unit test cases for DeActivateServiceInstanceTest.bpmn
+ */
+public class DeactivateServiceInstanceBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDayDeactivateServiceInstanceSDNC() throws InterruptedException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeactivateServiceInstanceBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_DeactivateServiceInstanceBB", "Task_DeactivateServiceInstance_SDNC", "Task_DeactivateServiceInstance_AAI", "End_DeactivateServiceInstanceBB");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateVfModuleBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateVfModuleBBTest.java
new file mode 100644
index 0000000..b6e0812
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateVfModuleBBTest.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class DeactivateVfModuleBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDay() throws InterruptedException, IOException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeactivateVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("DeactivateVfModuleBB_Start", "DeactivateVfModule",
+				"UpdateVfModuleDeactivateStatus", "DeactivateVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}	
+	
+	@Test
+	public void rainyDay() throws Exception {
+		doThrow(BpmnError.class).when(aaiUpdateTasks).updateOrchestrationStatusDeactivateVfModule(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeactivateVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("DeactivateVfModuleBB_Start", "DeactivateVfModule", "UpdateVfModuleDeactivateStatus")
+				.hasNotPassed("DeActivateVfModuleBB_End");
+		assertThat(pi).isEnded();
+	
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateVnfBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateVnfBBTest.java
new file mode 100644
index 0000000..20edc62
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateVnfBBTest.java
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class DeactivateVnfBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDay() throws InterruptedException, IOException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeactivateVnfBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_DeactivateVnfBB","Task_SDNCAdapterVnfTopologyDeactivate",
+				"Task_DeactivateOrchestrationStatusVnf", "End_DeactivateVnfBB");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDayDeactivateVnfSDNCError_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdncDeactivateTasks).deactivateVnf(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeactivateVnfBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+		.hasPassedInOrder("Start_DeactivateVnfBB", "Task_SDNCAdapterVnfTopologyDeactivate")
+		.hasNotPassed("Task_DeactivateOrchestrationStatusVnf", "End_DeactivateVnfBB");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDayDeactivateVnfAAIError_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks).updateOrchestrationStatusAssignedVnf(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeactivateVnfBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+		.hasPassedInOrder("Start_DeactivateVnfBB", "Task_SDNCAdapterVnfTopologyDeactivate","Task_DeactivateOrchestrationStatusVnf")
+		.hasNotPassed("End_DeactivateVnfBB");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateVolumeGroupBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateVolumeGroupBBTest.java
new file mode 100644
index 0000000..e0f3cb2
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeactivateVolumeGroupBBTest.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class DeactivateVolumeGroupBBTest extends BaseBPMNTest {
+	@Test
+	public void sunnyDayAssignVolumeGroup_Test() throws InterruptedException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeactivateVolumeGroupBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("DeactivateVolumeGroupBB_Start", "DeactivateVolumeGroup", "DeactivateVolumeGroupBB_End");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDayAssignVolumeGroup_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks).updateOrchestrationStatusCreatedVolumeGroup(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeactivateVolumeGroupBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("DeactivateVolumeGroupBB_Start", "DeactivateVolumeGroup")
+				.hasNotPassed("DeactivateVolumeGroupBB_End");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteNetworkBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteNetworkBBTest.java
new file mode 100644
index 0000000..b6b58eb
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteNetworkBBTest.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class DeleteNetworkBBTest extends BaseBPMNTest{
+    @Test
+    public void sunnyDayDeleteNetwork_Test() throws InterruptedException {
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteNetworkBB",variables);
+        assertThat(pi).isNotNull();
+        assertThat(pi).isStarted().hasPassedInOrder("deleteNetwork_startEvent", "deleteNetworkAIC", "updateNetworkAAI", "deleteNetwork_endEvent");     
+        assertThat(pi).isEnded();
+    }
+    
+	@Test
+	public void rainyDayDeleteNetwork_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(networkAdapterDeleteTasks).deleteNetwork(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteNetworkBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("deleteNetwork_startEvent", "deleteNetworkAIC")
+				.hasNotPassed("updateNetworkAAI", "deleteNetwork_endEvent");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteNetworkCollectionBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteNetworkCollectionBBTest.java
new file mode 100644
index 0000000..c8f81c1
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteNetworkCollectionBBTest.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class DeleteNetworkCollectionBBTest extends BaseBPMNTest{
+    @Test
+    public void sunnyDayCreateNetworkCollection_Test() throws InterruptedException {
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteNetworkCollectionBB",variables);
+        assertThat(pi).isNotNull();
+        assertThat(pi).isStarted().hasPassedInOrder("deleteNetworkCollection_startEvent", "ServiceTask_delete_NetworkCollectionInstanceGroup", "ServiceTask_delete_NetworkCollection", "deleteNetworkCollection_EndEvent");     
+        assertThat(pi).isEnded();
+    }
+
+	@Test
+	public void rainyDayCreateNetworkCollection_Test() throws Exception {
+		
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiDeleteTasks).deleteInstanceGroup(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteNetworkCollectionBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("deleteNetworkCollection_startEvent")
+				.hasNotPassed("deleteNetworkCollection_EndEvent");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVfModuleBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVfModuleBBTest.java
new file mode 100644
index 0000000..098d9a5
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVfModuleBBTest.java
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import java.io.IOException;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class DeleteVfModuleBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDay() throws InterruptedException, IOException {
+		mockSubprocess("VnfAdapter", "Mocked VnfAdapter", "GenericStub");
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("DeleteVfModuleBB_Start", "DeleteVfModuleVnfAdapter", "VnfAdapter",
+				"UpdateVfModuleDeleteStatus", "DeleteVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDay() throws Exception {
+		doThrow(BpmnError.class).when(vnfAdapterDeleteTasks).deleteVfModule(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("DeleteVfModuleBB_Start", "DeleteVfModuleVnfAdapter")
+				.hasNotPassed("VnfAdapter", "UpdateVfModuleDeleteStatus", "DeleteVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVolumeGroupBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVolumeGroupBBTest.java
new file mode 100644
index 0000000..d2f4db5
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVolumeGroupBBTest.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class DeleteVolumeGroupBBTest extends BaseBPMNTest {
+	@Test
+	public void sunnyDayDeleteVolumeGroup_Test() throws InterruptedException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteVolumeGroupBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("DeleteVolumeGroupBB_Start", "DeleteVolumeGroupVnfAdapter", "UpdateVolumeGroupAAI", "DeleteVolumeGroupBB_End");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDayDeleteVolumeGroup_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks).updateOrchestrationStatusAssignedVolumeGroup(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteVolumeGroupBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("DeleteVolumeGroupBB_Start", "DeleteVolumeGroupVnfAdapter", "UpdateVolumeGroupAAI")
+				.hasNotPassed("DeleteVolumeGroupBB_End");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ExecuteBuildingBlockTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ExecuteBuildingBlockTest.java
new file mode 100644
index 0000000..51f5f72
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ExecuteBuildingBlockTest.java
@@ -0,0 +1,113 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doThrow;
+
+import java.util.List;
+
+import org.camunda.bpm.engine.ManagementService;
+import org.camunda.bpm.engine.TaskService;
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.camunda.bpm.engine.management.JobDefinition;
+import org.camunda.bpm.engine.runtime.Job;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.camunda.bpm.engine.task.Task;
+import org.camunda.bpm.engine.test.ProcessEngineRule;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.db.catalog.beans.OrchestrationStatusValidationDirective;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class ExecuteBuildingBlockTest extends BaseBPMNTest {
+	@Autowired
+	private TaskService taskService;
+	@Autowired
+	private ManagementService managementService;
+	
+	@Test
+	public void test_sunnyDayExecuteBuildingBlock_silentSuccess() throws Exception {
+		variables.put("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
+		
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ExecuteBuildingBlock", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+			.hasPassedInOrder("Start_ExecuteBuildingBlock", "Task_BBInputSetup", "StatusPolicy", "CheckOrchestrationStatusValidationResults", "End_ExecuteBuildingBlock")
+			.hasNotPassed("Call_BBToExecute", "ErrorStart", "Task_QueryRainyDayTable", "ExclusiveGateway_1aonzik", "ExclusiveGateway_1aonzik", "ErrorEnd2", "Task_SetRetryTimer");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void test_rainyDayExecuteBuildingBlock_rollbackOrAbort() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(bbInputSetup).execute(any(DelegateExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ExecuteBuildingBlock", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+			.hasPassedInOrder("Start_ExecuteBuildingBlock", "Task_BBInputSetup", "BoundaryEvent_0i3q236", "Task_QueryRainyDayTable", "ExclusiveGateway_1aonzik", "ErrorEnd2")
+			.hasNotPassed("StatusPolicy", "CheckOrchestrationStatusValidationResults", "Call_BBToExecute", "End_ExecuteBuildingBlock", "ExclusiveGateway_0ey4zpt", "Task_SetRetryTimer");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void test_rainyDayExecuteBuildingBlock_retryNoRetriesLeft() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(bbInputSetup).execute(any(DelegateExecution.class));
+		
+		variables.put("handlingCode", "Retry");
+		variables.put("RetryCount", 5);
+		
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ExecuteBuildingBlock", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+			.hasPassedInOrder("Start_ExecuteBuildingBlock", "Task_BBInputSetup", "BoundaryEvent_0i3q236", "Task_QueryRainyDayTable", "ExclusiveGateway_1aonzik", "ExclusiveGateway_0ey4zpt", "ErrorEnd2")
+			.hasNotPassed("StatusPolicy", "CheckOrchestrationStatusValidationResults", "Call_BBToExecute", "End_ExecuteBuildingBlock", "Task_SetRetryTimer");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	@Ignore
+	public void test_rainyDayExecuteBuildingBlock_retryRetriesLeft() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(bbInputSetup).execute(any(DelegateExecution.class));
+		
+		variables.put("handlingCode", "Retry");
+		variables.put("RetryCount", 4);
+		variables.put("RetryDuration", "PT1S");
+		
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("ExecuteBuildingBlock", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted();
+		assertThat(pi).isWaitingAt("IntermediateCatchEvent_RetryTimer");
+		Job job = managementService.createJobQuery().activityId("IntermediateCatchEvent_RetryTimer").singleResult();
+		assertNotNull(job);
+		managementService.executeJob(job.getId());
+		assertThat(pi).isEnded()
+			.hasPassedInOrder("Start_ExecuteBuildingBlock", "Task_BBInputSetup", "BoundaryEvent_0i3q236", "Task_QueryRainyDayTable", "ExclusiveGateway_1aonzik", "ExclusiveGateway_0ey4zpt", "Task_SetRetryTimer", "EndEvent_1sez2lh")
+			.hasNotPassed("StatusPolicy", "CheckOrchestrationStatusValidationResults", "Call_BBToExecute", "End_ExecuteBuildingBlock", "ErrorEnd2");
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignNetwork1802BBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignNetwork1802BBTest.java
new file mode 100644
index 0000000..ad374e3
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignNetwork1802BBTest.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class UnassignNetwork1802BBTest  extends BaseBPMNTest {
+    @Test
+    public void sunnyDayAssignNetwork_Test() throws InterruptedException {
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignNetwork1802BB",variables);
+        assertThat(pi).isNotNull();
+        assertThat(pi).isStarted().hasPassedInOrder("Start_UnassignNetworkBB","Task_GetL3NetworkById","Task_VfModuleRelatioship","Task_GetCloudRegionVersion","Task_SNDCUnAssign","End_UnassignNetworkBB");     
+        assertThat(pi).isEnded();
+    }
+
+	@Test
+	public void rainyDayAssignNetwork_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(unassignNetworkBB).checkRelationshipRelatedTo(any(BuildingBlockExecution.class), eq("vf-module"));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignNetwork1802BB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("Start_UnassignNetworkBB", "Task_GetL3NetworkById", "Task_VfModuleRelatioship")
+				.hasNotPassed("End_UnassignNetworkBB");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignNetworkBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignNetworkBBTest.java
new file mode 100644
index 0000000..fd95e00
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignNetworkBBTest.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class UnassignNetworkBBTest  extends BaseBPMNTest {
+    @Test
+    public void sunnyDayAssignNetwork_Test() throws InterruptedException {
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignNetworkBB",variables);
+        assertThat(pi).isNotNull();
+        assertThat(pi).isStarted().hasPassedInOrder("Start_UnassignNetworkBB","Task_GetL3NetworkById","Task_VfModuleRelatioship","Task_GetCloudRegionVersion","Task_SNDCUnAssign","Task_DeleteNetwork","End_UnassignNetworkBB");     
+        assertThat(pi).isEnded();
+    }
+
+	@Test
+	public void rainyDayAssignNetwork_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(unassignNetworkBB).checkRelationshipRelatedTo(any(BuildingBlockExecution.class), eq("vf-module"));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignNetworkBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("Start_UnassignNetworkBB", "Task_GetL3NetworkById", "Task_VfModuleRelatioship")
+				.hasNotPassed("End_UnassignNetworkBB");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignServiceInstanceBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignServiceInstanceBBTest.java
new file mode 100644
index 0000000..2145cc7
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignServiceInstanceBBTest.java
@@ -0,0 +1,44 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+
+import org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.common.DelegateExecutionImpl;
+
+public class UnassignServiceInstanceBBTest extends BaseBPMNTest{ 
+	@Test
+	public void sunnyDayUnassignServiceInstanceSDNC() throws InterruptedException {
+		BuildingBlockExecution bbe = new DelegateExecutionImpl(new ExecutionImpl());
+		
+		variables.put("gBuildingBlockExecution", bbe);
+
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignServiceInstanceBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("Start_UnassignServiceInstanceBB", "Task_SdncUnassignServiceInstance", "Task_AAIDeleteServiceInstance", "End_UnassignServiceInstanceBB");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignVfModuleBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignVfModuleBBTest.java
new file mode 100644
index 0000000..59fcd32
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignVfModuleBBTest.java
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class UnassignVfModuleBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDayUnassignVfModule_Test() throws InterruptedException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("UnassignVfModuleBB_Start", 
+				"UnassignVfModule",
+				"DeleteVfModule",				
+				"UnassignVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+
+	@Test
+	public void rainyDayUnassignVfModuleAAIDeleteFailed_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiDeleteTasks).deleteVfModule(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("UnassignVfModuleBB_Start", "UnassignVfModule", "DeleteVfModule")
+				.hasNotPassed("UnassignVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDayUnassignVfModuleSDNCUnassignFailed_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdncUnassignTasks).unassignVfModule(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignVfModuleBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("UnassignVfModuleBB_Start", "UnassignVfModule")
+				.hasNotPassed("DeleteVfModule", "UnassignVfModuleBB_End");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignVnfBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignVnfBBTest.java
new file mode 100644
index 0000000..666cd87
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignVnfBBTest.java
@@ -0,0 +1,77 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class UnassignVnfBBTest extends BaseBPMNTest{
+	@Test
+	public void sunnyDayUnassignVnf_Test() throws InterruptedException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignVnfBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("UnassignVnfBB_Start", 
+				"UnassignVnf",
+				"DeleteVnfInstanceGroups",
+				"DeleteVnf",				
+				"UnassignVnfBB_End");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDayUnassignVnfInstanceGroupsDeleteFailed_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(unassignVnf).deleteInstanceGroups(any(BuildingBlockExecution.class));  //.deleteVnf(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignVnfBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("UnassignVnfBB_Start", "UnassignVnf", "DeleteVnfInstanceGroups")
+				.hasNotPassed("DeleteVnf","UnassignVnfBB_End");
+		assertThat(pi).isEnded().hasVariables("gBuildingBlockExecution");
+	}
+	
+	@Test
+	public void rainyDayUnassignVnfAAIDeleteFailed_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiDeleteTasks).deleteVnf(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignVnfBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("UnassignVnfBB_Start", "UnassignVnf", "DeleteVnfInstanceGroups","DeleteVnf")
+		.hasNotPassed("UnassignVnfBB_End");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDayUnassignVnfSDNCUnassignFailed_Test() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdncUnassignTasks).unassignVnf(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignVnfBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("UnassignVnfBB_Start", "UnassignVnf")
+				.hasNotPassed("DeleteVnfInstanceGroups","DeleteVnf", "UnassignVnfBB_End");
+		assertThat(pi).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignVolumeGroupBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignVolumeGroupBBTest.java
new file mode 100644
index 0000000..46c25c1
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignVolumeGroupBBTest.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+public class UnassignVolumeGroupBBTest extends BaseBPMNTest {
+	@Test
+	public void sunnyDayUnassignVolumeGroup_Test() throws InterruptedException {
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignVolumeGroupBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted().hasPassedInOrder("UnassignVolumeGroupBB_Start", "UnassignVolumeGroup", "UnassignVolumeGroupBB_End");
+		assertThat(pi).isEnded();
+	}
+	
+	@Test
+	public void rainyDayUnassignVolumeGroup_Test() throws InterruptedException {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiDeleteTasks).deleteVolumeGroup(any(BuildingBlockExecution.class));
+		ProcessInstance pi = runtimeService.startProcessInstanceByKey("UnassignVolumeGroupBB", variables);
+		assertThat(pi).isNotNull();
+		assertThat(pi).isStarted()
+				.hasPassedInOrder("UnassignVolumeGroupBB_Start", "UnassignVolumeGroup")
+				.hasNotPassed("UnassignVolumeGroupBB_End");
+		assertThat(pi).isEnded();
+	}
+
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UpdateNetworkBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UpdateNetworkBBTest.java
new file mode 100644
index 0000000..853f713
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UpdateNetworkBBTest.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+
+public class UpdateNetworkBBTest extends BaseBPMNTest {
+    @Test
+    public void updateNetworkBBTest() throws InterruptedException {
+    	ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("UpdateNetworkBB", variables);
+    	assertThat(processInstance).isNotNull();
+    	assertThat(processInstance).isStarted().hasPassedInOrder(
+    			"UpdateNetworkBB_Start", "SDNCChangeAssignNetwork", 
+    			"QueryNetworkAAI", "QueryVpnBindingAAI", "QueryNetworkPolicyAAI", "QueryNetworkTableRefAAI", 
+    			"UpdateNetworkAdapter", "UpdateNetworkAAI", "UpdateNetworkBB_End");
+    	assertThat(processInstance).isEnded();
+    }
+
+	@Test
+	public void updateNetworkBBExceptionTest() throws Exception {
+		doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiQueryTasks).queryNetworkVpnBinding(any(BuildingBlockExecution.class));
+		
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("UpdateNetworkBB", variables);
+		assertThat(processInstance).isStarted().hasPassedInOrder(
+				"UpdateNetworkBB_Start", "SDNCChangeAssignNetwork", 
+    			"QueryNetworkAAI", "QueryVpnBindingAAI")
+			.hasNotPassed("QueryNetworkPolicyAAI", "QueryNetworkTableRefAAI", 
+    			"UpdateNetworkAdapter", "UpdateNetworkAAI", "UpdateNetworkBB_End");
+		assertThat(processInstance).isEnded();
+	}
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VnfAdapterTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VnfAdapterTest.java
new file mode 100644
index 0000000..3a41bca
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/VnfAdapterTest.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
+
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doThrow;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+
+
+public class VnfAdapterTest extends BaseBPMNTest {
+    @Test
+    public void vnfAdapterCreatedTest() {
+		mockSubprocess("vnfAdapterRestV1", "Mocked vnfAdapterRestV1", "GenericStub");
+
+    	ProcessInstance pi = runtimeService.startProcessInstanceByKey("VnfAdapter", variables);
+        assertThat(pi).isNotNull();
+        assertThat(pi).isStarted().hasPassedInOrder("VnfAdapter_Start", "PreProcessRequest", "Call_vnfAdapterRestV1","PostProcessResponse", "VnfAdapter_End");
+        assertThat(pi).isEnded();
+    }
+    
+    @Test
+    public void vnfAdapterErrorTest() {
+    	doThrow(new BpmnError("7000", "TESTING ERRORS")).when(vnfAdapterImpl).preProcessVnfAdapter(any(BuildingBlockExecution.class));
+    	ProcessInstance pi = runtimeService.startProcessInstanceByKey("VnfAdapter", variables);
+        assertThat(pi).isNotNull();
+        assertThat(pi).isStarted().hasPassedInOrder("VnfAdapter_Start", "PreProcessRequest").hasNotPassed("VnfAdapter_End");
+    }
+}
diff --git a/bpmn/so-bpmn-building-blocks/src/test/resources/application-test.yaml b/bpmn/so-bpmn-building-blocks/src/test/resources/application-test.yaml
new file mode 100644
index 0000000..0b998c7
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/resources/application-test.yaml
@@ -0,0 +1,220 @@
+aai:
+  auth: 26AFB797A6A57960D5D718491925C50F77CDC22AC394B3DBA09950D8FD1C0764
+  endpoint: http://localhost:28090
+appc:
+  client:
+    key: iaEMAfjsVsZnraBP
+    response:
+      timeout: '120000'
+    secret: wcivUjsjXzmGFBfxMmyJu9dz
+    poolMembers: localhost:3904,http://localhost:3904
+    service: ueb
+    topic:
+      read:
+        name: APPC-TEST-AMDOCS2
+        timeout: '120000'
+      write: APPC-TEST-AMDOCS1-DEV3
+      sdnc:
+        read: SDNC-LCM-READ
+        write: SDNC-LCM-WRITE
+log:
+  debug:
+    CompleteMsoProcess: 'true'
+    CreateNetworkInstanceInfra: 'true'
+    CreateServiceInstanceInfra: 'true'
+    DeleteNetworkInstanceInfra: 'true'
+    FalloutHandler: 'true'
+    UpdateNetworkInstanceInfra: 'true'
+    VnfAdapterRestV1: 'true'
+    sdncAdapter: 'true'
+    vnfAdapterCreateV1: 'true'
+    vnfAdapterRestV1: 'true'
+mso:
+  adapters:
+    completemsoprocess:
+      endpoint: http://localhost:28090/CompleteMsoProcess
+    db:
+      auth: 757A94191D685FD2092AC1490730A4FC
+      endpoint: http://localhost:28090/dbadapters/RequestsDbAdapter
+      spring:
+        endpoint: http://localhost:28090
+    network:
+      endpoint: http://localhost:28090/networks/NetworkAdapter
+      rest:
+        endpoint: http://localhost:28090/networks/rest/v1/networks
+    openecomp:
+      db:
+        endpoint: http://localhost:28090/dbadapters/RequestsDbAdapter
+    po:
+      auth: 757A94191D685FD2092AC1490730A4FC
+      password: 3141634BF7E070AA289CF2892C986C0B
+    sdnc:
+      endpoint: http://localhost:28090/SDNCAdapter
+      rest:
+        endpoint: http://localhost:28090/SDNCAdapter/v1/sdnc
+      timeout: PT60S
+    tenant:
+      endpoint: http://localhost:28090/tenantAdapterMock
+    vnf:
+      endpoint: http://localhost:28090/vnfs/VnfAdapter
+      rest:
+        endpoint: http://localhost:28090/services/rest/v1/vnfs
+    volume-groups:
+      rest:
+        endpoint: http://localhost:28090/services/rest/v1/volume-groups
+    vnf-async:
+      endpoint: http://localhost:28090/vnfs/VnfAdapterAsync
+    workflow:
+      message:
+        endpoint: http://localhost:28090/workflows/messages/message
+
+  async:
+      core-pool-size: 50
+      max-pool-size: 50
+      queue-capacity: 500
+
+  bpmn:
+    optimisticlockingexception:
+      retrycount: '3'
+  callbackRetryAttempts: '5'
+  catalog:
+    db:
+      endpoint: http://localhost:28090/
+      spring:
+        endpoint: http://localhost:28090
+  correlation:
+        timeout: 60
+  db:
+    auth: Basic YnBlbDptc28tZGItMTUwNyE=
+  default:
+    adapter:
+      namespace: http://org.onap.so
+  healthcheck:
+    log:
+      debug: 'false'
+  infra:
+    customer:
+      id: testCustIdInfra
+  logPath: logs
+  msoKey: 07a7159d3bf51a0e53be7a8f89699be7
+  po:
+    timeout: PT60S
+  request:
+    db:
+      endpoint: http://localhost:28090/
+  rollback: 'true'  
+  service:
+    agnostic:
+      sniro:
+        endpoint: /sniro/api/v2/placement
+        host: http://localhost:28090
+  site-name: localDevEnv
+  sniro:
+    auth: test:testpwd
+    policies:
+      dhv:
+        2vvig: SNIRO.DistanceToLocationPolicy_vhngw,SNIRO.VNFPolicy_vhngatewayprimary1_v1,SNIRO.ResourceInstancePolicy_hngateway,SNIRO.ResourceRegionPolicy_hngateway_v1,SNIRO.VNFPolicy_vhngatewaysecondary1_v1,SNIRO.ZonePolicy_vhngw,SNIRO.PlacementOptimizationPolicy_dhv_v3,SNIRO.VNFPolicy_vhnportal_primary1_v1,SNIRO.ResourceInstancePolicy_vhnportal_v3,SNIRO.ResourceRegionPolicy_vhnportal_v1,SNIRO.VNFPolicy_vhnportalsecondary1_v1,SNIRO.ZonePolicy_vhnportal,SNIRO.DistanceToLocationPolicy_vvig,SNIRO.InventoryGroupPolicy_vvig,SNIRO.VNFPolicy_vvigprimary1_v1,SNIRO.ResourceInstancePolicy_vvig,SNIRO.VNFPolicy_vvigsecondary1_v1
+        4vvig: SNIRO.DistanceToLocationPolicy_vhngw,SNIRO.VNFPolicy_vhngatewayprimary1_v1,SNIRO.ResourceInstancePolicy_hngateway,SNIRO.ResourceRegionPolicy_hngateway_v1,SNIRO.VNFPolicy_vhngatewaysecondary1_v1,SNIRO.ZonePolicy_vhngw,SNIRO.PlacementOptimizationPolicy_dhv_v3,SNIRO.VNFPolicy_vhnportal_primary1_v1,SNIRO.ResourceInstancePolicy_vhnportal_v3,SNIRO.ResourceRegionPolicy_vhnportal_v1,SNIRO.VNFPolicy_vhnportalsecondary1_v1,SNIRO.ZonePolicy_vhnportal,SNIRO.VNFPolicy_vvigprimary2_v1,SNIRO.VNFPolicy_vvigsecondary2_v1,SNIRO.DistanceToLocationPolicy_vvig,SNIRO.InventoryGroupPolicy_vvig,SNIRO.VNFPolicy_vvigprimary1_v1,SNIRO.ResourceInstancePolicy_vvig,SNIRO.VNFPolicy_vvigsecondary1_v1
+    timeout: PT30M
+  workflow:    
+    default:
+      aai:
+        cloud-region:
+          version: '9'
+        generic-vnf:
+          version: '9'
+        v8:
+          customer:
+            uri: /aai/v8/business/customers/customer
+          generic-query:
+            uri: /aai/v8/search/generic-query
+          l3-network:
+            uri: /aai/v8/network/l3-networks/l3-network
+          network-policy:
+            uri: /aai/v8/network/network-policies/network-policy
+          nodes-query:
+            uri: /aai/v8/search/nodes-query
+          route-table-reference:
+            uri: /aai/v8/network/route-table-references/route-table-reference
+          tenant:
+            uri: /aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant
+          vce:
+            uri: /aai/v8/network/vces/vce
+          vpn-binding:
+            uri: /aai/v8/network/vpn-bindings/vpn-binding
+        v9:
+          cloud-region:
+            uri: /aai/v9/cloud-infrastructure/cloud-regions/cloud-region/att-aic
+          generic-vnf:
+            uri: /aai/v9/network/generic-vnfs/generic-vnf
+    global:
+      default:
+        aai:
+          namespace: http://org.openecomp.aai.inventory/
+          version: '8'
+    message:
+      endpoint: http://localhost:28080/mso/WorkflowMesssage
+    notification:
+      name: GenericNotificationService
+    sdncadapter:
+      callback: http://localhost:28080/mso/SDNCAdapterCallbackService
+    vnfadapter:
+      create:
+        callback: http://localhost:28080/mso/vnfAdapterNotify
+      delete:
+        callback: http://localhost:28080/mso/vnfAdapterNotify
+      query:
+        callback: http://localhost:28080/mso/services/VNFAdapterQuerCallbackV1
+      rollback:
+        callback: http://localhost:28080/mso/vnfAdapterNotify
+  global:
+    dmaap:
+      username: dmaapUsername
+      password: dmaapPassword
+      host: http://localhost:28090
+      publisher:
+        topic: com.att.mso.asyncStatusUpdate
+policy:
+  auth: Basic dGVzdHBkcDphbHBoYTEyMw==
+  client:
+    auth: Basic bTAzNzQzOnBvbGljeVIwY2sk
+  endpoint: https://localhost:8081/pdp/api/
+  environment: TEST
+sniro:
+  conductor:
+    enabled: true
+    host: http://localhost:8446
+    uri: /v1/release-orders
+    headers.auth: Basic dGVzdDp0ZXN0cHdk
+  manager:
+    host: http://localhost:8446
+    uri: /sniro/api/placement/v2
+    headers.auth: Basic dGVzdDp0ZXN0cHdk
+    headers.patchVersion: 1
+    headers.minorVersion: 1
+    headers.latestVersion: 2
+spring:
+  datasource:
+    url: jdbc:mariadb://localhost:3307/camundabpmn
+    username: root
+    password: password
+    driver-class-name: org.mariadb.jdbc.Driver
+    initialize: true
+  jpa:
+    generate-ddl: false
+    show-sql: false
+    hibernate:
+      ddl-auto: none
+      naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
+      enable-lazy-load-no-trans: true
+    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
+
+mariaDB4j:
+  dataDir:
+  port: 3307
+  databaseName: camundabpmn
+camunda:
+  bpm:
+    metrics:
+      enabled: false
+      db-reporter-activate: false
\ No newline at end of file
diff --git a/bpmn/so-bpmn-building-blocks/src/test/resources/logback-test.xml b/bpmn/so-bpmn-building-blocks/src/test/resources/logback-test.xml
new file mode 100644
index 0000000..d8f6ba3
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/resources/logback-test.xml
@@ -0,0 +1,30 @@
+<configuration >
+
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - %msg%n
+			</pattern>
+    </encoder>
+  </appender>
+
+  <logger name="AUDIT" level="info" additivity="false">
+    <appender-ref ref="STDOUT" />
+  </logger>
+
+  <logger name="com.att.eelf.metrics" level="info" additivity="false">
+        <appender-ref ref="STDOUT" />
+  </logger>
+
+  <logger name="com.att.eelf.error" level="ERROR" additivity="false">
+    <appender-ref ref="STDOUT" />
+  </logger>
+	<logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false">
+		<appender-ref ref="STDOUT" />
+	</logger>
+  <root level="WARN">
+    <appender-ref ref="STDOUT" />
+  </root>
+
+  <logger name="wiremock.org" level="DEBUG" />
+
+</configuration>
\ No newline at end of file