2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
 
   6  * ================================================================================
 
   7  * Modifications Copyright (c) 2019 Samsung
 
   8  * ================================================================================
 
   9  * Modifications Copyright (c) 2020 Nokia
 
  10  * ================================================================================
 
  11  * Licensed under the Apache License, Version 2.0 (the "License");
 
  12  * you may not use this file except in compliance with the License.
 
  13  * You may obtain a copy of the License at
 
  15  *      http://www.apache.org/licenses/LICENSE-2.0
 
  17  * Unless required by applicable law or agreed to in writing, software
 
  18  * distributed under the License is distributed on an "AS IS" BASIS,
 
  19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  20  * See the License for the specific language governing permissions and
 
  21  * limitations under the License.
 
  22  * ============LICENSE_END=========================================================
 
  25 package org.onap.so.bpmn.infrastructure.workflow.tasks;
 
  27 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
 
  28 import static org.hamcrest.CoreMatchers.containsString;
 
  29 import static org.hamcrest.CoreMatchers.equalTo;
 
  30 import static org.junit.Assert.assertEquals;
 
  31 import static org.junit.Assert.assertFalse;
 
  32 import static org.junit.Assert.assertNotNull;
 
  33 import static org.junit.Assert.assertNull;
 
  34 import static org.junit.Assert.assertThat;
 
  35 import static org.junit.Assert.assertTrue;
 
  36 import static org.junit.Assert.fail;
 
  37 import static org.mockito.ArgumentMatchers.any;
 
  38 import static org.mockito.ArgumentMatchers.anyList;
 
  39 import static org.mockito.ArgumentMatchers.anyObject;
 
  40 import static org.mockito.ArgumentMatchers.anyString;
 
  41 import static org.mockito.ArgumentMatchers.eq;
 
  42 import static org.mockito.ArgumentMatchers.isA;
 
  43 import static org.mockito.Mockito.doReturn;
 
  44 import static org.mockito.Mockito.doThrow;
 
  45 import static org.mockito.Mockito.when;
 
  46 import com.fasterxml.jackson.databind.DeserializationFeature;
 
  47 import com.fasterxml.jackson.databind.ObjectMapper;
 
  48 import java.io.IOException;
 
  49 import java.net.MalformedURLException;
 
  50 import java.nio.file.Files;
 
  51 import java.nio.file.Paths;
 
  52 import java.util.ArrayList;
 
  53 import java.util.Arrays;
 
  54 import java.util.List;
 
  55 import java.util.Optional;
 
  56 import java.util.UUID;
 
  57 import org.camunda.bpm.engine.delegate.BpmnError;
 
  58 import org.camunda.bpm.engine.delegate.DelegateExecution;
 
  59 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
 
  60 import org.javatuples.Pair;
 
  61 import org.junit.Before;
 
  62 import org.junit.Ignore;
 
  63 import org.junit.Rule;
 
  64 import org.junit.Test;
 
  65 import org.junit.rules.ExpectedException;
 
  66 import org.mockito.InjectMocks;
 
  67 import org.mockito.Mock;
 
  68 import org.mockito.Spy;
 
  69 import org.onap.aai.domain.yang.Relationship;
 
  70 import org.onap.aai.domain.yang.RelationshipList;
 
  71 import org.onap.aai.domain.yang.ServiceInstance;
 
  72 import org.onap.aai.domain.yang.VfModule;
 
  73 import org.onap.aai.domain.yang.VolumeGroup;
 
  74 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper;
 
  75 import org.onap.aaiclient.client.aai.entities.Relationships;
 
  76 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri;
 
  77 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory;
 
  78 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder;
 
  79 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types;
 
  80 import org.onap.so.bpmn.BaseTaskTest;
 
  81 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
 
  82 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
 
  83 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
 
  84 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
 
  85 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
 
  86 import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.DuplicateNameException;
 
  87 import org.onap.so.client.orchestration.AAIEntityNotFoundException;
 
  88 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
 
  89 import org.onap.so.db.catalog.beans.CollectionResource;
 
  90 import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
 
  91 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
 
  92 import org.onap.so.db.catalog.beans.ConfigurationResource;
 
  93 import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
 
  94 import org.onap.so.db.catalog.beans.CvnfcCustomization;
 
  95 import org.onap.so.db.catalog.beans.HeatEnvironment;
 
  96 import org.onap.so.db.catalog.beans.HeatTemplate;
 
  97 import org.onap.so.db.catalog.beans.InstanceGroup;
 
  98 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
 
  99 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
 
 100 import org.onap.so.db.catalog.beans.Service;
 
 101 import org.onap.so.db.catalog.beans.VfModuleCustomization;
 
 102 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
 
 103 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
 
 104 import org.onap.so.serviceinstancebeans.RequestDetails;
 
 105 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
 
 106 import org.springframework.core.env.Environment;
 
 108 public class WorkflowActionTest extends BaseTaskTest {
 
 110     private static final String MACRO_ACTIVATE_DELETE_UNASSIGN_JSON = "Macro/ServiceMacroActivateDeleteUnassign.json";
 
 111     private static final String MACRO_ASSIGN_JSON = "Macro/ServiceMacroAssign.json";
 
 112     private static final String MACRO_ASSIGN_NO_CLOUD_JSON = "Macro/ServiceMacroAssignNoCloud.json";
 
 113     private static final String VF_MODULE_CREATE_WITH_FABRIC_JSON = "VfModuleCreateWithFabric.json";
 
 114     private static final String VF_MODULE_REPLACE_REBUILD_VOLUME_GROUPS_JSON =
 
 115             "VfModuleReplaceRebuildVolumeGroups.json";
 
 116     private static final String MACRO_CREATE_NETWORK_COLLECTION_JSON = "Macro/CreateNetworkCollection.json";
 
 117     private static final String MACRO_VNF_MACRO_REPLACE_JSON = "Macro/VnfMacroReplace.json";
 
 120     protected Environment environment;
 
 122     protected UserParamsServiceTraversal userParamsServiceTraversal;
 
 125     private AaiResourceIdValidator aaiResourceIdValidator;
 
 127     protected WorkflowAction workflowAction;
 
 129     private DelegateExecution execution;
 
 133     protected WorkflowAction SPY_workflowAction;
 
 136     protected ExecuteBuildingBlockBuilder executeBuildingBlockBuilder;
 
 139     public ExpectedException thrown = ExpectedException.none();
 
 141     private String RESOURCE_PATH = "src/test/resources/__files/";
 
 143     private List<OrchestrationFlow> replaceVfModuleOrchFlows =
 
 144             createFlowList("DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
 
 145                     "DeleteVolumeGroupBB", "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB",
 
 146                     "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "CreateVolumeGroupBB",
 
 147                     "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
 
 148     private List<OrchestrationFlow> replaceRetainAssignmentsVfModuleOrchFlows = createFlowList("DeactivateVfModuleBB",
 
 149             "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "UnassignVolumeGroupBB",
 
 150             "AssignVolumeGroupBB", "ChangeModelVfModuleBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB",
 
 151             "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
 
 152     private List<OrchestrationFlow> replaceVfModuleWithFabricOrchFlows = createFlowList("DeleteFabricConfigurationBB",
 
 153             "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB",
 
 154             "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB", "AssignVfModuleBB",
 
 155             "CreateVfModuleBB", "ActivateVfModuleBB", "AddFabricConfigurationBB", "CreateVolumeGroupBB",
 
 156             "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
 
 159     public void before() throws Exception {
 
 160         execution = new DelegateExecutionFake();
 
 161         org.onap.aai.domain.yang.ServiceInstance servInstance = new org.onap.aai.domain.yang.ServiceInstance();
 
 162         servInstance.setServiceInstanceId("TEST");
 
 163         when(bbSetupUtils.getAAIServiceInstanceByName(anyString(), anyObject())).thenReturn(servInstance);
 
 164         workflowAction.setBbInputSetupUtils(bbSetupUtils);
 
 165         workflowAction.setBbInputSetup(bbInputSetup);
 
 173     public void selectExecutionListALaCarteNetworkCreateTest() throws Exception {
 
 174         String gAction = "createInstance";
 
 175         String resource = "Network";
 
 176         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
 
 177         initExecution(gAction, bpmnRequest, true);
 
 178         execution.setVariable("requestUri", "v6/networks/123");
 
 180         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 181         List<OrchestrationFlow> orchFlows =
 
 182                 createFlowList("AssignNetwork1802BB", "CreateNetworkBB", "ActivateNetworkBB");
 
 183         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 185         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 186                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 188         workflowAction.selectExecutionList(execution);
 
 189         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 190         assertEqualsBulkFlowName(ebbs, "AssignNetwork1802BB", "CreateNetworkBB", "ActivateNetworkBB");
 
 194     public void selectExecutionListALaCarteNetworkDeleteTest() throws Exception {
 
 195         String gAction = "deleteInstance";
 
 196         String resource = "Network";
 
 197         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
 
 198         initExecution(gAction, bpmnRequest, true);
 
 199         execution.setVariable("requestUri", "v6/networks/123");
 
 201         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 202         List<OrchestrationFlow> orchFlows =
 
 203                 createFlowList("DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetwork1802BB");
 
 204         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 206         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 207                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 209         workflowAction.selectExecutionList(execution);
 
 210         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 211         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetwork1802BB");
 
 215     public void selectExecutionListALaCarteServiceCreateTest() throws Exception {
 
 216         String gAction = "createInstance";
 
 217         String resource = "Service";
 
 218         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
 
 219         initExecution(gAction, bpmnRequest, true);
 
 220         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
 223         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 224         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "ActivateServiceInstanceBB");
 
 225         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 227         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 228                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 230         workflowAction.selectExecutionList(execution);
 
 231         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 232         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "ActivateServiceInstanceBB");
 
 236     public void selectExecutionListDuplicateNameExceptionTest() throws Exception {
 
 237         String gAction = "createInstance";
 
 238         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
 
 239         initExecution(gAction, bpmnRequest, true);
 
 240         execution.setVariable("requestUri", "v6/serviceInstances");
 
 242         doThrow(new DuplicateNameException(
 
 243                 "serviceInstance with name (instanceName) and different version id (3c40d244-808e-42ca-b09a-256d83d19d0a) already exists. The name must be unique."))
 
 244                         .when(aaiResourceIdValidator).validateResourceIdInAAI(anyString(), eq(WorkflowType.SERVICE),
 
 245                                 eq("test"), any(RequestDetails.class), any(WorkflowResourceIds.class));
 
 247         SPY_workflowAction.selectExecutionList(execution);
 
 248         assertEquals(execution.getVariable("WorkflowActionErrorMessage"),
 
 249                 "Exception while setting execution list. serviceInstance with name (instanceName) and different version id (3c40d244-808e-42ca-b09a-256d83d19d0a) already exists. The name must be unique.");
 
 251         // verify default values are present in failure case
 
 252         assertEquals(true, execution.getVariable("isTopLevelFlow"));
 
 253         assertEquals(false, execution.getVariable("sentSyncResponse"));
 
 257      * SERVICE MACRO TESTS
 
 260     public void selectExecutionListServiceMacroAssignTest() throws Exception {
 
 261         String gAction = "assignInstance";
 
 262         String resource = "Service";
 
 263         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
 
 264         initExecution(gAction, bpmnRequest, false);
 
 265         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
 267         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 268         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "AssignNetworkBB", "AssignVnfBB",
 
 269                 "AssignVolumeGroupBB", "AssignVfModuleBB");
 
 270         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 272         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
 
 273         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
 
 274         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
 
 275         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
 
 276         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
 
 277         HeatTemplate volumeHeatTemplate = new HeatTemplate();
 
 278         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
 
 279         vfModuleCustomization.setVfModule(vfModule);
 
 281         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
 
 282         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
 
 283         HeatEnvironment heatEnvironment = new HeatEnvironment();
 
 284         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
 
 285         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
 
 286         HeatTemplate moduleHeatTemplate = new HeatTemplate();
 
 287         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
 
 288         vfModuleCustomization2.setVfModule(vfModule2);
 
 290         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
 
 291         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
 
 293         when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
 
 294                 .thenReturn(prepareListWithResources());
 
 295         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 296                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 297         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
 
 298                 .thenReturn(vfModuleCustomization);
 
 299         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
 
 300                 .thenReturn(vfModuleCustomization2);
 
 301         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
 
 302                 .thenReturn(vfModuleCustomization3);
 
 304         workflowAction.selectExecutionList(execution);
 
 305         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 306         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
 
 307                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB");
 
 311     public void selectExecutionListServiceMacroAssignNoCloudTest() throws Exception {
 
 312         String gAction = "assignInstance";
 
 313         String resource = "Service";
 
 314         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_NO_CLOUD_JSON);
 
 315         initExecution(gAction, bpmnRequest, false);
 
 316         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
 318         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 319         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "AssignNetworkBB", "AssignVnfBB",
 
 320                 "AssignVolumeGroupBB", "AssignVfModuleBB");
 
 321         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 323         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
 
 324         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
 
 325         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
 
 326         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
 
 327         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
 
 328         HeatTemplate volumeHeatTemplate = new HeatTemplate();
 
 329         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
 
 330         vfModuleCustomization.setVfModule(vfModule);
 
 332         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
 
 333         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
 
 334         HeatEnvironment heatEnvironment = new HeatEnvironment();
 
 335         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
 
 336         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
 
 337         HeatTemplate moduleHeatTemplate = new HeatTemplate();
 
 338         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
 
 339         vfModuleCustomization2.setVfModule(vfModule2);
 
 341         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
 
 342         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
 
 344         when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
 
 345                 .thenReturn(prepareListWithResources());
 
 346         when(environment.getProperty("org.onap.so.cloud-owner")).thenReturn("att-aic");
 
 347         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 348                 false, "att-aic")).thenReturn(northBoundRequest);
 
 349         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
 
 350                 .thenReturn(vfModuleCustomization);
 
 351         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
 
 352                 .thenReturn(vfModuleCustomization2);
 
 353         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
 
 354                 .thenReturn(vfModuleCustomization3);
 
 355         workflowAction.selectExecutionList(execution);
 
 356         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 357         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
 
 358                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB");
 
 362     public void selectExecutionListServiceMacroActivateTest() throws Exception {
 
 363         String gAction = "activateInstance";
 
 364         String resource = "Service";
 
 365         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
 
 366         initExecution(gAction, bpmnRequest, false);
 
 367         execution.setVariable("requestUri", "v6/serviceInstances/si0");
 
 369         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 370         List<OrchestrationFlow> orchFlows =
 
 371                 createFlowList("CreateNetworkBB", "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB",
 
 372                         "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB", "ActivateServiceInstanceBB");
 
 373         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 375         ServiceInstance serviceInstanceAAI = new ServiceInstance();
 
 376         serviceInstanceAAI.setServiceInstanceId("si0");
 
 377         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
 
 378                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
 
 379         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
 
 380                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
 
 381         vnf.setVnfId("vnf0");
 
 383         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
 
 384         vnf.getVfModules().add(vfModule);
 
 385         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
 
 386         vnf.getVfModules().add(vfModule2);
 
 388         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
 
 389                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
 
 390         volumeGroup.setVolumeGroupId("volumeGroup0");
 
 391         vnf.getVolumeGroups().add(volumeGroup);
 
 393         serviceInstanceMSO.getVnfs().add(vnf);
 
 395         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("si0");
 
 396         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
 
 397         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 398                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 399         workflowAction.selectExecutionList(execution);
 
 400         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 401         assertEqualsBulkFlowName(ebbs, "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
 
 402                 "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB",
 
 403                 "ActivateServiceInstanceBB");
 
 404         assertEquals("volumeGroup0", ebbs.get(0).getWorkflowResourceIds().getVolumeGroupId());
 
 405         assertEquals("volumeGroup0", ebbs.get(1).getWorkflowResourceIds().getVolumeGroupId());
 
 406         assertEquals("testVfModuleId1", ebbs.get(2).getWorkflowResourceIds().getVfModuleId());
 
 407         assertEquals("testVfModuleId2", ebbs.get(3).getWorkflowResourceIds().getVfModuleId());
 
 408         assertEquals("testVfModuleId1", ebbs.get(4).getWorkflowResourceIds().getVfModuleId());
 
 409         assertEquals("testVfModuleId2", ebbs.get(5).getWorkflowResourceIds().getVfModuleId());
 
 410         assertEquals("vnf0", ebbs.get(6).getWorkflowResourceIds().getVnfId());
 
 411         assertEquals("si0", ebbs.get(7).getWorkflowResourceIds().getServiceInstanceId());
 
 415     public void selectExecutionListServiceMacroDeactivateTest() throws Exception {
 
 416         String gAction = "deactivateInstance";
 
 417         String resource = "Service";
 
 418         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
 
 419         initExecution(gAction, bpmnRequest, false);
 
 420         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
 422         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 423         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateServiceInstanceBB");
 
 424         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 426         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 427                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 428         workflowAction.selectExecutionList(execution);
 
 429         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 430         assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(), "DeactivateServiceInstanceBB");
 
 434     public void selectExecutionListServiceMacroEmptyServiceTest() throws Exception {
 
 435         String gAction = "createInstance";
 
 436         String resource = "Service";
 
 437         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
 
 438         initExecution(gAction, bpmnRequest, false);
 
 439         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
 441         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 442         northBoundRequest.setIsToplevelflow(true);
 
 443         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
 
 444                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
 
 445                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
 
 446                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
 
 447                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
 
 448         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 450         Service service = new Service();
 
 451         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
 
 452         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 453                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 454         workflowAction.selectExecutionList(execution);
 
 455         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 456         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "ActivateServiceInstanceBB");
 
 460     public void selectExecutionListServiceMacroCreateJustNetworkTest() throws Exception {
 
 461         String gAction = "createInstance";
 
 462         String resource = "Service";
 
 463         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
 
 464         initExecution(gAction, bpmnRequest, false);
 
 465         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
 467         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 468         northBoundRequest.setIsToplevelflow(true);
 
 469         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
 
 470                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
 
 471                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
 
 472                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
 
 473                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
 
 474         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 476         Service service = new Service();
 
 477         NetworkResourceCustomization networkCustomization = new NetworkResourceCustomization();
 
 478         networkCustomization.setModelCustomizationUUID("1234");
 
 479         service.getNetworkCustomizations().add(networkCustomization);
 
 480         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
 
 481         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 482                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 484         workflowAction.selectExecutionList(execution);
 
 485         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 486         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignNetworkBB", "CreateNetworkBB",
 
 487                 "ActivateNetworkBB", "ActivateServiceInstanceBB");
 
 491     public void selectExecutionListServiceMacroCreateWithNetworkCollectionTest() throws Exception {
 
 492         String gAction = "createInstance";
 
 493         String resource = "Service";
 
 494         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
 
 495         initExecution(gAction, bpmnRequest, false);
 
 496         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
 498         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 499         northBoundRequest.setIsToplevelflow(true);
 
 500         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
 
 501                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
 
 502                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
 
 503                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
 
 504                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
 
 505         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 507         Service service = new Service();
 
 508         List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
 
 509         NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
 
 510         networkCust.setModelCustomizationUUID("123");
 
 511         networkCustomizations.add(networkCust);
 
 512         service.setNetworkCustomizations(networkCustomizations);
 
 513         NetworkCollectionResourceCustomization collectionResourceCustomization =
 
 514                 new NetworkCollectionResourceCustomization();
 
 515         collectionResourceCustomization.setModelCustomizationUUID("123");
 
 517         CollectionResource collectionResource = new CollectionResource();
 
 518         collectionResource.setToscaNodeType("NetworkCollection");
 
 519         InstanceGroup instanceGroup = new InstanceGroup();
 
 520         instanceGroup.setToscaNodeType("NetworkCollectionResource");
 
 521         instanceGroup.setCollectionNetworkResourceCustomizations(new ArrayList<>());
 
 522         CollectionNetworkResourceCustomization collectionNetworkResourceCust =
 
 523                 new CollectionNetworkResourceCustomization();
 
 524         collectionNetworkResourceCust.setModelCustomizationUUID("123");
 
 525         collectionNetworkResourceCust.setNetworkResourceCustomization(collectionResourceCustomization);
 
 526         instanceGroup.getCollectionNetworkResourceCustomizations().add(collectionNetworkResourceCust);
 
 527         List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
 
 528         CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization =
 
 529                 new CollectionResourceInstanceGroupCustomization();
 
 530         collectionInstanceGroupCustomization.setModelCustomizationUUID("123");
 
 531         collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
 
 532         collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
 
 533         collectionInstanceGroupCustomization.setInstanceGroup(instanceGroup);
 
 534         collectionInstanceGroupCustomization.setCollectionResourceCust(collectionResourceCustomization);
 
 535         instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
 
 536         collectionResource.setInstanceGroup(instanceGroup);
 
 537         collectionResourceCustomization.setCollectionResource(collectionResource);;
 
 538         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
 
 539         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
 
 540         doReturn(collectionResourceCustomization).when(catalogDbClient)
 
 541                 .getNetworkCollectionResourceCustomizationByID("123");
 
 542         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 543                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 544         workflowAction.selectExecutionList(execution);
 
 545         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 546         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "CreateNetworkCollectionBB", "AssignNetworkBB",
 
 547                 "CreateNetworkBB", "ActivateNetworkBB", "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB",
 
 548                 "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB", "ActivateNetworkCollectionBB",
 
 549                 "ActivateServiceInstanceBB");
 
 550         assertEquals("Network id not empty", !ebbs.get(2).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 
 551         assertEquals("Network id not empty", !ebbs.get(3).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 
 552         assertEquals("Network id not empty", !ebbs.get(4).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 
 553         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
 
 554                 ebbs.get(2).getWorkflowResourceIds().getNetworkId() == ebbs.get(3).getWorkflowResourceIds()
 
 556                         && ebbs.get(3).getWorkflowResourceIds().getNetworkId() == ebbs.get(4).getWorkflowResourceIds()
 
 559         assertEquals("Network id not empty", !ebbs.get(5).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 
 560         assertEquals("Network id not empty", !ebbs.get(6).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 
 561         assertEquals("Network id not empty", !ebbs.get(7).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 
 562         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
 
 563                 ebbs.get(5).getWorkflowResourceIds().getNetworkId() == ebbs.get(6).getWorkflowResourceIds()
 
 565                         && ebbs.get(6).getWorkflowResourceIds().getNetworkId() == ebbs.get(7).getWorkflowResourceIds()
 
 568         assertEquals("Network id not empty", !ebbs.get(8).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 
 569         assertEquals("Network id not empty", !ebbs.get(9).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 
 570         assertEquals("Network id not empty", !ebbs.get(10).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
 
 571         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
 
 572                 ebbs.get(8).getWorkflowResourceIds().getNetworkId() == ebbs.get(9).getWorkflowResourceIds()
 
 574                         && ebbs.get(9).getWorkflowResourceIds().getNetworkId() == ebbs.get(10).getWorkflowResourceIds()
 
 580     public void selectExecutionListServiceMacroCreateWithUserParams() throws Exception {
 
 581         String gAction = "createInstance";
 
 582         String resource = "Service";
 
 583         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
 
 584         initExecution(gAction, bpmnRequest, false);
 
 585         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
 587         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 588         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
 
 589                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
 
 590                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
 
 591                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
 
 592                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
 
 593         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 595         Service service = new Service();
 
 596         service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
 
 598         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
 
 599         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
 
 600         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
 
 601         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
 
 602         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
 
 603         HeatTemplate volumeHeatTemplate = new HeatTemplate();
 
 604         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
 
 605         vfModuleCustomization.setVfModule(vfModule);
 
 607         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
 
 608         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
 
 609         HeatEnvironment heatEnvironment = new HeatEnvironment();
 
 610         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
 
 611         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
 
 612         HeatTemplate moduleHeatTemplate = new HeatTemplate();
 
 613         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
 
 614         vfModuleCustomization2.setVfModule(vfModule2);
 
 616         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
 
 617         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
 
 619         when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
 
 620                 .thenReturn(prepareListWithResources());
 
 621         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 622                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 623         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
 
 624                 .thenReturn(vfModuleCustomization);
 
 625         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
 
 626                 .thenReturn(vfModuleCustomization2);
 
 627         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
 
 628                 .thenReturn(vfModuleCustomization3);
 
 629         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
 
 630         workflowAction.selectExecutionList(execution);
 
 631         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 632         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
 
 633                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB", "CreateVolumeGroupBB",
 
 634                 "ActivateVolumeGroupBB", "CreateVfModuleBB", "CreateVfModuleBB", "CreateVfModuleBB",
 
 635                 "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB",
 
 636                 "ActivateServiceInstanceBB");
 
 638         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
 
 639         int randomUUIDLength = UUID.randomUUID().toString().length();
 
 640         assertEquals(randomUUIDLength, ebbs.get(1).getWorkflowResourceIds().getVnfId().length());
 
 641         assertEquals(randomUUIDLength, ebbs.get(2).getWorkflowResourceIds().getVolumeGroupId().length());
 
 642         assertEquals(randomUUIDLength, ebbs.get(3).getWorkflowResourceIds().getVfModuleId().length());
 
 643         assertEquals(randomUUIDLength, ebbs.get(4).getWorkflowResourceIds().getVfModuleId().length());
 
 644         assertEquals(randomUUIDLength, ebbs.get(5).getWorkflowResourceIds().getVfModuleId().length());
 
 645         assertEquals(randomUUIDLength, ebbs.get(6).getWorkflowResourceIds().getVolumeGroupId().length());
 
 646         assertEquals(randomUUIDLength, ebbs.get(7).getWorkflowResourceIds().getVolumeGroupId().length());
 
 647         assertEquals(randomUUIDLength, ebbs.get(8).getWorkflowResourceIds().getVfModuleId().length());
 
 648         assertEquals(randomUUIDLength, ebbs.get(9).getWorkflowResourceIds().getVfModuleId().length());
 
 649         assertEquals(randomUUIDLength, ebbs.get(10).getWorkflowResourceIds().getVfModuleId().length());
 
 650         assertEquals(randomUUIDLength, ebbs.get(11).getWorkflowResourceIds().getVfModuleId().length());
 
 651         assertEquals(randomUUIDLength, ebbs.get(12).getWorkflowResourceIds().getVfModuleId().length());
 
 652         assertEquals(randomUUIDLength, ebbs.get(13).getWorkflowResourceIds().getVfModuleId().length());
 
 653         assertEquals(randomUUIDLength, ebbs.get(14).getWorkflowResourceIds().getVnfId().length());
 
 654         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
 
 655         assertEquals(true, execution.getVariable("homing"));
 
 659     public void selectExecutionListServiceMacroDeleteTest() throws Exception {
 
 660         String gAction = "deleteInstance";
 
 661         String resource = "Service";
 
 662         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
 
 663         initExecution(gAction, bpmnRequest, false);
 
 664         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
 666         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 667         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
 
 668                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivatePnfBB",
 
 669                 "DeactivateNetworkBB", "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB",
 
 670                 "UnassignVfModuleBB", "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB",
 
 671                 "UnassignServiceInstanceBB");
 
 672         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 674         ServiceInstance serviceInstanceAAI = new ServiceInstance();
 
 675         serviceInstanceAAI.setServiceInstanceId("aaisi123");
 
 676         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
 
 677                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
 
 678         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
 
 679                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
 
 680         org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf pnf =
 
 681                 new org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf();
 
 682         vnf.setVnfId("vnfId123");
 
 683         pnf.setPnfId("pnfId123");
 
 685         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
 
 686         vnf.getVfModules().add(vfModule);
 
 687         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
 
 688         vnf.getVfModules().add(vfModule2);
 
 690         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
 
 691                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
 
 692         volumeGroup.setVolumeGroupId("vg123");
 
 693         vnf.getVolumeGroups().add(volumeGroup);
 
 695         serviceInstanceMSO.getVnfs().add(vnf);
 
 696         serviceInstanceMSO.getPnfs().add(pnf);
 
 698         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
 
 699         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
 
 700         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 701                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 702         workflowAction.selectExecutionList(execution);
 
 703         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 704         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeactivateVfModuleBB", "DeleteVfModuleBB",
 
 705                 "DeleteVfModuleBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB",
 
 706                 "DeactivatePnfBB", "DeactivateServiceInstanceBB", "UnassignVfModuleBB", "UnassignVfModuleBB",
 
 707                 "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignServiceInstanceBB");
 
 711     public void selectExecutionListServiceMacroDeleteWithPnfTest() throws Exception {
 
 712         String gAction = "deleteInstance";
 
 713         String resource = "Service";
 
 714         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
 
 715         initExecution(gAction, bpmnRequest, false);
 
 716         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
 718         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 719         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
 
 720                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivatePnfBB",
 
 721                 "DeactivateNetworkBB", "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB",
 
 722                 "UnassignVfModuleBB", "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB",
 
 723                 "UnassignServiceInstanceBB");
 
 724         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 726         ServiceInstance serviceInstanceAAI = new ServiceInstance();
 
 727         serviceInstanceAAI.setServiceInstanceId("aaisi123");
 
 728         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
 
 729                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
 
 730         org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf pnf =
 
 731                 new org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf();
 
 732         pnf.setPnfId("pnfId123");
 
 734         serviceInstanceMSO.getPnfs().add(pnf);
 
 736         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
 
 737         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
 
 738         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 739                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 740         workflowAction.selectExecutionList(execution);
 
 741         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 742         assertEqualsBulkFlowName(ebbs, "DeactivatePnfBB", "DeactivateServiceInstanceBB", "UnassignServiceInstanceBB");
 
 746     public void selectExecutionListServiceMacroUnassignTest() throws Exception {
 
 747         String gAction = "unassignInstance";
 
 748         String resource = "Service";
 
 749         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
 
 750         initExecution(gAction, bpmnRequest, false);
 
 751         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
 753         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 754         List<OrchestrationFlow> orchFlows = createFlowList("UnassignVfModuleBB", "UnassignVolumeGroupBB",
 
 755                 "UnassignVnfBB", "UnassignNetworkBB", "UnassignServiceInstanceBB");
 
 756         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 758         ServiceInstance serviceInstanceAAI = new ServiceInstance();
 
 759         serviceInstanceAAI.setServiceInstanceId("aaisi123");
 
 760         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
 
 761                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
 
 762         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
 
 763                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
 
 764         vnf.setVnfId("vnfId123");
 
 766         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
 
 767         vnf.getVfModules().add(vfModule);
 
 768         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
 
 769         vnf.getVfModules().add(vfModule2);
 
 771         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
 
 772                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
 
 773         volumeGroup.setVolumeGroupId("vg123");
 
 774         vnf.getVolumeGroups().add(volumeGroup);
 
 776         serviceInstanceMSO.getVnfs().add(vnf);
 
 778         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
 
 779         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
 
 780         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 781                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 782         workflowAction.selectExecutionList(execution);
 
 783         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 784         assertEqualsBulkFlowName(ebbs, "UnassignVfModuleBB", "UnassignVfModuleBB", "UnassignVolumeGroupBB",
 
 785                 "UnassignVnfBB", "UnassignServiceInstanceBB");
 
 789     public void selectExecutionListServiceMacroDeleteNetworkCollectionTest() throws Exception {
 
 790         String gAction = "deleteInstance";
 
 791         String resource = "Service";
 
 792         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
 
 793         initExecution(gAction, bpmnRequest, false);
 
 794         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
 796         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 797         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
 
 798                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivateNetworkBB",
 
 799                 "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB", "UnassignVfModuleBB",
 
 800                 "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB", "UnassignServiceInstanceBB");
 
 801         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 803         ServiceInstance serviceInstanceAAI = new ServiceInstance();
 
 804         serviceInstanceAAI.setServiceInstanceId("aaisi123");
 
 805         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
 
 806                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
 
 808         org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network =
 
 809                 new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
 
 810         network.setNetworkId("123");
 
 811         serviceInstanceMSO.getNetworks().add(network);
 
 812         org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network2 =
 
 813                 new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
 
 814         network2.setNetworkId("321");
 
 815         serviceInstanceMSO.getNetworks().add(network2);
 
 817         Collection collection = new Collection();
 
 818         serviceInstanceMSO.setCollection(collection);
 
 820         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
 
 821         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
 
 822         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 823                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 824         workflowAction.selectExecutionList(execution);
 
 825         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 826         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
 
 827                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB", "DeleteNetworkCollectionBB",
 
 828                 "DeactivateServiceInstanceBB", "UnassignServiceInstanceBB");
 
 832     public void selectExecutionListVnfMacroRecreateTest() throws Exception {
 
 833         String gAction = "recreateInstance";
 
 834         String resource = "Vnf";
 
 835         String bpmnRequest = readBpmnRequestFromFile(MACRO_VNF_MACRO_REPLACE_JSON);
 
 836         initExecution(gAction, bpmnRequest, false);
 
 837         execution.setVariable("requestUri", "v7/serviceInstances/123/vnfs/1234/recreate");
 
 838         execution.setVariable("serviceInstanceId", "123");
 
 839         execution.setVariable("vnfId", "1234");
 
 841         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 842         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
 
 843                 "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB", "DeactivateVfModuleBB",
 
 844                 "DeleteVfModuleBB", "DeactivateVnfBB", "CreateVfModuleBB", "ActivateVfModuleBB",
 
 845                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB", "SDNOVnfHealthCheckBB",
 
 846                 "AAIUnsetVnfInMaintBB");
 
 847         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 849         ServiceInstance serviceInstanceAAI = new ServiceInstance();
 
 850         serviceInstanceAAI.setServiceInstanceId("123");
 
 851         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
 
 852                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
 
 853         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
 
 854                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
 
 855         vnf.setVnfId("1234");
 
 857         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 858                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 859         vfModule.setVfModuleId("vfModule1");
 
 860         vnf.getVfModules().add(vfModule);
 
 861         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 =
 
 862                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 863         vfModule2.setVfModuleId("vfModule2");
 
 864         vnf.getVfModules().add(vfModule2);
 
 866         serviceInstanceMSO.getVnfs().add(vnf);
 
 868         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
 
 869         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
 
 870         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 871                 false, "cloud-owner")).thenReturn(northBoundRequest);
 
 872         workflowAction.selectExecutionList(execution);
 
 873         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 874         assertEqualsBulkFlowName(ebbs, "AAICheckVnfInMaintBB", "AAISetVnfInMaintBB", "DeactivateVfModuleBB",
 
 875                 "DeactivateVfModuleBB", "DeleteVfModuleBB", "DeleteVfModuleBB", "DeactivateVnfBB", "CreateVfModuleBB",
 
 876                 "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB", "SDNOVnfHealthCheckBB",
 
 877                 "AAIUnsetVnfInMaintBB");
 
 881     public void selectExecutionListVnfMacroReplaceTest() throws Exception {
 
 882         String gAction = "replaceInstance";
 
 883         String resource = "Vnf";
 
 884         String bpmnRequest = readBpmnRequestFromFile(MACRO_VNF_MACRO_REPLACE_JSON);
 
 885         initExecution(gAction, bpmnRequest, false);
 
 886         execution.setVariable("requestUri", "v7/serviceInstances/123/vnfs/1234/replace");
 
 887         execution.setVariable("serviceInstanceId", "123");
 
 888         execution.setVariable("vnfId", "1234");
 
 890         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 891         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
 
 892                 "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB", "DeactivateVfModuleBB",
 
 893                 "DeleteVfModuleBB", "DeactivateVnfBB", "ChangeModelVfModuleBB", "CreateVfModuleBB",
 
 894                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB",
 
 895                 "ChangeModelVnfBB", "ActivateVnfBB", "ChangeModelServiceInstanceBB", "SDNOVnfHealthCheckBB",
 
 896                 "AAIUnsetVnfInMaintBB");
 
 897         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 899         ServiceInstance serviceInstanceAAI = new ServiceInstance();
 
 900         serviceInstanceAAI.setServiceInstanceId("123");
 
 901         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
 
 902                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
 
 903         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
 
 904                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
 
 905         vnf.setVnfId("1234");
 
 906         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 907                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 908         vfModule.setVfModuleId("vfModule1");
 
 909         vnf.getVfModules().add(vfModule);
 
 910         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 =
 
 911                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 912         vfModule2.setVfModuleId("vfModule2");
 
 913         vnf.getVfModules().add(vfModule2);
 
 914         serviceInstanceMSO.getVnfs().add(vnf);
 
 915         VfModule vfModuleAAI = new VfModule();
 
 916         vfModuleAAI.setVfModuleId("vfModule2");
 
 917         RelationshipList relationshipList = new RelationshipList();
 
 918         Relationship relationship = new Relationship();
 
 919         relationshipList.getRelationship().add(relationship);
 
 920         vfModuleAAI.setRelationshipList(relationshipList);
 
 921         Relationships relationships = new Relationships("abc");
 
 922         Configuration config = new Configuration();
 
 923         config.setConfigurationId("configId");
 
 924         Optional<Configuration> configOp = Optional.of(config);
 
 925         Optional<Relationships> relationshipsOp = Optional.of(relationships);
 
 927         doReturn(relationshipsOp).when(workflowActionUtils).extractRelationshipsVnfc(isA(Relationships.class));
 
 928         doReturn(configOp).when(workflowActionUtils).extractRelationshipsConfiguration(isA(Relationships.class));
 
 929         doReturn(vfModuleAAI).when(bbSetupUtils).getAAIVfModule("1234", "vfModule2");
 
 930         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
 
 931         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
 
 932         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 933                 false, "cloud-owner")).thenReturn(northBoundRequest);
 
 934         workflowAction.selectExecutionList(execution);
 
 935         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 936         assertEqualsBulkFlowName(ebbs, "AAICheckVnfInMaintBB", "AAISetVnfInMaintBB", "DeactivateFabricConfigurationBB",
 
 937                 "UnassignFabricConfigurationBB", "DeactivateVfModuleBB", "DeactivateVfModuleBB", "DeleteVfModuleBB",
 
 938                 "DeleteVfModuleBB", "DeactivateVnfBB", "ChangeModelVfModuleBB", "ChangeModelVfModuleBB",
 
 939                 "CreateVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB",
 
 940                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ChangeModelVnfBB", "ActivateVnfBB",
 
 941                 "ChangeModelServiceInstanceBB", "SDNOVnfHealthCheckBB", "AAIUnsetVnfInMaintBB");
 
 942         for (ExecuteBuildingBlock executeBuildingBlock : ebbs) {
 
 943             assertEquals("123", executeBuildingBlock.getWorkflowResourceIds().getServiceInstanceId());
 
 949     public void selectExecutionListNetworkCollectionMacroCreate() throws Exception {
 
 950         String gAction = "createInstance";
 
 951         String resource = "NetworkCollection";
 
 952         String bpmnRequest = readBpmnRequestFromFile(MACRO_CREATE_NETWORK_COLLECTION_JSON);
 
 953         initExecution(gAction, bpmnRequest, false);
 
 954         execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
 
 956         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 957         List<OrchestrationFlow> orchFlows = createFlowList("CreateNetworkCollectionBB", "AssignNetworkBB",
 
 958                 "CreateNetworkBB", "ActivateNetworkBB", "ActivateNetworkCollectionBB");
 
 959         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 961         Service service = new Service();
 
 962         CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
 
 963         CollectionResource collectionResource = new CollectionResource();
 
 964         collectionResource.setToscaNodeType("Data NetworkCollection Data");
 
 965         collectionResourceCustomization.setCollectionResource(collectionResource);
 
 966         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
 
 968         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
 969                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
 970         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
 
 971         workflowAction.selectExecutionList(execution);
 
 972         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
 973         assertEqualsBulkFlowName(ebbs, "CreateNetworkCollectionBB", "AssignNetworkBB", "CreateNetworkBB",
 
 974                 "ActivateNetworkBB", "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB",
 
 975                 "ActivateNetworkCollectionBB");
 
 980     public void selectExecutionListNetworkCollectionMacroDelete() throws Exception {
 
 981         String gAction = "deleteInstance";
 
 982         String resource = "NetworkCollection";
 
 983         String bpmnRequest = readBpmnRequestFromFile(MACRO_CREATE_NETWORK_COLLECTION_JSON);
 
 984         initExecution(gAction, bpmnRequest, false);
 
 985         execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
 
 987         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
 988         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateNetworkBB", "DeleteNetworkBB",
 
 989                 "UnassignNetworkBB", "DeactivateNetworkCollectionBB", "DeleteNetworkCollectionBB");
 
 990         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
 992         Service service = new Service();
 
 993         CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
 
 994         CollectionResource collectionResource = new CollectionResource();
 
 995         collectionResource.setToscaNodeType("Data NetworkCollection Data");
 
 996         collectionResourceCustomization.setCollectionResource(collectionResource);
 
 997         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
 
 999         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1000                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1001         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
 
1002         workflowAction.selectExecutionList(execution);
 
1003         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1004         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
 
1005                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB", "DeactivateNetworkCollectionBB",
 
1006                 "DeleteNetworkCollectionBB");
 
1010     public void selectExecutionListALaCarteVfModuleNoFabricCreateTest() throws Exception {
 
1011         String gAction = "createInstance";
 
1012         String resource = "VfModule";
 
1013         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1014         initExecution(gAction, bpmnRequest, true);
 
1015         execution.setVariable("requestUri",
 
1016                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
 
1018         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1019         List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
 
1020                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB");
 
1021         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
1023         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1024                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1025         workflowAction.selectExecutionList(execution);
 
1026         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1027         assertEqualsBulkFlowName(ebbs, "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB");
 
1031     public void selectExecutionListALaCarteVfModuleFabricCreateTest() throws Exception {
 
1032         String gAction = "createInstance";
 
1033         String resource = "VfModule";
 
1034         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1035         initExecution(gAction, bpmnRequest, true);
 
1036         execution.setVariable("requestUri",
 
1037                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
 
1039         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1040         List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
 
1041                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB");
 
1042         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
1044         List<CvnfcCustomization> cvnfcCustomizations = new ArrayList<CvnfcCustomization>();
 
1045         CvnfcCustomization cvnfcCustomization = new CvnfcCustomization();
 
1046         CvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization =
 
1047                 new CvnfcConfigurationCustomization();
 
1048         ConfigurationResource configurationResource = new ConfigurationResource();
 
1049         configurationResource.setToscaNodeType("FabricConfiguration");
 
1050         vnfVfmoduleCvnfcConfigurationCustomization.setConfigurationResource(configurationResource);
 
1051         vnfVfmoduleCvnfcConfigurationCustomization.setModelInstanceName("modelInstanceName1");
 
1052         vnfVfmoduleCvnfcConfigurationCustomization.setCvnfcCustomization(cvnfcCustomization);
 
1053         List<CvnfcConfigurationCustomization> custSet = new ArrayList<CvnfcConfigurationCustomization>();
 
1054         custSet.add(vnfVfmoduleCvnfcConfigurationCustomization);
 
1055         cvnfcCustomization.setCvnfcConfigurationCustomization(custSet);
 
1056         cvnfcCustomization.setDescription("description");
 
1057         cvnfcCustomizations.add(cvnfcCustomization);
 
1059         CvnfcCustomization cvnfcCustomization2 = new CvnfcCustomization();
 
1060         CvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization2 =
 
1061                 new CvnfcConfigurationCustomization();
 
1062         ConfigurationResource configurationResource2 = new ConfigurationResource();
 
1063         configurationResource2.setToscaNodeType("FabricConfiguration");
 
1064         vnfVfmoduleCvnfcConfigurationCustomization2.setConfigurationResource(configurationResource2);
 
1065         vnfVfmoduleCvnfcConfigurationCustomization2.setModelInstanceName("modelInstanceName2");
 
1066         vnfVfmoduleCvnfcConfigurationCustomization2.setCvnfcCustomization(cvnfcCustomization2);
 
1067         List<CvnfcConfigurationCustomization> custSet2 = new ArrayList<CvnfcConfigurationCustomization>();
 
1068         custSet2.add(vnfVfmoduleCvnfcConfigurationCustomization2);
 
1069         cvnfcCustomization2.setCvnfcConfigurationCustomization(custSet2);
 
1070         cvnfcCustomization2.setDescription("description2");
 
1071         cvnfcCustomizations.add(cvnfcCustomization2);
 
1073         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1074                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1075         // when(catalogDbClient.getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID("fc25201d-36d6-43a3-8d39-fdae88e526ae",
 
1076         // "9a6d01fd-19a7-490a-9800-460830a12e0b")).thenReturn(cvnfcCustomizations);
 
1077         workflowAction.selectExecutionList(execution);
 
1078         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1079         assertEqualsBulkFlowName(ebbs, "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
 
1080                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "AssignFabricConfigurationBB",
 
1081                 "ActivateFabricConfigurationBB");
 
1085     public void selectExecutionListALaCarteVfModuleNoVolumeGroupReplaceTest() throws Exception {
 
1086         String gAction = "replaceInstance";
 
1087         String resource = "VfModule";
 
1088         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1089         initExecution(gAction, bpmnRequest, true);
 
1090         execution.setVariable("requestUri",
 
1091                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
 
1093         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1094         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
 
1095         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1096                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1097         workflowAction.selectExecutionList(execution);
 
1098         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1100         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "UnassignVFModuleBB",
 
1101                 "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB",
 
1102                 "ChangeModelServiceInstanceBB");
 
1106     public void selectExecutionListALaCarteVfModuleNoVolumeGroupReplaceRetainAssignmentsTest() throws Exception {
 
1107         String gAction = "replaceInstanceRetainAssignments";
 
1108         String resource = "VfModule";
 
1109         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1110         initExecution(gAction, bpmnRequest, true);
 
1111         execution.setVariable("requestUri",
 
1112                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
 
1114         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1115         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
 
1116         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1117                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1118         workflowAction.selectExecutionList(execution);
 
1119         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1121         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "ChangeModelVfModuleBB",
 
1122                 "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
 
1126     public void selectExecutionListALaCarteVfModuleVolumeGroupToNoVolumeGroupReplaceTest() throws Exception {
 
1127         String gAction = "replaceInstance";
 
1128         String resource = "VfModule";
 
1129         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1130         initExecution(gAction, bpmnRequest, true);
 
1131         execution.setVariable("requestUri",
 
1132                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
 
1133         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
 
1134         execution.setVariable("vfModuleId", "1234");
 
1136         VolumeGroup volumeGroup = new VolumeGroup();
 
1137         volumeGroup.setVolumeGroupId("volumeGroupId");
 
1138         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
 
1139                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
 
1140         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1141         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
 
1142         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1143                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1144         workflowAction.selectExecutionList(execution);
 
1145         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1147         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
 
1148                 "DeleteVolumeGroupBB", "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVfModuleBB",
 
1149                 "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
 
1153     public void selectExecutionListALaCarteVfModuleVolumeGroupToNoVolumeGroupReplaceRetainAssignmentsTest()
 
1155         String gAction = "replaceInstanceRetainAssignments";
 
1156         String resource = "VfModule";
 
1157         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1158         initExecution(gAction, bpmnRequest, true);
 
1159         execution.setVariable("requestUri",
 
1160                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
 
1161         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
 
1162         execution.setVariable("vfModuleId", "1234");
 
1164         VolumeGroup volumeGroup = new VolumeGroup();
 
1165         volumeGroup.setVolumeGroupId("volumeGroupId");
 
1166         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
 
1167                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
 
1169         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1170         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
 
1171         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1172                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1173         workflowAction.selectExecutionList(execution);
 
1174         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1176         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
 
1177                 "DeleteVolumeGroupBB", "UnassignVolumeGroupBB", "ChangeModelVfModuleBB", "CreateVfModuleBB",
 
1178                 "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
 
1182     public void selectExecutionListALaCarteVfModuleKeepVolumeGroupReplaceTest() throws Exception {
 
1183         String gAction = "replaceInstance";
 
1184         String resource = "VfModule";
 
1185         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1186         initExecution(gAction, bpmnRequest, true);
 
1187         execution.setVariable("requestUri",
 
1188                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
 
1189         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
 
1190         execution.setVariable("vfModuleId", "1234");
 
1192         VolumeGroup volumeGroup = new VolumeGroup();
 
1193         volumeGroup.setVolumeGroupId("volumeGroupId");
 
1194         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
 
1195                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
 
1197         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
 
1198         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
 
1199         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
 
1200         vfModule.setVolumeHeatTemplate(new HeatTemplate());
 
1201         vfModuleCustomization.setVfModule(vfModule);
 
1202         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
 
1203                 .thenReturn(vfModuleCustomization);
 
1205         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1206         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
 
1207         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1208                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1209         workflowAction.selectExecutionList(execution);
 
1210         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1212         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "UnassignVFModuleBB",
 
1213                 "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB",
 
1214                 "ChangeModelServiceInstanceBB");
 
1218     public void selectExecutionListALaCarteVfModuleWithFabricKeepVolumeGroupReplaceTest() throws Exception {
 
1219         String gAction = "replaceInstance";
 
1220         String resource = "VfModule";
 
1221         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1222         initExecution(gAction, bpmnRequest, true);
 
1223         execution.setVariable("requestUri",
 
1224                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
 
1225         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
 
1226         execution.setVariable("vfModuleId", "1234");
 
1228         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
 
1229         vnf.setVnfId("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
 
1230         vnf.setModelCustomizationId("modelCustomizationId");
 
1231         when(bbSetupUtils.getAAIGenericVnf(any())).thenReturn(vnf);
 
1233         org.onap.aai.domain.yang.VfModule vfModuleFromAAI = new org.onap.aai.domain.yang.VfModule();
 
1234         vfModuleFromAAI.setModelCustomizationId("modelCustomizationId");
 
1235         vfModuleFromAAI.setVfModuleId("1234");
 
1236         when(bbSetupUtils.getAAIVfModule(any(), any())).thenReturn(vfModuleFromAAI);
 
1238         VolumeGroup volumeGroup = new VolumeGroup();
 
1239         volumeGroup.setVolumeGroupId("volumeGroupId");
 
1240         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
 
1241                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
 
1243         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
 
1244         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
 
1245         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
 
1246         vfModule.setVolumeHeatTemplate(new HeatTemplate());
 
1247         vfModuleCustomization.setVfModule(vfModule);
 
1248         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
 
1249                 .thenReturn(vfModuleCustomization);
 
1250         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
 
1251         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
 
1252         vnfc.setModelInvariantId("modelInvariantId");
 
1253         vnfc.setVnfcName("testVnfcName");
 
1255         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(any(), any(), any(), any());
 
1257         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
 
1258         configuration.setConfigurationId("configurationId");
 
1259         configuration.setModelCustomizationId("modelCustimizationId");
 
1260         configuration.setConfigurationName("testConfigurationName");
 
1261         doReturn(configuration).when(SPY_workflowAction).getRelatedResourcesInVnfc(any(), any(), any());
 
1263         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1264         northBoundRequest.setOrchestrationFlowList(replaceVfModuleWithFabricOrchFlows);
 
1265         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1266                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1267         SPY_workflowAction.selectExecutionList(execution);
 
1268         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1270         assertEqualsBulkFlowName(ebbs, "DeleteFabricConfigurationBB", "DeactivateVfModuleBB", "DeleteVfModuleATTBB",
 
1271                 "UnassignVFModuleBB", "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB",
 
1272                 "ChangeModelServiceInstanceBB");
 
1276     public void selectExecutionListALaCarteVfModuleKeepVolumeGroupReplaceRetainAssignmentsTest() throws Exception {
 
1277         String gAction = "replaceInstanceRetainAssignments";
 
1278         String resource = "VfModule";
 
1279         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1280         initExecution(gAction, bpmnRequest, true);
 
1281         execution.setVariable("requestUri",
 
1282                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
 
1283         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
 
1284         execution.setVariable("vfModuleId", "1234");
 
1286         VolumeGroup volumeGroup = new VolumeGroup();
 
1287         volumeGroup.setVolumeGroupId("volumeGroupId");
 
1288         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
 
1289                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
 
1291         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
 
1292         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
 
1293         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
 
1294         vfModule.setVolumeHeatTemplate(new HeatTemplate());
 
1295         vfModuleCustomization.setVfModule(vfModule);
 
1296         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
 
1297                 .thenReturn(vfModuleCustomization);
 
1299         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1300         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
 
1301         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1302                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1303         workflowAction.selectExecutionList(execution);
 
1304         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1306         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "ChangeModelVfModuleBB",
 
1307                 "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
 
1311     public void selectExecutionListALaCarteVfModuleNoVolumeGroupToVolumeGroupReplaceTest() throws Exception {
 
1312         String gAction = "replaceInstance";
 
1313         String resource = "VfModule";
 
1314         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1315         initExecution(gAction, bpmnRequest, true);
 
1316         execution.setVariable("requestUri",
 
1317                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
 
1318         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
 
1319         execution.setVariable("vfModuleId", "1234");
 
1321         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
 
1322         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
 
1323         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
 
1324         vfModule.setVolumeHeatTemplate(new HeatTemplate());
 
1325         vfModuleCustomization.setVfModule(vfModule);
 
1326         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
 
1327                 .thenReturn(vfModuleCustomization);
 
1329         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1330         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
 
1331         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1332                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1333         workflowAction.selectExecutionList(execution);
 
1334         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1336         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "UnassignVFModuleBB",
 
1337                 "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
 
1338                 "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
 
1342     public void selectExecutionListALaCarteVfModuleNoVolumeGroupToVolumeGroupReplaceRetainAssignmentsTest()
 
1344         String gAction = "replaceInstanceRetainAssignments";
 
1345         String resource = "VfModule";
 
1346         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1347         initExecution(gAction, bpmnRequest, true);
 
1348         execution.setVariable("requestUri",
 
1349                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
 
1350         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
 
1351         execution.setVariable("vfModuleId", "1234");
 
1353         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
 
1354         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
 
1355         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
 
1356         vfModule.setVolumeHeatTemplate(new HeatTemplate());
 
1357         vfModuleCustomization.setVfModule(vfModule);
 
1358         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
 
1359                 .thenReturn(vfModuleCustomization);
 
1361         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1362         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
 
1363         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1364                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1365         workflowAction.selectExecutionList(execution);
 
1366         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1368         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "AssignVolumeGroupBB",
 
1369                 "ChangeModelVfModuleBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
 
1370                 "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
 
1374     public void selectExecutionListALaCarteVfModuleRebuildVolumeGroupReplaceTest() throws Exception {
 
1375         String gAction = "replaceInstance";
 
1376         String resource = "VfModule";
 
1377         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_REPLACE_REBUILD_VOLUME_GROUPS_JSON);
 
1378         initExecution(gAction, bpmnRequest, true);
 
1379         execution.setVariable("requestUri",
 
1380                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
 
1381         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
 
1382         execution.setVariable("vfModuleId", "1234");
 
1384         VolumeGroup volumeGroup = new VolumeGroup();
 
1385         volumeGroup.setVolumeGroupId("volumeGroupId");
 
1386         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
 
1387                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
 
1389         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
 
1390         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
 
1391         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
 
1392         vfModule.setVolumeHeatTemplate(new HeatTemplate());
 
1393         vfModuleCustomization.setVfModule(vfModule);
 
1394         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
 
1395                 .thenReturn(vfModuleCustomization);
 
1397         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1398         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
 
1399         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1400                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1401         workflowAction.selectExecutionList(execution);
 
1402         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1404         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
 
1405                 "DeleteVolumeGroupBB", "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB",
 
1406                 "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "CreateVolumeGroupBB",
 
1407                 "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
 
1411     public void selectExecutionListALaCarteVfModuleRebuildVolumeGroupReplaceRetainAssignmentsTest() throws Exception {
 
1412         String gAction = "replaceInstanceRetainAssignments";
 
1413         String resource = "VfModule";
 
1414         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_REPLACE_REBUILD_VOLUME_GROUPS_JSON);
 
1415         initExecution(gAction, bpmnRequest, true);
 
1416         execution.setVariable("requestUri",
 
1417                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
 
1418         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
 
1419         execution.setVariable("vfModuleId", "1234");
 
1421         VolumeGroup volumeGroup = new VolumeGroup();
 
1422         volumeGroup.setVolumeGroupId("volumeGroupId");
 
1423         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
 
1424                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
 
1426         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
 
1427         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
 
1428         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
 
1429         vfModule.setVolumeHeatTemplate(new HeatTemplate());
 
1430         vfModuleCustomization.setVfModule(vfModule);
 
1431         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
 
1432                 .thenReturn(vfModuleCustomization);
 
1434         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1435         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
 
1436         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1437                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1438         workflowAction.selectExecutionList(execution);
 
1439         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1441         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
 
1442                 "DeleteVolumeGroupBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB", "ChangeModelVfModuleBB",
 
1443                 "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB", "ActivateVfModuleBB",
 
1444                 "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
 
1449     public void selectExecutionListALaCarteVfModuleFabricDeleteTest() throws Exception {
 
1450         String gAction = "deleteInstance";
 
1451         String resource = "VfModule";
 
1452         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1453         initExecution(gAction, bpmnRequest, true);
 
1454         execution.setVariable("requestUri",
 
1455                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
 
1457         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1458         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
 
1459                 "UnassignVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB");
 
1460         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
1462         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1463                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1465         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
 
1466         vnf.setVnfId("vnf0");
 
1467         vnf.setModelCustomizationId("modelCustomizationId");
 
1468         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
 
1470         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
 
1471         vfModule.setModelCustomizationId("modelCustomizationId");
 
1472         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(vfModule);
 
1474         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
 
1475         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
 
1476         vnfc.setModelInvariantId("modelInvariantId");
 
1477         vnfc.setVnfcName("testVnfcName");
 
1479         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(anyObject(), anyObject(), anyObject(),
 
1482         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
 
1483         configuration.setConfigurationId("configurationId");
 
1484         configuration.setModelCustomizationId("modelCustimizationId");
 
1485         configuration.setConfigurationName("testConfigurationName");
 
1486         doReturn(configuration).when(SPY_workflowAction).getRelatedResourcesInVnfc(anyObject(), anyObject(),
 
1489         SPY_workflowAction.selectExecutionList(execution);
 
1490         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1491         assertEqualsBulkFlowName(ebbs, "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB",
 
1492                 "DeactivateVfModuleBB", "DeleteVfModuleBB", "UnassignVfModuleBB");
 
1496     public void getConfigBuildingBlocksNoVfModuleFabricDeleteTest() throws Exception {
 
1497         String gAction = "deleteInstance";
 
1498         ObjectMapper mapper = new ObjectMapper();
 
1499         WorkflowType resourceType = WorkflowType.VFMODULE;
 
1500         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1501         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
 
1502         execution.setVariable("requestAction", gAction);
 
1503         execution.setVariable("bpmnRequest", bpmnRequest);
 
1504         execution.setVariable("vnfId", "1234");
 
1505         execution.setVariable("vfModuleId", "vfModuleId1234");
 
1506         execution.setVariable("requestUri",
 
1507                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
 
1508         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
 
1509         RequestDetails requestDetails = sIRequest.getRequestDetails();
 
1510         String requestAction = "deleteInstance";
 
1511         String requestId = "9c944122-d161-4280-8594-48c06a9d96d5";
 
1512         boolean aLaCarte = true;
 
1513         String apiVersion = "7";
 
1514         String vnfType = "vnfType";
 
1515         String key = "00d15ebb-c80e-43c1-80f0-90c40dde70b0";
 
1516         String resourceId = "d1d35800-783d-42d3-82f6-d654c5054a6e";
 
1517         Resource resourceKey = new Resource(resourceType, key, aLaCarte);
 
1518         WorkflowResourceIds workflowResourceIds = SPY_workflowAction.populateResourceIdsFromApiHandler(execution);
 
1520         thrown.expect(AAIEntityNotFoundException.class);
 
1521         thrown.expectMessage(containsString(
 
1522                 "No matching VfModule is found in Generic-Vnf in AAI for vnfId: 1234 and vfModuleId : vfModuleId1234"));
 
1524         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
 
1525                 "UnassignVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB");
 
1527         ConfigBuildingBlocksDataObject dataObj = new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest)
 
1528                 .setOrchFlows(orchFlows).setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
 
1529                 .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(aLaCarte).setVnfType(vnfType)
 
1530                 .setWorkflowResourceIds(workflowResourceIds).setRequestDetails(requestDetails).setExecution(execution);
 
1532         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
 
1533         vnf.setVnfId("vnf0");
 
1534         vnf.setModelCustomizationId("modelCustomizationId");
 
1535         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
 
1537         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
 
1538         vfModule.setModelCustomizationId("modelCustomizationId");
 
1539         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(null);
 
1541         SPY_workflowAction.getConfigBuildingBlocks(dataObj);
 
1545     public void getConfigBuildingBlocksTest() throws Exception {
 
1546         String gAction = "deleteInstance";
 
1547         ObjectMapper mapper = new ObjectMapper();
 
1548         mapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
 
1550         WorkflowType resourceType = WorkflowType.VFMODULE;
 
1551         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
 
1552         execution.setVariable("requestAction", gAction);
 
1553         String bpmnRequest =
 
1554                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
 
1555         execution.setVariable("bpmnRequest", bpmnRequest);
 
1556         execution.setVariable("vnfId", "1234");
 
1557         execution.setVariable("vfModuleId", "vfModuleId1234");
 
1558         execution.setVariable("requestUri",
 
1559                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
 
1560         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
 
1561         RequestDetails requestDetails = sIRequest.getRequestDetails();
 
1562         String requestAction = "deleteInstance";
 
1563         String requestId = "9c944122-d161-4280-8594-48c06a9d96d5";
 
1564         boolean aLaCarte = true;
 
1565         String apiVersion = "7";
 
1566         String vnfType = "vnfType";
 
1567         String key = "00d15ebb-c80e-43c1-80f0-90c40dde70b0";
 
1568         String resourceId = "d1d35800-783d-42d3-82f6-d654c5054a6e";
 
1569         Resource resourceKey = new Resource(resourceType, key, aLaCarte);
 
1570         WorkflowResourceIds workflowResourceIds = SPY_workflowAction.populateResourceIdsFromApiHandler(execution);
 
1572         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
 
1573                 "UnassignVfModuleBB", "DeleteFabricConfigurationBB");
 
1575         ConfigBuildingBlocksDataObject dataObj = new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest)
 
1576                 .setOrchFlows(orchFlows).setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
 
1577                 .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(aLaCarte).setVnfType(vnfType)
 
1578                 .setWorkflowResourceIds(workflowResourceIds).setRequestDetails(requestDetails).setExecution(execution);
 
1580         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
 
1581         vnf.setVnfId("vnf0");
 
1582         vnf.setModelCustomizationId("modelCustomizationId");
 
1583         when(bbSetupUtils.getAAIGenericVnf(any())).thenReturn(vnf);
 
1585         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
 
1586         vfModule.setModelCustomizationId("modelCustomizationId");
 
1588         org.onap.aai.domain.yang.Configuration config1 = new org.onap.aai.domain.yang.Configuration();
 
1589         config1.setConfigurationId("config1");
 
1590         org.onap.aai.domain.yang.Configuration config2 = new org.onap.aai.domain.yang.Configuration();
 
1591         config2.setConfigurationId("config2");
 
1593         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
 
1594         org.onap.aai.domain.yang.Vnfc vnfc1 = new org.onap.aai.domain.yang.Vnfc();
 
1595         vnfc1.setVnfcName("zauk53avetd02svm001");
 
1596         org.onap.aai.domain.yang.Vnfc vnfc2 = new org.onap.aai.domain.yang.Vnfc();
 
1597         vnfc2.setVnfcName("zauk53avetd02tvm001");
 
1601         when(bbSetupUtils.getAAIVfModule(any(), any())).thenReturn(vfModule);
 
1602         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(any(), any(),
 
1603                 eq(org.onap.aai.domain.yang.Vnfc.class), eq(Types.VNFC));
 
1604         doReturn(config1).when(SPY_workflowAction).getRelatedResourcesInVnfc(eq(vnfc1),
 
1605                 eq(org.onap.aai.domain.yang.Configuration.class), eq(Types.CONFIGURATION));
 
1606         doReturn(config2).when(SPY_workflowAction).getRelatedResourcesInVnfc(eq(vnfc2),
 
1607                 eq(org.onap.aai.domain.yang.Configuration.class), eq(Types.CONFIGURATION));
 
1609         List<ExecuteBuildingBlock> results = SPY_workflowAction.getConfigBuildingBlocks(dataObj);
 
1611         assertFalse(results.isEmpty());
 
1612         assertEquals(2, results.size());
 
1613         assertEquals("config1", results.get(0).getWorkflowResourceIds().getConfigurationId());
 
1614         assertEquals("config2", results.get(1).getWorkflowResourceIds().getConfigurationId());
 
1615         assertEquals("zauk53avetd02svm001", results.get(0).getConfigurationResourceKeys().getVnfcName());
 
1616         assertEquals("zauk53avetd02tvm001", results.get(1).getConfigurationResourceKeys().getVnfcName());
 
1620     public void getConfigBuildingBlocksNullConfigurationTest() throws Exception {
 
1621         String gAction = "deleteInstance";
 
1622         ObjectMapper mapper = new ObjectMapper();
 
1623         mapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
 
1625         WorkflowType resourceType = WorkflowType.VFMODULE;
 
1626         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
 
1627         execution.setVariable("requestAction", gAction);
 
1628         String bpmnRequest =
 
1629                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
 
1630         execution.setVariable("bpmnRequest", bpmnRequest);
 
1631         execution.setVariable("vnfId", "1234");
 
1632         execution.setVariable("vfModuleId", "vfModuleId1234");
 
1633         execution.setVariable("requestUri",
 
1634                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
 
1635         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
 
1636         RequestDetails requestDetails = sIRequest.getRequestDetails();
 
1637         String requestAction = "deleteInstance";
 
1638         String requestId = "9c944122-d161-4280-8594-48c06a9d96d5";
 
1639         boolean aLaCarte = true;
 
1640         String apiVersion = "7";
 
1641         String vnfType = "vnfType";
 
1642         String key = "00d15ebb-c80e-43c1-80f0-90c40dde70b0";
 
1643         String resourceId = "d1d35800-783d-42d3-82f6-d654c5054a6e";
 
1644         Resource resourceKey = new Resource(resourceType, key, aLaCarte);
 
1645         WorkflowResourceIds workflowResourceIds = SPY_workflowAction.populateResourceIdsFromApiHandler(execution);
 
1647         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
 
1648                 "UnassignVfModuleBB", "DeleteFabricConfigurationBB");
 
1650         ConfigBuildingBlocksDataObject dataObj = new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest)
 
1651                 .setOrchFlows(orchFlows).setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
 
1652                 .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(aLaCarte).setVnfType(vnfType)
 
1653                 .setWorkflowResourceIds(workflowResourceIds).setRequestDetails(requestDetails).setExecution(execution);
 
1655         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
 
1656         vnf.setVnfId("vnf0");
 
1657         vnf.setModelCustomizationId("modelCustomizationId");
 
1658         when(bbSetupUtils.getAAIGenericVnf(any())).thenReturn(vnf);
 
1660         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
 
1661         vfModule.setModelCustomizationId("modelCustomizationId");
 
1663         /* this is a test case where configuration for vnfc is null */
 
1664         org.onap.aai.domain.yang.Configuration config1 = null;
 
1665         org.onap.aai.domain.yang.Configuration config2 = new org.onap.aai.domain.yang.Configuration();
 
1666         config2.setConfigurationId("config2");
 
1668         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
 
1669         org.onap.aai.domain.yang.Vnfc vnfc1 = new org.onap.aai.domain.yang.Vnfc();
 
1670         vnfc1.setVnfcName("zauk53avetd02svm001");
 
1671         org.onap.aai.domain.yang.Vnfc vnfc2 = new org.onap.aai.domain.yang.Vnfc();
 
1672         vnfc2.setVnfcName("zauk53avetd02tvm001");
 
1676         when(bbSetupUtils.getAAIVfModule(any(), any())).thenReturn(vfModule);
 
1677         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(any(), any(),
 
1678                 eq(org.onap.aai.domain.yang.Vnfc.class), eq(Types.VNFC));
 
1679         doReturn(config1).when(SPY_workflowAction).getRelatedResourcesInVnfc(eq(vnfc1),
 
1680                 eq(org.onap.aai.domain.yang.Configuration.class), eq(Types.CONFIGURATION));
 
1681         doReturn(config2).when(SPY_workflowAction).getRelatedResourcesInVnfc(eq(vnfc2),
 
1682                 eq(org.onap.aai.domain.yang.Configuration.class), eq(Types.CONFIGURATION));
 
1684         List<ExecuteBuildingBlock> results = SPY_workflowAction.getConfigBuildingBlocks(dataObj);
 
1686         assertFalse(results.isEmpty());
 
1687         assertEquals(1, results.size());
 
1688         assertEquals("config2", results.get(0).getWorkflowResourceIds().getConfigurationId());
 
1689         assertEquals("zauk53avetd02tvm001", results.get(0).getConfigurationResourceKeys().getVnfcName());
 
1693     public void selectExecutionListALaCarteVfModuleNoFabricDeleteTest() throws Exception {
 
1694         String gAction = "deleteInstance";
 
1695         String resource = "VfModule";
 
1696         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
 
1697         initExecution(gAction, bpmnRequest, true);
 
1698         execution.setVariable("requestUri",
 
1699                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
 
1701         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1702         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
 
1703                 "UnassignVfModuleBB", "DeleteFabricConfigurationBB");
 
1704         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
1706         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
 
1707                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1709         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
 
1710         vnf.setVnfId("vnf0");
 
1711         vnf.setModelCustomizationId("modelCustomizationId");
 
1712         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
 
1714         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
 
1715         vfModule.setModelCustomizationId("modelCustomizationId");
 
1716         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(vfModule);
 
1718         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
 
1720         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(anyObject(), anyObject(), anyObject(),
 
1723         SPY_workflowAction.selectExecutionList(execution);
 
1724         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1725         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleBB", "UnassignVfModuleBB");
 
1729     public void selectExecutionListMacroResumeTest() throws Exception {
 
1730         String gAction = "createInstance";
 
1731         String resource = "Service";
 
1732         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
 
1733         initExecution(gAction, bpmnRequest, false);
 
1734         execution.setVariable("requestUri", "v6/serviceInstances/123");
 
1736         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1737         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
 
1738         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
1740         Service service = new Service();
 
1741         service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
 
1743         ServiceInstance si = new ServiceInstance();
 
1745         when(bbSetupUtils.getAAIServiceInstanceById("123")).thenReturn(si);
 
1746         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
 
1748         String flowsToExecuteString =
 
1749                 "[{\"buildingBlock\":{\"mso-id\":\"2f9ddc4b-4dcf-4129-a35f-be1625ae0176\",\"bpmn-flow-name\":\"AssignServiceInstanceBB\",\"key\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"is-virtual-link\":false,\"virtual-link-key\":null},\"requestId\":\"9c944122-d161-4280-8594-48c06a9d96d5\",\"apiVersion\":\"7\",\"resourceId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"requestAction\":\"deleteInstance\",\"vnfType\":\"\",\"aLaCarte\":true,\"homing\":false,\"workflowResourceIds\":{\"serviceInstanceId\":\"ff9dae72-05bb-4277-ad2b-1b082467c138\",\"vnfId\":\"84a29830-e533-4f20-a838-910c740bf24c\",\"networkId\":\"\",\"volumeGroupId\":\"\",\"vfModuleId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"networkCollectionId\":null,\"configurationId\":\"10f8a3a3-91bf-4821-9515-c01b2864dff0\",\"instanceGroupId\":\"\"},\"requestDetails\":{\"modelInfo\":{\"modelCustomizationName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelInvariantId\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelType\":\"vfModule\",\"modelId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelVersion\":\"1\",\"modelCustomizationUuid\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelVersionId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelCustomizationId\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelUuid\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelInvariantUuid\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelInstanceName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\"},\"requestInfo\":{\"source\":\"VID\",\"suppressRollback\":false,\"requestorId\":\"pj8646\"},\"cloudConfiguration\":{\"tenantId\":\"e2a6af59d1cb43b2874e943bbbf8470a\",\"cloudOwner\":\"att-nc\",\"lcpCloudRegionId\":\"auk51b\"},\"requestParameters\":{\"testApi\":\"GR_API\"}},\"configurationResourceKeys\":{\"vfModuleCustomizationUUID\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"vnfResourceCustomizationUUID\":\"a80f05b8-d651-44af-b999-8ed78fb4582f\",\"cvnfcCustomizationUUID\":\"69cce457-9ffd-4359-962b-0596a1e83ad1\",\"vnfcName\":\"zauk51bmcmr01mcm001\"}}]";
 
1750         ObjectMapper om = new ObjectMapper();
 
1751         List<ExecuteBuildingBlock> flowsToExecute = null;
 
1753             ExecuteBuildingBlock[] asArray = om.readValue(flowsToExecuteString, ExecuteBuildingBlock[].class);
 
1754             flowsToExecute = Arrays.asList(asArray);
 
1755         } catch (Exception e) {
 
1756             e.printStackTrace();
 
1759         when(bbSetupUtils.loadOriginalFlowExecutionPath(anyString())).thenReturn(flowsToExecute);
 
1761         workflowAction.selectExecutionList(execution);
 
1762         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
1763         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB");
 
1767     public void getRelatedResourcesInVfModuleTest() throws Exception {
 
1768         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
 
1769         vnfc.setModelInvariantId("modelInvariantId");
 
1770         vnfc.setVnfcName("testVnfcName");
 
1772         String vfncPayload =
 
1773                 new String(Files.readAllBytes(Paths.get(RESOURCE_PATH + "/BuildingBlocks/vnfcResponse.json")));
 
1774         AAIResultWrapper vfncWrapper = new AAIResultWrapper(vfncPayload);
 
1776         String configurationPayload =
 
1777                 new String(Files.readAllBytes(Paths.get(RESOURCE_PATH + "/BuildingBlocks/configurationResponse.json")));
 
1778         AAIResultWrapper configurationWrapper = new AAIResultWrapper(configurationPayload);
 
1779         List<AAIResultWrapper> configurationResultWrappers = new ArrayList<AAIResultWrapper>();
 
1780         configurationResultWrappers.add(configurationWrapper);
 
1782         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().vnfc(vnfc.getVnfcName()));
 
1783         when(bbSetupUtils.getAAIResourceDepthOne(uri)).thenReturn(vfncWrapper);
 
1785         doReturn(configurationResultWrappers).when(SPY_workflowAction).getResultWrappersFromRelationships(anyObject(),
 
1787         org.onap.aai.domain.yang.Configuration configuration = SPY_workflowAction.getRelatedResourcesInVnfc(vnfc,
 
1788                 org.onap.aai.domain.yang.Configuration.class, Types.CONFIGURATION);
 
1789         assertEquals("testConfigurationId", configuration.getConfigurationId());
 
1793      * WorkflowActionBB Tests
 
1797     public void pluralTest() {
 
1798         List<String> items = Arrays.asList("serviceInstances, Service", "vnfs, Vnf", "vfModules, VfModule",
 
1799                 "networks, Network", "invalidNames, invalidNames");
 
1800         items.forEach(item -> {
 
1801             String[] split = item.split(",");
 
1802             String type = split[0].trim();
 
1803             String expected = split[1].trim();
 
1804             assertThat(workflowAction.convertTypeFromPlural(type), equalTo(expected));
 
1809     public void sortExecutionPathByObjectForVlanTaggingCreateTest() throws Exception {
 
1810         List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
 
1812         BuildingBlock bb = new BuildingBlock().setBpmnFlowName("AssignNetworkBB").setKey("0");
 
1813         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock().setBuildingBlock(bb);
 
1814         executeFlows.add(ebb);
 
1816         BuildingBlock bb2 = new BuildingBlock().setBpmnFlowName("AssignNetworkBB").setKey("1");
 
1817         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(bb2);
 
1818         executeFlows.add(ebb2);
 
1820         BuildingBlock bb3 = new BuildingBlock().setBpmnFlowName("CreateNetworkBB").setKey("0");
 
1821         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(bb3);
 
1822         executeFlows.add(ebb3);
 
1824         BuildingBlock bb4 = new BuildingBlock().setBpmnFlowName("CreateNetworkBB").setKey("1");
 
1825         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(bb4);
 
1826         executeFlows.add(ebb4);
 
1828         BuildingBlock bb5 = new BuildingBlock().setBpmnFlowName("ActivateNetworkBB").setKey("0");
 
1829         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(bb5);
 
1830         executeFlows.add(ebb5);
 
1832         BuildingBlock bb6 = new BuildingBlock().setBpmnFlowName("ActivateNetworkBB").setKey("1");
 
1833         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock().setBuildingBlock(bb6);
 
1834         executeFlows.add(ebb6);
 
1836         List<ExecuteBuildingBlock> sorted =
 
1837                 workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows, "createInstance");
 
1838         assertEqualsBulkFlowName(sorted, "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB", "AssignNetworkBB",
 
1839                 "CreateNetworkBB", "ActivateNetworkBB");
 
1843     public void sortExecutionPathByObjectForVlanTaggingDeleteTest() throws Exception {
 
1844         List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
 
1846         BuildingBlock bb = new BuildingBlock().setBpmnFlowName("DeactivateNetworkBB").setKey("0");
 
1847         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock().setBuildingBlock(bb);
 
1848         executeFlows.add(ebb);
 
1850         BuildingBlock bb2 = new BuildingBlock().setBpmnFlowName("DeactivateNetworkBB").setKey("1");
 
1851         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(bb2);
 
1852         executeFlows.add(ebb2);
 
1854         BuildingBlock bb3 = new BuildingBlock().setBpmnFlowName("DeleteNetworkBB").setKey("0");
 
1855         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(bb3);
 
1856         executeFlows.add(ebb3);
 
1858         BuildingBlock bb4 = new BuildingBlock().setBpmnFlowName("DeleteNetworkBB").setKey("1");
 
1859         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(bb4);
 
1860         executeFlows.add(ebb4);
 
1862         BuildingBlock bb5 = new BuildingBlock().setBpmnFlowName("UnassignNetworkBB").setKey("0");
 
1863         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(bb5);
 
1864         executeFlows.add(ebb5);
 
1866         BuildingBlock bb6 = new BuildingBlock().setBpmnFlowName("UnassignNetworkBB").setKey("1");
 
1867         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock().setBuildingBlock(bb6);
 
1868         executeFlows.add(ebb6);
 
1870         List<ExecuteBuildingBlock> sorted =
 
1871                 workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows, "deleteInstance");
 
1872         assertEqualsBulkFlowName(sorted, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
 
1873                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB");
 
1877     public void queryNorthBoundRequestCatalogDbNestedTest() throws MalformedURLException {
 
1878         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1879         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
 
1880                 "VNF-Macro-Replace", "SDNOVnfHealthCheckBB", "AAIUnsetVnfInMaintBB");
 
1881         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
1882         List<OrchestrationFlow> macroFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
 
1883                 "DeactivateVnfBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB");
 
1885         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner("replaceInstance",
 
1886                 "Vnf", false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
 
1887         when(catalogDbClient.getOrchestrationFlowByAction("VNF-Macro-Replace")).thenReturn(macroFlows);
 
1888         List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "replaceInstance",
 
1889                 WorkflowType.VNF, false, "my-custom-cloud-owner");
 
1890         assertEquals(flows.get(0).getFlowName(), "AAICheckVnfInMaintBB");
 
1891         assertEquals(flows.get(1).getFlowName(), "AAISetVnfInMaintBB");
 
1892         assertEquals(flows.get(2).getFlowName(), "DeactivateVfModuleBB");
 
1893         assertEquals(flows.get(3).getFlowName(), "DeleteVfModuleBB");
 
1894         assertEquals(flows.get(4).getFlowName(), "DeactivateVnfBB");
 
1895         assertEquals(flows.get(5).getFlowName(), "CreateVfModuleBB");
 
1896         assertEquals(flows.get(6).getFlowName(), "ActivateVfModuleBB");
 
1897         assertEquals(flows.get(7).getFlowName(), "ActivateVnfBB");
 
1898         assertEquals(flows.get(8).getFlowName(), "SDNOVnfHealthCheckBB");
 
1899         assertEquals(flows.get(9).getFlowName(), "AAIUnsetVnfInMaintBB");
 
1903     public void queryNorthBoundRequestCatalogDbTransportTest() throws MalformedURLException {
 
1904         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
 
1905         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
 
1906         northBoundRequest.setOrchestrationFlowList(orchFlows);
 
1907         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwnerAndServiceType(
 
1908                 "createInstance", "Service", true, "my-custom-cloud-owner", "TRANSPORT")).thenReturn(northBoundRequest);
 
1910         List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "createInstance",
 
1911                 WorkflowType.SERVICE, true, "my-custom-cloud-owner", "TRANSPORT");
 
1912         assertEquals(flows.get(0).getFlowName(), "AssignServiceInstanceBB");
 
1916     public void extractResourceIdAndTypeFromUriTest() {
 
1917         String uri = "/v6/serviceInstances/123";
 
1918         String uri2 = "/v6/serviceInstances/123/vnfs/1234";
 
1919         String uri3 = "/v6/serviceInstances";
 
1920         String uri4 = "/v6/serviceInstances/assign";
 
1921         String uri5 = "'/v6/serviceInstances/123/vnfs";
 
1922         String uri6 = "/v6/serviceInstances/123/vnfs/1234/someAction";
 
1923         String uri7 = "/v6/serviceInstances/123/vnfs/1234/vfModules/5678/replace";
 
1924         String uri8 = "/v6/serviceInstances/123/vnfs/1234/vfModules/scaleOut";
 
1925         Resource expected1 = new Resource(WorkflowType.SERVICE, "123", true);
 
1926         Resource expected2 = new Resource(WorkflowType.VNF, "1234", false);
 
1927         Resource expected3 = new Resource(WorkflowType.VNF, "1234", false);
 
1928         Resource expected4 = new Resource(WorkflowType.VFMODULE, "5678", false);
 
1929         Resource result = workflowAction.extractResourceIdAndTypeFromUri(uri);
 
1930         assertEquals(expected1.getResourceId(), result.getResourceId());
 
1931         assertEquals(expected1.getResourceType(), result.getResourceType());
 
1932         result = workflowAction.extractResourceIdAndTypeFromUri(uri2);
 
1933         assertEquals(expected2.getResourceId(), result.getResourceId());
 
1934         assertEquals(expected2.getResourceType(), result.getResourceType());
 
1935         result = workflowAction.extractResourceIdAndTypeFromUri(uri3);
 
1936         assertEquals("Service", result.getResourceType().toString());
 
1937         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
 
1938         result = workflowAction.extractResourceIdAndTypeFromUri(uri4);
 
1939         assertEquals("Service", result.getResourceType().toString());
 
1940         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
 
1941         result = workflowAction.extractResourceIdAndTypeFromUri(uri5);
 
1942         assertEquals("Vnf", result.getResourceType().toString());
 
1943         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
 
1944         result = workflowAction.extractResourceIdAndTypeFromUri(uri6);
 
1945         assertEquals(expected3.getResourceId(), result.getResourceId());
 
1946         assertEquals(expected3.getResourceType(), result.getResourceType());
 
1947         result = workflowAction.extractResourceIdAndTypeFromUri(uri7);
 
1948         assertEquals(expected4.getResourceId(), result.getResourceId());
 
1949         assertEquals(expected4.getResourceType(), result.getResourceType());
 
1950         result = workflowAction.extractResourceIdAndTypeFromUri(uri8);
 
1951         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
 
1952         assertEquals("VfModule", result.getResourceType().toString());
 
1957     public void extractResourceIdAndTypeFromUriInvalidTypeTest() {
 
1958         this.expectedException.expect(IllegalArgumentException.class);
 
1959         this.expectedException.expectMessage(containsString("Uri could not be parsed. No type found."));
 
1960         workflowAction.extractResourceIdAndTypeFromUri("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace");
 
1964     public void extractResourceIdAndTypeFromUriInvalidUriTest() {
 
1965         this.expectedException.expect(IllegalArgumentException.class);
 
1966         this.expectedException.expectMessage(containsString("Uri could not be parsed:"));
 
1967         workflowAction.extractResourceIdAndTypeFromUri("something that doesn't match anything");
 
1971     public void extractResourceIdAndTypeFromUriResumeTest() {
 
1972         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
 
1973                 "http://localhost:9100/onap/so/infra/serviceInstantiation/v7/serviceInstances/4ff87c63-461b-4d83-8121-d351e6db216c/vnfs/eea9b93b-b5b9-4fad-9c35-12d52e4b683f/vfModules/33cb74cd-9cb3-4090-a3c0-1b8c8e235847/resume");
 
1974         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
 
1978     public void extractResourceIdAndTypeFromUriReplaceResumeTest() {
 
1979         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
 
1980                 "http://localhost:9100/onap/so/infra/serviceInstantiation/v7/serviceInstances/4ff87c63-461b-4d83-8121-d351e6db216c/vnfs/eea9b93b-b5b9-4fad-9c35-12d52e4b683f/vfModules/33cb74cd-9cb3-4090-a3c0-1b8c8e235847/deactivateAndCloudDelete/resume");
 
1981         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
 
1985     public void extractResourceIdAndTypeFromUriDeActiveResumeTest() {
 
1986         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
 
1987                 "http://localhost:9100/onap/so/infra/serviceInstantiation/v7/serviceInstances/4ff87c63-461b-4d83-8121-d351e6db216c/vnfs/eea9b93b-b5b9-4fad-9c35-12d52e4b683f/vfModules/33cb74cd-9cb3-4090-a3c0-1b8c8e235847/replace/resume");
 
1988         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
 
1992     public void extractResourceIdAndTypeFromUriResumeIdOnly() {
 
1993         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
 
1994                 "http://localhost:9100/onap/so/infra/serviceInstantiation/v7/serviceInstances/4ff87c63-461b-4d83-8121-d351e6db216c/vnfs/eea9b93b-b5b9-4fad-9c35-12d52e4b683f/vfModules/33cb74cd-9cb3-4090-a3c0-1b8c8e235847/resume");
 
1995         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
 
1999     public void isUriResumeTest() {
 
2000         assertTrue(workflowAction.isUriResume(
 
2001                 "http://localhost:9100/onap/so/infra/orchestrationRequests/v7/requests/2f8ab587-ef6a-4456-b7b2-d73f9363dabd/resume"));
 
2002         assertTrue(workflowAction.isUriResume(
 
2003                 "        http://localhost:9100/onap/so/infra/serviceInstantiation/v7/serviceInstances/4ff87c63-461b-4d83-8121-d351e6db216c/vnfs/eea9b93b-b5b9-4fad-9c35-12d52e4b683f/vfModules/33cb74cd-9cb3-4090-a3c0-1b8c8e235847/resume"));
 
2005         assertFalse(workflowAction.isUriResume("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace"));
 
2009     public void isRequestMacroServiceResumeTest() {
 
2010         ServiceInstance si = new ServiceInstance();
 
2011         when(bbSetupUtils.getAAIServiceInstanceById(anyString())).thenReturn(si);
 
2012         assertFalse(workflowAction.isRequestMacroServiceResume(false, WorkflowType.SERVICE, "createInstance", ""));
 
2013         assertTrue(workflowAction.isRequestMacroServiceResume(false, WorkflowType.SERVICE, "createInstance", "123"));
 
2017     public void populateResourceIdsFromApiHandlerTest() {
 
2018         execution.setVariable("serviceInstanceId", "123");
 
2019         execution.setVariable("vnfId", "888");
 
2020         WorkflowResourceIds x = workflowAction.populateResourceIdsFromApiHandler(execution);
 
2021         assertEquals("123", x.getServiceInstanceId());
 
2022         assertEquals("888", x.getVnfId());
 
2023         assertNull(x.getVolumeGroupId());
 
2027     public void handleRuntimeExceptionTest() {
 
2028         execution.setVariable("BPMN_javaExpMsg", "test runtime error message");
 
2029         execution.setVariable("testProcessKey", "testProcessKeyValue");
 
2031             workflowAction.handleRuntimeException(execution);
 
2032         } catch (BpmnError wfe) {
 
2033             assertEquals("MSOWorkflowException", wfe.getErrorCode());
 
2039     public void traverseCatalogDbServiceMultipleNetworkTest() throws IOException, VrfBondingServiceException {
 
2040         execution.setVariable("testProcessKey", "testProcessKeyValue");
 
2041         Service service = new Service();
 
2042         List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
 
2043         NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
 
2044         networkCust.setModelCustomizationUUID("123");
 
2045         networkCustomizations.add(networkCust);
 
2046         service.setNetworkCustomizations(networkCustomizations);
 
2047         NetworkCollectionResourceCustomization collectionResourceCustomization =
 
2048                 new NetworkCollectionResourceCustomization();
 
2049         collectionResourceCustomization.setModelCustomizationUUID("123");
 
2050         CollectionResource collectionResource = new CollectionResource();
 
2051         collectionResource.setToscaNodeType("NetworkCollection");
 
2052         InstanceGroup instanceGroup = new InstanceGroup();
 
2053         List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
 
2054         CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization =
 
2055                 new CollectionResourceInstanceGroupCustomization();
 
2056         collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
 
2057         collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
 
2058         instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
 
2059         collectionResource.setInstanceGroup(instanceGroup);
 
2060         collectionResourceCustomization.setCollectionResource(collectionResource);;
 
2061         service.setModelUUID("abc");
 
2062         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
 
2063         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
 
2064         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
 
2065         doReturn(collectionResourceCustomization).when(catalogDbClient)
 
2066                 .getNetworkCollectionResourceCustomizationByID("123");
 
2067         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
 
2068         ObjectMapper mapper = new ObjectMapper();
 
2069         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
 
2070         List<Resource> resourceCounter = new ArrayList<>();
 
2071         thrown.expect(BpmnError.class);
 
2072         List<Pair<WorkflowType, String>> aaiResourceIds = new ArrayList<>();
 
2073         workflowAction.traverseCatalogDbService(execution, sIRequest, resourceCounter, aaiResourceIds);
 
2079     public void findCatalogNetworkCollectionTest() {
 
2080         Service service = new Service();
 
2081         NetworkCollectionResourceCustomization networkCustomization = new NetworkCollectionResourceCustomization();
 
2082         networkCustomization.setModelCustomizationUUID("123");
 
2083         service.getCollectionResourceCustomizations().add(networkCustomization);
 
2084         doReturn(networkCustomization).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
 
2085         CollectionResourceCustomization customization = workflowAction.findCatalogNetworkCollection(execution, service);
 
2086         assertNotNull(customization);
 
2090     public void findCatalogNetworkCollectionEmptyTest() {
 
2091         Service service = new Service();
 
2092         NetworkCollectionResourceCustomization networkCustomization = new NetworkCollectionResourceCustomization();
 
2093         networkCustomization.setModelCustomizationUUID("123");
 
2094         service.getCollectionResourceCustomizations().add(networkCustomization);
 
2095         CollectionResourceCustomization customization = workflowAction.findCatalogNetworkCollection(execution, service);
 
2096         assertNull(customization);
 
2100     public void findCatalogNetworkCollectionMoreThanOneTest() {
 
2101         Service service = new Service();
 
2102         NetworkCollectionResourceCustomization networkCustomization1 = new NetworkCollectionResourceCustomization();
 
2103         networkCustomization1.setModelCustomizationUUID("123");
 
2104         NetworkCollectionResourceCustomization networkCustomization2 = new NetworkCollectionResourceCustomization();
 
2105         networkCustomization2.setModelCustomizationUUID("321");
 
2106         service.getCollectionResourceCustomizations().add(networkCustomization1);
 
2107         service.getCollectionResourceCustomizations().add(networkCustomization2);
 
2108         doReturn(networkCustomization1).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
 
2109         doReturn(networkCustomization2).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("321");
 
2110         workflowAction.findCatalogNetworkCollection(execution, service);
 
2111         assertEquals("Found multiple Network Collections in the Service model, only one per Service is supported.",
 
2112                 execution.getVariable("WorkflowActionErrorMessage"));
 
2117     public void traverseAAIServiceTest() {
 
2118         List<Resource> resourceCounter = new ArrayList<>();
 
2119         String resourceId = "si0";
 
2120         List<Pair<WorkflowType, String>> aaiResourceIds = new ArrayList<>();
 
2122         ServiceInstance serviceInstanceAAI = new ServiceInstance();
 
2123         serviceInstanceAAI.setServiceInstanceId(resourceId);
 
2125         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstance = setServiceInstance();
 
2133         Configuration config = new Configuration();
 
2134         config.setConfigurationId("testConfigurationId2");
 
2135         serviceInstance.getConfigurations().add(config);
 
2137         Relationship relationship1 = new Relationship();
 
2138         relationship1.setRelatedTo("vnfc");
 
2139         RelationshipList relationshipList1 = new RelationshipList();
 
2140         relationshipList1.getRelationship().add(relationship1);
 
2142         Relationship relationship2 = new Relationship();
 
2143         relationship2.setRelatedTo("vpn-binding");
 
2144         RelationshipList relationshipList2 = new RelationshipList();
 
2145         relationshipList2.getRelationship().add(relationship2);
 
2147         org.onap.aai.domain.yang.Configuration aaiConfiguration1 = new org.onap.aai.domain.yang.Configuration();
 
2148         aaiConfiguration1.setConfigurationId("testConfigurationId");
 
2149         aaiConfiguration1.setRelationshipList(relationshipList1);
 
2151         org.onap.aai.domain.yang.Configuration aaiConfiguration2 = new org.onap.aai.domain.yang.Configuration();
 
2152         aaiConfiguration2.setConfigurationId("testConfigurationId2");
 
2153         aaiConfiguration2.setRelationshipList(relationshipList1);
 
2156             doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById(resourceId);
 
2157             doReturn(serviceInstance).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
 
2158             doReturn(Optional.of(aaiConfiguration1)).when(aaiConfigurationResources)
 
2159                     .getConfiguration("testConfigurationId");
 
2160             doReturn(Optional.of(aaiConfiguration2)).when(aaiConfigurationResources)
 
2161                     .getConfiguration("testConfigurationId2");
 
2162             workflowAction.traverseAAIService(execution, resourceCounter, resourceId, aaiResourceIds);
 
2163             assertEquals(8, resourceCounter.size());
 
2164             assertTrue(resourceCounter.get(2).isBaseVfModule());
 
2165             assertThat(aaiResourceIds, sameBeanAs(getExpectedResourceIds()));
 
2166         } catch (Exception e) {
 
2167             fail("Unexpected exception was thrown.");
 
2172     public void foundRelatedTest() {
 
2173         List<Resource> resourceList = new ArrayList<>();
 
2174         resourceList.add(new Resource(WorkflowType.PNF, "model customization id", false));
 
2175         resourceList.add(new Resource(WorkflowType.VNF, "model customization id", false));
 
2176         resourceList.add(new Resource(WorkflowType.NETWORK, "model customization id", false));
 
2177         resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION, "model customization id", false));
 
2179         assertEquals(workflowAction.foundRelated(resourceList), true);
 
2183     public void containsWorkflowTypeTest() {
 
2184         List<Resource> resourceList = new ArrayList<>();
 
2185         resourceList.add(new Resource(WorkflowType.PNF, "resource id", false));
 
2186         resourceList.add(new Resource(WorkflowType.VNF, "model customization id", false));
 
2187         resourceList.add(new Resource(WorkflowType.NETWORK, "model customization id", false));
 
2188         resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION, "model customization id", false));
 
2190         assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.PNF), true);
 
2191         assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.VNF), true);
 
2192         assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.NETWORK), true);
 
2193         assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.NETWORKCOLLECTION), true);
 
2194         assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.CONFIGURATION), false);
 
2197     private List<Pair<WorkflowType, String>> getExpectedResourceIds() {
 
2198         List<Pair<WorkflowType, String>> resourceIds = new ArrayList<>();
 
2199         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VNF, "testVnfId1"));
 
2200         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VFMODULE, "testVfModuleId1"));
 
2201         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VOLUMEGROUP, "testVolumeGroupId1"));
 
2202         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.NETWORK, "testNetworkId1"));
 
2203         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.NETWORKCOLLECTION, "testId"));
 
2204         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.CONFIGURATION, "testConfigurationId"));
 
2205         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.CONFIGURATION, "testConfigurationId2"));
 
2209     private List<OrchestrationFlow> createFlowList(String... flowNames) {
 
2210         List<OrchestrationFlow> result = new ArrayList<>();
 
2211         int sequenceNumber = 1;
 
2212         for (String flowName : flowNames) {
 
2213             OrchestrationFlow orchFlow = new OrchestrationFlow();
 
2214             orchFlow.setFlowName(flowName);
 
2215             orchFlow.setSequenceNumber(sequenceNumber++);
 
2216             result.add(orchFlow);
 
2221     private void assertEqualsBulkFlowName(List<ExecuteBuildingBlock> ebbs, String... flowNames) {
 
2222         for (int i = 0; i < ebbs.size(); i++) {
 
2223             assertEquals(ebbs.get(i).getBuildingBlock().getBpmnFlowName(), flowNames[i]);
 
2227     private void initExecution(String gAction, String bpmnRequest, boolean isAlaCarte) {
 
2228         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
 
2229         execution.setVariable("requestAction", gAction);
 
2230         execution.setVariable("bpmnRequest", bpmnRequest);
 
2231         execution.setVariable("aLaCarte", isAlaCarte);
 
2232         execution.setVariable("apiVersion", "7");
 
2235     private String readBpmnRequestFromFile(String fileName) throws IOException {
 
2236         return new String(Files.readAllBytes(Paths.get("src/test/resources/__files/" + fileName)));
 
2239     private List<Resource> prepareListWithResources() {
 
2240         List<Resource> resourceList = new ArrayList<>();
 
2241         resourceList.add(new Resource(WorkflowType.SERVICE, "3c40d244-808e-42ca-b09a-256d83d19d0a", false));
 
2242         resourceList.add(new Resource(WorkflowType.VNF, "ab153b6e-c364-44c0-bef6-1f2982117f04", false));
 
2243         resourceList.add(new Resource(WorkflowType.VOLUMEGROUP, "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f", false));
 
2244         resourceList.add(new Resource(WorkflowType.VFMODULE, "72d9d1cd-f46d-447a-abdb-451d6fb05fa8", false));
 
2245         resourceList.add(new Resource(WorkflowType.VFMODULE, "3c40d244-808e-42ca-b09a-256d83d19d0a", false));
 
2246         resourceList.add(new Resource(WorkflowType.VFMODULE, "72d9d1cd-f46d-447a-abdb-451d6fb05fa8", false));
 
2247         return resourceList;