11/7: merge casablanca to master 36/72136/3
authorRob Daugherty <rd472p@att.com>
Wed, 7 Nov 2018 23:30:09 +0000 (18:30 -0500)
committerRob Daugherty <rd472p@att.com>
Thu, 8 Nov 2018 01:45:00 +0000 (20:45 -0500)
Commit: dbb53cabbff772880134699eb81dee775d7df8df
Subject: Send correct resourceModuleName
Issue: SO-1178

Commit: d3759e15184562647ea83b92cf02140fc705cb0d by ss835w
Subject: Update Regex Logic to take into account new scale out URI...
Issue: SO-117

Commit: 5dadc2c5790c961a74085d3d10b6f5aec6b7ba30
Subject: Fix msb url in homing cloudsite
Issue: SO-1180

Commit: 9a9b0fa23afe8d46171fe95f1090de5a7f701d3d
Subject: Updated Reference data for AutoScaleOut
Issue: SO-1174

Commit: 3178cad6c756140b18eb658277598e3e2d2d3dcf
Subject: ConfigurationParameter is empty for scaleout
Issue: SO-1083

Commit: 402bf528e9a796f6ce31ad36c16316c2b31acc48
Subject: Added Null check for gtConfigurationParameter
Issue: SO-1179

Commit: fb6ab40a64e74876ba1f08c4d3bdb6a040c21b94
Subject: Bug fixes November 5th
Issue: SO-1188

Commit: ce37ae979311ed4e55150426d477db262773beb0
Subject: Removed slashes and added catch block
Issue: SO-1183

Commit: 16aa0b6cc42c7287fc080c81451e301c0acc14cf
Subject: removed retry from rainy day table
Issue: SO-1185

Commit: 2073a3b4c20965252c7f3a0c1aea8e4407e876fa
Subject: Fixing scaleOut workflow looping issue
Issue: SO-1182

Commit: 5ca364a5e975877244ee51796602043a4b078a23
Subject: Make homingBB optinal and fix homing process
Issue: SO-1168

Commit: 1c554c3332ccf6be4e576e9159bbb0f901197379
Subject: bug fixing with reading dmaap message
Issue: SO-1191

Change-Id: Id747bc05b791787f304316396bc5fcd20d350b6f
Issue-ID: SO-1190
Signed-off-by: Rob Daugherty <rd472p@att.com>
16 files changed:
1  2 
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/AllottedResourceUtils.groovy
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/AssignVnfBB.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignVnfBBTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/BuildingBlockValidatorRunnerTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateVolumeGroupBBTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVolumeGroupBBTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/HomingBBTest.java
bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/dmaap/PnfEventReadyDmaapClientTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasksTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ConfigurationScaleOutTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/GenericVnfHealthCheckTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidatorTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java

  
  package org.onap.so.bpmn.common.scripts
  
 -import static org.apache.commons.lang3.StringUtils.*;
 +import org.onap.so.client.aai.entities.AAIResultWrapper
 +
 +import static org.apache.commons.lang3.StringUtils.isBlank;
  
  import javax.ws.rs.NotFoundException
 +import javax.ws.rs.core.UriBuilder
  
 -import org.apache.commons.lang3.*
 +import org.apache.commons.lang.StringUtils
  import org.camunda.bpm.engine.delegate.BpmnError
 -import org.camunda.bpm.engine.delegate.DelegateExecution;
 -import org.onap.so.bpmn.core.UrnPropertiesReader
 +import org.camunda.bpm.engine.delegate.DelegateExecution
 +import org.onap.aai.domain.yang.AllottedResource
  import org.onap.so.bpmn.core.WorkflowException
 -import org.onap.so.client.aai.AAIObjectType;
 +import org.onap.so.client.PreconditionFailedException
 +import org.onap.so.client.aai.AAIObjectType
  import org.onap.so.client.aai.AAIResourcesClient
  import org.onap.so.client.aai.entities.uri.AAIResourceUri
  import org.onap.so.client.aai.entities.uri.AAIUriFactory
  import org.onap.so.logger.MessageEnum
  import org.onap.so.logger.MsoLogger
 -import org.onap.so.rest.APIResponse;
  
  
  
@@@ -71,6 -68,7 +71,6 @@@ class AllottedResourceUtils 
                String arType = execution.getVariable("allottedResourceType")
                String arRole = execution.getVariable("allottedResourceRole")
                String siXml = execution.getVariable("CSI_service")
 -              String ar = null
                String orchStatus = null
                XmlParser xmlParser = new XmlParser()
                msoLogger.debug("getAROrchStatus siXml:" + siXml)
@@@ -86,8 -84,9 +86,8 @@@
                                                        msoLogger.debug("getARORchStatus AR found")
                                                        def groovy.util.Node relatedLink = utils.getChildNode(relationship, 'related-link')
                                                        if (relatedLink != null){
 -                                                              ar = getARbyLink(execution, relatedLink.text(), arRole)
 -                                                              if (!isBlank(ar))
 -                                                              {
 +                                                              Optional<AllottedResource> ar = getARbyLink(execution, relatedLink.text(), arRole)
 +                                                              if (ar.isPresent()){
                                                                        orchStatus = execution.getVariable("aaiAROrchStatus")
                                                                        break
                                                                }
        // get Allotted Resource by AllottedResourceId
        // used on Delete - called from doDeleteAR
        // setsVariable aaiARGetResponse
 -      public String getARbyId (DelegateExecution execution, String allottedResourceId) {
 -              msoLogger.trace("getARbyId ")
 -              AAIResourceUri arLink = getARLinkbyId(execution, allottedResourceId)
 -              String ar = null
 -              if (!isBlank(arLink))
 -              {
 -                      ar = getARbyLink(execution, arLink, "")
 +      public boolean ifExistsAR(DelegateExecution execution, String allottedResourceId) {
 +              msoLogger.trace("ifExistsAR ")
 +              try {
 +                      AAIResourceUri resourceUri = AAIUriFactory.createResourceUri(AAIObjectType.ALLOTTED_RESOURCE, allottedResourceId)
 +            AAIResultWrapper wrapper = getAAIClient().get(resourceUri)
 +            Optional<AllottedResource> allottedResource = wrapper.asBean(AllottedResource.class)
 +            if(allottedResource.isPresent()) {
 +                setExecutionVariables(execution , allottedResource.get(),resourceUri)
 +                return true
 +            }else {
 +                return false
 +            }
 +              }catch(Exception e){
 +                      exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error in ifExistsAR" + e.getMessage())
                }
 -              msoLogger.trace(" Exit GetARbyId - AR:" + ar)
 -              return ar;
        }
  
        public String getPSIFmARLink(DelegateExecution execution, String arLink)
                String[] split = arLink.split("/service-instance/")
                String[] splitB =  split[1].split("/allotted-resources/")
                String siId = splitB[0]
--              msoLogger.trace(" Exit getARLinkbyId - parentServiceInstanceId:" + siId )
++              msoLogger.trace(" Exit getPSIFmARLink - parentServiceInstanceId:" + siId )
                return siId
        }
 -
 -      // get Allotted Resource Link by AllottedResourceId using Nodes Query
 -      // used on Delete - called from getARbyId
 -      public String getARLinkbyId (DelegateExecution execution, String allottedResourceId) {
 -              msoLogger.trace("getARLinkbyId ")
 -              String arLink = null
 -              try {
 -                      AAIResourcesClient client = new AAIResourcesClient()
 -                      AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.ALLOTTED_RESOURCE, allottedResourceId)
 -                      AaiUtil aaiUtil = new AaiUtil(taskProcessor)
 -                      arLink = aaiUtil.createAaiUri(uri)
 -              } catch (NotFoundException e) {
 -                      msoLogger.debug("GET AR received a Not Found (404) Response")
 -              } catch(Exception e){
 -                      msoLogger.debug(" Error encountered within GetAaiAR" + e.getMessage())
 -                      exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error in GetARbyId" + e.getMessage())
 -              }
 -              msoLogger.debug(" ***** Exit GetARLinkbyId ***** Link:" + arLink)
 -              return arLink
 -      }
 -
 +      
        // get Allotted resource using Link
        // used on Create called from getARORchStatus
 -      // used on Delete called from getARbyId
 +      // used on Delete called from ifExistsAR
        // setsVariable aaiARPath - used for Patch in create
 -      public String getARbyLink (DelegateExecution execution, String link, String role) {
 +      
 +      public Optional<AllottedResource> getARbyLink (DelegateExecution execution, String link, String role) {
                msoLogger.trace("getARbyLink ")
 -              String ar = null
 -              String arUrl = null
 +              Optional<AllottedResource> allottedResource = Optional.empty()
                try {
 -                      AaiUtil aaiUriUtil = new AaiUtil(taskProcessor)
 -                      String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
 -                      String arEndpoint = ""
 -
 -                      if(!isBlank(link)) {
 -                              msoLogger.debug("Incoming AR Resource Link is: " + link)
 -                              String[] split = link.split("/aai/")
 -                              arEndpoint = "/aai/" + split[1]
 -                      }
 -
 -                      arUrl = "${aai_endpoint}" + arEndpoint
 -
 -                      msoLogger.debug("GET AR Aai Path is: \n" + arUrl)
 -
 -                      APIResponse response = aaiUriUtil.executeAAIGetCall(execution, arUrl)
 -                      int responseCode = response.getStatusCode()
 -                      msoLogger.debug("  GET AR response code is: " + responseCode)
 -
 -                      String aaiResponse = response.getResponseBodyAsString()
 -                      msoLogger.debug("GET AR:" + aaiResponse)
 -                      if(responseCode == 200 || responseCode == 202){
 -                              msoLogger.debug("GET AR Received a Good Response Code")
 -                              if(utils.nodeExists(aaiResponse, "allotted-resource")){
 -                                      if (!isBlank(role))
 -                                      {
 -                                              if (utils.nodeExists(aaiResponse, "role") && role.equals(utils.getNodeText(aaiResponse, "role"))) {
 -                                                      ar = aaiResponse
 -                                              }else{
 -                                                      msoLogger.debug("AAI AR does not match input role:" + role)
 -                                              }
 +                      msoLogger.debug("GET AR Aai Path is: \n" + link)
 +                      AAIResourceUri uri = AAIUriFactory.createResourceFromExistingURI(AAIObjectType.ALLOTTED_RESOURCE, UriBuilder.fromPath(link).build())
 +                      allottedResource = getAAIClient().get(AllottedResource.class,uri);
 +                      if(allottedResource.isPresent()) {
 +                              if (!isBlank(role)) {
 +                                      if (role == allottedResource.get().getRole()) {
 +                                              setExecutionVariables(execution,allottedResource.get(),uri)
 +                                      } else {
 +                                              msoLogger.debug("AAI AR does not match input role:" + role)
                                        }
 -                                      else
 -                                      {
 -                                              ar = aaiResponse
 -                                      }
 -                              }
 -                              else
 -                              {
 -                                      msoLogger.debug("GET AR Does NOT Contain Data" )
 +                              } else {
 +                                      setExecutionVariables(execution,allottedResource.get(),uri)
                                }
 -                      }else if(responseCode == 404){
 +                      }else{
                                msoLogger.debug("GET AR received a Not Found (404) Response")
                        }
 -                      else{
 -                              msoLogger.debug("  GET AR received a Bad Response: \n" + aaiResponse)
 -                              buildAAIErrorResponse(execution, aaiResponse, "Error retrieving AR from AAI")
 -                      }
                }catch(Exception e){
                        msoLogger.debug(" Error encountered within GetAaiAR" + e.getMessage())
                        exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error in GetAaiAR" + e.getMessage())
                }
 -              if (!isBlank(ar))
 -              {
 -                      execution.setVariable("aaiARGetResponse", ar)
 -                      execution.setVariable("aaiARPath", arUrl)
 -
 -                      String resourceVersion = null
 -                      if (utils.nodeExists(ar, "resource-version")) {
 -                              resourceVersion = utils.getNodeText(ar, "resource-version")
 -                              execution.setVariable("aaiARResourceVersion", resourceVersion)
 -                      }
 +              return allottedResource
 +      }
  
 -                      String orchStatus = null
 -                      if (utils.nodeExists(ar, "orchestration-status")) {
 -                              orchStatus= utils.getNodeText(ar, "orchestration-status")
 -                      }
 -                      else
 -                      {
 -                              orchStatus = " "
 -                      }
 -                      execution.setVariable("aaiAROrchStatus", orchStatus)
 +      public void setExecutionVariables(DelegateExecution execution, AllottedResource ar, AAIResourceUri arUrl) {
 +              execution.setVariable("aaiARGetResponse", ar)
 +              execution.setVariable("aaiARPath", arUrl.build().toString())
 +              execution.setVariable("aaiARResourceVersion", ar.getResourceVersion())
 +              if (StringUtils.isNotEmpty(ar.getOrchestrationStatus())) {
 +                      execution.setVariable("aaiAROrchStatus", ar.getOrchestrationStatus())
 +              }
 +              else
 +              {
 +                      execution.setVariable("aaiAROrchStatus", " ")
                }
 -              msoLogger.trace(" Exit GetARbyLink - AR:" + ar)
 -              return ar
        }
  
        public void updateAROrchStatus(DelegateExecution execution, String status, String aaiARPath){
                msoLogger.trace("updaAROrchStatus ")
                try{
  
 -                      String updateReq =      """
 -                                      {
 -                                      "orchestration-status": "${status}"
 -                                      }
 -                                      """
 -
 +                      AllottedResource allottedResource = new AllottedResource();
 +                      allottedResource.setOrchestrationStatus(status)
                        msoLogger.debug('AAI AR URI: ' + aaiARPath)
  
 -                      AaiUtil aaiUriUtil = new AaiUtil(taskProcessor)
 -                      APIResponse apiResponse = aaiUriUtil.executeAAIPatchCall(execution, aaiARPath, updateReq)
 -                      def aaiResponse = apiResponse.getResponseBodyAsString()
 -                      def responseCode = apiResponse.getStatusCode()
 -
 -                      msoLogger.debug("AAI Response Code: " + responseCode)
 -                      msoLogger.debug("AAI Response: " + aaiResponse)
 -                      if(responseCode == 200){
 -                              msoLogger.debug("UpdateAR Good REST Response is: " + "\n" + aaiResponse)
 -                      }else{
 -                              msoLogger.debug("UpdateAROrchStatus Bad REST Response!")
 -                              buildAAIErrorResponse(execution, aaiResponse, "Error updating AR OrchStatus in AAI")
 -                      }
 -
 -              }catch(BpmnError b){
 -                      msoLogger.debug("Rethrowing MSOWorkflowException ")
 -                      throw b
 +                      AAIResourceUri uri = AAIUriFactory.createResourceFromExistingURI(AAIObjectType.ALLOTTED_RESOURCE, UriBuilder.fromPath(aaiARPath).build())
 +                      getAAIClient().update(uri,allottedResource)
                }catch(Exception e){
                        msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, "Exception in updateAR.", "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, e.getMessage());
                        exceptionUtil.buildAndThrowWorkflowException(execution, 500, 'Internal Error in updateAROrchStatus.' + e.getMessage())
        public void deleteAR(DelegateExecution execution, String aaiARPath){
                msoLogger.trace(" deleteAR - aaiARPath:" + aaiARPath)
                try {
 -                      AaiUtil aaiUriUtil = new AaiUtil(taskProcessor)
 -                      APIResponse response = aaiUriUtil.executeAAIDeleteCall(execution, aaiARPath)
 -                      int responseCode = response.getStatusCode()
 -                      execution.setVariable("deleteARResponseCode", responseCode)
  
 -                      msoLogger.debug("  Delete AR response code:" + responseCode)
 -
 -                      String aaiResponse = response.getResponseBodyAsString()
 -                      execution.setVariable("aaiARDeleteResponse", aaiResponse)
 -
 -                      msoLogger.debug("Delete AR Response:" + aaiResponse)
 -
 -                      //Process Response
 -                      if(responseCode == 204){
 -                              msoLogger.debug("  Delete AR Received a Good Response")
 -                              execution.setVariable("wasDeleted", "true")
 -                      }else if(responseCode == 404){
 -                              msoLogger.debug("  Delete AR Received a Not Found (404) Response")
 -                      }else if(responseCode == 412){
 -                              msoLogger.debug("Delete AR Received a Resource Version Mismatch Error: \n" + aaiResponse)
 -                              exceptionUtil.buildAndThrowWorkflowException(execution, 412, "DeleteAR Received a resource-version Mismatch Error Response from AAI")
 -                      }else{
 -                              msoLogger.debug("Delete AR Received a BAD REST Response: \n" + aaiResponse)
 -                              buildAAIErrorResponse(execution, aaiResponse, "Error deleting AR in AAI")
 -                              exceptionUtil.MapAAIExceptionToWorkflowExceptionGeneric(execution, aaiResponse, responseCode)
 -                      }
 -              }catch(BpmnError b){
 -                      msoLogger.debug("Rethrowing MSOWorkflowException")
 -                      throw b
 +                      AAIResourceUri uri = AAIUriFactory.createResourceFromExistingURI(AAIObjectType.ALLOTTED_RESOURCE, UriBuilder.fromPath(aaiARPath).build())
 +                      getAAIClient().delete(uri);
 +              }catch(NotFoundException ex){
 +                      msoLogger.debug("  Delete AR Received a Not Found (404) Response")
 +              }catch(PreconditionFailedException ex){
 +                      msoLogger.debug("Delete AR Received a Resource Version Mismatch Error: \n")
 +                      exceptionUtil.buildAndThrowWorkflowException(execution, 412, "DeleteAR Received a resource-version Mismatch Error Response from AAI")
                }catch(Exception e){
                        msoLogger.debug(" Error encountered in deleteAR!" + e)
                        exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured During Delete AR")
                }
 +              msoLogger.debug("  Delete AR Received a Good Response")
 +              execution.setVariable("wasDeleted", "true")
                msoLogger.trace("Exit deleteAR ")
        }
  
                throw new BpmnError("MSOWorkflowException")
        }
        
 -      public String createARUrl(DelegateExecution execution, AAIResourceUri uri, String allottedResourceId) {
 -              AaiUtil aaiUriUtil = new AaiUtil(taskProcessor)
 -              AAIResourceUri siResourceLink= uri
 -
 -              String siUri = ""
 -
 -              if(siResourceLink != null) {
 -                      msoLogger.debug("Incoming PSI Resource Link is: " + siResourceLink.build().toString())
 -              }
 -              else
 -              {
 -                      String msg = "Parent Service Link in AAI is null"
 -                      msoLogger.debug(msg)
 -                      exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 -              }
 -              AAIResourceUri arUri = AAIUriFactory.createResourceFromParentURI(siResourceLink, AAIObjectType.ALLOTTED_RESOURCE, allottedResourceId)
 -
 -              return aaiUriUtil.createAaiUri(arUri)
 +      public  AAIResourcesClient getAAIClient(){
 +              return new AAIResourcesClient()
        }
  
  }
   * ============LICENSE_END=========================================================
   */
  package org.onap.so.bpmn.common.scripts
  import org.onap.so.bpmn.core.UrnPropertiesReader
  import org.camunda.bpm.engine.delegate.BpmnError
  import org.camunda.bpm.engine.delegate.DelegateExecution
  
- import org.onap.so.bpmn.common.scripts.AaiUtil
- import org.onap.so.bpmn.common.scripts.ExceptionUtil
  import org.onap.so.bpmn.core.domain.InventoryType
  import org.onap.so.bpmn.core.domain.Resource
  import org.onap.so.bpmn.core.domain.ResourceType
@@@ -32,13 -30,11 +30,13 @@@ import org.onap.so.bpmn.core.domain.Ser
  import org.onap.so.bpmn.core.domain.Subscriber
  import org.onap.so.bpmn.core.domain.VnfResource
  import org.onap.so.bpmn.core.json.JsonUtils
 +import org.onap.so.client.HttpClient
 +import org.onap.so.logger.MsoLogger
  import org.onap.so.db.catalog.beans.CloudIdentity
  import org.onap.so.db.catalog.beans.CloudSite
 -import org.onap.so.rest.APIResponse
 -import org.onap.so.rest.RESTClient
 -import org.onap.so.rest.RESTConfig
 +
 +import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 +import org.onap.so.utils.TargetEntity
  
  import org.json.JSONArray
  import org.json.JSONObject
@@@ -46,8 -42,6 +44,8 @@@ import org.springframework.web.util.Uri
  
  import static org.onap.so.bpmn.common.scripts.GenericUtils.*
  
 +import javax.ws.rs.core.Response
 +
  /**
   * This class contains the scripts used
   * by the OOF Homing Subflow building block. The
@@@ -138,7 -132,7 +136,7 @@@ class OofHoming extends AbstractService
  
                  //Prepare Callback
                  String timeout = execution.getVariable("timeout")
 -                if (isBlank(timeout)) {                                       
 +                if (isBlank(timeout)) {
                      timeout = UrnPropertiesReader.getVariable("mso.oof.timeout", execution);
                      if (isBlank(timeout)) {
                          timeout = "PT30M"
                  execution.setVariable("oofRequest", oofRequest)
                  utils.log("DEBUG", "OOF Request is: " + oofRequest, isDebugEnabled)
  
 -                String url = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
 -                utils.log("DEBUG", "Posting to OOF Url: " + url, isDebugEnabled)
 +                String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
 +                utils.log("DEBUG", "Posting to OOF Url: " + urlString, isDebugEnabled)
  
 -                logDebug("URL to be used is: " + url, isDebugEnabled)
  
 -                RESTConfig config = new RESTConfig(url)
 -                RESTClient client = new RESTClient(config).addAuthorizationHeader(authHeader).
 -                        addHeader("Content-Type", "application/json")
 -                APIResponse response = client.httpPost(oofRequest)
 +                              URL url = new URL(urlString);
 +                              HttpClient httpClient = new HttpClient(url, "application/json", TargetEntity.SNIRO)
 +                              httpClient.addAdditionalHeader("Authorization", authHeader)
 +                              Response httpResponse = httpClient.post(oofRequest)
  
 -                int responseCode = response.getStatusCode()
 -                logDebug("OOF sync response code is: " + responseCode, isDebugEnabled)
 -                String syncResponse = response.getResponseBodyAsString()
 -                execution.setVariable("syncResponse", syncResponse)
 -                logDebug("OOF sync response is: " + syncResponse, isDebugEnabled)
 +                              int responseCode = httpResponse.getStatus()
 +                              logDebug("OOF sync response code is: " + responseCode, isDebugEnabled)
  
 -                              if(responseCode != 202){
 -                                      exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from OOF.")
 -                              }
  
                  utils.log("DEBUG", "*** Completed Homing Call OOF ***", isDebugEnabled)
              }
                              resource.getHomingSolution().setCloudOwner(cloudOwner)
                              resource.getHomingSolution().setCloudRegionId(cloudRegionId)
  
-                             CloudSite cloudSite = new CloudSite();
+                             CloudSite cloudSite = new CloudSite()
                              cloudSite.setId(cloudRegionId)
                              cloudSite.setRegionId(cloudRegionId)
                              String orchestrator = execution.getVariable("orchestrator")
                                  cloudSite.setOrchestrator(orchestrator)
                              }
  
-                             CloudIdentity cloudIdentity = new CloudIdentity();
-                             cloudIdentity.setId(cloudRegionId);
-                             cloudIdentity.setIdentityUrl("/api/multicloud /v1/" + cloudOwner + "/" + cloudRegionId + "/infra_workload")
-                             cloudSite.setIdentityService(cloudIdentity);
+                             CloudIdentity cloudIdentity = new CloudIdentity()
+                             cloudIdentity.setId(cloudRegionId)
+                             // Get MSB Url
+                             String msbHost = oofUtils.getMsbHost(execution)
+                             String multicloudApiEndpoint = UrnPropertiesReader
+                                     .getVariable("mso.multicloud.api.endpoint", execution,
+                                     "/api/multicloud-titaniumcloud/v1")
+                             cloudIdentity.setIdentityUrl(msbHost + multicloudApiEndpoint
+                                     + "/" + cloudOwner + "/" +
+                                     cloudRegionId + "/infra_workload")
+                             cloudSite.setIdentityService(cloudIdentity)
  
                              // Set cloudsite in catalog DB here
                              oofUtils.createCloudSiteCatalogDb(cloudSite)
@@@ -33,9 -33,10 +33,9 @@@ import org.onap.so.bpmn.core.domain.Ser
  import org.onap.so.bpmn.core.domain.Subscriber
  import org.onap.so.bpmn.core.domain.VnfResource
  import org.onap.so.bpmn.core.json.JsonUtils
 +import org.onap.so.client.HttpClient
  import org.onap.so.db.catalog.beans.CloudSite
 -import org.onap.so.rest.APIResponse
 -import org.onap.so.rest.RESTClient
 -import org.onap.so.rest.RESTConfig
 +import org.onap.so.utils.TargetEntity
  import org.springframework.http.HttpEntity
  import org.springframework.http.HttpHeaders
  import org.springframework.http.HttpMethod
@@@ -158,6 -159,8 +158,8 @@@ class OofUtils 
                      utils.log("DEBUG", "Allotted Resource: " + resource.toString(),
                              isDebugEnabled)
                      def serviceResourceId = resource.getResourceId()
+                     def toscaNodeType = resource.getToscaNodeType()
+                     def resourceModuleName = toscaNodeType.substring(toscaNodeType.lastIndexOf(".") + 1)
                      def resourceModelInvariantId = resource.getModelInfo().getModelInvariantUuid()
                      def resourceModelVersionId = resource.getModelInfo().getModelUuid()
                      def resourceModelName = resource.getModelInfo().getModelName()
  
                      String demand =
                              "      {\n" +
-                                     "      \"resourceModuleName\": \"${resourceModelName}\",\n" +
+                                     "      \"resourceModuleName\": \"${resourceModuleName}\",\n" +
                                      "      \"serviceResourceId\": \"${serviceResourceId}\",\n" +
                                      "      \"tenantId\": \"${tenantId}\",\n" +
                                      "      \"resourceModelInfo\": {\n" +
                      utils.log("DEBUG", "VNF Resource: " + vnfResource.toString(),
                              isDebugEnabled)
                      ModelInfo vnfResourceModelInfo = vnfResource.getModelInfo()
+                     def toscaNodeType = vnfResource.getToscaNodeType()
+                     def resourceModuleName = toscaNodeType.substring(toscaNodeType.lastIndexOf(".") + 1)
                      def serviceResourceId = vnfResource.getResourceId()
                      def resourceModelInvariantId = vnfResourceModelInfo.getModelInvariantUuid()
                      def resourceModelName = vnfResourceModelInfo.getModelName()
  
                      String placementDemand =
                              "      {\n" +
-                                     "      \"resourceModuleName\": \"${resourceModelName}\",\n" +
+                                     "      \"resourceModuleName\": \"${resourceModuleName}\",\n" +
                                      "      \"serviceResourceId\": \"${serviceResourceId}\",\n" +
                                      "      \"tenantId\": \"${tenantId}\",\n" +
                                      "      \"resourceModelInfo\": {\n" +
          String auth = UrnPropertiesReader.getVariable("mso.db.auth", execution)
          String uri = "/cloudSite"
  
 -        HttpHeaders headers = new HttpHeaders()
 +      URL url = new URL(endpoint + uri)
 +      HttpClient client = new HttpClient(url, MediaType.APPLICATION_JSON, TargetEntity.EXTERNAL)
 +      client.addAdditionalHeader(HttpHeaders.AUTHORIZATION, auth)
 +      client.addAdditionalHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON)
  
 -        headers.set(HttpHeaders.AUTHORIZATION, auth)
 -        headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON)
 -        headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
 +        Response response = client.post(request.getBody().toString())
  
 -        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(endpoint + uri)
 -        HttpEntity<CloudSite> request = new HttpEntity<CloudSite>(cloudSite, headers)
 -        RESTConfig config = new RESTConfig(endpoint + uri)
 -        RESTClient client = new RESTClient(config).addAuthorizationHeader(auth).
 -                addHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON).addHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
 -        APIResponse response = client.httpPost(request.getBody().toString())
 -
 -        int responseCode = response.getStatusCode()
 +        int responseCode = response.getStatus()
          logDebug("CatalogDB response code is: " + responseCode, isDebugEnabled)
 -        String syncResponse = response.getResponseBodyAsString()
 +        String syncResponse = response.readEntity(String.class)
          logDebug("CatalogDB response is: " + syncResponse, isDebugEnabled)
  
          if(responseCode != 202){
              exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from CatalogDB.")
          }
      }
+      String getMsbHost(DelegateExecution execution) {
+          msbHost = UrnPropertiesReader.getVariable("mso.msb.host", execution, "msb-iag.onap")
+          Integer msbPort = UrnPropertiesReader.getVariable("mso.msb.port", execution, "80").toInteger()
+          return UriBuilder.fromPath("").host(msbHost).port(msbPort).scheme("http").build().toString()
+     }
  }
@@@ -1,5 -1,5 +1,5 @@@
  <?xml version="1.0" encoding="UTF-8"?>
 -<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0">
 +<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.7.1">
    <bpmn:process id="AssignVnfBB" name="AssignVnfBB" isExecutable="true">
      <bpmn:startEvent id="Start_AssignVnfBB">
        <bpmn:outgoing>SequenceFlow_0zaz9o2</bpmn:outgoing>
      </bpmn:serviceTask>
      <bpmn:sequenceFlow id="SequenceFlow_1jwsja5" sourceRef="Task_CreateVnf" targetRef="Task_createPlatform" />
      <bpmn:sequenceFlow id="SequenceFlow_1nle8kc" sourceRef="Task_createInstanceGroups" targetRef="ExclusiveGateway_02tchpp" />
-     <bpmn:sequenceFlow id="SequenceFlow_11jum90" name="no" sourceRef="ExclusiveGateway_02tchpp" targetRef="ExclusiveGateway_1blf52g" />
+     <bpmn:sequenceFlow id="SequenceFlow_11jum90" name="no" sourceRef="ExclusiveGateway_02tchpp" targetRef="ExclusiveGateway_1blf52g">
+       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("callHoming") == false}]]></bpmn:conditionExpression>
+     </bpmn:sequenceFlow>
      <bpmn:sequenceFlow id="SequenceFlow_1uiok7v" name="yes" sourceRef="ExclusiveGateway_02tchpp" targetRef="Task_callHoming">
-       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("callHoming")}]]></bpmn:conditionExpression>
+       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("callHoming") == true}]]></bpmn:conditionExpression>
      </bpmn:sequenceFlow>
      <bpmn:sequenceFlow id="SequenceFlow_0v8d14a" sourceRef="Task_callHoming" targetRef="ExclusiveGateway_1blf52g" />
      <bpmn:callActivity id="Task_callHoming" name="Call Homing" calledElement="HomingBB">
@@@ -38,6 -40,7 +40,6 @@@
          <camunda:in source="gBuildingBlockExecution" target="gBuildingBlockExecution" />
          <camunda:in source="mso-request-id" target="mso-request-id" />
          <camunda:out source="generalBuildingBlock" target="gBBInput" />
 -        <camunda:out source="WorkflowException" target="WorkflowException" />
        </bpmn:extensionElements>
        <bpmn:incoming>SequenceFlow_1uiok7v</bpmn:incoming>
        <bpmn:outgoing>SequenceFlow_0v8d14a</bpmn:outgoing>
@@@ -64,7 -67,7 +66,7 @@@
        <bpmn:sequenceFlow id="SequenceFlow_1i52a7x" sourceRef="StartEvent_1c3cyuv" targetRef="EndEvent_1bywujf" />
      </bpmn:subProcess>
      <bpmn:sequenceFlow id="SequenceFlow_14mpqit" sourceRef="ExclusiveGateway_1blf52g" targetRef="Task_SDNCAdapterVnfTopologyAssign" />
-     <bpmn:inclusiveGateway id="ExclusiveGateway_02tchpp" name="Call Homing?" default="SequenceFlow_11jum90">
+     <bpmn:inclusiveGateway id="ExclusiveGateway_02tchpp" name="Call Homing?">
        <bpmn:incoming>SequenceFlow_1nle8kc</bpmn:incoming>
        <bpmn:outgoing>SequenceFlow_11jum90</bpmn:outgoing>
        <bpmn:outgoing>SequenceFlow_1uiok7v</bpmn:outgoing>
        <bpmndi:BPMNShape id="InclusiveGateway_0x0c3kk_di" bpmnElement="ExclusiveGateway_02tchpp">
          <dc:Bounds x="679" y="109" width="50" height="50" />
          <bpmndi:BPMNLabel>
-           <dc:Bounds x="732" y="128" width="64" height="12" />
+           <dc:Bounds x="731" y="128" width="67" height="13" />
          </bpmndi:BPMNLabel>
        </bpmndi:BPMNShape>
        <bpmndi:BPMNShape id="InclusiveGateway_0ijggth_di" bpmnElement="ExclusiveGateway_1blf52g">
        </bpmndi:BPMNShape>
      </bpmndi:BPMNPlane>
    </bpmndi:BPMNDiagram>
 -</bpmn:definitions>
 +</bpmn:definitions>
@@@ -1,5 -1,5 +1,5 @@@
  <?xml version="1.0" encoding="UTF-8"?>
- <bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.8.2">
+ <bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.4.0">
    <bpmn:process id="WorkflowActionBB" name="WorkflowActionBB" isExecutable="true">
      <bpmn:startEvent id="Start_WorkflowActionBB" name="start">
        <bpmn:outgoing>SequenceFlow_15s0okp</bpmn:outgoing>
@@@ -18,6 -18,8 +18,8 @@@
          <camunda:in source="retryCount" target="retryCount" />
          <camunda:out source="WorkflowExceptionErrorMessage" target="WorkflowExceptionErrorMessage" />
          <camunda:in source="aLaCarte" target="aLaCarte" />
+         <camunda:in source="orchestrationStatusValidationResult" target="orchestrationStatusValidationResult" />
+         <camunda:out source="orchestrationStatusValidationResult" target="orchestrationStatusValidationResult" />
        </bpmn:extensionElements>
        <bpmn:incoming>SequenceFlow_0mew9im</bpmn:incoming>
        <bpmn:outgoing>SequenceFlow_07h9d4y</bpmn:outgoing>
        </bpmn:serviceTask>
      </bpmn:subProcess>
      <bpmn:sequenceFlow id="SequenceFlow_0v588sm" name="Rollback = true" sourceRef="ExclusiveGateway_Finished" targetRef="Task_RollbackExecutionPath">
 -      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("handlingCode")=="Rollback"}]]></bpmn:conditionExpression>
 +      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("handlingCode")=="Rollback"||execution.getVariable("handlingCode")=="RollbackToAssigned"}]]></bpmn:conditionExpression>
      </bpmn:sequenceFlow>
      <bpmn:sequenceFlow id="SequenceFlow_1atzsgn" sourceRef="Task_RollbackExecutionPath" targetRef="Task_SelectBB">
        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isRollbackNeeded")==true}]]></bpmn:conditionExpression>
        </bpmndi:BPMNEdge>
      </bpmndi:BPMNPlane>
    </bpmndi:BPMNDiagram>
- </bpmn:definitions>
+ </bpmn:definitions>
@@@ -19,8 -19,9 +19,8 @@@
   */
  
  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.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
 +import static org.mockito.ArgumentMatchers.any;
  import static org.mockito.Mockito.doThrow;
  
  import java.io.IOException;
@@@ -35,6 -36,6 +35,7 @@@ public class AssignVnfBBTest extends Ba
        @Test
        public void sunnyDayAssignVnfBBTest() throws InterruptedException, IOException {
                variables.put("callHoming", true);
++              mockSubprocess("ReceiveWorkflowMessage", "Mocked ReceiveWorkflowMessage", "GenericStub");
                ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignVnfBB", variables);
                assertThat(pi).isNotNull();
                assertThat(pi).isStarted().hasPassedInOrder("Start_AssignVnfBB", "Task_CreateVnf", "Task_createPlatform", "Task_createLineOfBusiness", "Task_createInstanceGroups",
index 0000000,ea0fb95..a241ae5
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,44 +1,42 @@@
 -import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 -import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.job;
 -import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.execute;
 -import org.camunda.bpm.engine.runtime.Job;
+ /*-
+  * ============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 org.camunda.bpm.engine.task.Task;
++import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
++import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.job;
++import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.execute;
+ import org.camunda.bpm.engine.runtime.ProcessInstance;
+ import org.junit.Test;
+ import org.onap.so.bpmn.BaseBPMNTest;
+ public class BuildingBlockValidatorRunnerTest extends BaseBPMNTest{
+     @Test
+     public void sunnyDayActivateNetwork_Test() throws InterruptedException {
+       variables.put("flowToBeCalled","CreateVolumeGroupBB");
+         ProcessInstance pi = runtimeService.startProcessInstanceByKey("BuildingBlockValidatorRunnerTest", variables);
+         assertThat(pi).isNotNull();
+         
+         execute(job());
+         execute(job());
+         assertThat(pi).isStarted().hasPassedInOrder("ServiceTask_1","ServiceTask_2","ServiceTask_3");     
+         assertThat(pi).isEnded();
+     }
+ }
@@@ -19,8 -19,9 +19,8 @@@
   */
  
  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.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
 +import static org.mockito.ArgumentMatchers.any;
  import static org.mockito.Mockito.doThrow;
  
  import org.camunda.bpm.engine.delegate.BpmnError;
@@@ -53,6 -54,6 +53,7 @@@ public class CreateVolumeGroupBBTest ex
        
        @Test
        public void rainyDayCreateVolumeGroupUpdateHeatStackIdError_Test() throws Exception {
++              mockSubprocess("VnfAdapter", "Mocked VnfAdapter", "GenericStub");
                doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks).updateHeatStackIdVolumeGroup(any(BuildingBlockExecution.class));
                ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVolumeGroupBB", variables);
                assertThat(pi).isNotNull();
@@@ -19,8 -19,9 +19,8 @@@
   */
  
  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.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
 +import static org.mockito.ArgumentMatchers.any;
  import static org.mockito.Mockito.doThrow;
  
  import org.camunda.bpm.engine.delegate.BpmnError;
@@@ -32,6 -33,6 +32,7 @@@ import org.onap.so.bpmn.common.Building
  public class DeleteVolumeGroupBBTest extends BaseBPMNTest {
        @Test
        public void sunnyDayDeleteVolumeGroup_Test() throws InterruptedException {
++              mockSubprocess("VnfAdapter", "Mocked VnfAdapter", "GenericStub");
                ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteVolumeGroupBB", variables);
                assertThat(pi).isNotNull();
                assertThat(pi).isStarted().hasPassedInOrder("DeleteVolumeGroupBB_Start", "DeleteVolumeGroupVnfAdapter", "VnfAdapter", "UpdateVolumeGroupAAI", "DeleteVolumeGroupBB_End");
@@@ -40,6 -41,6 +41,7 @@@
  
        @Test
        public void rainyDayDeleteVolumeGroup_Test() throws Exception {
++              mockSubprocess("VnfAdapter", "Mocked VnfAdapter", "GenericStub");
                doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks).updateOrchestrationStatusAssignedVolumeGroup(any(BuildingBlockExecution.class));
                ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteVolumeGroupBB", variables);
                assertThat(pi).isNotNull();
@@@ -7,9 -7,9 +7,9 @@@
   * 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.
   * ============LICENSE_END=========================================================
   */
  
 -package org.onap.so.bpmn.buildingblock;
 +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.camunda.bpm.engine.test.assertions.ProcessEngineAssertions.assertThat;
 +import static org.mockito.ArgumentMatchers.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.bpmn.BaseBPMNTest;
  import org.onap.so.bpmn.buildingblock.SniroHomingV2;
  import org.onap.so.bpmn.common.BuildingBlockExecution;
 -import org.onap.so.BaseTest;
  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;
 +public class HomingBBTest extends BaseBPMNTest{
  
        @Test
        public void testHomingV2_success(){
                mockSubprocess("ReceiveWorkflowMessage", "Mock ReceiveWorkflowMessage", "GenericStub");
 -              ProcessInstance pi = runtimeService.startProcessInstanceByKey("HomingV2", variables);
 +              ProcessInstance pi = runtimeService.startProcessInstanceByKey("HomingBB", variables);
                assertThat(pi).isNotNull();
 -              assertThat(pi).isStarted().hasPassedInOrder("start", "callSniro", "callReceiveAsync", "processSolution", "end");
 +              assertThat(pi).isStarted().hasPassedInOrder("start", "sniroOofCheck", "callSniro", "ExclusiveGateway_1ckp059", "receiveAsyncCallback", "sniroOofCheck2", "processSniroSolution", "ExclusiveGateway_1kvzxpb", "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);
 +              ProcessInstance pi = runtimeService.startProcessInstanceByKey("HomingBB", variables);
                assertThat(pi).isNotNull();
                assertThat(pi).isStarted()
-                               .hasPassedInOrder("start", "sniroOofCheck", "startBpmnError", "bpmnErrorSubprocess", "processMsoWorkflowException", "endBpmnError")
 -                              .hasPassedInOrder("start", "catchJavaException", "processJavaException", "endJavaException")
++                              .hasPassedInOrder("start", "sniroOofCheck", "startBpmnError", "processMsoWorkflowException", "endBpmnError")
                                .hasNotPassed("callReceiveAsync");
                assertThat(pi).isEnded();
        }
@@@ -4,6 -4,8 +4,8 @@@
   * ================================================================================
   * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
   * ================================================================================
+  * Copyright (C) 2018 Nokia.
+  * ================================================================================
   * 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
@@@ -20,9 -22,8 +22,9 @@@
  
  package org.onap.so.bpmn.infrastructure.pnf.dmaap;
  
 -import static org.assertj.core.api.Assertions.assertThat;
 -import static org.mockito.Matchers.any;
 +
 +import static org.junit.Assert.*;
 +import static org.mockito.ArgumentMatchers.any;
  import static org.mockito.Matchers.eq;
  import static org.mockito.Mockito.mock;
  import static org.mockito.Mockito.verify;
@@@ -48,7 -49,7 +50,7 @@@ import org.junit.Test
  import org.junit.runner.RunWith;
  import org.mockito.ArgumentCaptor;
  import org.mockito.Mock;
 -import org.mockito.runners.MockitoJUnitRunner;
 +import org.mockito.junit.MockitoJUnitRunner;
  import org.onap.so.bpmn.infrastructure.pnf.dmaap.PnfEventReadyDmaapClient.DmaapTopicListenerThread;
  import org.springframework.core.env.Environment;
  @RunWith(MockitoJUnitRunner.class)
@@@ -56,22 -57,10 +58,10 @@@ public class PnfEventReadyDmaapClientTe
  
      private static final String CORRELATION_ID = "corrTestId";
      private static final String CORRELATION_ID_NOT_FOUND_IN_MAP = "otherCorrId";
-     private static final String JSON_EXAMPLE_WITH_CORRELATION_ID = "[\n"
-             + "    {\n"
-             + "        \"pnfRegistrationFields\" : {\n"
-             + "        \"correlationId\" : \"%s\",\n"
-             + "        \"value\" : \"value1\"\n"
-             + "        }\n"
-             + "    },\n"
-             + "    {\n"
-             + "        \"pnfRegistrationFields\" : {\n"
-             + "        \"correlationId\" : \"corr\",\n"
-             + "        \"value\" : \"value2\"\n"
-             + "        }\n"
-             + "    }\n"
-             + "]";
-     private static final String JSON_EXAMPLE_WITH_NO_CORRELATION_ID =
-             "{\"pnfRegistrationFields\":{\"field\":\"value\"}}";
+     private static final String JSON_EXAMPLE_WITH_CORRELATION_ID = "[{\"correlationId\": \"%s\","
+             + "\"value\":\"value1\"},{\"correlationId\": \"corr\",\"value\":\"value2\"}]";
+     private static final String JSON_EXAMPLE_WITH_NO_CORRELATION_ID = "[{\"key1\":\"value1\"}]";
  
      private static final String HOST = "hostTest";
      private static final int PORT = 1234;
                  thenReturn(createResponse(String.format(JSON_EXAMPLE_WITH_CORRELATION_ID, CORRELATION_ID)));
          testedObjectInnerClassThread.run();
          ArgumentCaptor<HttpGet> captor1 = ArgumentCaptor.forClass(HttpGet.class);
 -        verify(httpClientMock).execute(captor1.capture());
 -        assertThat(captor1.getValue().getURI()).hasHost(HOST).hasPort(PORT).hasScheme(PROTOCOL)
 -                .hasPath(
 -                        "/" + URI_PATH_PREFIX + "/" + EVENT_TOPIC_TEST + "/" + CONSUMER_GROUP + "/" + CONSUMER_ID + "");
 +        verify(httpClientMock).execute(captor1.capture());      
 +        
 +        assertEquals(captor1.getValue().getURI().getHost(),HOST);
 +        assertEquals(captor1.getValue().getURI().getPort(),PORT);
 +        assertEquals(captor1.getValue().getURI().getScheme(),PROTOCOL);
 +        assertEquals(captor1.getValue().getURI().getPath(),"/" + URI_PATH_PREFIX + "/" + EVENT_TOPIC_TEST + "/" + CONSUMER_GROUP + "/" + CONSUMER_ID + "");
 +  
          verify(threadMockToNotifyCamundaFlow).run();
          verify(executorMock).shutdown();
      }
@@@ -21,8 -21,8 +21,8 @@@
  package org.onap.so.bpmn.infrastructure.aai.tasks;
  
  import static org.junit.Assert.assertEquals;
 -import static org.mockito.Matchers.any;
 -import static org.mockito.Matchers.eq;
 +import static org.mockito.ArgumentMatchers.any;
 +import static org.mockito.ArgumentMatchers.eq;
  import static org.mockito.Mockito.doNothing;
  import static org.mockito.Mockito.doReturn;
  import static org.mockito.Mockito.doThrow;
@@@ -38,12 -38,9 +38,12 @@@ import org.camunda.bpm.engine.delegate.
  import org.hamcrest.Matchers;
  import org.junit.Before;
  import org.junit.Test;
 +import org.mockito.ArgumentMatchers;
 +import org.mockito.InjectMocks;
  import org.mockito.Mockito;
  import org.onap.so.adapters.nwrest.CreateNetworkResponse;
  import org.onap.so.bpmn.BaseTaskTest;
 +import org.onap.so.bpmn.common.BuildingBlockExecution;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
@@@ -52,15 -49,13 +52,15 @@@ import org.onap.so.bpmn.servicedecompos
  import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
 +import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
  import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
 +import org.onap.so.client.exception.BBObjectNotFoundException;
  import org.onap.so.db.catalog.beans.OrchestrationStatus;
 -import org.springframework.beans.factory.annotation.Autowired;
  
  public class AAIUpdateTasksTest extends BaseTaskTest{
 -      @Autowired
 -      private AAIUpdateTasks aaiUpdateTasks;
 +      
 +      @InjectMocks
 +      private AAIUpdateTasks aaiUpdateTasks = new AAIUpdateTasks();
        
        private L3Network network;
        private ServiceInstance serviceInstance;
@@@ -72,7 -67,7 +72,7 @@@
        private Subnet subnet;
        
        @Before
 -      public void before() {
 +      public void before() throws BBObjectNotFoundException {
                serviceInstance = setServiceInstance();
                genericVnf = setGenericVnf();
                vfModule = setVfModule();
                network = setL3Network();
                configuration = setConfiguration();
                subnet = buildSubnet();
 +
 +              when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID), any())).thenReturn(genericVnf);
 +              when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID), any())).thenReturn(vfModule);
 +              when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.NETWORK_ID), any())).thenReturn(network);
 +              when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VOLUME_GROUP_ID), any())).thenReturn(volumeGroup);
 +              when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.SERVICE_INSTANCE_ID), any())).thenReturn(serviceInstance);
 +              when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.CONFIGURATION_ID), any())).thenReturn(configuration);
 +              
 +
 +              doThrow(new BpmnError("BPMN Error")).when(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(7000), any(Exception.class));
        }
        
        @Test
        public void updateOrchestrationStatusAssignedServiceExceptionTest() throws Exception {
                expectedException.expect(BpmnError.class);
                
 -              doThrow(Exception.class).when(aaiServiceInstanceResources).updateOrchestrationStatusServiceInstance(serviceInstance, OrchestrationStatus.ASSIGNED);
 +              doThrow(RuntimeException.class).when(aaiServiceInstanceResources).updateOrchestrationStatusServiceInstance(serviceInstance, OrchestrationStatus.ASSIGNED);
  
                aaiUpdateTasks.updateOrchestrationStatusAssignedService(execution);
        }
        public void updateOrchestrationStatusActiveServiceExceptionTest() throws Exception {
                expectedException.expect(BpmnError.class);
                
 -              doThrow(Exception.class).when(aaiServiceInstanceResources).updateOrchestrationStatusServiceInstance(serviceInstance, OrchestrationStatus.ACTIVE);
 +              doThrow(RuntimeException.class).when(aaiServiceInstanceResources).updateOrchestrationStatusServiceInstance(serviceInstance, OrchestrationStatus.ACTIVE);
  
                aaiUpdateTasks.updateOrchestrationStatusActiveService(execution);
        }
        public void updateOrchestrationStatusAssignedVnfExceptionTest() throws Exception {
                expectedException.expect(BpmnError.class);
                
 -              doThrow(Exception.class).when(aaiVnfResources).updateOrchestrationStatusVnf(genericVnf, OrchestrationStatus.ASSIGNED);
 +              doThrow(RuntimeException.class).when(aaiVnfResources).updateOrchestrationStatusVnf(genericVnf, OrchestrationStatus.ASSIGNED);
  
                aaiUpdateTasks.updateOrchestrationStatusAssignedVnf(execution);
        }
        public void updateOrchestrationStatusActiveVnfExceptionTest() throws Exception {
                expectedException.expect(BpmnError.class);
                
 -              doThrow(Exception.class).when(aaiVnfResources).updateOrchestrationStatusVnf(genericVnf, OrchestrationStatus.ACTIVE);
 +              doThrow(RuntimeException.class).when(aaiVnfResources).updateOrchestrationStatusVnf(genericVnf, OrchestrationStatus.ACTIVE);
  
                aaiUpdateTasks.updateOrchestrationStatusActiveVnf(execution);
        }
        
        @Test
        public void updateOrchestrationStatusAssignVfModuleExceptionTest() throws Exception {
 -              doThrow(Exception.class).when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.ASSIGNED);
 +              doThrow(RuntimeException.class).when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.ASSIGNED);
                
                expectedException.expect(BpmnError.class);
                
        
        @Test
        public void updateOrchestrationStatusAssignedOrPendingActivationVfModuleNoMultiStageTest() throws Exception {
+               execution.setVariable("aLaCarte", true);
                ModelInfoGenericVnf modelInfoGenericVnf = new ModelInfoGenericVnf();
                modelInfoGenericVnf.setMultiStageDesign("false");
                genericVnf.setModelInfoGenericVnf(modelInfoGenericVnf);
                assertEquals("", vfModule.getHeatStackId());
        }
        
+       @Test
+       public void updateOrchestrationStatusAssignedOrPendingActivationVfModuleMultiStageButNotAlacarteTest() throws Exception {
+               execution.setVariable("aLaCarte", false);
+               ModelInfoGenericVnf modelInfoGenericVnf = new ModelInfoGenericVnf();
+               modelInfoGenericVnf.setMultiStageDesign("true");
+               genericVnf.setModelInfoGenericVnf(modelInfoGenericVnf);
+               doNothing().when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.ASSIGNED);
+               aaiUpdateTasks.updateOrchestrationStatusAssignedOrPendingActivationVfModule(execution);
+               verify(aaiVfModuleResources, times(1)).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.ASSIGNED);
+               assertEquals("", vfModule.getHeatStackId());
+       }
+       
        @Test
        public void updateOrchestrationStatusAssignedOrPendingActivationVfModuleWithMultiStageTest() throws Exception {
+               execution.setVariable("aLaCarte", true);
                ModelInfoGenericVnf modelInfoGenericVnf = new ModelInfoGenericVnf();
                modelInfoGenericVnf.setMultiStageDesign("true");
                genericVnf.setModelInfoGenericVnf(modelInfoGenericVnf);
        
        @Test
        public void updateOrchestrationStatusAssignedOrPendingActivationVfModuleExceptionTest() throws Exception {
 -              doThrow(Exception.class).when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.ASSIGNED);
+               execution.setVariable("aLaCarte", true);
 +              doThrow(RuntimeException.class).when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.ASSIGNED);
                
                expectedException.expect(BpmnError.class);
                
        
        @Test
        public void updateOrchestrationStatusCreatedVfModuleExceptionTest() throws Exception {
 -              doThrow(Exception.class).when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.CREATED);
 +              doThrow(RuntimeException.class).when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.CREATED);
                
                expectedException.expect(BpmnError.class);
                
        
        @Test
        public void updateOrchestrationStatusPendingActivatefModuleExceptionTest() throws Exception {
 -              doThrow(Exception.class).when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.PENDING_ACTIVATION);
 +              doThrow(RuntimeException.class).when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.PENDING_ACTIVATION);
                
                expectedException.expect(BpmnError.class);
        
        
        @Test
        public void updateOrchestrationStatusDectivateVfModuleExceptionTest() throws Exception {
 -              doThrow(Exception.class).when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.CREATED);
 +              doThrow(RuntimeException.class).when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.CREATED);
                
                expectedException.expect(BpmnError.class);
        
        
        @Test
        public void updateHeatStackIdVfModuleExceptionTest() throws Exception {
 -              doThrow(Exception.class).when(aaiVfModuleResources).updateHeatStackIdVfModule(vfModule, genericVnf);
 +              doThrow(RuntimeException.class).when(aaiVfModuleResources).updateHeatStackIdVfModule(vfModule, genericVnf);
                
                expectedException.expect(BpmnError.class);
        
        @Test
        public void updateOrchestrationStatusActiveVolumeGroupExceptionTest() throws Exception {
                expectedException.expect(BpmnError.class);
 -              doThrow(Exception.class).when(aaiVolumeGroupResources).updateOrchestrationStatusVolumeGroup(volumeGroup, cloudRegion, OrchestrationStatus.ACTIVE);
 +              doThrow(RuntimeException.class).when(aaiVolumeGroupResources).updateOrchestrationStatusVolumeGroup(volumeGroup, cloudRegion, OrchestrationStatus.ACTIVE);
                aaiUpdateTasks.updateOrchestrationStatusActiveVolumeGroup(execution);
        }
        
        @Test
        public void updateOrchestrationStatusCreatedVolumeGroupExceptionTest() throws Exception {
                expectedException.expect(BpmnError.class);
 -              doThrow(Exception.class).when(aaiVolumeGroupResources).updateOrchestrationStatusVolumeGroup(volumeGroup, cloudRegion, OrchestrationStatus.CREATED);
 +              doThrow(RuntimeException.class).when(aaiVolumeGroupResources).updateOrchestrationStatusVolumeGroup(volumeGroup, cloudRegion, OrchestrationStatus.CREATED);
                aaiUpdateTasks.updateOrchestrationStatusCreatedVolumeGroup(execution);
        }       
        
        @Test
        public void test_updateOrchestrationStatusAssignedVolumeGroup_exception() throws Exception {
                expectedException.expect(BpmnError.class);
 -              doThrow(Exception.class).when(aaiVolumeGroupResources).updateOrchestrationStatusVolumeGroup(volumeGroup, cloudRegion, OrchestrationStatus.ASSIGNED);
 +              doThrow(RuntimeException.class).when(aaiVolumeGroupResources).updateOrchestrationStatusVolumeGroup(volumeGroup, cloudRegion, OrchestrationStatus.ASSIGNED);
                aaiUpdateTasks.updateOrchestrationStatusAssignedVolumeGroup(execution);
        }
        @Test
        @Test
        public void updateHeatStackIdVolumeGroupExceptionTest() throws Exception {
                expectedException.expect(BpmnError.class);
 -              doThrow(Exception.class).when(aaiVolumeGroupResources).updateHeatStackIdVolumeGroup(volumeGroup, cloudRegion);
 +              doThrow(RuntimeException.class).when(aaiVolumeGroupResources).updateHeatStackIdVolumeGroup(volumeGroup, cloudRegion);
                aaiUpdateTasks.updateHeatStackIdVolumeGroup(execution);
        }
  
        public void updateNetworkExceptionTest() throws Exception {
                expectedException.expect(BpmnError.class);
  
 -              doThrow(Exception.class).when(aaiNetworkResources).updateNetwork(network);
 +              doThrow(RuntimeException.class).when(aaiNetworkResources).updateNetwork(network);
                
                aaiUpdateTasks.updateNetwork(execution, OrchestrationStatus.ACTIVE);
        }
        @Test
        public void updateOstatusActiveNetworkColectionExceptionTest() throws Exception {
                expectedException.expect(BpmnError.class);
 -              doThrow(Exception.class).when(aaiCollectionResources).updateCollection(serviceInstance.getCollection());
 +              doThrow(RuntimeException.class).when(aaiCollectionResources).updateCollection(serviceInstance.getCollection());
                aaiUpdateTasks.updateOrchestrationStatusActiveNetworkCollection(execution);
        }
  
        
        @Test
        public void updateOrchestrationStatusActivateVfModuleExceptionTest() throws Exception {
 -              doThrow(Exception.class).when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.ACTIVE);
 +              doThrow(RuntimeException.class).when(aaiVfModuleResources).updateOrchestrationStatusVfModule(vfModule, genericVnf, OrchestrationStatus.ACTIVE);
                
                expectedException.expect(BpmnError.class);
                
                CreateNetworkResponse createNetworkResponse = new CreateNetworkResponse();
                createNetworkResponse.setNetworkFqdn("testNetworkFqdn");
                createNetworkResponse.setNetworkStackId("testNetworkStackId");
 -              HashMap<String, String> subnetMap = new HashMap<String, String>();
 +              HashMap<String, String> subnetMap = new HashMap<>();
                subnetMap.put("testSubnetId", "testNeutronSubnetId");
                createNetworkResponse.setSubnetMap(subnetMap);
                
        @Test
        public void updateNetworkCreatedkExceptionTest() throws Exception {
                expectedException.expect(BpmnError.class);
 -              doThrow(Exception.class).when(aaiNetworkResources).updateNetwork(network);
 +              doThrow(RuntimeException.class).when(aaiNetworkResources).updateNetwork(network);
                aaiUpdateTasks.updateNetworkCreated(execution);
        }
        
        public void updateObjectNetworkExceptionText() {
                expectedException.expect(BpmnError.class);
                
 -              doThrow(Exception.class).when(aaiNetworkResources).updateNetwork(network);
 +              doThrow(RuntimeException.class).when(aaiNetworkResources).updateNetwork(network);
                
                aaiUpdateTasks.updateObjectNetwork(execution);
        }
        @Test
        public void test_updateServiceInstance_exception() {
                expectedException.expect(BpmnError.class);
 -              doThrow(Exception.class).when(aaiServiceInstanceResources).updateServiceInstance(serviceInstance);
 +              doThrow(RuntimeException.class).when(aaiServiceInstanceResources).updateServiceInstance(serviceInstance);
                aaiUpdateTasks.updateServiceInstance(execution);
        }
        
        @Test
        public void updateObjectVnfExceptionTest() {
                expectedException.expect(BpmnError.class);
 -              doThrow(Exception.class).when(aaiVnfResources).updateObjectVnf(genericVnf);
 +              doThrow(RuntimeException.class).when(aaiVnfResources).updateObjectVnf(genericVnf);
                aaiUpdateTasks.updateObjectVnf(execution);
        }
        
        @Test
        public void updateModelVfModuleExceptionTest() {
                expectedException.expect(BpmnError.class);
 -              doThrow(Exception.class).when(aaiVfModuleResources).changeAssignVfModule(vfModule, genericVnf);
 +              doThrow(RuntimeException.class).when(aaiVfModuleResources).changeAssignVfModule(vfModule, genericVnf);
                aaiUpdateTasks.updateModelVfModule(execution);
        }
        
  package org.onap.so.bpmn.infrastructure.flowspecific.tasks;
  
  import static org.junit.Assert.assertEquals;
 +import static org.mockito.ArgumentMatchers.any;
 +import static org.mockito.ArgumentMatchers.eq;
  import static org.mockito.Mockito.doNothing;
  import static org.mockito.Mockito.doReturn;
  import static org.mockito.Mockito.doThrow;
  import static org.mockito.Mockito.times;
  import static org.mockito.Mockito.verify;
 +import static org.mockito.Mockito.when;
  
  import java.nio.file.Files;
  import java.nio.file.Paths;
@@@ -41,22 -38,18 +41,22 @@@ import java.util.UUID
  import org.camunda.bpm.engine.delegate.BpmnError;
  import org.junit.Before;
  import org.junit.Test;
 +import org.mockito.ArgumentMatchers;
 +import org.mockito.InjectMocks;
  import org.onap.appc.client.lcm.model.Action;
  import org.onap.so.bpmn.BaseTaskTest;
 +import org.onap.so.bpmn.common.BuildingBlockExecution;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 +import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
  import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
 +import org.onap.so.client.exception.BBObjectNotFoundException;
  import org.onap.so.db.catalog.beans.ControllerSelectionReference;
 -import org.springframework.beans.factory.annotation.Autowired;
  
  public class ConfigurationScaleOutTest extends BaseTaskTest {
        
 -      @Autowired
 -      private ConfigurationScaleOut configurationScaleOut;    
 +      @InjectMocks
 +      private ConfigurationScaleOut configurationScaleOut = new ConfigurationScaleOut();
        
        private GenericVnf genericVnf;
        private VfModule vfModule;
@@@ -68,7 -61,7 +68,7 @@@
  
  
        @Before
 -      public void before() {
 +      public void before() throws BBObjectNotFoundException {
                genericVnf = setGenericVnf();
                vfModule = setVfModule();
                msoRequestId = UUID.randomUUID().toString();
                configurationParameters.add(configParamsMap);
                requestContext.setConfigurationParameters(configurationParameters);
                gBBInput.setRequestContext(requestContext);
 +              
 +              doThrow(new BpmnError("BPMN Error")).when(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(7000), any(Exception.class));
 +              when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID), any())).thenReturn(genericVnf);
 +              when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID), any())).thenReturn(vfModule);
 +
        }
        
        @Test
@@@ -93,9 -81,9 +93,9 @@@
                controllerSelectionReference.setActionCategory("testAction");
                controllerSelectionReference.setVnfType("testVnfType");
                String sdncResponse =  new String(Files.readAllBytes(Paths.get("src/test/resources/__files/SDNCClientGetResponse.json")));
-               String expectedPayload = "{\\\"request-parameters\\\":{\\\"vnf-host-ip-address\\\":\\\"10.222.22.2\\\","
-                               + "\\\"vf-module-id\\\":\\\"testVfModuleId1\\\"},\\\"configuration-parameters\\\""
-                               + ":{\\\"vnf-id\\\":\\\"66dac89b-2a5b-4cb9-b22e-a7e4488fb3db\\\",\\\"availability-zone\\\":\\\"AZ-MN02\\\"}}";
+               String expectedPayload = "{\"request-parameters\":{\"vnf-host-ip-address\":\"10.222.22.2\","
+                               + "\"vf-module-id\":\"testVfModuleId1\"},\"configuration-parameters\""
+                               + ":{\"vnf-id\":\"66dac89b-2a5b-4cb9-b22e-a7e4488fb3db\",\"availability-zone\":\"AZ-MN02\"}}";
                execution.setVariable("SDNCQueryResponse_" + vfModule.getVfModuleId(), sdncResponse);
                
                doReturn(controllerSelectionReference).when(catalogDbClient).getControllerSelectionReferenceByVnfTypeAndActionCategory(genericVnf.getVnfType(), Action.ConfigScaleOut.toString());
                Action action = Action.ConfigScaleOut;
                String vnfId = genericVnf.getVnfId();
                String controllerType = "testType";
-               String payload = "{\\\"request-parameters\\\":{\\\"vnf-host-ip-address\\\":\\\"10.222.22.2\\\","
-                               + "\\\"vf-module-id\\\":\\\"testVfModuleId1\\\"},\\\"configuration-parameters\\\""
-                               + ":{\\\"vnf-id\\\":\\\"66dac89b-2a5b-4cb9-b22e-a7e4488fb3db\\\",\\\"availability-zone\\\":\\\"AZ-MN02\\\"}}";
+               String payload = "{\"request-parameters\":{\"vnf-host-ip-address\":\"10.222.22.2\","
+                               + "\"vf-module-id\":\"testVfModuleId1\"},\"configuration-parameters\""
+                               + ":{\"vnf-id\":\"66dac89b-2a5b-4cb9-b22e-a7e4488fb3db\",\"availability-zone\":\"AZ-MN02\"}}";
                HashMap<String, String> payloadInfo = new HashMap<String, String>();
                payloadInfo.put("vnfName", "testVnfName");
                payloadInfo.put("vfModuleId", "testVfModuleId");
                configurationScaleOut.callAppcClient(execution);
                verify(appCClient, times(1)).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType);
        }
+       @Test
+       public void setParamsForConfigurationScaleOutBadPathTest() throws Exception {
+               ControllerSelectionReference controllerSelectionReference = new ControllerSelectionReference();
+               controllerSelectionReference.setControllerName("testName");
+               controllerSelectionReference.setActionCategory("testAction");
+               controllerSelectionReference.setVnfType("testVnfType");
+               String sdncResponse =  new String(Files.readAllBytes(Paths.get("src/test/resources/__files/SDNCClientResponseIncorrectPath.json")));
+               String expectedPayload = "{\"request-parameters\":{\"vnf-host-ip-address\":\"10.222.22.2\","
+                               + "\"vf-module-id\":\"testVfModuleId1\"},\"configuration-parameters\""
+                               + ":{\"vnf-id\":\"66dac89b-2a5b-4cb9-b22e-a7e4488fb3db\",\"availability-zone\":null}}";
+               execution.setVariable("SDNCQueryResponse_" + vfModule.getVfModuleId(), sdncResponse);
+               
+               doReturn(controllerSelectionReference).when(catalogDbClient).getControllerSelectionReferenceByVnfTypeAndActionCategory(genericVnf.getVnfType(), Action.ConfigScaleOut.toString());
+               
+               configurationScaleOut.setParamsForConfigurationScaleOut(execution);
+               
+               assertEquals(genericVnf.getVnfId(), execution.getVariable("vnfId"));
+               assertEquals(genericVnf.getVnfName(), execution.getVariable("vnfName"));
+               assertEquals("ConfigScaleOut", execution.getVariable("action"));
+               assertEquals(requestContext.getMsoRequestId(), execution.getVariable("msoRequestId"));
+               assertEquals(controllerSelectionReference.getControllerName(), execution.getVariable("controllerType"));
+               assertEquals(vfModule.getVfModuleId(), execution.getVariable("vfModuleId"));
+               assertEquals(expectedPayload, execution.getVariable("payload"));
+       }
  
 -              doThrow(Exception.class).when(appCClient).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType);
+       @Test
+       public void callAppcClientExceptionTest() throws Exception {
+               expectedException.expect(BpmnError.class);
+               Action action = Action.ConfigScaleOut;
+               String vnfId = genericVnf.getVnfId();
+               String controllerType = "testType";
+               String payload = "{\"request-parameters\":{\"vnf-host-ip-address\":\"10.222.22.2\","
+                               + "\"vf-module-id\":\"testVfModuleId1\"},\"configuration-parameters\""
+                               + ":{\"vnf-id\":\"66dac89b-2a5b-4cb9-b22e-a7e4488fb3db\",\"availability-zone\":\"AZ-MN02\"}}";
+               HashMap<String, String> payloadInfo = new HashMap<String, String>();
+               payloadInfo.put("vnfName", "testVnfName");
+               payloadInfo.put("vfModuleId", "testVfModuleId");
+       
+               execution.setVariable("action", Action.ConfigScaleOut.toString());
+               execution.setVariable("msoRequestId", msoRequestId);
+               execution.setVariable("controllerType", controllerType);
+               execution.setVariable("vnfId", "testVnfId1");
+               execution.setVariable("vnfName", "testVnfName");
+               execution.setVariable("vfModuleId", "testVfModuleId");
+               execution.setVariable("payload", payload);
+               
++              
++              doThrow(new BpmnError("BPMN Error")).when(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(1002), eq("APPC Client Failed")); 
++              doThrow(new RuntimeException("APPC Client Failed")).when(appCClient).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType);
+               configurationScaleOut.callAppcClient(execution);
+               verify(appCClient, times(1)).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType);
+       }
  }
  package org.onap.so.bpmn.infrastructure.flowspecific.tasks;
  
  import static org.junit.Assert.assertEquals;
 +import static org.mockito.ArgumentMatchers.any;
 +import static org.mockito.ArgumentMatchers.eq;
  import static org.mockito.Mockito.doNothing;
  import static org.mockito.Mockito.doReturn;
  import static org.mockito.Mockito.doThrow;
  import static org.mockito.Mockito.times;
  import static org.mockito.Mockito.verify;
 +import static org.mockito.Mockito.when;
  
  import java.util.HashMap;
  import java.util.Optional;
@@@ -36,36 -33,29 +36,36 @@@ import java.util.UUID
  import org.camunda.bpm.engine.delegate.BpmnError;
  import org.junit.Before;
  import org.junit.Test;
 +import org.mockito.ArgumentMatchers;
 +import org.mockito.InjectMocks;
  import org.onap.appc.client.lcm.model.Action;
  import org.onap.so.bpmn.BaseTaskTest;
 +import org.onap.so.bpmn.common.BuildingBlockExecution;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 +import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
  import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
 +import org.onap.so.client.exception.BBObjectNotFoundException;
  import org.onap.so.db.catalog.beans.ControllerSelectionReference;
 -import org.springframework.beans.factory.annotation.Autowired;
  
  public class GenericVnfHealthCheckTest extends BaseTaskTest {
        
 -      @Autowired
 -      private GenericVnfHealthCheck genericVnfHealthCheck;
 +      @InjectMocks
 +      private GenericVnfHealthCheck genericVnfHealthCheck = new GenericVnfHealthCheck();
        
        private GenericVnf genericVnf;
        private RequestContext requestContext;
        private String msoRequestId;
  
        @Before
 -      public void before() {
 +      public void before() throws BBObjectNotFoundException {
                genericVnf = setGenericVnf();
                msoRequestId = UUID.randomUUID().toString();
                requestContext = setRequestContext();
                requestContext.setMsoRequestId(msoRequestId);
                gBBInput.setRequestContext(requestContext);
 +              
 +              doThrow(new BpmnError("BPMN Error")).when(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(7000), any(Exception.class));     
 +              when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID), any())).thenReturn(genericVnf);
        }
        
        @Test
                
                doNothing().when(appCClient).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType);
                
 -              doThrow(Exception.class).when(appCClient).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType);
+               genericVnfHealthCheck.callAppcClient(execution);
+               verify(appCClient, times(1)).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType);
+       }
+       
+       @Test
+       public void callAppcClientExceptionTest() throws Exception {
+               expectedException.expect(BpmnError.class);
+               Action action = Action.HealthCheck;
+               String vnfId = genericVnf.getVnfId();
+               String payload = "{\"testName\":\"testValue\",}";
+               String controllerType = "testType";
+               HashMap<String, String> payloadInfo = new HashMap<String, String>();
+               payloadInfo.put("vnfName", "testVnfName");
+               payloadInfo.put("vfModuleId", "testVfModuleId");
+               payloadInfo.put("oamIpAddress", "testOamIpAddress");
+               payloadInfo.put("vnfHostIpAddress", "testOamIpAddress");
+               execution.setVariable("action", Action.HealthCheck.toString());
+               execution.setVariable("msoRequestId", msoRequestId);
+               execution.setVariable("controllerType", controllerType);
+               execution.setVariable("vnfId", "testVnfId1");
+               execution.setVariable("vnfName", "testVnfName");
+               execution.setVariable("vfModuleId", "testVfModuleId");
+               execution.setVariable("oamIpAddress", "testOamIpAddress");
+               execution.setVariable("vnfHostIpAddress", "testOamIpAddress");
+               execution.setVariable("payload", payload);
+               
++              doThrow(new BpmnError("BPMN Error")).when(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(1002), eq("APPC Client Failed")); 
++              doThrow(new RuntimeException("APPC Client Failed")).when(appCClient).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType);
+               
+               
                genericVnfHealthCheck.callAppcClient(execution);
                verify(appCClient, times(1)).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType);
        }
  package org.onap.so.bpmn.infrastructure.workflow.tasks;
  
  import static org.junit.Assert.assertEquals;
 +import static org.mockito.ArgumentMatchers.any;
 +import static org.mockito.ArgumentMatchers.eq;
  import static org.mockito.Mockito.doReturn;
 +import static org.mockito.Mockito.doThrow;
 +import static org.mockito.Mockito.when;
  
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.List;
  
  import org.camunda.bpm.engine.delegate.BpmnError;
 +import org.junit.Before;
 +import org.junit.Ignore;
  import org.junit.Test;
 +import org.mockito.ArgumentMatchers;
 +import org.mockito.InjectMocks;
  import org.onap.so.bpmn.BaseTaskTest;
 +import org.onap.so.bpmn.common.BuildingBlockExecution;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
@@@ -52,18 -43,15 +52,18 @@@ import org.onap.so.db.catalog.beans.Orc
  import org.onap.so.db.catalog.beans.ResourceType;
  import org.springframework.beans.factory.annotation.Autowired;
  
 +@Ignore
  public class OrchestrationStatusValidatorTest extends BaseTaskTest {
 -      @Autowired
 -      protected OrchestrationStatusValidator orchestrationStatusValidator;
 +      @InjectMocks
 +      protected OrchestrationStatusValidator orchestrationStatusValidator = new OrchestrationStatusValidator();
 +      
 +
        
        @Test
        public void test_validateOrchestrationStatus() throws Exception {
                String flowToBeCalled = "AssignServiceInstanceBB";
                setServiceInstance().setOrchestrationStatus(OrchestrationStatus.PRECREATED);
-               
+               execution.setVariable("aLaCarte", true);
                execution.setVariable("flowToBeCalled", flowToBeCalled);
                
                BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
                si.setConfigurations(configurations);
                
                execution.setVariable("flowToBeCalled", flowToBeCalled);
+               execution.setVariable("aLaCarte", true);
                
                BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
                buildingBlockDetail.setBuildingBlockName("UnassignFabricConfigurationBB");
                String flowToBeCalled = "UnassignServiceInstanceBB";
                
                execution.setVariable("flowToBeCalled", flowToBeCalled);
+               execution.setVariable("aLaCarte", true);
                
                BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
                buildingBlockDetail.setBuildingBlockName("UnassignServiceInstanceBB");
                String flowToBeCalled = "CreateVfModuleBB";
                                
                execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
-               
+               execution.setVariable("aLaCarte", true);
                execution.setVariable("flowToBeCalled", flowToBeCalled);
                
                GenericVnf genericVnf = buildGenericVnf();
                String flowToBeCalled = "CreateVfModuleBB";
                
                execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.CONTINUE);
-               
+               execution.setVariable("aLaCarte", true);
                execution.setVariable("flowToBeCalled", flowToBeCalled);
                
                GenericVnf genericVnf = buildGenericVnf();
                String flowToBeCalled = "CreateVfModuleBB";             
                
                execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
-               
+               execution.setVariable("aLaCarte", true);
                execution.setVariable("flowToBeCalled", flowToBeCalled);
                
                GenericVnf genericVnf = buildGenericVnf();
                String flowToBeCalled = "CreateVfModuleBB";
                                
                execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
-               
+               execution.setVariable("aLaCarte", true);
                execution.setVariable("flowToBeCalled", flowToBeCalled);
                
                GenericVnf genericVnf = buildGenericVnf();
                String flowToBeCalled = "CreateVfModuleBB";
                                
                execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
-               
+               execution.setVariable("aLaCarte", true);
                execution.setVariable("flowToBeCalled", flowToBeCalled);
                
                GenericVnf genericVnf = buildGenericVnf();
                
                assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult"));
        }
+       
+       @Test
+       public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongAlacarteValueVfModule() throws Exception {
+               String flowToBeCalled = "CreateVfModuleBB";
+                               
+               execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
+               execution.setVariable("aLaCarte", false);
+               execution.setVariable("flowToBeCalled", flowToBeCalled);
+               
+               GenericVnf genericVnf = buildGenericVnf();
+               ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
+               modelInfoGenericVnf.setMultiStageDesign("true");
+               setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
+               setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
+               
+               BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
+               buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
+               buildingBlockDetail.setId(1);
+               buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
+               buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
+               
+               doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
+               
+               OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
+               orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
+               orchestrationStatusStateTransitionDirective.setId(1);
+               orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
+               orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
+               orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ACTIVATE);
+               
+               doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
+               
+               orchestrationStatusValidator.validateOrchestrationStatus(execution);
+               
+               assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult"));
+       }
  }
@@@ -25,8 -25,8 +25,8 @@@ import static org.hamcrest.CoreMatchers
  import static org.junit.Assert.assertEquals;
  import static org.junit.Assert.assertNull;
  import static org.junit.Assert.assertThat;
 -import static org.mockito.Matchers.anyObject;
 -import static org.mockito.Matchers.anyString;
 +import static org.mockito.ArgumentMatchers.anyObject;
 +import static org.mockito.ArgumentMatchers.anyString;
  import static org.mockito.Mockito.doReturn;
  import static org.mockito.Mockito.when;
  
@@@ -36,6 -36,7 +36,6 @@@ import java.nio.file.Files
  import java.nio.file.Paths;
  import java.util.ArrayList;
  import java.util.Arrays;
 -import java.util.LinkedList;
  import java.util.List;
  import java.util.Optional;
  import java.util.UUID;
@@@ -48,7 -49,6 +48,7 @@@ import org.junit.Ignore
  import org.junit.Rule;
  import org.junit.Test;
  import org.junit.rules.ExpectedException;
 +import org.mockito.InjectMocks;
  import org.onap.aai.domain.yang.GenericVnf;
  import org.onap.aai.domain.yang.L3Network;
  import org.onap.aai.domain.yang.ServiceInstance;
@@@ -77,11 -77,12 +77,11 @@@ import org.onap.so.serviceinstancebeans
  import org.onap.so.serviceinstancebeans.RequestParameters;
  import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
  import org.onap.so.serviceinstancebeans.SubscriberInfo;
 -import org.springframework.beans.factory.annotation.Autowired;
  
  import com.fasterxml.jackson.databind.ObjectMapper;
  
  public class WorkflowActionTest extends BaseTaskTest {
 -      @Autowired
 +      @InjectMocks
        protected WorkflowAction workflowAction;
        
        private DelegateExecution execution;
                execution.setVariable("apiVersion", "7");
                execution.setVariable("requestUri", "v6/networks/123");
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 +              List<OrchestrationFlow> orchFlows = createFlowList("AssignNetwork1802BB","CreateNetworkBB","ActivateNetworkBB");
                northBoundRequest.setOrchestrationFlowList(orchFlows);
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("AssignNetwork1802BB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("CreateNetworkBB");
 -              orchFlows.add(orch2);
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("ActivateNetworkBB");
 -              orchFlows.add(orch3);
  
                when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(gAction,resource,true)).thenReturn(northBoundRequest);
 -      
 -              
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"AssignNetwork1802BB");
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"CreateNetworkBB");
 -              assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(),"ActivateNetworkBB");
 +              assertEqualsBulkFlowName(ebbs,"AssignNetwork1802BB","CreateNetworkBB","ActivateNetworkBB");
        }
        
        @Test
                execution.setVariable("apiVersion", "7");
                execution.setVariable("requestUri", "v6/networks/123");
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 +              List<OrchestrationFlow> orchFlows = createFlowList("DeactivateNetworkBB","DeleteNetworkBB","UnassignNetwork1802BB");
                northBoundRequest.setOrchestrationFlowList(orchFlows);
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("DeactivateNetworkBB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("DeleteNetworkBB");
 -              orchFlows.add(orch2);
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("UnassignNetwork1802BB");
 -              orchFlows.add(orch3);
 +              
                when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(gAction,resource,true)).thenReturn(northBoundRequest);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"DeactivateNetworkBB");
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"DeleteNetworkBB");
 -              assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(),"UnassignNetwork1802BB");
 +              assertEqualsBulkFlowName(ebbs,"DeactivateNetworkBB","DeleteNetworkBB","UnassignNetwork1802BB");
        }
        
        @Test
                execution.setVariable("requestUri", "v6/serviceInstances/123");
                
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 -              northBoundRequest.setOrchestrationFlowList(orchFlows);          
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("AssignServiceInstanceBB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("ActivateServiceInstanceBB");
 -              orchFlows.add(orch2);
 +              List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","ActivateServiceInstanceBB");
 +              northBoundRequest.setOrchestrationFlowList(orchFlows);  
 +              
                when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(gAction,resource,true)).thenReturn(northBoundRequest);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"AssignServiceInstanceBB");
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"ActivateServiceInstanceBB");
 +              assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","ActivateServiceInstanceBB");
        }
        
        /**
                execution.setVariable("requestUri", "v6/serviceInstances/123");
                
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 +              List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB");
                northBoundRequest.setOrchestrationFlowList(orchFlows);
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("AssignServiceInstanceBB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("AssignNetworkBB");
 -              orchFlows.add(orch2);
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("AssignVnfBB");
 -              orchFlows.add(orch3);
 -              OrchestrationFlow orch4 = new OrchestrationFlow();
 -              orch4.setFlowName("AssignVolumeGroupBB");
 -              orchFlows.add(orch4);
 -              OrchestrationFlow orch5 = new OrchestrationFlow();
 -              orch5.setFlowName("AssignVfModuleBB");
 -              orchFlows.add(orch5);
                
                VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
                vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
                when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969")).thenReturn(vfModuleCustomization3);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"AssignServiceInstanceBB");
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"AssignVnfBB");
 -              assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(),"AssignVolumeGroupBB");
 -              assertEquals(ebbs.get(3).getBuildingBlock().getBpmnFlowName(),"AssignVfModuleBB");
 -              assertEquals(ebbs.get(4).getBuildingBlock().getBpmnFlowName(),"AssignVfModuleBB");
 -              assertEquals(ebbs.get(5).getBuildingBlock().getBpmnFlowName(),"AssignVfModuleBB");
 +              assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB","AssignVfModuleBB","AssignVfModuleBB");
        }
        
        @Test
                execution.setVariable("requestUri", "v6/serviceInstances/si0");
  
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 +              List<OrchestrationFlow> orchFlows = createFlowList("CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB"
 +                              ,"ActivateVnfBB","ActivateServiceInstanceBB");
                northBoundRequest.setOrchestrationFlowList(orchFlows);  
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("CreateNetworkBB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("ActivateNetworkBB");
 -              orchFlows.add(orch2);
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("CreateVolumeGroupBB");
 -              orchFlows.add(orch3);
 -              OrchestrationFlow orch4 = new OrchestrationFlow();
 -              orch4.setFlowName("ActivateVolumeGroupBB");
 -              orchFlows.add(orch4);
 -              OrchestrationFlow orch5 = new OrchestrationFlow();
 -              orch5.setFlowName("CreateVfModuleBB");
 -              orchFlows.add(orch5);
 -              OrchestrationFlow orch6 = new OrchestrationFlow();
 -              orch6.setFlowName("ActivateVfModuleBB");
 -              orchFlows.add(orch6);
 -              OrchestrationFlow orch7 = new OrchestrationFlow();
 -              orch7.setFlowName("ActivateVnfBB");
 -              orchFlows.add(orch7);
 -              OrchestrationFlow orch8 = new OrchestrationFlow();
 -              orch8.setFlowName("ActivateServiceInstanceBB");
 -              orchFlows.add(orch8);
                
                ServiceInstance serviceInstanceAAI = new ServiceInstance();
                serviceInstanceAAI.setServiceInstanceId("si0");
                when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(gAction,resource,false)).thenReturn(northBoundRequest);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals("CreateVolumeGroupBB", ebbs.get(0).getBuildingBlock().getBpmnFlowName());
 +              assertEqualsBulkFlowName(ebbs,"CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","ActivateVfModuleBB","ActivateVnfBB","ActivateServiceInstanceBB");
                assertEquals("volumeGroup0", ebbs.get(0).getWorkflowResourceIds().getVolumeGroupId());
 -              assertEquals("ActivateVolumeGroupBB", ebbs.get(1).getBuildingBlock().getBpmnFlowName());                
                assertEquals("volumeGroup0", ebbs.get(1).getWorkflowResourceIds().getVolumeGroupId());
 -              assertEquals("CreateVfModuleBB", ebbs.get(2).getBuildingBlock().getBpmnFlowName());
                assertEquals("vfModule0", ebbs.get(2).getWorkflowResourceIds().getVfModuleId());
 -              assertEquals("CreateVfModuleBB", ebbs.get(3).getBuildingBlock().getBpmnFlowName());
                assertEquals("vfModule1", ebbs.get(3).getWorkflowResourceIds().getVfModuleId());
 -              assertEquals("ActivateVfModuleBB", ebbs.get(4).getBuildingBlock().getBpmnFlowName());
                assertEquals("vfModule0", ebbs.get(4).getWorkflowResourceIds().getVfModuleId());
 -              assertEquals("ActivateVfModuleBB", ebbs.get(5).getBuildingBlock().getBpmnFlowName());   
                assertEquals("vfModule1", ebbs.get(5).getWorkflowResourceIds().getVfModuleId());
 -              assertEquals("ActivateVnfBB", ebbs.get(6).getBuildingBlock().getBpmnFlowName());
                assertEquals("vnf0", ebbs.get(6).getWorkflowResourceIds().getVnfId());
 -              assertEquals("ActivateServiceInstanceBB", ebbs.get(7).getBuildingBlock().getBpmnFlowName());            
                assertEquals("si0", ebbs.get(7).getWorkflowResourceIds().getServiceInstanceId());
  
        }
                execution.setVariable("requestUri", "v6/serviceInstances/123");
  
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 -              northBoundRequest.setOrchestrationFlowList(orchFlows);
 -              OrchestrationFlow orch = new OrchestrationFlow();
 -              orch.setFlowName("DeactivateServiceInstanceBB");
 -              orchFlows.add(orch);            
 +              List<OrchestrationFlow> orchFlows = createFlowList("DeactivateServiceInstanceBB");
 +              northBoundRequest.setOrchestrationFlowList(orchFlows);  
                
                when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(gAction,resource,false)).thenReturn(northBoundRequest);
                workflowAction.selectExecutionList(execution);
                
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
                northBoundRequest.setIsToplevelflow(true);
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 +              List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB"
 +                              ,"CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"
 +                              ,"ActivateVnfBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
                northBoundRequest.setOrchestrationFlowList(orchFlows);                  
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("AssignServiceInstanceBB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("CreateNetworkCollectionBB");
 -              orchFlows.add(orch2);
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("AssignNetworkBB");
 -              orchFlows.add(orch3);
 -              OrchestrationFlow orch4 = new OrchestrationFlow();
 -              orch4.setFlowName("AssignVnfBB");
 -              orchFlows.add(orch4);
 -              OrchestrationFlow orch5 = new OrchestrationFlow();
 -              orch5.setFlowName("AssignVolumeGroupBB");
 -              orchFlows.add(orch5);
 -              OrchestrationFlow orch6 = new OrchestrationFlow();
 -              orch6.setFlowName("AssignVfModuleBB");
 -              orchFlows.add(orch6);
 -              OrchestrationFlow orch7 = new OrchestrationFlow();
 -              orch7.setFlowName("CreateNetworkBB");
 -              orchFlows.add(orch7);
 -              OrchestrationFlow orch8 = new OrchestrationFlow();
 -              orch8.setFlowName("ActivateNetworkBB");
 -              orchFlows.add(orch8);
 -              OrchestrationFlow orch9 = new OrchestrationFlow();
 -              orch9.setFlowName("CreateVolumeGroupBB");
 -              orchFlows.add(orch9);
 -              OrchestrationFlow orch10 = new OrchestrationFlow();
 -              orch10.setFlowName("ActivateVolumeGroupBB");
 -              orchFlows.add(orch10);
 -              OrchestrationFlow orch11 = new OrchestrationFlow();
 -              orch11.setFlowName("CreateVfModuleBB");
 -              orchFlows.add(orch11);
 -              OrchestrationFlow orch12 = new OrchestrationFlow();
 -              orch12.setFlowName("ActivateVfModuleBB");
 -              orchFlows.add(orch12);
 -              OrchestrationFlow orch13 = new OrchestrationFlow();
 -              orch13.setFlowName("AssignFabricConfigurationBB");
 -              orchFlows.add(orch13);
 -              OrchestrationFlow orch14 = new OrchestrationFlow();
 -              orch14.setFlowName("ActivateFabricConfigurationBB");
 -              orchFlows.add(orch14);
 -              OrchestrationFlow orch15 = new OrchestrationFlow();
 -              orch15.setFlowName("ActivateVnfBB");
 -              orchFlows.add(orch15);
 -              OrchestrationFlow orch16 = new OrchestrationFlow();
 -              orch16.setFlowName("ActivateNetworkCollectionBB");
 -              orchFlows.add(orch16);
 -              OrchestrationFlow orch17 = new OrchestrationFlow();
 -              orch17.setFlowName("ActivateServiceInstanceBB");
 -              orchFlows.add(orch17);
                
                Service service = new Service();
                doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
                when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(gAction,resource,false)).thenReturn(northBoundRequest);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"AssignServiceInstanceBB");
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"ActivateServiceInstanceBB");
 +              assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","ActivateServiceInstanceBB");
        }
        
        @Test
                
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
                northBoundRequest.setIsToplevelflow(true);
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 -              northBoundRequest.setOrchestrationFlowList(orchFlows);          
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("AssignServiceInstanceBB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("CreateNetworkCollectionBB");
 -              orchFlows.add(orch2);
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("AssignNetworkBB");
 -              orchFlows.add(orch3);
 -              OrchestrationFlow orch4 = new OrchestrationFlow();
 -              orch4.setFlowName("AssignVnfBB");
 -              orchFlows.add(orch4);
 -              OrchestrationFlow orch5 = new OrchestrationFlow();
 -              orch5.setFlowName("AssignVolumeGroupBB");
 -              orchFlows.add(orch5);
 -              OrchestrationFlow orch6 = new OrchestrationFlow();
 -              orch6.setFlowName("AssignVfModuleBB");
 -              orchFlows.add(orch6);
 -              OrchestrationFlow orch7 = new OrchestrationFlow();
 -              orch7.setFlowName("CreateNetworkBB");
 -              orchFlows.add(orch7);
 -              OrchestrationFlow orch8 = new OrchestrationFlow();
 -              orch8.setFlowName("ActivateNetworkBB");
 -              orchFlows.add(orch8);
 -              OrchestrationFlow orch9 = new OrchestrationFlow();
 -              orch9.setFlowName("CreateVolumeGroupBB");
 -              orchFlows.add(orch9);
 -              OrchestrationFlow orch10 = new OrchestrationFlow();
 -              orch10.setFlowName("ActivateVolumeGroupBB");
 -              orchFlows.add(orch10);
 -              OrchestrationFlow orch11 = new OrchestrationFlow();
 -              orch11.setFlowName("CreateVfModuleBB");
 -              orchFlows.add(orch11);
 -              OrchestrationFlow orch12 = new OrchestrationFlow();
 -              orch12.setFlowName("ActivateVfModuleBB");
 -              orchFlows.add(orch12);
 -              OrchestrationFlow orch13 = new OrchestrationFlow();
 -              orch13.setFlowName("ActivateVnfBB");
 -              orchFlows.add(orch13);
 -              OrchestrationFlow orch14 = new OrchestrationFlow();
 -              orch14.setFlowName("ActivateNetworkCollectionBB");
 -              orchFlows.add(orch14);
 -              OrchestrationFlow orch15 = new OrchestrationFlow();
 -              orch15.setFlowName("ActivateServiceInstanceBB");
 -              orchFlows.add(orch15);
 +              List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB"
 +                              ,"CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"
 +                              ,"ActivateVnfBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
 +              northBoundRequest.setOrchestrationFlowList(orchFlows);                  
                
                Service service = new Service();
                NetworkResourceCustomization networkCustomization = new NetworkResourceCustomization();
                when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(gAction,resource,false)).thenReturn(northBoundRequest);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"AssignServiceInstanceBB");
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"AssignNetworkBB");
 -              assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(),"CreateNetworkBB");
 -              assertEquals(ebbs.get(3).getBuildingBlock().getBpmnFlowName(),"ActivateNetworkBB");
 -              assertEquals(ebbs.get(4).getBuildingBlock().getBpmnFlowName(),"ActivateServiceInstanceBB");
 +              assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","ActivateServiceInstanceBB");
        }
        
        @Test
                
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
                northBoundRequest.setIsToplevelflow(true);
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 -              northBoundRequest.setOrchestrationFlowList(orchFlows);          
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("AssignServiceInstanceBB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("CreateNetworkCollectionBB");
 -              orchFlows.add(orch2);
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("AssignNetworkBB");
 -              orchFlows.add(orch3);
 -              OrchestrationFlow orch4 = new OrchestrationFlow();
 -              orch4.setFlowName("AssignVnfBB");
 -              orchFlows.add(orch4);
 -              OrchestrationFlow orch5 = new OrchestrationFlow();
 -              orch5.setFlowName("AssignVolumeGroupBB");
 -              orchFlows.add(orch5);
 -              OrchestrationFlow orch6 = new OrchestrationFlow();
 -              orch6.setFlowName("AssignVfModuleBB");
 -              orchFlows.add(orch6);
 -              OrchestrationFlow orch7 = new OrchestrationFlow();
 -              orch7.setFlowName("CreateNetworkBB");
 -              orchFlows.add(orch7);
 -              OrchestrationFlow orch8 = new OrchestrationFlow();
 -              orch8.setFlowName("ActivateNetworkBB");
 -              orchFlows.add(orch8);
 -              OrchestrationFlow orch9 = new OrchestrationFlow();
 -              orch9.setFlowName("CreateVolumeGroupBB");
 -              orchFlows.add(orch9);
 -              OrchestrationFlow orch10 = new OrchestrationFlow();
 -              orch10.setFlowName("ActivateVolumeGroupBB");
 -              orchFlows.add(orch10);
 -              OrchestrationFlow orch11 = new OrchestrationFlow();
 -              orch11.setFlowName("CreateVfModuleBB");
 -              orchFlows.add(orch11);
 -              OrchestrationFlow orch12 = new OrchestrationFlow();
 -              orch12.setFlowName("ActivateVfModuleBB");
 -              orchFlows.add(orch12);
 -              OrchestrationFlow orch13 = new OrchestrationFlow();
 -              orch13.setFlowName("ActivateVnfBB");
 -              orchFlows.add(orch13);
 -              OrchestrationFlow orch14 = new OrchestrationFlow();
 -              orch14.setFlowName("ActivateNetworkCollectionBB");
 -              orchFlows.add(orch14);
 -              OrchestrationFlow orch15 = new OrchestrationFlow();
 -              orch15.setFlowName("ActivateServiceInstanceBB");
 -              orchFlows.add(orch15);
 +              List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB"
 +                              ,"CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"
 +                              ,"ActivateVnfBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
 +              northBoundRequest.setOrchestrationFlowList(orchFlows);                  
                
                Service service = new Service();
                List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
                when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(gAction,resource,false)).thenReturn(northBoundRequest);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"AssignServiceInstanceBB");
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"CreateNetworkCollectionBB");
 -              assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(),"AssignNetworkBB");
 +              assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB"
 +                              ,"AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
                assertEquals("Network id not empty", !ebbs.get(2).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 -              assertEquals(ebbs.get(3).getBuildingBlock().getBpmnFlowName(),"CreateNetworkBB");
                assertEquals("Network id not empty", !ebbs.get(3).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 -              assertEquals(ebbs.get(4).getBuildingBlock().getBpmnFlowName(),"ActivateNetworkBB");
                assertEquals("Network id not empty", !ebbs.get(4).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
                assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
                                ebbs.get(2).getWorkflowResourceIds().getNetworkId() == ebbs.get(3).getWorkflowResourceIds().getNetworkId() 
                                && ebbs.get(3).getWorkflowResourceIds().getNetworkId() == ebbs.get(4).getWorkflowResourceIds().getNetworkId(), true);
 -              assertEquals(ebbs.get(5).getBuildingBlock().getBpmnFlowName(),"AssignNetworkBB");
                assertEquals("Network id not empty", !ebbs.get(5).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 -              assertEquals(ebbs.get(6).getBuildingBlock().getBpmnFlowName(),"CreateNetworkBB");
                assertEquals("Network id not empty", !ebbs.get(6).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 -              assertEquals(ebbs.get(7).getBuildingBlock().getBpmnFlowName(),"ActivateNetworkBB");
                assertEquals("Network id not empty", !ebbs.get(7).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
                assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
                                ebbs.get(5).getWorkflowResourceIds().getNetworkId() == ebbs.get(6).getWorkflowResourceIds().getNetworkId() 
                                && ebbs.get(6).getWorkflowResourceIds().getNetworkId() == ebbs.get(7).getWorkflowResourceIds().getNetworkId(), true);
 -              assertEquals(ebbs.get(8).getBuildingBlock().getBpmnFlowName(),"AssignNetworkBB");
                assertEquals("Network id not empty", !ebbs.get(8).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 -              assertEquals(ebbs.get(9).getBuildingBlock().getBpmnFlowName(),"CreateNetworkBB");
                assertEquals("Network id not empty", !ebbs.get(9).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 -              assertEquals(ebbs.get(10).getBuildingBlock().getBpmnFlowName(),"ActivateNetworkBB");
                assertEquals("Network id not empty", !ebbs.get(10).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
                assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
                                ebbs.get(8).getWorkflowResourceIds().getNetworkId() == ebbs.get(9).getWorkflowResourceIds().getNetworkId() 
                                && ebbs.get(9).getWorkflowResourceIds().getNetworkId() == ebbs.get(10).getWorkflowResourceIds().getNetworkId(), true);
 -              assertEquals(ebbs.get(11).getBuildingBlock().getBpmnFlowName(),"ActivateNetworkCollectionBB");
 -              assertEquals(ebbs.get(12).getBuildingBlock().getBpmnFlowName(),"ActivateServiceInstanceBB");
        }
  
        @Test
                execution.setVariable("requestUri", "v6/serviceInstances/123");
                
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 -              northBoundRequest.setOrchestrationFlowList(orchFlows);          
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("AssignServiceInstanceBB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("CreateNetworkCollectionBB");
 -              orchFlows.add(orch2);
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("AssignNetworkBB");
 -              orchFlows.add(orch3);
 -              OrchestrationFlow orch4 = new OrchestrationFlow();
 -              orch4.setFlowName("AssignVnfBB");
 -              orchFlows.add(orch4);
 -              OrchestrationFlow orch5 = new OrchestrationFlow();
 -              orch5.setFlowName("AssignVolumeGroupBB");
 -              orchFlows.add(orch5);
 -              OrchestrationFlow orch6 = new OrchestrationFlow();
 -              orch6.setFlowName("AssignVfModuleBB");
 -              orchFlows.add(orch6);
 -              OrchestrationFlow orch7 = new OrchestrationFlow();
 -              orch7.setFlowName("CreateNetworkBB");
 -              orchFlows.add(orch7);
 -              OrchestrationFlow orch8 = new OrchestrationFlow();
 -              orch8.setFlowName("ActivateNetworkBB");
 -              orchFlows.add(orch8);
 -              OrchestrationFlow orch9 = new OrchestrationFlow();
 -              orch9.setFlowName("CreateVolumeGroupBB");
 -              orchFlows.add(orch9);
 -              OrchestrationFlow orch10 = new OrchestrationFlow();
 -              orch10.setFlowName("ActivateVolumeGroupBB");
 -              orchFlows.add(orch10);
 -              OrchestrationFlow orch11 = new OrchestrationFlow();
 -              orch11.setFlowName("CreateVfModuleBB");
 -              orchFlows.add(orch11);
 -              OrchestrationFlow orch12 = new OrchestrationFlow();
 -              orch12.setFlowName("ActivateVfModuleBB");
 -              orchFlows.add(orch12);
 -              OrchestrationFlow orch13 = new OrchestrationFlow();
 -              orch13.setFlowName("ActivateVnfBB");
 -              orchFlows.add(orch13);
 -              OrchestrationFlow orch14 = new OrchestrationFlow();
 -              orch14.setFlowName("ActivateNetworkCollectionBB");
 -              orchFlows.add(orch14);
 -              OrchestrationFlow orch15 = new OrchestrationFlow();
 -              orch15.setFlowName("ActivateServiceInstanceBB");
 -              orchFlows.add(orch15);
 +              List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB"
 +                              ,"CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"
 +                              ,"ActivateVnfBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
 +              northBoundRequest.setOrchestrationFlowList(orchFlows);                  
                
                Service service = new Service();
                service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
                when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"AssignServiceInstanceBB");
 +              assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB","AssignVfModuleBB","AssignVfModuleBB","CreateVolumeGroupBB"
 +                              ,"ActivateVolumeGroupBB","CreateVfModuleBB","CreateVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","ActivateVfModuleBB","ActivateVfModuleBB","ActivateVnfBB","ActivateServiceInstanceBB");
                assertEquals(3,ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"AssignVnfBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(1).getWorkflowResourceIds().getVnfId().length());
 -              assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(),"AssignVolumeGroupBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(2).getWorkflowResourceIds().getVolumeGroupId().length());
 -              assertEquals(ebbs.get(3).getBuildingBlock().getBpmnFlowName(),"AssignVfModuleBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(3).getWorkflowResourceIds().getVfModuleId().length());
 -              assertEquals(ebbs.get(4).getBuildingBlock().getBpmnFlowName(),"AssignVfModuleBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(4).getWorkflowResourceIds().getVfModuleId().length());
 -              assertEquals(ebbs.get(5).getBuildingBlock().getBpmnFlowName(),"AssignVfModuleBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(5).getWorkflowResourceIds().getVfModuleId().length());
 -              assertEquals(ebbs.get(6).getBuildingBlock().getBpmnFlowName(),"CreateVolumeGroupBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(6).getWorkflowResourceIds().getVolumeGroupId().length());
 -              assertEquals(ebbs.get(7).getBuildingBlock().getBpmnFlowName(),"ActivateVolumeGroupBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(7).getWorkflowResourceIds().getVolumeGroupId().length());
 -              assertEquals(ebbs.get(8).getBuildingBlock().getBpmnFlowName(),"CreateVfModuleBB");              
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(8).getWorkflowResourceIds().getVfModuleId().length());
 -              assertEquals(ebbs.get(9).getBuildingBlock().getBpmnFlowName(),"CreateVfModuleBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(9).getWorkflowResourceIds().getVfModuleId().length());
 -              assertEquals(ebbs.get(10).getBuildingBlock().getBpmnFlowName(),"CreateVfModuleBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(10).getWorkflowResourceIds().getVfModuleId().length());
 -              assertEquals(ebbs.get(11).getBuildingBlock().getBpmnFlowName(),"ActivateVfModuleBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(11).getWorkflowResourceIds().getVfModuleId().length());
 -              assertEquals(ebbs.get(12).getBuildingBlock().getBpmnFlowName(),"ActivateVfModuleBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(12).getWorkflowResourceIds().getVfModuleId().length());
 -              assertEquals(ebbs.get(13).getBuildingBlock().getBpmnFlowName(),"ActivateVfModuleBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(13).getWorkflowResourceIds().getVfModuleId().length());
 -              assertEquals(ebbs.get(14).getBuildingBlock().getBpmnFlowName(),"ActivateVnfBB");
 -              assertEquals(UUID.randomUUID().toString().length(),ebbs.get(14).getWorkflowResourceIds().getVnfId().length());
 -              assertEquals(ebbs.get(15).getBuildingBlock().getBpmnFlowName(),"ActivateServiceInstanceBB");
 +              int randomUUIDLength = UUID.randomUUID().toString().length();
 +              assertEquals(randomUUIDLength,ebbs.get(1).getWorkflowResourceIds().getVnfId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(2).getWorkflowResourceIds().getVolumeGroupId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(3).getWorkflowResourceIds().getVfModuleId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(4).getWorkflowResourceIds().getVfModuleId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(5).getWorkflowResourceIds().getVfModuleId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(6).getWorkflowResourceIds().getVolumeGroupId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(7).getWorkflowResourceIds().getVolumeGroupId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(8).getWorkflowResourceIds().getVfModuleId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(9).getWorkflowResourceIds().getVfModuleId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(10).getWorkflowResourceIds().getVfModuleId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(11).getWorkflowResourceIds().getVfModuleId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(12).getWorkflowResourceIds().getVfModuleId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(13).getWorkflowResourceIds().getVfModuleId().length());
 +              assertEquals(randomUUIDLength,ebbs.get(14).getWorkflowResourceIds().getVnfId().length());
                assertEquals(3,ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
                assertEquals(true, execution.getVariable("homing"));
        }
                execution.setVariable("requestUri", "v6/serviceInstances/123");
  
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 +              List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB","DeleteVfModuleBB","DeactivateVolumeGroupBB","DeleteVolumeGroupBB","DeactivateVnfBB","DeactivateNetworkBB"
 +                              ,"DeleteNetworkBB","DeleteNetworkCollectionBB","DeactivateServiceInstanceBB","UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignNetworkBB","UnassignServiceInstanceBB");
                northBoundRequest.setOrchestrationFlowList(orchFlows);  
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("DeactivateVfModuleBB");
 -              orchFlows.add(orch3);
 -              OrchestrationFlow orch4 = new OrchestrationFlow();
 -              orch4.setFlowName("DeleteVfModuleBB");
 -              orchFlows.add(orch4);
 -              OrchestrationFlow orch5 = new OrchestrationFlow();
 -              orch5.setFlowName("DeactivateVolumeGroupBB");
 -              orchFlows.add(orch5);
 -              OrchestrationFlow orch6 = new OrchestrationFlow();
 -              orch6.setFlowName("DeleteVolumeGroupBB");
 -              orchFlows.add(orch6);
 -              OrchestrationFlow orch7 = new OrchestrationFlow();
 -              orch7.setFlowName("DeactivateVnfBB");
 -              orchFlows.add(orch7);
 -              OrchestrationFlow orch8 = new OrchestrationFlow();
 -              orch8.setFlowName("DeactivateNetworkBB");
 -              orchFlows.add(orch8);   
 -              OrchestrationFlow orch9 = new OrchestrationFlow();
 -              orch9.setFlowName("DeleteNetworkBB");
 -              orchFlows.add(orch9);   
 -              OrchestrationFlow orch10 = new OrchestrationFlow();
 -              orch10.setFlowName("DeleteNetworkCollectionBB");
 -              orchFlows.add(orch10);  
 -              OrchestrationFlow orch11 = new OrchestrationFlow();
 -              orch11.setFlowName("DeactivateServiceInstanceBB");
 -              orchFlows.add(orch11);  
 -              OrchestrationFlow orch12 = new OrchestrationFlow();
 -              orch12.setFlowName("UnassignVfModuleBB");
 -              orchFlows.add(orch12);  
 -              OrchestrationFlow orch13 = new OrchestrationFlow();
 -              orch13.setFlowName("UnassignVolumeGroupBB");
 -              orchFlows.add(orch13);  
 -              OrchestrationFlow orch14 = new OrchestrationFlow();
 -              orch14.setFlowName("UnassignVnfBB");
 -              orchFlows.add(orch14);  
 -              OrchestrationFlow orch15 = new OrchestrationFlow();
 -              orch15.setFlowName("UnassignNetworkBB");
 -              orchFlows.add(orch15);  
 -              OrchestrationFlow orch16 = new OrchestrationFlow();
 -              orch16.setFlowName("UnassignServiceInstanceBB");
 -              orchFlows.add(orch16);  
                
                ServiceInstance serviceInstanceAAI = new ServiceInstance();
                serviceInstanceAAI.setServiceInstanceId("aaisi123");
                when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(gAction,resource,false)).thenReturn(northBoundRequest);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"DeactivateVfModuleBB");
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"DeactivateVfModuleBB");          
 -              assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(),"DeleteVfModuleBB");
 -              assertEquals(ebbs.get(3).getBuildingBlock().getBpmnFlowName(),"DeleteVfModuleBB");
 -              assertEquals(ebbs.get(4).getBuildingBlock().getBpmnFlowName(),"DeactivateVolumeGroupBB");
 -              assertEquals(ebbs.get(5).getBuildingBlock().getBpmnFlowName(),"DeleteVolumeGroupBB");           
 -              assertEquals(ebbs.get(6).getBuildingBlock().getBpmnFlowName(),"DeactivateVnfBB");
 -              assertEquals(ebbs.get(7).getBuildingBlock().getBpmnFlowName(),"DeactivateServiceInstanceBB");
 -              assertEquals(ebbs.get(8).getBuildingBlock().getBpmnFlowName(),"UnassignVfModuleBB");
 -              assertEquals(ebbs.get(9).getBuildingBlock().getBpmnFlowName(),"UnassignVfModuleBB");
 -              assertEquals(ebbs.get(10).getBuildingBlock().getBpmnFlowName(),"UnassignVolumeGroupBB");
 -              assertEquals(ebbs.get(11).getBuildingBlock().getBpmnFlowName(),"UnassignVnfBB");
 -              assertEquals(ebbs.get(12).getBuildingBlock().getBpmnFlowName(),"UnassignServiceInstanceBB");
 +              assertEqualsBulkFlowName(ebbs,"DeactivateVfModuleBB","DeactivateVfModuleBB","DeleteVfModuleBB","DeleteVfModuleBB","DeactivateVolumeGroupBB","DeleteVolumeGroupBB","DeactivateVnfBB"
 +                              ,"DeactivateServiceInstanceBB","UnassignVfModuleBB","UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignServiceInstanceBB");
        }
        
        @Test
                execution.setVariable("requestUri", "v6/serviceInstances/123");
                
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 +              List<OrchestrationFlow> orchFlows = createFlowList("UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignNetworkBB","UnassignServiceInstanceBB");
                northBoundRequest.setOrchestrationFlowList(orchFlows);          
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("UnassignVfModuleBB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("UnassignVolumeGroupBB");
 -              orchFlows.add(orch2);
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("UnassignVnfBB");
 -              orchFlows.add(orch3);
 -              OrchestrationFlow orch4 = new OrchestrationFlow();
 -              orch4.setFlowName("UnassignNetworkBB");
 -              orchFlows.add(orch4);
 -              OrchestrationFlow orch5 = new OrchestrationFlow();
 -              orch5.setFlowName("UnassignServiceInstanceBB");
 -              orchFlows.add(orch5);
                
                ServiceInstance serviceInstanceAAI = new ServiceInstance();
                serviceInstanceAAI.setServiceInstanceId("aaisi123");
                when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(gAction,resource,false)).thenReturn(northBoundRequest);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"UnassignVfModuleBB");
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"UnassignVfModuleBB");            
 -              assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(),"UnassignVolumeGroupBB");
 -              assertEquals(ebbs.get(3).getBuildingBlock().getBpmnFlowName(),"UnassignVnfBB");
 -              assertEquals(ebbs.get(4).getBuildingBlock().getBpmnFlowName(),"UnassignServiceInstanceBB");
 +              assertEqualsBulkFlowName(ebbs,"UnassignVfModuleBB","UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignServiceInstanceBB");
        }
        
        @Test
                execution.setVariable("requestUri", "v6/serviceInstances/123");
                
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 +              List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB","DeleteVfModuleBB","DeactivateVolumeGroupBB","DeleteVolumeGroupBB","DeactivateVnfBB","DeactivateNetworkBB"
 +                              ,"DeleteNetworkBB","DeleteNetworkCollectionBB","DeactivateServiceInstanceBB","UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignNetworkBB","UnassignServiceInstanceBB");
                northBoundRequest.setOrchestrationFlowList(orchFlows);  
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("DeactivateVfModuleBB");
 -              orchFlows.add(orch3);
 -              OrchestrationFlow orch4 = new OrchestrationFlow();
 -              orch4.setFlowName("DeleteVfModuleBB");
 -              orchFlows.add(orch4);
 -              OrchestrationFlow orch5 = new OrchestrationFlow();
 -              orch5.setFlowName("DeactivateVolumeGroupBB");
 -              orchFlows.add(orch5);
 -              OrchestrationFlow orch6 = new OrchestrationFlow();
 -              orch6.setFlowName("DeleteVolumeGroupBB");
 -              orchFlows.add(orch6);
 -              OrchestrationFlow orch7 = new OrchestrationFlow();
 -              orch7.setFlowName("DeactivateVnfBB");
 -              orchFlows.add(orch7);
 -              OrchestrationFlow orch8 = new OrchestrationFlow();
 -              orch8.setFlowName("DeactivateNetworkBB");
 -              orchFlows.add(orch8);   
 -              OrchestrationFlow orch9 = new OrchestrationFlow();
 -              orch9.setFlowName("DeleteNetworkBB");
 -              orchFlows.add(orch9);   
 -              OrchestrationFlow orch10 = new OrchestrationFlow();
 -              orch10.setFlowName("DeleteNetworkCollectionBB");
 -              orchFlows.add(orch10);  
 -              OrchestrationFlow orch11 = new OrchestrationFlow();
 -              orch11.setFlowName("DeactivateServiceInstanceBB");
 -              orchFlows.add(orch11);  
 -              OrchestrationFlow orch12 = new OrchestrationFlow();
 -              orch12.setFlowName("UnassignVfModuleBB");
 -              orchFlows.add(orch12);  
 -              OrchestrationFlow orch13 = new OrchestrationFlow();
 -              orch13.setFlowName("UnassignVolumeGroupBB");
 -              orchFlows.add(orch13);  
 -              OrchestrationFlow orch14 = new OrchestrationFlow();
 -              orch14.setFlowName("UnassignVnfBB");
 -              orchFlows.add(orch14);  
 -              OrchestrationFlow orch15 = new OrchestrationFlow();
 -              orch15.setFlowName("UnassignNetworkBB");
 -              orchFlows.add(orch15);  
 -              OrchestrationFlow orch16 = new OrchestrationFlow();
 -              orch16.setFlowName("UnassignServiceInstanceBB");
 -              orchFlows.add(orch16);  
                
                ServiceInstance serviceInstanceAAI = new ServiceInstance();
                serviceInstanceAAI.setServiceInstanceId("aaisi123");
                when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(gAction,resource,false)).thenReturn(northBoundRequest);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"DeactivateNetworkBB");
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"DeleteNetworkBB");
 -              assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(),"UnassignNetworkBB");
 -              assertEquals(ebbs.get(3).getBuildingBlock().getBpmnFlowName(),"DeactivateNetworkBB");
 -              assertEquals(ebbs.get(4).getBuildingBlock().getBpmnFlowName(),"DeleteNetworkBB");
 -              assertEquals(ebbs.get(5).getBuildingBlock().getBpmnFlowName(),"UnassignNetworkBB");
 -              assertEquals(ebbs.get(6).getBuildingBlock().getBpmnFlowName(),"DeleteNetworkCollectionBB");
 -              assertEquals(ebbs.get(7).getBuildingBlock().getBpmnFlowName(),"DeactivateServiceInstanceBB");
 -              assertEquals(ebbs.get(8).getBuildingBlock().getBpmnFlowName(),"UnassignServiceInstanceBB");
 +              assertEqualsBulkFlowName(ebbs,"DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeleteNetworkCollectionBB"
 +                              ,"DeactivateServiceInstanceBB","UnassignServiceInstanceBB");
        }
        
        @Ignore
                execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
  
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 +              List<OrchestrationFlow> orchFlows = createFlowList("CreateNetworkCollectionBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","ActivateNetworkCollectionBB");
                northBoundRequest.setOrchestrationFlowList(orchFlows);
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("CreateNetworkCollectionBB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("AssignNetworkBB");
 -              orchFlows.add(orch2);
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("CreateNetworkBB");
 -              orchFlows.add(orch3);
 -              OrchestrationFlow orch4 = new OrchestrationFlow();
 -              orch4.setFlowName("ActivateNetworkBB");
 -              orchFlows.add(orch4);
 -              OrchestrationFlow orch5 = new OrchestrationFlow();
 -              orch5.setFlowName("ActivateNetworkCollectionBB");
 -              orchFlows.add(orch5);
                
                Service service = new Service();
                CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
                when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"CreateNetworkCollectionBB");
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"AssignNetworkBB");
 -              assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(),"CreateNetworkBB");
 -              assertEquals(ebbs.get(3).getBuildingBlock().getBpmnFlowName(),"ActivateNetworkBB");
 -              assertEquals(ebbs.get(4).getBuildingBlock().getBpmnFlowName(),"AssignNetworkBB");
 -              assertEquals(ebbs.get(5).getBuildingBlock().getBpmnFlowName(),"CreateNetworkBB");
 -              assertEquals(ebbs.get(6).getBuildingBlock().getBpmnFlowName(),"ActivateNetworkBB");
 -              assertEquals(ebbs.get(7).getBuildingBlock().getBpmnFlowName(),"ActivateNetworkCollectionBB");
 +              assertEqualsBulkFlowName(ebbs,"CreateNetworkCollectionBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","ActivateNetworkCollectionBB");
        }
        
        @Ignore
                execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
                
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 +              List<OrchestrationFlow> orchFlows = createFlowList("DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkCollectionBB","DeleteNetworkCollectionBB");
                northBoundRequest.setOrchestrationFlowList(orchFlows);          
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("DeactivateNetworkBB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("DeleteNetworkBB");
 -              orchFlows.add(orch2);
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("UnassignNetworkBB");
 -              orchFlows.add(orch3);
 -              OrchestrationFlow orch4 = new OrchestrationFlow();
 -              orch4.setFlowName("DeactivateNetworkCollectionBB");
 -              orchFlows.add(orch4);
 -              OrchestrationFlow orch5 = new OrchestrationFlow();
 -              orch5.setFlowName("DeleteNetworkCollectionBB");
 -              orchFlows.add(orch5);
                
                Service service = new Service();
                CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
                when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
                workflowAction.selectExecutionList(execution);
                List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 -              assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"DeactivateNetworkBB");
 -              assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(),"DeleteNetworkBB");
 -              assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(),"UnassignNetworkBB");
 -              assertEquals(ebbs.get(3).getBuildingBlock().getBpmnFlowName(),"DeactivateNetworkBB");
 -              assertEquals(ebbs.get(4).getBuildingBlock().getBpmnFlowName(),"DeleteNetworkBB");
 -              assertEquals(ebbs.get(5).getBuildingBlock().getBpmnFlowName(),"UnassignNetworkBB");
 -              assertEquals(ebbs.get(6).getBuildingBlock().getBpmnFlowName(),"DeactivateNetworkCollectionBB");
 -              assertEquals(ebbs.get(7).getBuildingBlock().getBpmnFlowName(),"DeleteNetworkCollectionBB");
 +              assertEqualsBulkFlowName(ebbs,"DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkCollectionBB"
 +                              ,"DeleteNetworkCollectionBB");
        }
        
        /**
                executeFlows.add(ebb6);
  
                List<ExecuteBuildingBlock> sorted = workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows,"createInstance");
 -              assertEquals(sorted.get(0).getBuildingBlock().getBpmnFlowName(),"AssignNetworkBB");
 -              assertEquals(sorted.get(1).getBuildingBlock().getBpmnFlowName(),"CreateNetworkBB");
 -              assertEquals(sorted.get(2).getBuildingBlock().getBpmnFlowName(),"ActivateNetworkBB");
 -              assertEquals(sorted.get(3).getBuildingBlock().getBpmnFlowName(),"AssignNetworkBB");
 -              assertEquals(sorted.get(4).getBuildingBlock().getBpmnFlowName(),"CreateNetworkBB");
 -              assertEquals(sorted.get(5).getBuildingBlock().getBpmnFlowName(),"ActivateNetworkBB");
 +              assertEqualsBulkFlowName(sorted,"AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB");
        }
        
        @Test
                executeFlows.add(ebb6);
                
                List<ExecuteBuildingBlock> sorted = workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows,"deleteInstance");
 -              assertEquals(sorted.get(0).getBuildingBlock().getBpmnFlowName(),"DeactivateNetworkBB");
 -              assertEquals(sorted.get(1).getBuildingBlock().getBpmnFlowName(),"DeleteNetworkBB");
 -              assertEquals(sorted.get(2).getBuildingBlock().getBpmnFlowName(),"UnassignNetworkBB");
 -              assertEquals(sorted.get(3).getBuildingBlock().getBpmnFlowName(),"DeactivateNetworkBB");
 -              assertEquals(sorted.get(4).getBuildingBlock().getBpmnFlowName(),"DeleteNetworkBB");
 -              assertEquals(sorted.get(5).getBuildingBlock().getBpmnFlowName(),"UnassignNetworkBB");
 +              assertEqualsBulkFlowName(sorted,"DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB");
        }
        @Test
        public void queryNorthBoundRequestCatalogDbNestedTest() throws MalformedURLException {
                NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 -              List<OrchestrationFlow> orchFlows = new LinkedList<>();
 -              OrchestrationFlow orch1 = new OrchestrationFlow();
 -              orch1.setFlowName("AAICheckVnfInMaintBB");
 -              orchFlows.add(orch1);
 -              OrchestrationFlow orch2 = new OrchestrationFlow();
 -              orch2.setFlowName("AAISetVnfInMaintBB");
 -              orchFlows.add(orch2);
 -              OrchestrationFlow orch3 = new OrchestrationFlow();
 -              orch3.setFlowName("VNF-Macro-Replace");
 -              orchFlows.add(orch3);
 -              OrchestrationFlow orch4 = new OrchestrationFlow();
 -              orch4.setFlowName("SDNOVnfHealthCheckBB");
 -              orchFlows.add(orch4);
 -              OrchestrationFlow orch5 = new OrchestrationFlow();
 -              orch5.setFlowName("AAIUnsetVnfInMaintBB");
 -              orchFlows.add(orch5);
 +              List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB","AAISetVnfInMaintBB","VNF-Macro-Replace","SDNOVnfHealthCheckBB","AAIUnsetVnfInMaintBB");
                northBoundRequest.setOrchestrationFlowList(orchFlows);
 -              
 -              List<OrchestrationFlow> macroFlows = new LinkedList<>();
 -              OrchestrationFlow o1 = new OrchestrationFlow();
 -              o1.setFlowName("DeactivateVfModuleBB");
 -              macroFlows.add(o1);
 -              OrchestrationFlow o2 = new OrchestrationFlow();
 -              o2.setFlowName("DeleteVfModuleBB");
 -              macroFlows.add(o2);
 -              OrchestrationFlow o3 = new OrchestrationFlow();
 -              o3.setFlowName("DeactivateVnfBB");
 -              macroFlows.add(o3);
 -              OrchestrationFlow o4 = new OrchestrationFlow();
 -              o4.setFlowName("CreateVfModuleBB");
 -              macroFlows.add(o4);
 -              OrchestrationFlow o5 = new OrchestrationFlow();
 -              o5.setFlowName("ActivateVfModuleBB");
 -              macroFlows.add(o5);
 -              OrchestrationFlow o6 = new OrchestrationFlow();
 -              o6.setFlowName("ActivateVnfBB");
 -              macroFlows.add(o6);
 +              List<OrchestrationFlow> macroFlows = createFlowList("DeactivateVfModuleBB","DeleteVfModuleBB","DeactivateVnfBB","CreateVfModuleBB","ActivateVfModuleBB","ActivateVnfBB");
                
                when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScope("replaceInstance","Vnf",false)).thenReturn(northBoundRequest);
                when(catalogDbClient.getOrchestrationFlowByAction("VNF-Macro-Replace")).thenReturn(macroFlows);
                String uri5 = "'/v6/serviceInstances/123/vnfs";
                String uri6 = "/v6/serviceInstances/123/vnfs/1234/someAction";
                String uri7 = "/v6/serviceInstances/123/vnfs/1234/vfModules/5678/replace";
-               
+               String uri8 = "/v6/serviceInstances/123/vnfs/1234/vfModules/scaleOut";
                Resource expected1 = new Resource(WorkflowType.SERVICE, "123", true);
                Resource expected2 = new Resource(WorkflowType.VNF, "1234", false);
                Resource expected3 = new Resource(WorkflowType.VNF, "1234", false);
                result = workflowAction.extractResourceIdAndTypeFromUri(uri7);
                assertEquals(expected4.getResourceId(),result.getResourceId());
                assertEquals(expected4.getResourceType(),result.getResourceType());
+               result = workflowAction.extractResourceIdAndTypeFromUri(uri8);
+         assertEquals(UUID.randomUUID().toString().length(),result.getResourceId().length());    
+         assertEquals("VfModule", result.getResourceType().toString());
+               
        }
        
        @Test
                }
        }
        
 +      @Ignore
        @Test
        public void traverseCatalogDbServiceMultipleNetworkTest() throws IOException{
                execution.setVariable("testProcessKey", "testProcessKeyValue");
                assertEquals("222",result.get(1).getResourceId());
                assertEquals("111",result.get(2).getResourceId());
        }
 +      
 +      private List<OrchestrationFlow> createFlowList (String... flowNames){
 +              List<OrchestrationFlow> result = new ArrayList<>();
 +              for(String flowName : flowNames){
 +                      OrchestrationFlow orchFlow = new OrchestrationFlow();
 +                      orchFlow.setFlowName(flowName);
 +                      result.add(orchFlow);
 +              }
 +              return result;
 +      }
 +      
 +      private void assertEqualsBulkFlowName (List<ExecuteBuildingBlock> ebbs, String... flowNames){
 +              for(int i = 0; i<ebbs.size(); i++){
 +                      assertEquals(ebbs.get(i).getBuildingBlock().getBpmnFlowName(),flowNames[i]);
 +              }
 +      }
  }