021bac3a7ad21b6b0f59c8d0414dd629a56075cc
[so.git] / bpmn / so-bpmn-tasks / src / test / java / org / onap / so / bpmn / infrastructure / workflow / tasks / WorkflowActionTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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  * Modifications Copyright (c) 2021 Orange
12  * ================================================================================
13  * Licensed under the Apache License, Version 2.0 (the "License");
14  * you may not use this file except in compliance with the License.
15  * You may obtain a copy of the License at
16  * 
17  *      http://www.apache.org/licenses/LICENSE-2.0
18  * 
19  * Unless required by applicable law or agreed to in writing, software
20  * distributed under the License is distributed on an "AS IS" BASIS,
21  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22  * See the License for the specific language governing permissions and
23  * limitations under the License.
24  * ============LICENSE_END=========================================================
25  */
26
27 package org.onap.so.bpmn.infrastructure.workflow.tasks;
28
29 import static org.hamcrest.CoreMatchers.containsString;
30 import static org.hamcrest.CoreMatchers.equalTo;
31 import static org.junit.Assert.assertEquals;
32 import static org.junit.Assert.assertFalse;
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.mockito.ArgumentMatchers.any;
37 import static org.mockito.ArgumentMatchers.anyList;
38 import static org.mockito.ArgumentMatchers.anyObject;
39 import static org.mockito.ArgumentMatchers.anyString;
40 import static org.mockito.ArgumentMatchers.eq;
41 import static org.mockito.ArgumentMatchers.isA;
42 import static org.mockito.Mockito.doReturn;
43 import static org.mockito.Mockito.doThrow;
44 import static org.mockito.Mockito.when;
45 import com.fasterxml.jackson.databind.DeserializationFeature;
46 import com.fasterxml.jackson.databind.ObjectMapper;
47 import java.io.IOException;
48 import java.net.MalformedURLException;
49 import java.nio.file.Files;
50 import java.nio.file.Paths;
51 import java.util.ArrayList;
52 import java.util.Arrays;
53 import java.util.List;
54 import java.util.Map;
55 import java.util.Optional;
56 import java.util.Set;
57 import java.util.UUID;
58 import java.util.stream.Collectors;
59 import org.camunda.bpm.engine.delegate.BpmnError;
60 import org.camunda.bpm.engine.delegate.DelegateExecution;
61 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
62 import org.junit.Before;
63 import org.junit.Ignore;
64 import org.junit.Rule;
65 import org.junit.Test;
66 import org.junit.rules.ExpectedException;
67 import org.mockito.InjectMocks;
68 import org.mockito.Mock;
69 import org.mockito.Spy;
70 import org.onap.aai.domain.yang.Relationship;
71 import org.onap.aai.domain.yang.RelationshipList;
72 import org.onap.aai.domain.yang.ServiceInstance;
73 import org.onap.aai.domain.yang.VfModule;
74 import org.onap.aai.domain.yang.VolumeGroup;
75 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper;
76 import org.onap.aaiclient.client.aai.entities.Relationships;
77 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri;
78 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory;
79 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder;
80 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types;
81 import org.onap.so.bpmn.BaseTaskTest;
82 import org.onap.so.bpmn.infrastructure.workflow.tasks.ebb.loader.ServiceEBBLoader;
83 import org.onap.so.bpmn.infrastructure.workflow.tasks.ebb.loader.UserParamsServiceTraversal;
84 import org.onap.so.bpmn.infrastructure.workflow.tasks.ebb.loader.VnfEBBLoader;
85 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
86 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
87 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
88 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
89 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
90 import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.DuplicateNameException;
91 import org.onap.so.client.orchestration.AAIEntityNotFoundException;
92 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
93 import org.onap.so.db.catalog.beans.CollectionResource;
94 import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
95 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
96 import org.onap.so.db.catalog.beans.ConfigurationResource;
97 import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
98 import org.onap.so.db.catalog.beans.CvnfcCustomization;
99 import org.onap.so.db.catalog.beans.HeatEnvironment;
100 import org.onap.so.db.catalog.beans.HeatTemplate;
101 import org.onap.so.db.catalog.beans.InstanceGroup;
102 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
103 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
104 import org.onap.so.db.catalog.beans.Service;
105 import org.onap.so.db.catalog.beans.VfModuleCustomization;
106 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
107 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
108 import org.onap.so.serviceinstancebeans.RequestDetails;
109 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
110 import org.springframework.core.env.Environment;
111
112 public class WorkflowActionTest extends BaseTaskTest {
113
114     private static final String MACRO_ACTIVATE_DELETE_UNASSIGN_JSON = "Macro/ServiceMacroActivateDeleteUnassign.json";
115     private static final String MACRO_ASSIGN_JSON = "Macro/ServiceMacroAssign.json";
116     private static final String MACRO_ASSIGN_NO_CLOUD_JSON = "Macro/ServiceMacroAssignNoCloud.json";
117     private static final String VF_MODULE_CREATE_WITH_FABRIC_JSON = "VfModuleCreateWithFabric.json";
118     private static final String VF_MODULE_CREATE_WITH_FABRIC_NO_PARAMS_JSON = "VfModuleCreateWithFabricNoParams.json";
119     private static final String VF_MODULE_REPLACE_REBUILD_VOLUME_GROUPS_JSON =
120             "VfModuleReplaceRebuildVolumeGroups.json";
121     private static final String MACRO_CREATE_NETWORK_COLLECTION_JSON = "Macro/CreateNetworkCollection.json";
122     private static final String MACRO_VNF_MACRO_REPLACE_JSON = "Macro/VnfMacroReplace.json";
123     private static final String MACRO_CREATE_JSON = "Macro/ServiceMacroAssignVnfAndPnf.json";
124     private static final String MACRO_CREATE_SERVICE_MULTIPLE_SAME_MODEL_VNF_VFMODULE =
125             "Macro/ServiceMacroCreateMultipleSameModelVnfsAndVfModules.json";
126
127     @Mock
128     protected Environment environment;
129     @Mock
130     protected UserParamsServiceTraversal userParamsServiceTraversal;
131
132     @Mock
133     private AaiResourceIdValidator aaiResourceIdValidator;
134     @InjectMocks
135     protected WorkflowAction workflowAction;
136
137     private DelegateExecution execution;
138
139     @InjectMocks
140     @Spy
141     protected WorkflowAction SPY_workflowAction;
142
143     @Spy
144     protected ExecuteBuildingBlockBuilder executeBuildingBlockBuilder;
145
146     @InjectMocks
147     @Spy
148     protected VnfEBBLoader vnfEBBLoaderSpy;
149
150     @InjectMocks
151     @Spy
152     protected ServiceEBBLoader serviceEBBLoader;
153
154     @Rule
155     public ExpectedException thrown = ExpectedException.none();
156
157     private String RESOURCE_PATH = "src/test/resources/__files/";
158
159     private List<OrchestrationFlow> replaceVfModuleOrchFlows =
160             createFlowList("DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
161                     "DeleteVolumeGroupBB", "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB",
162                     "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "CreateVolumeGroupBB",
163                     "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
164     private List<OrchestrationFlow> replaceRetainAssignmentsVfModuleOrchFlows = createFlowList("DeactivateVfModuleBB",
165             "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "UnassignVolumeGroupBB",
166             "AssignVolumeGroupBB", "ChangeModelVfModuleBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB",
167             "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
168     private List<OrchestrationFlow> replaceVfModuleWithFabricOrchFlows = createFlowList("DeleteFabricConfigurationBB",
169             "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB",
170             "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB", "AssignVfModuleBB",
171             "CreateVfModuleBB", "ActivateVfModuleBB", "AddFabricConfigurationBB", "CreateVolumeGroupBB",
172             "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
173
174     @Before
175     public void before() throws Exception {
176         execution = new DelegateExecutionFake();
177         org.onap.aai.domain.yang.ServiceInstance servInstance = new org.onap.aai.domain.yang.ServiceInstance();
178         servInstance.setServiceInstanceId("TEST");
179         when(bbSetupUtils.getAAIServiceInstanceByName(anyString(), anyObject())).thenReturn(servInstance);
180         workflowAction.setBbInputSetupUtils(bbSetupUtils);
181         workflowAction.setBbInputSetup(bbInputSetup);
182
183     }
184
185     /**
186      * ALACARTE TESTS
187      */
188     @Test
189     public void selectExecutionListALaCarteNetworkCreateTest() throws Exception {
190         String gAction = "createInstance";
191         String resource = "Network";
192         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
193         initExecution(gAction, bpmnRequest, true);
194         execution.setVariable("requestUri", "v6/networks/123");
195
196         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
197         List<OrchestrationFlow> orchFlows =
198                 createFlowList("AssignNetwork1802BB", "CreateNetworkBB", "ActivateNetworkBB");
199         northBoundRequest.setOrchestrationFlowList(orchFlows);
200
201         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
202                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
203
204         workflowAction.selectExecutionList(execution);
205         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
206         assertEqualsBulkFlowName(ebbs, "AssignNetwork1802BB", "CreateNetworkBB", "ActivateNetworkBB");
207     }
208
209     @Test
210     public void selectExecutionListALaCarteNetworkDeleteTest() throws Exception {
211         String gAction = "deleteInstance";
212         String resource = "Network";
213         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
214         initExecution(gAction, bpmnRequest, true);
215         execution.setVariable("requestUri", "v6/networks/123");
216
217         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
218         List<OrchestrationFlow> orchFlows =
219                 createFlowList("DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetwork1802BB");
220         northBoundRequest.setOrchestrationFlowList(orchFlows);
221
222         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
223                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
224
225         workflowAction.selectExecutionList(execution);
226         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
227         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetwork1802BB");
228     }
229
230     @Test
231     public void selectExecutionListALaCarteServiceCreateTest() throws Exception {
232         String gAction = "createInstance";
233         String resource = "Service";
234         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
235         initExecution(gAction, bpmnRequest, true);
236         execution.setVariable("requestUri", "v6/serviceInstances/123");
237
238
239         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
240         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "ActivateServiceInstanceBB");
241         northBoundRequest.setOrchestrationFlowList(orchFlows);
242
243         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
244                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
245         workflowAction.selectExecutionList(execution);
246         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
247         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "ActivateServiceInstanceBB");
248     }
249
250     @Test
251     public void selectExecutionListDuplicateNameExceptionTest() throws Exception {
252         String gAction = "createInstance";
253         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
254         initExecution(gAction, bpmnRequest, true);
255         execution.setVariable("requestUri", "v6/serviceInstances");
256
257         doThrow(new DuplicateNameException(
258                 "serviceInstance with name (instanceName) and different version id (3c40d244-808e-42ca-b09a-256d83d19d0a) already exists. The name must be unique."))
259                         .when(aaiResourceIdValidator).validateResourceIdInAAI(anyString(), eq(WorkflowType.SERVICE),
260                                 eq("test"), any(RequestDetails.class), any(WorkflowResourceIds.class));
261
262         SPY_workflowAction.selectExecutionList(execution);
263         assertEquals(execution.getVariable("WorkflowActionErrorMessage"),
264                 "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.");
265
266         // verify default values are present in failure case
267         assertEquals(true, execution.getVariable("isTopLevelFlow"));
268         assertEquals(false, execution.getVariable("sentSyncResponse"));
269     }
270
271     /**
272      * SERVICE MACRO TESTS
273      */
274     @Test
275     public void selectExecutionListServiceMacroAssignTest() throws Exception {
276         String gAction = "assignInstance";
277         String resource = "Service";
278         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
279         initExecution(gAction, bpmnRequest, false);
280         execution.setVariable("requestUri", "v6/serviceInstances/123");
281
282         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
283         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "AssignNetworkBB", "AssignVnfBB",
284                 "AssignVolumeGroupBB", "AssignVfModuleBB");
285         northBoundRequest.setOrchestrationFlowList(orchFlows);
286
287         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
288         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
289         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
290         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
291         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
292         HeatTemplate volumeHeatTemplate = new HeatTemplate();
293         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
294         vfModuleCustomization.setVfModule(vfModule);
295
296         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
297         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
298         HeatEnvironment heatEnvironment = new HeatEnvironment();
299         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
300         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
301         HeatTemplate moduleHeatTemplate = new HeatTemplate();
302         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
303         vfModuleCustomization2.setVfModule(vfModule2);
304
305         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
306         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
307
308         when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
309                 .thenReturn(prepareListWithResources(false, false));
310         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
311                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
312         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
313                 .thenReturn(vfModuleCustomization);
314         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
315                 .thenReturn(vfModuleCustomization2);
316         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
317                 .thenReturn(vfModuleCustomization3);
318
319         workflowAction.selectExecutionList(execution);
320         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
321         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
322                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB");
323     }
324
325     @Test
326     public void selectExecutionListServiceMacroAssignNoCloudTest() throws Exception {
327         String gAction = "assignInstance";
328         String resource = "Service";
329         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_NO_CLOUD_JSON);
330         initExecution(gAction, bpmnRequest, false);
331         execution.setVariable("requestUri", "v6/serviceInstances/123");
332
333         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
334         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "AssignNetworkBB", "AssignVnfBB",
335                 "AssignVolumeGroupBB", "AssignVfModuleBB");
336         northBoundRequest.setOrchestrationFlowList(orchFlows);
337
338         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
339         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
340         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
341         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
342         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
343         HeatTemplate volumeHeatTemplate = new HeatTemplate();
344         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
345         vfModuleCustomization.setVfModule(vfModule);
346
347         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
348         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
349         HeatEnvironment heatEnvironment = new HeatEnvironment();
350         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
351         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
352         HeatTemplate moduleHeatTemplate = new HeatTemplate();
353         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
354         vfModuleCustomization2.setVfModule(vfModule2);
355
356         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
357         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
358
359         when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
360                 .thenReturn(prepareListWithResources(false, false));
361         when(environment.getProperty("org.onap.so.cloud-owner")).thenReturn("att-aic");
362         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
363                 false, "att-aic")).thenReturn(northBoundRequest);
364         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
365                 .thenReturn(vfModuleCustomization);
366         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
367                 .thenReturn(vfModuleCustomization2);
368         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
369                 .thenReturn(vfModuleCustomization3);
370         workflowAction.selectExecutionList(execution);
371         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
372         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
373                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB");
374     }
375
376     @Test
377     public void selectExecutionListServiceMacroActivateTest() throws Exception {
378         String gAction = "activateInstance";
379         String resource = "Service";
380         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
381         initExecution(gAction, bpmnRequest, false);
382         execution.setVariable("requestUri", "v6/serviceInstances/si0");
383
384         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
385         List<OrchestrationFlow> orchFlows =
386                 createFlowList("CreateNetworkBB", "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB",
387                         "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB", "ActivateServiceInstanceBB");
388         northBoundRequest.setOrchestrationFlowList(orchFlows);
389
390         ServiceInstance serviceInstanceAAI = new ServiceInstance();
391         serviceInstanceAAI.setServiceInstanceId("si0");
392         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
393                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
394         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
395                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
396         vnf.setVnfId("vnf0");
397
398         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
399         vnf.getVfModules().add(vfModule);
400         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
401         vnf.getVfModules().add(vfModule2);
402
403         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
404                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
405         volumeGroup.setVolumeGroupId("volumeGroup0");
406         vnf.getVolumeGroups().add(volumeGroup);
407
408         serviceInstanceMSO.getVnfs().add(vnf);
409
410         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("si0");
411         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
412         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
413                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
414         workflowAction.selectExecutionList(execution);
415         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
416         assertEqualsBulkFlowName(ebbs, "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
417                 "ActivateVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB",
418                 "ActivateServiceInstanceBB");
419         assertEquals("volumeGroup0", ebbs.get(0).getWorkflowResourceIds().getVolumeGroupId());
420         assertEquals("volumeGroup0", ebbs.get(1).getWorkflowResourceIds().getVolumeGroupId());
421         assertEquals("testVfModuleId1", ebbs.get(2).getWorkflowResourceIds().getVfModuleId());
422         assertEquals("testVfModuleId1", ebbs.get(3).getWorkflowResourceIds().getVfModuleId());
423         assertEquals("testVfModuleId2", ebbs.get(4).getWorkflowResourceIds().getVfModuleId());
424         assertEquals("testVfModuleId2", ebbs.get(5).getWorkflowResourceIds().getVfModuleId());
425         assertEquals("vnf0", ebbs.get(6).getWorkflowResourceIds().getVnfId());
426         assertEquals("si0", ebbs.get(7).getWorkflowResourceIds().getServiceInstanceId());
427     }
428
429     @Test
430     public void selectExecutionListServiceMacroDeactivateTest() throws Exception {
431         String gAction = "deactivateInstance";
432         String resource = "Service";
433         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
434         initExecution(gAction, bpmnRequest, false);
435         execution.setVariable("requestUri", "v6/serviceInstances/123");
436
437         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
438         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateServiceInstanceBB");
439         northBoundRequest.setOrchestrationFlowList(orchFlows);
440
441         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
442                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
443         workflowAction.selectExecutionList(execution);
444         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
445         assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(), "DeactivateServiceInstanceBB");
446     }
447
448     @Test
449     public void selectExecutionListServiceMacroEmptyServiceTest() throws Exception {
450         String gAction = "createInstance";
451         String resource = "Service";
452         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
453         initExecution(gAction, bpmnRequest, false);
454         execution.setVariable("requestUri", "v6/serviceInstances/123");
455
456         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
457         northBoundRequest.setIsToplevelflow(true);
458         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
459                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
460                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
461                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
462                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
463         northBoundRequest.setOrchestrationFlowList(orchFlows);
464
465         Service service = new Service();
466         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
467         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
468                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
469         workflowAction.selectExecutionList(execution);
470         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
471         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "ActivateServiceInstanceBB");
472     }
473
474     @Test
475     public void selectExecutionListServiceMacroCreateJustNetworkTest() throws Exception {
476         String gAction = "createInstance";
477         String resource = "Service";
478         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
479         initExecution(gAction, bpmnRequest, false);
480         execution.setVariable("requestUri", "v6/serviceInstances/123");
481
482         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
483         northBoundRequest.setIsToplevelflow(true);
484         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
485                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
486                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
487                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
488                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
489         northBoundRequest.setOrchestrationFlowList(orchFlows);
490
491         Service service = new Service();
492         NetworkResourceCustomization networkCustomization = new NetworkResourceCustomization();
493         networkCustomization.setModelCustomizationUUID("1234");
494         service.getNetworkCustomizations().add(networkCustomization);
495         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
496         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
497                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
498
499         workflowAction.selectExecutionList(execution);
500         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
501         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignNetworkBB", "CreateNetworkBB",
502                 "ActivateNetworkBB", "ActivateServiceInstanceBB");
503     }
504
505     @Test
506     public void selectExecutionListServiceMacroCreateWithNetworkCollectionTest() throws Exception {
507         String gAction = "createInstance";
508         String resource = "Service";
509         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
510         initExecution(gAction, bpmnRequest, false);
511         execution.setVariable("requestUri", "v6/serviceInstances/123");
512
513         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
514         northBoundRequest.setIsToplevelflow(true);
515         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
516                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
517                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
518                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
519                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
520         northBoundRequest.setOrchestrationFlowList(orchFlows);
521
522         Service service = new Service();
523         List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
524         NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
525         networkCust.setModelCustomizationUUID("123");
526         networkCustomizations.add(networkCust);
527         service.setNetworkCustomizations(networkCustomizations);
528         NetworkCollectionResourceCustomization collectionResourceCustomization =
529                 new NetworkCollectionResourceCustomization();
530         collectionResourceCustomization.setModelCustomizationUUID("123");
531
532         CollectionResource collectionResource = new CollectionResource();
533         collectionResource.setToscaNodeType("NetworkCollection");
534         InstanceGroup instanceGroup = new InstanceGroup();
535         instanceGroup.setToscaNodeType("NetworkCollectionResource");
536         instanceGroup.setCollectionNetworkResourceCustomizations(new ArrayList<>());
537         CollectionNetworkResourceCustomization collectionNetworkResourceCust =
538                 new CollectionNetworkResourceCustomization();
539         collectionNetworkResourceCust.setModelCustomizationUUID("123");
540         collectionNetworkResourceCust.setNetworkResourceCustomization(collectionResourceCustomization);
541         instanceGroup.getCollectionNetworkResourceCustomizations().add(collectionNetworkResourceCust);
542         List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
543         CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization =
544                 new CollectionResourceInstanceGroupCustomization();
545         collectionInstanceGroupCustomization.setModelCustomizationUUID("123");
546         collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
547         collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
548         collectionInstanceGroupCustomization.setInstanceGroup(instanceGroup);
549         collectionInstanceGroupCustomization.setCollectionResourceCust(collectionResourceCustomization);
550         instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
551         collectionResource.setInstanceGroup(instanceGroup);
552         collectionResourceCustomization.setCollectionResource(collectionResource);;
553         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
554         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
555         doReturn(collectionResourceCustomization).when(catalogDbClient)
556                 .getNetworkCollectionResourceCustomizationByID("123");
557         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
558                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
559         workflowAction.selectExecutionList(execution);
560         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
561         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "CreateNetworkCollectionBB", "AssignNetworkBB",
562                 "CreateNetworkBB", "ActivateNetworkBB", "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB",
563                 "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB", "ActivateNetworkCollectionBB",
564                 "ActivateServiceInstanceBB");
565         assertEquals("Network id not empty", !ebbs.get(2).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
566         assertEquals("Network id not empty", !ebbs.get(3).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
567         assertEquals("Network id not empty", !ebbs.get(4).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
568         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
569                 ebbs.get(2).getWorkflowResourceIds().getNetworkId() == ebbs.get(3).getWorkflowResourceIds()
570                         .getNetworkId()
571                         && ebbs.get(3).getWorkflowResourceIds().getNetworkId() == ebbs.get(4).getWorkflowResourceIds()
572                                 .getNetworkId(),
573                 true);
574         assertEquals("Network id not empty", !ebbs.get(5).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
575         assertEquals("Network id not empty", !ebbs.get(6).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
576         assertEquals("Network id not empty", !ebbs.get(7).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
577         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
578                 ebbs.get(5).getWorkflowResourceIds().getNetworkId() == ebbs.get(6).getWorkflowResourceIds()
579                         .getNetworkId()
580                         && ebbs.get(6).getWorkflowResourceIds().getNetworkId() == ebbs.get(7).getWorkflowResourceIds()
581                                 .getNetworkId(),
582                 true);
583         assertEquals("Network id not empty", !ebbs.get(8).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
584         assertEquals("Network id not empty", !ebbs.get(9).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
585         assertEquals("Network id not empty", !ebbs.get(10).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
586         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
587                 ebbs.get(8).getWorkflowResourceIds().getNetworkId() == ebbs.get(9).getWorkflowResourceIds()
588                         .getNetworkId()
589                         && ebbs.get(9).getWorkflowResourceIds().getNetworkId() == ebbs.get(10).getWorkflowResourceIds()
590                                 .getNetworkId(),
591                 true);
592     }
593
594     @Test
595     public void selectExecutionListServiceMacroCreateWithUserParams() throws Exception {
596         String gAction = "createInstance";
597         String resource = "Service";
598         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
599         initExecution(gAction, bpmnRequest, false);
600         execution.setVariable("requestUri", "v6/serviceInstances/123");
601
602         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
603         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
604                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
605                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
606                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
607                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
608         northBoundRequest.setOrchestrationFlowList(orchFlows);
609
610         Service service = new Service();
611         service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
612
613         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
614         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
615         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
616         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
617         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
618         HeatTemplate volumeHeatTemplate = new HeatTemplate();
619         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
620         vfModuleCustomization.setVfModule(vfModule);
621
622         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
623         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
624         HeatEnvironment heatEnvironment = new HeatEnvironment();
625         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
626         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
627         HeatTemplate moduleHeatTemplate = new HeatTemplate();
628         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
629         vfModuleCustomization2.setVfModule(vfModule2);
630
631         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
632         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
633
634         when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
635                 .thenReturn(prepareListWithResources(false, false));
636         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
637                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
638         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
639                 .thenReturn(vfModuleCustomization);
640         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
641                 .thenReturn(vfModuleCustomization2);
642         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
643                 .thenReturn(vfModuleCustomization3);
644         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
645         workflowAction.selectExecutionList(execution);
646         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
647         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
648                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB", "CreateVolumeGroupBB",
649                 "ActivateVolumeGroupBB", "CreateVfModuleBB", "ActivateVfModuleBB", "CreateVfModuleBB",
650                 "ActivateVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB",
651                 "ActivateServiceInstanceBB");
652
653         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
654         int randomUUIDLength = UUID.randomUUID().toString().length();
655         assertEquals(randomUUIDLength, ebbs.get(1).getWorkflowResourceIds().getVnfId().length());
656         assertEquals(randomUUIDLength, ebbs.get(2).getWorkflowResourceIds().getVolumeGroupId().length());
657         assertEquals(randomUUIDLength, ebbs.get(3).getWorkflowResourceIds().getVfModuleId().length());
658         assertEquals(randomUUIDLength, ebbs.get(4).getWorkflowResourceIds().getVfModuleId().length());
659         assertEquals(randomUUIDLength, ebbs.get(5).getWorkflowResourceIds().getVfModuleId().length());
660         assertEquals(randomUUIDLength, ebbs.get(6).getWorkflowResourceIds().getVolumeGroupId().length());
661         assertEquals(randomUUIDLength, ebbs.get(7).getWorkflowResourceIds().getVolumeGroupId().length());
662         assertEquals(randomUUIDLength, ebbs.get(8).getWorkflowResourceIds().getVfModuleId().length());
663         assertEquals(randomUUIDLength, ebbs.get(9).getWorkflowResourceIds().getVfModuleId().length());
664         assertEquals(randomUUIDLength, ebbs.get(10).getWorkflowResourceIds().getVfModuleId().length());
665         assertEquals(randomUUIDLength, ebbs.get(11).getWorkflowResourceIds().getVfModuleId().length());
666         assertEquals(randomUUIDLength, ebbs.get(12).getWorkflowResourceIds().getVfModuleId().length());
667         assertEquals(randomUUIDLength, ebbs.get(13).getWorkflowResourceIds().getVfModuleId().length());
668         assertEquals(randomUUIDLength, ebbs.get(14).getWorkflowResourceIds().getVnfId().length());
669         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
670         assertEquals(true, execution.getVariable("homing"));
671     }
672
673     @Test
674     public void selectExecutionListServiceMacroCreateWithUserParamsAndPriorities() throws Exception {
675         String gAction = "createInstance";
676         String resource = "Service";
677         String bpmnRequest = readBpmnRequestFromFile(MACRO_CREATE_JSON);
678         initExecution(gAction, bpmnRequest, false);
679         execution.setVariable("requestUri", "v6/serviceInstances/123");
680
681         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
682         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
683                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "AssignPnfBB",
684                 "WaitForPnfReadyBB", "ActivatePnfBB", "CreateNetworkBB", "ActivateNetworkBB", "CreateVolumeGroupBB",
685                 "ActivateVolumeGroupBB", "CreateVfModuleBB", "ActivateVfModuleBB", "AssignFabricConfigurationBB",
686                 "ActivateFabricConfigurationBB", "ActivateVnfBB", "ActivateNetworkCollectionBB",
687                 "ActivateServiceInstanceBB");
688         northBoundRequest.setOrchestrationFlowList(orchFlows);
689
690         Service service = new Service();
691         service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
692
693         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
694         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
695         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
696         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
697         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
698         HeatTemplate volumeHeatTemplate = new HeatTemplate();
699         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
700         vfModuleCustomization.setVfModule(vfModule);
701
702         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
703         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
704         HeatEnvironment heatEnvironment = new HeatEnvironment();
705         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
706         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
707         HeatTemplate moduleHeatTemplate = new HeatTemplate();
708         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
709         vfModuleCustomization2.setVfModule(vfModule2);
710
711         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
712         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
713
714         when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
715                 .thenReturn(prepareListWithResources(true, true));
716         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
717                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
718         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
719                 .thenReturn(vfModuleCustomization);
720         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
721                 .thenReturn(vfModuleCustomization2);
722         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
723                 .thenReturn(vfModuleCustomization3);
724         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
725         workflowAction.selectExecutionList(execution);
726         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
727         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
728                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB", "AssignPnfBB", "WaitForPnfReadyBB",
729                 "ActivatePnfBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
730                 "ActivateVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "CreateVfModuleBB",
731                 "ActivateVfModuleBB", "ActivateVnfBB", "ActivateServiceInstanceBB");
732
733         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
734         int randomUUIDLength = UUID.randomUUID().toString().length();
735         assertEquals(randomUUIDLength, ebbs.get(1).getWorkflowResourceIds().getVnfId().length());
736         assertEquals(randomUUIDLength, ebbs.get(2).getWorkflowResourceIds().getVolumeGroupId().length());
737         assertEquals(randomUUIDLength, ebbs.get(3).getWorkflowResourceIds().getVfModuleId().length());
738         assertEquals(randomUUIDLength, ebbs.get(4).getWorkflowResourceIds().getVfModuleId().length());
739         assertEquals(randomUUIDLength, ebbs.get(5).getWorkflowResourceIds().getVfModuleId().length());
740         assertEquals("72d9d1cd-f46d-447a-abdb-451d6fb05fa8", ebbs.get(3).getBuildingBlock().getKey());
741         assertEquals("da4d4327-fb7d-4311-ac7a-be7ba60cf969", ebbs.get(4).getBuildingBlock().getKey());
742         assertEquals("3c40d244-808e-42ca-b09a-256d83d19d0a", ebbs.get(5).getBuildingBlock().getKey());
743         assertEquals(randomUUIDLength, ebbs.get(6).getWorkflowResourceIds().getPnfId().length());
744         assertEquals(randomUUIDLength, ebbs.get(7).getWorkflowResourceIds().getPnfId().length());
745         assertEquals(randomUUIDLength, ebbs.get(8).getWorkflowResourceIds().getPnfId().length());
746         assertEquals(randomUUIDLength, ebbs.get(9).getWorkflowResourceIds().getVolumeGroupId().length());
747         assertEquals(randomUUIDLength, ebbs.get(10).getWorkflowResourceIds().getVolumeGroupId().length());
748         assertEquals(randomUUIDLength, ebbs.get(11).getWorkflowResourceIds().getVfModuleId().length());
749         assertEquals(randomUUIDLength, ebbs.get(12).getWorkflowResourceIds().getVfModuleId().length());
750         assertEquals(randomUUIDLength, ebbs.get(13).getWorkflowResourceIds().getVfModuleId().length());
751         assertEquals(randomUUIDLength, ebbs.get(14).getWorkflowResourceIds().getVfModuleId().length());
752         assertEquals(randomUUIDLength, ebbs.get(15).getWorkflowResourceIds().getVfModuleId().length());
753         assertEquals(randomUUIDLength, ebbs.get(16).getWorkflowResourceIds().getVfModuleId().length());
754         assertEquals(randomUUIDLength, ebbs.get(17).getWorkflowResourceIds().getVnfId().length());
755         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
756         assertEquals(true, execution.getVariable("homing"));
757     }
758
759     @Test
760     public void selectExecutionListServiceMacroCreateWithMultipleSameModelVnfAndVfModules() throws Exception {
761         String gAction = "createInstance";
762         String resource = "Service";
763         String bpmnRequest = readBpmnRequestFromFile(MACRO_CREATE_SERVICE_MULTIPLE_SAME_MODEL_VNF_VFMODULE);
764         initExecution(gAction, bpmnRequest, false);
765         execution.setVariable("requestUri", "v7/serviceInstances");
766         execution.setVariable("serviceInstanceId", UUID.randomUUID().toString());
767
768         // Service-Macro-Create
769         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
770         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
771                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "ControllerExecutionBB",
772                 "AssignPnfBB", "WaitForPnfReadyBB", "ControllerExecutionBB", "ControllerExecutionBB", "ActivatePnfBB",
773                 "CreateNetworkBB", "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB",
774                 "CreateVfModuleBB", "ActivateVfModuleBB", "ControllerExecutionBB", "ActivateVnfBB",
775                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
776         orchFlows.get(6).setBpmnAction("config-assign");
777         orchFlows.get(6).setBpmnScope("vnf");
778         orchFlows.get(9).setBpmnAction("config-assign");
779         orchFlows.get(9).setBpmnScope("pnf");
780         orchFlows.get(10).setBpmnAction("config-deploy");
781         orchFlows.get(10).setBpmnScope("pnf");
782         orchFlows.get(18).setBpmnAction("config-deploy");
783         orchFlows.get(18).setBpmnScope("vnf");
784         northBoundRequest.setOrchestrationFlowList(orchFlows);
785
786         Service service = new Service();
787         service.setModelUUID("f2444885-3c76-4ddc-8668-7741c0631495");
788
789         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
790         vfModuleCustomization.setModelCustomizationUUID("3bd19000-6d21-49f1-9eb3-ea76a6eac5e0");
791         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
792         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
793         vfModule.setVolumeHeatTemplate(new HeatTemplate());
794         vfModuleCustomization.setVfModule(vfModule);
795
796         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
797         vfModuleCustomization2.setModelCustomizationUUID("83677d89-428a-407b-b4ec-738e68275d84");
798         vfModuleCustomization2.setHeatEnvironment(new HeatEnvironment());
799         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
800         vfModule2.setModuleHeatTemplate(new HeatTemplate());
801         vfModuleCustomization2.setVfModule(vfModule2);
802
803         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
804                 false, "DEFAULT")).thenReturn(northBoundRequest);
805         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("3bd19000-6d21-49f1-9eb3-ea76a6eac5e0"))
806                 .thenReturn(vfModuleCustomization);
807         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("83677d89-428a-407b-b4ec-738e68275d84"))
808                 .thenReturn(vfModuleCustomization2);
809         when(catalogDbClient.getServiceByID("f2444885-3c76-4ddc-8668-7741c0631495")).thenReturn(service);
810
811
812         Resource serviceResource =
813                 new Resource(WorkflowType.SERVICE, "f2444885-3c76-4ddc-8668-7741c0631495", false, null);
814         Resource vnfResource1 =
815                 new Resource(WorkflowType.VNF, "0d0ba1ee-6b7f-47fe-8266-2967993b2c08", false, serviceResource);
816         vnfResource1.setInstanceName("vnf-instanceName-1");
817         Resource vfmResource1 =
818                 new Resource(WorkflowType.VFMODULE, "3bd19000-6d21-49f1-9eb3-ea76a6eac5e0", false, vnfResource1);
819         vfmResource1.setInstanceName("demo-network-1");
820         Resource vfmResource2 =
821                 new Resource(WorkflowType.VFMODULE, "83677d89-428a-407b-b4ec-738e68275d84", false, vnfResource1);
822         vfmResource2.setInstanceName("demo-1");
823         Resource vnfResource2 =
824                 new Resource(WorkflowType.VNF, "0d0ba1ee-6b7f-47fe-8266-2967993b2c08", false, serviceResource);
825         vnfResource2.setInstanceName("vnf-instanceName-2");
826         Resource vfmResource3 =
827                 new Resource(WorkflowType.VFMODULE, "83677d89-428a-407b-b4ec-738e68275d84", false, vnfResource2);
828         vfmResource3.setInstanceName("demo-2");
829         Resource vfmResource4 =
830                 new Resource(WorkflowType.VFMODULE, "83677d89-428a-407b-b4ec-738e68275d84", false, vnfResource2);
831         vfmResource4.setInstanceName("demo-3");
832
833         when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), any()))
834                 .thenReturn(Arrays.asList(serviceResource, vnfResource1, vnfResource2, vfmResource1, vfmResource2,
835                         vfmResource3, vfmResource4));
836
837         workflowAction.selectExecutionList(execution);
838
839         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
840
841         Map<String, List<ExecuteBuildingBlock>> flowNamesToEbbList =
842                 ebbs.stream().collect(Collectors.groupingBy(e -> e.getBuildingBlock().getBpmnFlowName()));
843
844         assertEquals(1, flowNamesToEbbList.get("AssignServiceInstanceBB").size());
845         assertEquals(2, flowNamesToEbbList.get("AssignVnfBB").size());
846         assertEquals(4, flowNamesToEbbList.get("AssignVfModuleBB").size());
847         assertEquals(4, flowNamesToEbbList.get("ControllerExecutionBB").size());
848         assertEquals(4, flowNamesToEbbList.get("CreateVfModuleBB").size());
849         assertEquals(4, flowNamesToEbbList.get("ActivateVfModuleBB").size());
850         assertEquals(2, flowNamesToEbbList.get("ActivateVnfBB").size());
851         assertEquals(1, flowNamesToEbbList.get("ActivateServiceInstanceBB").size());
852
853         String vnfInstanceId1 = flowNamesToEbbList.get("AssignVnfBB").get(0).getWorkflowResourceIds().getVnfId();
854         String vnfInstanceId2 = flowNamesToEbbList.get("AssignVnfBB").get(1).getWorkflowResourceIds().getVnfId();
855
856         // should be 3 = 1 AssignVfModuleBB + 1 CreateVfModuleBB + 1 ActivateVfModuleBB
857         boolean allEbbsForVfModule1HaveCorrectParentVnfId =
858                 3 == ebbs.stream().map(ExecuteBuildingBlock::getWorkflowResourceIds)
859                         .filter(w -> "demo-network-1".equals(w.getVfModuleInstanceName())
860                                 && vnfInstanceId1.equals(w.getVnfId()))
861                         .count();
862         boolean allEbbsForVfModule2HaveCorrectParentVnfId = 3 == ebbs.stream()
863                 .map(ExecuteBuildingBlock::getWorkflowResourceIds)
864                 .filter(w -> "demo-1".equals(w.getVfModuleInstanceName()) && vnfInstanceId1.equals(w.getVnfId()))
865                 .count();
866         boolean allEbbsForVfModule3HaveCorrectParentVnfId = 3 == ebbs.stream()
867                 .map(ExecuteBuildingBlock::getWorkflowResourceIds)
868                 .filter(w -> "demo-2".equals(w.getVfModuleInstanceName()) && vnfInstanceId2.equals(w.getVnfId()))
869                 .count();
870         boolean allEbbsForVfModule4HaveCorrectParentVnfId = 3 == ebbs.stream()
871                 .map(ExecuteBuildingBlock::getWorkflowResourceIds)
872                 .filter(w -> "demo-3".equals(w.getVfModuleInstanceName()) && vnfInstanceId2.equals(w.getVnfId()))
873                 .count();
874         assertTrue(allEbbsForVfModule1HaveCorrectParentVnfId);
875         assertTrue(allEbbsForVfModule2HaveCorrectParentVnfId);
876         assertTrue(allEbbsForVfModule3HaveCorrectParentVnfId);
877         assertTrue(allEbbsForVfModule4HaveCorrectParentVnfId);
878
879         boolean controllerExecutionBBsforVnf1HaveCorrectVnfId = flowNamesToEbbList.get("ControllerExecutionBB").stream()
880                 .filter(e -> vnfInstanceId1.equals(e.getWorkflowResourceIds().getVnfId()))
881                 .map(ExecuteBuildingBlock::getBuildingBlock).map(BuildingBlock::getBpmnAction)
882                 .collect(Collectors.toSet()).containsAll(Set.of("config-assign", "config-deploy"));
883         assertTrue(controllerExecutionBBsforVnf1HaveCorrectVnfId);
884
885         boolean controllerExecutionBBsforVnf2HaveCorrectVnfId = flowNamesToEbbList.get("ControllerExecutionBB").stream()
886                 .filter(e -> vnfInstanceId2.equals(e.getWorkflowResourceIds().getVnfId()))
887                 .map(ExecuteBuildingBlock::getBuildingBlock).map(BuildingBlock::getBpmnAction)
888                 .collect(Collectors.toSet()).containsAll(Set.of("config-assign", "config-deploy"));
889         assertTrue(controllerExecutionBBsforVnf2HaveCorrectVnfId);
890     }
891
892     @Test
893     public void selectExecutionListServiceMacroDeleteTest() throws Exception {
894         String gAction = "deleteInstance";
895         String resource = "Service";
896         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
897         initExecution(gAction, bpmnRequest, false);
898         execution.setVariable("requestUri", "v6/serviceInstances/123");
899
900         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
901         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
902                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivatePnfBB",
903                 "DeactivateNetworkBB", "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB",
904                 "UnassignVfModuleBB", "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB",
905                 "UnassignServiceInstanceBB");
906         northBoundRequest.setOrchestrationFlowList(orchFlows);
907
908         ServiceInstance serviceInstanceAAI = new ServiceInstance();
909         serviceInstanceAAI.setServiceInstanceId("aaisi123");
910         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
911                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
912         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
913                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
914         org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf pnf =
915                 new org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf();
916         vnf.setVnfId("vnfId123");
917         pnf.setPnfId("pnfId123");
918
919         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
920         vnf.getVfModules().add(vfModule);
921         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
922         vnf.getVfModules().add(vfModule2);
923
924         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
925                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
926         volumeGroup.setVolumeGroupId("vg123");
927         vnf.getVolumeGroups().add(volumeGroup);
928
929         serviceInstanceMSO.getVnfs().add(vnf);
930         serviceInstanceMSO.getPnfs().add(pnf);
931
932         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
933         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
934         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
935                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
936         workflowAction.selectExecutionList(execution);
937         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
938         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleBB", "DeactivateVfModuleBB",
939                 "DeleteVfModuleBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB",
940                 "DeactivatePnfBB", "DeactivateServiceInstanceBB", "UnassignVfModuleBB", "UnassignVfModuleBB",
941                 "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignServiceInstanceBB");
942     }
943
944     @Test
945     public void selectExecutionListServiceMacroDeleteWithPnfTest() throws Exception {
946         String gAction = "deleteInstance";
947         String resource = "Service";
948         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
949         initExecution(gAction, bpmnRequest, false);
950         execution.setVariable("requestUri", "v6/serviceInstances/123");
951
952         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
953         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
954                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivatePnfBB",
955                 "DeactivateNetworkBB", "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB",
956                 "UnassignVfModuleBB", "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB",
957                 "UnassignServiceInstanceBB");
958         northBoundRequest.setOrchestrationFlowList(orchFlows);
959
960         ServiceInstance serviceInstanceAAI = new ServiceInstance();
961         serviceInstanceAAI.setServiceInstanceId("aaisi123");
962         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
963                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
964         org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf pnf =
965                 new org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf();
966         pnf.setPnfId("pnfId123");
967
968         serviceInstanceMSO.getPnfs().add(pnf);
969
970         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
971         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
972         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
973                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
974         workflowAction.selectExecutionList(execution);
975         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
976         assertEqualsBulkFlowName(ebbs, "DeactivatePnfBB", "DeactivateServiceInstanceBB", "UnassignServiceInstanceBB");
977     }
978
979     @Test
980     public void selectExecutionListServiceMacroUnassignTest() throws Exception {
981         String gAction = "unassignInstance";
982         String resource = "Service";
983         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
984         initExecution(gAction, bpmnRequest, false);
985         execution.setVariable("requestUri", "v6/serviceInstances/123");
986
987         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
988         List<OrchestrationFlow> orchFlows = createFlowList("UnassignVfModuleBB", "UnassignVolumeGroupBB",
989                 "UnassignVnfBB", "UnassignNetworkBB", "UnassignServiceInstanceBB");
990         northBoundRequest.setOrchestrationFlowList(orchFlows);
991
992         ServiceInstance serviceInstanceAAI = new ServiceInstance();
993         serviceInstanceAAI.setServiceInstanceId("aaisi123");
994         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
995                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
996         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
997                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
998         vnf.setVnfId("vnfId123");
999
1000         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
1001         vnf.getVfModules().add(vfModule);
1002         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
1003         vnf.getVfModules().add(vfModule2);
1004
1005         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
1006                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
1007         volumeGroup.setVolumeGroupId("vg123");
1008         vnf.getVolumeGroups().add(volumeGroup);
1009
1010         serviceInstanceMSO.getVnfs().add(vnf);
1011
1012         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
1013         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
1014         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1015                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1016         workflowAction.selectExecutionList(execution);
1017         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1018         assertEqualsBulkFlowName(ebbs, "UnassignVfModuleBB", "UnassignVfModuleBB", "UnassignVolumeGroupBB",
1019                 "UnassignVnfBB", "UnassignServiceInstanceBB");
1020     }
1021
1022     @Test
1023     public void selectExecutionListServiceMacroDeleteNetworkCollectionTest() throws Exception {
1024         String gAction = "deleteInstance";
1025         String resource = "Service";
1026         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
1027         initExecution(gAction, bpmnRequest, false);
1028         execution.setVariable("requestUri", "v6/serviceInstances/123");
1029
1030         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1031         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1032                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivateNetworkBB",
1033                 "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB", "UnassignVfModuleBB",
1034                 "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB", "UnassignServiceInstanceBB");
1035         northBoundRequest.setOrchestrationFlowList(orchFlows);
1036
1037         ServiceInstance serviceInstanceAAI = new ServiceInstance();
1038         serviceInstanceAAI.setServiceInstanceId("aaisi123");
1039         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
1040                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
1041
1042         org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network =
1043                 new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
1044         network.setNetworkId("123");
1045         serviceInstanceMSO.getNetworks().add(network);
1046         org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network2 =
1047                 new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
1048         network2.setNetworkId("321");
1049         serviceInstanceMSO.getNetworks().add(network2);
1050
1051         Collection collection = new Collection();
1052         serviceInstanceMSO.setCollection(collection);
1053
1054         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
1055         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
1056         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1057                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1058         workflowAction.selectExecutionList(execution);
1059         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1060         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
1061                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB", "DeleteNetworkCollectionBB",
1062                 "DeactivateServiceInstanceBB", "UnassignServiceInstanceBB");
1063     }
1064
1065     @Test
1066     public void selectExecutionListVnfMacroRecreateTest() throws Exception {
1067         String gAction = "recreateInstance";
1068         String resource = "Vnf";
1069         String bpmnRequest = readBpmnRequestFromFile(MACRO_VNF_MACRO_REPLACE_JSON);
1070         initExecution(gAction, bpmnRequest, false);
1071         execution.setVariable("requestUri", "v7/serviceInstances/123/vnfs/1234/recreate");
1072         execution.setVariable("serviceInstanceId", "123");
1073         execution.setVariable("vnfId", "1234");
1074
1075         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1076         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
1077                 "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB", "DeactivateVfModuleBB",
1078                 "DeleteVfModuleBB", "DeactivateVnfBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1079                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB", "SDNOVnfHealthCheckBB",
1080                 "AAIUnsetVnfInMaintBB");
1081         northBoundRequest.setOrchestrationFlowList(orchFlows);
1082
1083         ServiceInstance serviceInstanceAAI = new ServiceInstance();
1084         serviceInstanceAAI.setServiceInstanceId("123");
1085         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
1086                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
1087         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
1088                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
1089         vnf.setVnfId("1234");
1090
1091         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
1092                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
1093         vfModule.setVfModuleId("vfModule1");
1094         vnf.getVfModules().add(vfModule);
1095         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 =
1096                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
1097         vfModule2.setVfModuleId("vfModule2");
1098         vnf.getVfModules().add(vfModule2);
1099
1100         serviceInstanceMSO.getVnfs().add(vnf);
1101
1102         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
1103         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
1104         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1105                 false, "cloud-owner")).thenReturn(northBoundRequest);
1106         workflowAction.selectExecutionList(execution);
1107         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1108         assertEqualsBulkFlowName(ebbs, "AAICheckVnfInMaintBB", "AAISetVnfInMaintBB", "DeactivateVfModuleBB",
1109                 "DeleteVfModuleBB", "DeactivateVfModuleBB", "DeleteVfModuleBB", "DeactivateVnfBB", "CreateVfModuleBB",
1110                 "ActivateVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB", "SDNOVnfHealthCheckBB",
1111                 "AAIUnsetVnfInMaintBB");
1112     }
1113
1114     @Test
1115     public void selectExecutionListVnfMacroReplaceTest() throws Exception {
1116         String gAction = "replaceInstance";
1117         String resource = "Vnf";
1118         String bpmnRequest = readBpmnRequestFromFile(MACRO_VNF_MACRO_REPLACE_JSON);
1119         initExecution(gAction, bpmnRequest, false);
1120         execution.setVariable("requestUri", "v7/serviceInstances/123/vnfs/1234/replace");
1121         execution.setVariable("serviceInstanceId", "123");
1122         execution.setVariable("vnfId", "1234");
1123
1124         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1125         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
1126                 "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB", "DeactivateVfModuleBB",
1127                 "DeleteVfModuleBB", "DeactivateVnfBB", "ChangeModelVfModuleBB", "CreateVfModuleBB",
1128                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB",
1129                 "ChangeModelVnfBB", "ActivateVnfBB", "ChangeModelServiceInstanceBB", "SDNOVnfHealthCheckBB",
1130                 "AAIUnsetVnfInMaintBB");
1131         northBoundRequest.setOrchestrationFlowList(orchFlows);
1132
1133         ServiceInstance serviceInstanceAAI = new ServiceInstance();
1134         serviceInstanceAAI.setServiceInstanceId("123");
1135         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
1136                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
1137         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
1138                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
1139         vnf.setVnfId("1234");
1140         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
1141                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
1142         vfModule.setVfModuleId("vfModule1");
1143         vnf.getVfModules().add(vfModule);
1144         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 =
1145                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
1146         vfModule2.setVfModuleId("vfModule2");
1147         vnf.getVfModules().add(vfModule2);
1148         serviceInstanceMSO.getVnfs().add(vnf);
1149         VfModule vfModuleAAI = new VfModule();
1150         vfModuleAAI.setVfModuleId("vfModule2");
1151         RelationshipList relationshipList = new RelationshipList();
1152         Relationship relationship = new Relationship();
1153         relationshipList.getRelationship().add(relationship);
1154         vfModuleAAI.setRelationshipList(relationshipList);
1155         Relationships relationships = new Relationships("abc");
1156         Configuration config = new Configuration();
1157         config.setConfigurationId("configId");
1158         Optional<Configuration> configOp = Optional.of(config);
1159         Optional<Relationships> relationshipsOp = Optional.of(relationships);
1160
1161         doReturn(relationshipsOp).when(workflowActionUtils).extractRelationshipsVnfc(isA(Relationships.class));
1162         doReturn(configOp).when(workflowActionUtils).extractRelationshipsConfiguration(isA(Relationships.class));
1163         doReturn(vfModuleAAI).when(bbSetupUtils).getAAIVfModule("1234", "vfModule2");
1164         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
1165         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
1166         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1167                 false, "cloud-owner")).thenReturn(northBoundRequest);
1168         workflowAction.selectExecutionList(execution);
1169         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1170         assertEqualsBulkFlowName(ebbs, "AAICheckVnfInMaintBB", "AAISetVnfInMaintBB", "DeactivateVfModuleBB",
1171                 "DeleteVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB",
1172                 "DeactivateVfModuleBB", "DeleteVfModuleBB", "DeactivateVnfBB", "ChangeModelVfModuleBB",
1173                 "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVfModuleBB", "CreateVfModuleBB",
1174                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB",
1175                 "ChangeModelVnfBB", "ActivateVnfBB", "ChangeModelServiceInstanceBB", "SDNOVnfHealthCheckBB",
1176                 "AAIUnsetVnfInMaintBB");
1177         for (ExecuteBuildingBlock executeBuildingBlock : ebbs) {
1178             assertEquals("123", executeBuildingBlock.getWorkflowResourceIds().getServiceInstanceId());
1179         }
1180     }
1181
1182     @Ignore
1183     @Test
1184     public void selectExecutionListNetworkCollectionMacroCreate() throws Exception {
1185         String gAction = "createInstance";
1186         String resource = "NetworkCollection";
1187         String bpmnRequest = readBpmnRequestFromFile(MACRO_CREATE_NETWORK_COLLECTION_JSON);
1188         initExecution(gAction, bpmnRequest, false);
1189         execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
1190
1191         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1192         List<OrchestrationFlow> orchFlows = createFlowList("CreateNetworkCollectionBB", "AssignNetworkBB",
1193                 "CreateNetworkBB", "ActivateNetworkBB", "ActivateNetworkCollectionBB");
1194         northBoundRequest.setOrchestrationFlowList(orchFlows);
1195
1196         Service service = new Service();
1197         CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
1198         CollectionResource collectionResource = new CollectionResource();
1199         collectionResource.setToscaNodeType("Data NetworkCollection Data");
1200         collectionResourceCustomization.setCollectionResource(collectionResource);
1201         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
1202
1203         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1204                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1205         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
1206         workflowAction.selectExecutionList(execution);
1207         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1208         assertEqualsBulkFlowName(ebbs, "CreateNetworkCollectionBB", "AssignNetworkBB", "CreateNetworkBB",
1209                 "ActivateNetworkBB", "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB",
1210                 "ActivateNetworkCollectionBB");
1211     }
1212
1213     @Ignore
1214     @Test
1215     public void selectExecutionListNetworkCollectionMacroDelete() throws Exception {
1216         String gAction = "deleteInstance";
1217         String resource = "NetworkCollection";
1218         String bpmnRequest = readBpmnRequestFromFile(MACRO_CREATE_NETWORK_COLLECTION_JSON);
1219         initExecution(gAction, bpmnRequest, false);
1220         execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
1221
1222         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1223         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateNetworkBB", "DeleteNetworkBB",
1224                 "UnassignNetworkBB", "DeactivateNetworkCollectionBB", "DeleteNetworkCollectionBB");
1225         northBoundRequest.setOrchestrationFlowList(orchFlows);
1226
1227         Service service = new Service();
1228         CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
1229         CollectionResource collectionResource = new CollectionResource();
1230         collectionResource.setToscaNodeType("Data NetworkCollection Data");
1231         collectionResourceCustomization.setCollectionResource(collectionResource);
1232         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
1233
1234         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1235                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1236         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
1237         workflowAction.selectExecutionList(execution);
1238         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1239         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
1240                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB", "DeactivateNetworkCollectionBB",
1241                 "DeleteNetworkCollectionBB");
1242     }
1243
1244     @Test
1245     public void selectExecutionListALaCarteVfModuleNoFabricCreateTest() throws Exception {
1246         String gAction = "createInstance";
1247         String resource = "VfModule";
1248         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1249         initExecution(gAction, bpmnRequest, true);
1250         execution.setVariable("requestUri",
1251                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1252
1253         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1254         List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1255                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB");
1256         northBoundRequest.setOrchestrationFlowList(orchFlows);
1257
1258         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1259                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1260         workflowAction.selectExecutionList(execution);
1261         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1262         assertEqualsBulkFlowName(ebbs, "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB");
1263     }
1264
1265     @Test
1266     public void selectExecutionListALaCarteVfModuleFabricCreateTest() throws Exception {
1267         String gAction = "createInstance";
1268         String resource = "VfModule";
1269         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1270         initExecution(gAction, bpmnRequest, true);
1271         execution.setVariable("requestUri",
1272                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1273
1274         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1275         List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1276                 "AddFabricConfigurationBB");
1277         northBoundRequest.setOrchestrationFlowList(orchFlows);
1278
1279         List<CvnfcCustomization> cvnfcCustomizations = new ArrayList<CvnfcCustomization>();
1280         CvnfcCustomization cvnfcCustomization = new CvnfcCustomization();
1281         CvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization =
1282                 new CvnfcConfigurationCustomization();
1283         ConfigurationResource configurationResource = new ConfigurationResource();
1284         configurationResource.setToscaNodeType("FabricConfiguration");
1285         vnfVfmoduleCvnfcConfigurationCustomization.setConfigurationResource(configurationResource);
1286         vnfVfmoduleCvnfcConfigurationCustomization.setModelInstanceName("modelInstanceName1");
1287         vnfVfmoduleCvnfcConfigurationCustomization.setCvnfcCustomization(cvnfcCustomization);
1288         List<CvnfcConfigurationCustomization> custSet = new ArrayList<CvnfcConfigurationCustomization>();
1289         custSet.add(vnfVfmoduleCvnfcConfigurationCustomization);
1290         cvnfcCustomization.setCvnfcConfigurationCustomization(custSet);
1291         cvnfcCustomization.setDescription("description");
1292         cvnfcCustomizations.add(cvnfcCustomization);
1293
1294         CvnfcCustomization cvnfcCustomization2 = new CvnfcCustomization();
1295         CvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization2 =
1296                 new CvnfcConfigurationCustomization();
1297         ConfigurationResource configurationResource2 = new ConfigurationResource();
1298         configurationResource2.setToscaNodeType("FabricConfiguration");
1299         vnfVfmoduleCvnfcConfigurationCustomization2.setConfigurationResource(configurationResource2);
1300         vnfVfmoduleCvnfcConfigurationCustomization2.setModelInstanceName("modelInstanceName2");
1301         vnfVfmoduleCvnfcConfigurationCustomization2.setCvnfcCustomization(cvnfcCustomization2);
1302         List<CvnfcConfigurationCustomization> custSet2 = new ArrayList<CvnfcConfigurationCustomization>();
1303         custSet2.add(vnfVfmoduleCvnfcConfigurationCustomization2);
1304         cvnfcCustomization2.setCvnfcConfigurationCustomization(custSet2);
1305         cvnfcCustomization2.setDescription("description2");
1306         cvnfcCustomizations.add(cvnfcCustomization2);
1307
1308         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1309                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1310
1311         workflowAction.selectExecutionList(execution);
1312         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1313         assertEqualsBulkFlowName(ebbs, "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB");
1314     }
1315
1316
1317
1318     @Test
1319     public void selectExecutionListALaCarteVfModuleNoVolumeGroupReplaceTest() throws Exception {
1320         String gAction = "replaceInstance";
1321         String resource = "VfModule";
1322         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1323         initExecution(gAction, bpmnRequest, true);
1324         execution.setVariable("requestUri",
1325                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1326
1327         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1328         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
1329         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1330                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1331         workflowAction.selectExecutionList(execution);
1332         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1333
1334         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "UnassignVFModuleBB",
1335                 "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB",
1336                 "ChangeModelServiceInstanceBB");
1337     }
1338
1339     @Test
1340     public void selectExecutionListALaCarteVfModuleNoVolumeGroupReplaceRetainAssignmentsTest() throws Exception {
1341         String gAction = "replaceInstanceRetainAssignments";
1342         String resource = "VfModule";
1343         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1344         initExecution(gAction, bpmnRequest, true);
1345         execution.setVariable("requestUri",
1346                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1347
1348         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1349         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
1350         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1351                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1352         workflowAction.selectExecutionList(execution);
1353         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1354
1355         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "ChangeModelVfModuleBB",
1356                 "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1357     }
1358
1359     @Test
1360     public void selectExecutionListALaCarteVfModuleVolumeGroupToNoVolumeGroupReplaceTest() throws Exception {
1361         String gAction = "replaceInstance";
1362         String resource = "VfModule";
1363         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1364         initExecution(gAction, bpmnRequest, true);
1365         execution.setVariable("requestUri",
1366                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1367         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1368         execution.setVariable("vfModuleId", "1234");
1369
1370         VolumeGroup volumeGroup = new VolumeGroup();
1371         volumeGroup.setVolumeGroupId("volumeGroupId");
1372         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1373                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1374         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1375         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
1376         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1377                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1378         workflowAction.selectExecutionList(execution);
1379         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1380
1381         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
1382                 "DeleteVolumeGroupBB", "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVfModuleBB",
1383                 "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1384     }
1385
1386     @Test
1387     public void selectExecutionListALaCarteVfModuleVolumeGroupToNoVolumeGroupReplaceRetainAssignmentsTest()
1388             throws Exception {
1389         String gAction = "replaceInstanceRetainAssignments";
1390         String resource = "VfModule";
1391         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1392         initExecution(gAction, bpmnRequest, true);
1393         execution.setVariable("requestUri",
1394                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1395         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1396         execution.setVariable("vfModuleId", "1234");
1397
1398         VolumeGroup volumeGroup = new VolumeGroup();
1399         volumeGroup.setVolumeGroupId("volumeGroupId");
1400         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1401                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1402
1403         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1404         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
1405         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1406                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1407         workflowAction.selectExecutionList(execution);
1408         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1409
1410         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
1411                 "DeleteVolumeGroupBB", "UnassignVolumeGroupBB", "ChangeModelVfModuleBB", "CreateVfModuleBB",
1412                 "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1413     }
1414
1415     @Test
1416     public void selectExecutionListALaCarteVfModuleKeepVolumeGroupReplaceTest() throws Exception {
1417         String gAction = "replaceInstance";
1418         String resource = "VfModule";
1419         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1420         initExecution(gAction, bpmnRequest, true);
1421         execution.setVariable("requestUri",
1422                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1423         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1424         execution.setVariable("vfModuleId", "1234");
1425
1426         VolumeGroup volumeGroup = new VolumeGroup();
1427         volumeGroup.setVolumeGroupId("volumeGroupId");
1428         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1429                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1430
1431         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1432         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1433         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1434         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1435         vfModuleCustomization.setVfModule(vfModule);
1436         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1437                 .thenReturn(vfModuleCustomization);
1438
1439         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1440         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
1441         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1442                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1443         workflowAction.selectExecutionList(execution);
1444         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1445
1446         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "UnassignVFModuleBB",
1447                 "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB",
1448                 "ChangeModelServiceInstanceBB");
1449     }
1450
1451     @Test
1452     public void selectExecutionListALaCarteVfModuleWithFabricKeepVolumeGroupReplaceTest() throws Exception {
1453         String gAction = "replaceInstance";
1454         String resource = "VfModule";
1455         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1456         initExecution(gAction, bpmnRequest, true);
1457         execution.setVariable("requestUri",
1458                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1459         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1460         execution.setVariable("vfModuleId", "1234");
1461
1462         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1463         vnf.setVnfId("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1464         vnf.setModelCustomizationId("modelCustomizationId");
1465         when(bbSetupUtils.getAAIGenericVnf(any())).thenReturn(vnf);
1466
1467         org.onap.aai.domain.yang.VfModule vfModuleFromAAI = new org.onap.aai.domain.yang.VfModule();
1468         vfModuleFromAAI.setModelCustomizationId("modelCustomizationId");
1469         vfModuleFromAAI.setVfModuleId("1234");
1470         when(bbSetupUtils.getAAIVfModule(any(), any())).thenReturn(vfModuleFromAAI);
1471
1472         VolumeGroup volumeGroup = new VolumeGroup();
1473         volumeGroup.setVolumeGroupId("volumeGroupId");
1474         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1475                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1476
1477         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1478         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1479         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1480         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1481         vfModuleCustomization.setVfModule(vfModule);
1482         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1483                 .thenReturn(vfModuleCustomization);
1484         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1485         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1486         vnfc.setModelInvariantId("modelInvariantId");
1487         vnfc.setVnfcName("testVnfcName");
1488         vnfcs.add(vnfc);
1489         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(any(), any(), any(), any());
1490
1491         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
1492         configuration.setConfigurationId("configurationId");
1493         configuration.setModelCustomizationId("modelCustimizationId");
1494         configuration.setConfigurationName("testConfigurationName");
1495         doReturn(configuration).when(SPY_workflowAction).getRelatedResourcesInVnfc(any(), any(), any());
1496
1497         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1498         northBoundRequest.setOrchestrationFlowList(replaceVfModuleWithFabricOrchFlows);
1499         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1500                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1501         SPY_workflowAction.selectExecutionList(execution);
1502         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1503
1504         assertEqualsBulkFlowName(ebbs, "DeleteFabricConfigurationBB", "DeactivateVfModuleBB", "DeleteVfModuleATTBB",
1505                 "UnassignVFModuleBB", "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB",
1506                 "ChangeModelServiceInstanceBB");
1507     }
1508
1509     @Test
1510     public void selectExecutionListALaCarteVfModuleKeepVolumeGroupReplaceRetainAssignmentsTest() throws Exception {
1511         String gAction = "replaceInstanceRetainAssignments";
1512         String resource = "VfModule";
1513         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1514         initExecution(gAction, bpmnRequest, true);
1515         execution.setVariable("requestUri",
1516                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1517         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1518         execution.setVariable("vfModuleId", "1234");
1519
1520         VolumeGroup volumeGroup = new VolumeGroup();
1521         volumeGroup.setVolumeGroupId("volumeGroupId");
1522         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1523                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1524
1525         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1526         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1527         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1528         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1529         vfModuleCustomization.setVfModule(vfModule);
1530         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1531                 .thenReturn(vfModuleCustomization);
1532
1533         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1534         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
1535         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1536                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1537         workflowAction.selectExecutionList(execution);
1538         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1539
1540         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "ChangeModelVfModuleBB",
1541                 "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1542     }
1543
1544     @Test
1545     public void selectExecutionListALaCarteVfModuleNoVolumeGroupToVolumeGroupReplaceTest() throws Exception {
1546         String gAction = "replaceInstance";
1547         String resource = "VfModule";
1548         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1549         initExecution(gAction, bpmnRequest, true);
1550         execution.setVariable("requestUri",
1551                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1552         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1553         execution.setVariable("vfModuleId", "1234");
1554
1555         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1556         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1557         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1558         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1559         vfModuleCustomization.setVfModule(vfModule);
1560         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1561                 .thenReturn(vfModuleCustomization);
1562
1563         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1564         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
1565         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1566                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1567         workflowAction.selectExecutionList(execution);
1568         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1569
1570         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "UnassignVFModuleBB",
1571                 "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1572                 "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1573     }
1574
1575     @Test
1576     public void selectExecutionListALaCarteVfModuleNoVolumeGroupToVolumeGroupReplaceRetainAssignmentsTest()
1577             throws Exception {
1578         String gAction = "replaceInstanceRetainAssignments";
1579         String resource = "VfModule";
1580         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1581         initExecution(gAction, bpmnRequest, true);
1582         execution.setVariable("requestUri",
1583                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1584         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1585         execution.setVariable("vfModuleId", "1234");
1586
1587         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1588         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1589         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1590         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1591         vfModuleCustomization.setVfModule(vfModule);
1592         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1593                 .thenReturn(vfModuleCustomization);
1594
1595         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1596         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
1597         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1598                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1599         workflowAction.selectExecutionList(execution);
1600         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1601
1602         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "AssignVolumeGroupBB",
1603                 "ChangeModelVfModuleBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
1604                 "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1605     }
1606
1607     @Test
1608     public void selectExecutionListALaCarteVfModuleRebuildVolumeGroupReplaceTest() throws Exception {
1609         String gAction = "replaceInstance";
1610         String resource = "VfModule";
1611         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_REPLACE_REBUILD_VOLUME_GROUPS_JSON);
1612         initExecution(gAction, bpmnRequest, true);
1613         execution.setVariable("requestUri",
1614                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1615         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1616         execution.setVariable("vfModuleId", "1234");
1617
1618         VolumeGroup volumeGroup = new VolumeGroup();
1619         volumeGroup.setVolumeGroupId("volumeGroupId");
1620         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1621                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1622
1623         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1624         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1625         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1626         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1627         vfModuleCustomization.setVfModule(vfModule);
1628         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1629                 .thenReturn(vfModuleCustomization);
1630
1631         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1632         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
1633         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1634                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1635         workflowAction.selectExecutionList(execution);
1636         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1637
1638         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
1639                 "DeleteVolumeGroupBB", "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB",
1640                 "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "CreateVolumeGroupBB",
1641                 "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1642     }
1643
1644     @Test
1645     public void selectExecutionListALaCarteVfModuleRebuildVolumeGroupReplaceRetainAssignmentsTest() throws Exception {
1646         String gAction = "replaceInstanceRetainAssignments";
1647         String resource = "VfModule";
1648         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_REPLACE_REBUILD_VOLUME_GROUPS_JSON);
1649         initExecution(gAction, bpmnRequest, true);
1650         execution.setVariable("requestUri",
1651                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1652         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1653         execution.setVariable("vfModuleId", "1234");
1654
1655         VolumeGroup volumeGroup = new VolumeGroup();
1656         volumeGroup.setVolumeGroupId("volumeGroupId");
1657         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1658                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1659
1660         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1661         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1662         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1663         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1664         vfModuleCustomization.setVfModule(vfModule);
1665         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1666                 .thenReturn(vfModuleCustomization);
1667
1668         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1669         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
1670         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1671                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1672         workflowAction.selectExecutionList(execution);
1673         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1674
1675         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
1676                 "DeleteVolumeGroupBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB", "ChangeModelVfModuleBB",
1677                 "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1678                 "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1679     }
1680
1681     @Test
1682     public void selectExecutionListALaCarteVfModuleFabricDeleteTest() throws Exception {
1683         String gAction = "deleteInstance";
1684         String resource = "VfModule";
1685         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1686         initExecution(gAction, bpmnRequest, true);
1687         execution.setVariable("requestUri",
1688                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1689
1690         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1691         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1692                 "UnassignVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB");
1693         northBoundRequest.setOrchestrationFlowList(orchFlows);
1694
1695         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1696                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1697
1698         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1699         vnf.setVnfId("vnf0");
1700         vnf.setModelCustomizationId("modelCustomizationId");
1701         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
1702
1703         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1704         vfModule.setModelCustomizationId("modelCustomizationId");
1705         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(vfModule);
1706
1707         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1708         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1709         vnfc.setModelInvariantId("modelInvariantId");
1710         vnfc.setVnfcName("testVnfcName");
1711         vnfcs.add(vnfc);
1712         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(anyObject(), anyObject(), anyObject(),
1713                 anyObject());
1714
1715         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
1716         configuration.setConfigurationId("configurationId");
1717         configuration.setModelCustomizationId("modelCustimizationId");
1718         configuration.setConfigurationName("testConfigurationName");
1719         doReturn(configuration).when(SPY_workflowAction).getRelatedResourcesInVnfc(anyObject(), anyObject(),
1720                 anyObject());
1721
1722         SPY_workflowAction.selectExecutionList(execution);
1723         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1724         assertEqualsBulkFlowName(ebbs, "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB",
1725                 "DeactivateVfModuleBB", "DeleteVfModuleBB", "UnassignVfModuleBB");
1726     }
1727
1728     @Test
1729     public void selectExecutionListALaCarteNoRequestParametersTest() throws Exception {
1730         String gAction = "createInstance";
1731         String resource = "VfModule";
1732         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_NO_PARAMS_JSON);
1733         initExecution(gAction, bpmnRequest, true);
1734         execution.setVariable("requestUri",
1735                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1736
1737         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1738         List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1739                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB");
1740         northBoundRequest.setOrchestrationFlowList(orchFlows);
1741
1742         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1743                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1744         workflowAction.selectExecutionList(execution);
1745         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1746         assertEqualsBulkFlowName(ebbs, "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB");
1747     }
1748
1749     @Test
1750     public void getConfigBuildingBlocksNoVfModuleFabricDeleteTest() throws Exception {
1751         String gAction = "deleteInstance";
1752         ObjectMapper mapper = new ObjectMapper();
1753         WorkflowType resourceType = WorkflowType.VFMODULE;
1754         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1755         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1756         execution.setVariable("requestAction", gAction);
1757         execution.setVariable("bpmnRequest", bpmnRequest);
1758         execution.setVariable("vnfId", "1234");
1759         execution.setVariable("vfModuleId", "vfModuleId1234");
1760         execution.setVariable("requestUri",
1761                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1762         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
1763         RequestDetails requestDetails = sIRequest.getRequestDetails();
1764         String requestAction = "deleteInstance";
1765         String requestId = "9c944122-d161-4280-8594-48c06a9d96d5";
1766         boolean aLaCarte = true;
1767         String apiVersion = "7";
1768         String vnfType = "vnfType";
1769         String key = "00d15ebb-c80e-43c1-80f0-90c40dde70b0";
1770         String resourceId = "d1d35800-783d-42d3-82f6-d654c5054a6e";
1771         Resource resourceKey = new Resource(resourceType, key, aLaCarte, null);
1772         WorkflowResourceIds workflowResourceIds = SPY_workflowAction.populateResourceIdsFromApiHandler(execution);
1773
1774         thrown.expect(AAIEntityNotFoundException.class);
1775         thrown.expectMessage(containsString(
1776                 "No matching VfModule is found in Generic-Vnf in AAI for vnfId: 1234 and vfModuleId : vfModuleId1234"));
1777
1778         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1779                 "UnassignVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB");
1780
1781         ConfigBuildingBlocksDataObject dataObj = new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest)
1782                 .setOrchFlows(orchFlows).setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
1783                 .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(aLaCarte).setVnfType(vnfType)
1784                 .setWorkflowResourceIds(workflowResourceIds).setRequestDetails(requestDetails).setExecution(execution);
1785
1786         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1787         vnf.setVnfId("vnf0");
1788         vnf.setModelCustomizationId("modelCustomizationId");
1789         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
1790
1791         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1792         vfModule.setModelCustomizationId("modelCustomizationId");
1793         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(null);
1794
1795         SPY_workflowAction.getConfigBuildingBlocks(dataObj);
1796     }
1797
1798     @Test
1799     public void getConfigBuildingBlocksTest() throws Exception {
1800         String gAction = "deleteInstance";
1801         ObjectMapper mapper = new ObjectMapper();
1802         mapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
1803
1804         WorkflowType resourceType = WorkflowType.VFMODULE;
1805         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1806         execution.setVariable("requestAction", gAction);
1807         String bpmnRequest =
1808                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1809         execution.setVariable("bpmnRequest", bpmnRequest);
1810         execution.setVariable("vnfId", "1234");
1811         execution.setVariable("vfModuleId", "vfModuleId1234");
1812         execution.setVariable("requestUri",
1813                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1814         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
1815         RequestDetails requestDetails = sIRequest.getRequestDetails();
1816         String requestAction = "deleteInstance";
1817         String requestId = "9c944122-d161-4280-8594-48c06a9d96d5";
1818         boolean aLaCarte = true;
1819         String apiVersion = "7";
1820         String vnfType = "vnfType";
1821         String key = "00d15ebb-c80e-43c1-80f0-90c40dde70b0";
1822         String resourceId = "d1d35800-783d-42d3-82f6-d654c5054a6e";
1823         Resource resourceKey = new Resource(resourceType, key, aLaCarte, null);
1824         WorkflowResourceIds workflowResourceIds = SPY_workflowAction.populateResourceIdsFromApiHandler(execution);
1825
1826         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1827                 "UnassignVfModuleBB", "DeleteFabricConfigurationBB");
1828
1829         ConfigBuildingBlocksDataObject dataObj = new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest)
1830                 .setOrchFlows(orchFlows).setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
1831                 .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(aLaCarte).setVnfType(vnfType)
1832                 .setWorkflowResourceIds(workflowResourceIds).setRequestDetails(requestDetails).setExecution(execution);
1833
1834         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1835         vnf.setVnfId("vnf0");
1836         vnf.setModelCustomizationId("modelCustomizationId");
1837         when(bbSetupUtils.getAAIGenericVnf(any())).thenReturn(vnf);
1838
1839         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1840         vfModule.setModelCustomizationId("modelCustomizationId");
1841
1842         org.onap.aai.domain.yang.Configuration config1 = new org.onap.aai.domain.yang.Configuration();
1843         config1.setConfigurationId("config1");
1844         org.onap.aai.domain.yang.Configuration config2 = new org.onap.aai.domain.yang.Configuration();
1845         config2.setConfigurationId("config2");
1846
1847         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1848         org.onap.aai.domain.yang.Vnfc vnfc1 = new org.onap.aai.domain.yang.Vnfc();
1849         vnfc1.setVnfcName("zauk53avetd02svm001");
1850         org.onap.aai.domain.yang.Vnfc vnfc2 = new org.onap.aai.domain.yang.Vnfc();
1851         vnfc2.setVnfcName("zauk53avetd02tvm001");
1852         vnfcs.add(vnfc1);
1853         vnfcs.add(vnfc2);
1854
1855         when(bbSetupUtils.getAAIVfModule(any(), any())).thenReturn(vfModule);
1856         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(any(), any(),
1857                 eq(org.onap.aai.domain.yang.Vnfc.class), eq(Types.VNFC));
1858         doReturn(config1).when(SPY_workflowAction).getRelatedResourcesInVnfc(eq(vnfc1),
1859                 eq(org.onap.aai.domain.yang.Configuration.class), eq(Types.CONFIGURATION));
1860         doReturn(config2).when(SPY_workflowAction).getRelatedResourcesInVnfc(eq(vnfc2),
1861                 eq(org.onap.aai.domain.yang.Configuration.class), eq(Types.CONFIGURATION));
1862
1863         List<ExecuteBuildingBlock> results = SPY_workflowAction.getConfigBuildingBlocks(dataObj);
1864
1865         assertFalse(results.isEmpty());
1866         assertEquals(2, results.size());
1867         assertEquals("config1", results.get(0).getWorkflowResourceIds().getConfigurationId());
1868         assertEquals("config2", results.get(1).getWorkflowResourceIds().getConfigurationId());
1869         assertEquals("zauk53avetd02svm001", results.get(0).getConfigurationResourceKeys().getVnfcName());
1870         assertEquals("zauk53avetd02tvm001", results.get(1).getConfigurationResourceKeys().getVnfcName());
1871     }
1872
1873     @Test
1874     public void getConfigBuildingBlocksNullConfigurationTest() throws Exception {
1875         String gAction = "deleteInstance";
1876         ObjectMapper mapper = new ObjectMapper();
1877         mapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
1878
1879         WorkflowType resourceType = WorkflowType.VFMODULE;
1880         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1881         execution.setVariable("requestAction", gAction);
1882         String bpmnRequest =
1883                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1884         execution.setVariable("bpmnRequest", bpmnRequest);
1885         execution.setVariable("vnfId", "1234");
1886         execution.setVariable("vfModuleId", "vfModuleId1234");
1887         execution.setVariable("requestUri",
1888                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1889         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
1890         RequestDetails requestDetails = sIRequest.getRequestDetails();
1891         String requestAction = "deleteInstance";
1892         String requestId = "9c944122-d161-4280-8594-48c06a9d96d5";
1893         boolean aLaCarte = true;
1894         String apiVersion = "7";
1895         String vnfType = "vnfType";
1896         String key = "00d15ebb-c80e-43c1-80f0-90c40dde70b0";
1897         String resourceId = "d1d35800-783d-42d3-82f6-d654c5054a6e";
1898         Resource resourceKey = new Resource(resourceType, key, aLaCarte, null);
1899         WorkflowResourceIds workflowResourceIds = SPY_workflowAction.populateResourceIdsFromApiHandler(execution);
1900
1901         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1902                 "UnassignVfModuleBB", "DeleteFabricConfigurationBB");
1903
1904         ConfigBuildingBlocksDataObject dataObj = new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest)
1905                 .setOrchFlows(orchFlows).setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
1906                 .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(aLaCarte).setVnfType(vnfType)
1907                 .setWorkflowResourceIds(workflowResourceIds).setRequestDetails(requestDetails).setExecution(execution);
1908
1909         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1910         vnf.setVnfId("vnf0");
1911         vnf.setModelCustomizationId("modelCustomizationId");
1912         when(bbSetupUtils.getAAIGenericVnf(any())).thenReturn(vnf);
1913
1914         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1915         vfModule.setModelCustomizationId("modelCustomizationId");
1916
1917         /* this is a test case where configuration for vnfc is null */
1918         org.onap.aai.domain.yang.Configuration config1 = null;
1919         org.onap.aai.domain.yang.Configuration config2 = new org.onap.aai.domain.yang.Configuration();
1920         config2.setConfigurationId("config2");
1921
1922         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1923         org.onap.aai.domain.yang.Vnfc vnfc1 = new org.onap.aai.domain.yang.Vnfc();
1924         vnfc1.setVnfcName("zauk53avetd02svm001");
1925         org.onap.aai.domain.yang.Vnfc vnfc2 = new org.onap.aai.domain.yang.Vnfc();
1926         vnfc2.setVnfcName("zauk53avetd02tvm001");
1927         vnfcs.add(vnfc1);
1928         vnfcs.add(vnfc2);
1929
1930         when(bbSetupUtils.getAAIVfModule(any(), any())).thenReturn(vfModule);
1931         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(any(), any(),
1932                 eq(org.onap.aai.domain.yang.Vnfc.class), eq(Types.VNFC));
1933         doReturn(config1).when(SPY_workflowAction).getRelatedResourcesInVnfc(eq(vnfc1),
1934                 eq(org.onap.aai.domain.yang.Configuration.class), eq(Types.CONFIGURATION));
1935         doReturn(config2).when(SPY_workflowAction).getRelatedResourcesInVnfc(eq(vnfc2),
1936                 eq(org.onap.aai.domain.yang.Configuration.class), eq(Types.CONFIGURATION));
1937
1938         List<ExecuteBuildingBlock> results = SPY_workflowAction.getConfigBuildingBlocks(dataObj);
1939
1940         assertFalse(results.isEmpty());
1941         assertEquals(1, results.size());
1942         assertEquals("config2", results.get(0).getWorkflowResourceIds().getConfigurationId());
1943         assertEquals("zauk53avetd02tvm001", results.get(0).getConfigurationResourceKeys().getVnfcName());
1944     }
1945
1946     @Test
1947     public void selectExecutionListALaCarteVfModuleNoFabricDeleteTest() throws Exception {
1948         String gAction = "deleteInstance";
1949         String resource = "VfModule";
1950         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1951         initExecution(gAction, bpmnRequest, true);
1952         execution.setVariable("requestUri",
1953                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1954
1955         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1956         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1957                 "UnassignVfModuleBB", "DeleteFabricConfigurationBB");
1958         northBoundRequest.setOrchestrationFlowList(orchFlows);
1959
1960         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1961                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1962
1963         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1964         vnf.setVnfId("vnf0");
1965         vnf.setModelCustomizationId("modelCustomizationId");
1966         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
1967
1968         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1969         vfModule.setModelCustomizationId("modelCustomizationId");
1970         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(vfModule);
1971
1972         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1973
1974         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(anyObject(), anyObject(), anyObject(),
1975                 anyObject());
1976
1977         SPY_workflowAction.selectExecutionList(execution);
1978         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1979         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleBB", "UnassignVfModuleBB");
1980     }
1981
1982     @Test
1983     public void selectExecutionListMacroResumeTest() throws Exception {
1984         String gAction = "createInstance";
1985         String resource = "Service";
1986         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
1987         initExecution(gAction, bpmnRequest, false);
1988         execution.setVariable("requestUri", "v6/serviceInstances/123");
1989
1990         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1991         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
1992         northBoundRequest.setOrchestrationFlowList(orchFlows);
1993
1994         Service service = new Service();
1995         service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
1996
1997         ServiceInstance si = new ServiceInstance();
1998
1999         when(bbSetupUtils.getAAIServiceInstanceById("123")).thenReturn(si);
2000         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
2001
2002         String flowsToExecuteString =
2003                 "[{\"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\"}}]";
2004         ObjectMapper om = new ObjectMapper();
2005         List<ExecuteBuildingBlock> flowsToExecute = null;
2006         try {
2007             ExecuteBuildingBlock[] asArray = om.readValue(flowsToExecuteString, ExecuteBuildingBlock[].class);
2008             flowsToExecute = Arrays.asList(asArray);
2009         } catch (Exception e) {
2010             e.printStackTrace();
2011         }
2012
2013         when(bbSetupUtils.loadOriginalFlowExecutionPath(anyString())).thenReturn(flowsToExecute);
2014
2015         workflowAction.selectExecutionList(execution);
2016         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
2017         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB");
2018     }
2019
2020     @Test
2021     public void getRelatedResourcesInVfModuleTest() throws Exception {
2022         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
2023         vnfc.setModelInvariantId("modelInvariantId");
2024         vnfc.setVnfcName("testVnfcName");
2025
2026         String vfncPayload =
2027                 new String(Files.readAllBytes(Paths.get(RESOURCE_PATH + "/BuildingBlocks/vnfcResponse.json")));
2028         AAIResultWrapper vfncWrapper = new AAIResultWrapper(vfncPayload);
2029
2030         String configurationPayload =
2031                 new String(Files.readAllBytes(Paths.get(RESOURCE_PATH + "/BuildingBlocks/configurationResponse.json")));
2032         AAIResultWrapper configurationWrapper = new AAIResultWrapper(configurationPayload);
2033         List<AAIResultWrapper> configurationResultWrappers = new ArrayList<AAIResultWrapper>();
2034         configurationResultWrappers.add(configurationWrapper);
2035
2036         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().vnfc(vnfc.getVnfcName()));
2037         when(bbSetupUtils.getAAIResourceDepthOne(uri)).thenReturn(vfncWrapper);
2038
2039         doReturn(configurationResultWrappers).when(SPY_workflowAction).getResultWrappersFromRelationships(anyObject(),
2040                 anyObject());
2041         org.onap.aai.domain.yang.Configuration configuration = SPY_workflowAction.getRelatedResourcesInVnfc(vnfc,
2042                 org.onap.aai.domain.yang.Configuration.class, Types.CONFIGURATION);
2043         assertEquals("testConfigurationId", configuration.getConfigurationId());
2044     }
2045
2046     /**
2047      * WorkflowActionBB Tests
2048      */
2049
2050     @Test
2051     public void pluralTest() {
2052         List<String> items = Arrays.asList("serviceInstances, Service", "vnfs, Vnf", "vfModules, VfModule",
2053                 "networks, Network", "invalidNames, invalidNames");
2054         items.forEach(item -> {
2055             String[] split = item.split(",");
2056             String type = split[0].trim();
2057             String expected = split[1].trim();
2058             assertThat(workflowAction.convertTypeFromPlural(type), equalTo(expected));
2059         });
2060     }
2061
2062     @Test
2063     public void sortExecutionPathByObjectForVlanTaggingCreateTest() throws Exception {
2064         List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
2065
2066         BuildingBlock bb = new BuildingBlock().setBpmnFlowName("AssignNetworkBB").setKey("0");
2067         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock().setBuildingBlock(bb);
2068         executeFlows.add(ebb);
2069
2070         BuildingBlock bb2 = new BuildingBlock().setBpmnFlowName("AssignNetworkBB").setKey("1");
2071         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(bb2);
2072         executeFlows.add(ebb2);
2073
2074         BuildingBlock bb3 = new BuildingBlock().setBpmnFlowName("CreateNetworkBB").setKey("0");
2075         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(bb3);
2076         executeFlows.add(ebb3);
2077
2078         BuildingBlock bb4 = new BuildingBlock().setBpmnFlowName("CreateNetworkBB").setKey("1");
2079         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(bb4);
2080         executeFlows.add(ebb4);
2081
2082         BuildingBlock bb5 = new BuildingBlock().setBpmnFlowName("ActivateNetworkBB").setKey("0");
2083         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(bb5);
2084         executeFlows.add(ebb5);
2085
2086         BuildingBlock bb6 = new BuildingBlock().setBpmnFlowName("ActivateNetworkBB").setKey("1");
2087         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock().setBuildingBlock(bb6);
2088         executeFlows.add(ebb6);
2089
2090         List<ExecuteBuildingBlock> sorted =
2091                 workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows, "createInstance");
2092         assertEqualsBulkFlowName(sorted, "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB", "AssignNetworkBB",
2093                 "CreateNetworkBB", "ActivateNetworkBB");
2094     }
2095
2096     @Test
2097     public void sortExecutionPathByObjectForVlanTaggingDeleteTest() throws Exception {
2098         List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
2099
2100         BuildingBlock bb = new BuildingBlock().setBpmnFlowName("DeactivateNetworkBB").setKey("0");
2101         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock().setBuildingBlock(bb);
2102         executeFlows.add(ebb);
2103
2104         BuildingBlock bb2 = new BuildingBlock().setBpmnFlowName("DeactivateNetworkBB").setKey("1");
2105         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(bb2);
2106         executeFlows.add(ebb2);
2107
2108         BuildingBlock bb3 = new BuildingBlock().setBpmnFlowName("DeleteNetworkBB").setKey("0");
2109         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(bb3);
2110         executeFlows.add(ebb3);
2111
2112         BuildingBlock bb4 = new BuildingBlock().setBpmnFlowName("DeleteNetworkBB").setKey("1");
2113         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(bb4);
2114         executeFlows.add(ebb4);
2115
2116         BuildingBlock bb5 = new BuildingBlock().setBpmnFlowName("UnassignNetworkBB").setKey("0");
2117         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(bb5);
2118         executeFlows.add(ebb5);
2119
2120         BuildingBlock bb6 = new BuildingBlock().setBpmnFlowName("UnassignNetworkBB").setKey("1");
2121         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock().setBuildingBlock(bb6);
2122         executeFlows.add(ebb6);
2123
2124         List<ExecuteBuildingBlock> sorted =
2125                 workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows, "deleteInstance");
2126         assertEqualsBulkFlowName(sorted, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
2127                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB");
2128     }
2129
2130     @Test
2131     public void queryNorthBoundRequestCatalogDbNestedTest() throws MalformedURLException {
2132         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
2133         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
2134                 "VNF-Macro-Replace", "SDNOVnfHealthCheckBB", "AAIUnsetVnfInMaintBB");
2135         northBoundRequest.setOrchestrationFlowList(orchFlows);
2136         List<OrchestrationFlow> macroFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
2137                 "DeactivateVnfBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB");
2138
2139         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner("replaceInstance",
2140                 "Vnf", false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
2141         when(catalogDbClient.getOrchestrationFlowByAction("VNF-Macro-Replace")).thenReturn(macroFlows);
2142         List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "replaceInstance",
2143                 WorkflowType.VNF, false, "my-custom-cloud-owner");
2144         assertEquals(flows.get(0).getFlowName(), "AAICheckVnfInMaintBB");
2145         assertEquals(flows.get(1).getFlowName(), "AAISetVnfInMaintBB");
2146         assertEquals(flows.get(2).getFlowName(), "DeactivateVfModuleBB");
2147         assertEquals(flows.get(3).getFlowName(), "DeleteVfModuleBB");
2148         assertEquals(flows.get(4).getFlowName(), "DeactivateVnfBB");
2149         assertEquals(flows.get(5).getFlowName(), "CreateVfModuleBB");
2150         assertEquals(flows.get(6).getFlowName(), "ActivateVfModuleBB");
2151         assertEquals(flows.get(7).getFlowName(), "ActivateVnfBB");
2152         assertEquals(flows.get(8).getFlowName(), "SDNOVnfHealthCheckBB");
2153         assertEquals(flows.get(9).getFlowName(), "AAIUnsetVnfInMaintBB");
2154     }
2155
2156     @Test
2157     public void queryNorthBoundRequestCatalogDbTransportTest() throws MalformedURLException {
2158         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
2159         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
2160         northBoundRequest.setOrchestrationFlowList(orchFlows);
2161         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwnerAndServiceType(
2162                 "createInstance", "Service", true, "my-custom-cloud-owner", "TRANSPORT")).thenReturn(northBoundRequest);
2163
2164         List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "createInstance",
2165                 WorkflowType.SERVICE, true, "my-custom-cloud-owner", "TRANSPORT");
2166         assertEquals(flows.get(0).getFlowName(), "AssignServiceInstanceBB");
2167     }
2168
2169     @Test
2170     public void extractResourceIdAndTypeFromUriTest() {
2171         String uri = "/v6/serviceInstances/123";
2172         String uri2 = "/v6/serviceInstances/123/vnfs/1234";
2173         String uri3 = "/v6/serviceInstances";
2174         String uri4 = "/v6/serviceInstances/assign";
2175         String uri5 = "'/v6/serviceInstances/123/vnfs";
2176         String uri6 = "/v6/serviceInstances/123/vnfs/1234/someAction";
2177         String uri7 = "/v6/serviceInstances/123/vnfs/1234/vfModules/5678/replace";
2178         String uri8 = "/v6/serviceInstances/123/vnfs/1234/vfModules/scaleOut";
2179         Resource expected1 = new Resource(WorkflowType.SERVICE, "123", true, null);
2180         Resource expected2 = new Resource(WorkflowType.VNF, "1234", false, expected1);
2181         Resource expected3 = new Resource(WorkflowType.VNF, "1234", false, expected1);
2182         Resource expected4 = new Resource(WorkflowType.VFMODULE, "5678", false, expected2);
2183         Resource result = workflowAction.extractResourceIdAndTypeFromUri(uri);
2184         assertEquals(expected1.getResourceId(), result.getResourceId());
2185         assertEquals(expected1.getResourceType(), result.getResourceType());
2186         result = workflowAction.extractResourceIdAndTypeFromUri(uri2);
2187         assertEquals(expected2.getResourceId(), result.getResourceId());
2188         assertEquals(expected2.getResourceType(), result.getResourceType());
2189         result = workflowAction.extractResourceIdAndTypeFromUri(uri3);
2190         assertEquals("Service", result.getResourceType().toString());
2191         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
2192         result = workflowAction.extractResourceIdAndTypeFromUri(uri4);
2193         assertEquals("Service", result.getResourceType().toString());
2194         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
2195         result = workflowAction.extractResourceIdAndTypeFromUri(uri5);
2196         assertEquals("Vnf", result.getResourceType().toString());
2197         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
2198         result = workflowAction.extractResourceIdAndTypeFromUri(uri6);
2199         assertEquals(expected3.getResourceId(), result.getResourceId());
2200         assertEquals(expected3.getResourceType(), result.getResourceType());
2201         result = workflowAction.extractResourceIdAndTypeFromUri(uri7);
2202         assertEquals(expected4.getResourceId(), result.getResourceId());
2203         assertEquals(expected4.getResourceType(), result.getResourceType());
2204         result = workflowAction.extractResourceIdAndTypeFromUri(uri8);
2205         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
2206         assertEquals("VfModule", result.getResourceType().toString());
2207
2208     }
2209
2210     @Test
2211     public void extractResourceIdAndTypeFromUriInvalidTypeTest() {
2212         this.expectedException.expect(IllegalArgumentException.class);
2213         this.expectedException.expectMessage(containsString("Uri could not be parsed. No type found."));
2214         workflowAction.extractResourceIdAndTypeFromUri("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace");
2215     }
2216
2217     @Test
2218     public void extractResourceIdAndTypeFromUriInvalidUriTest() {
2219         this.expectedException.expect(IllegalArgumentException.class);
2220         this.expectedException.expectMessage(containsString("Uri could not be parsed:"));
2221         workflowAction.extractResourceIdAndTypeFromUri("something that doesn't match anything");
2222     }
2223
2224     @Test
2225     public void extractResourceIdAndTypeFromUriResumeTest() {
2226         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
2227                 "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");
2228         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
2229     }
2230
2231     @Test
2232     public void extractResourceIdAndTypeFromUriReplaceResumeTest() {
2233         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
2234                 "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");
2235         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
2236     }
2237
2238     @Test
2239     public void extractResourceIdAndTypeFromUriDeActiveResumeTest() {
2240         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
2241                 "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");
2242         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
2243     }
2244
2245     @Test
2246     public void extractResourceIdAndTypeFromUriResumeIdOnly() {
2247         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
2248                 "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");
2249         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
2250     }
2251
2252     @Test
2253     public void isUriResumeTest() {
2254         assertTrue(workflowAction.isUriResume(
2255                 "http://localhost:9100/onap/so/infra/orchestrationRequests/v7/requests/2f8ab587-ef6a-4456-b7b2-d73f9363dabd/resume"));
2256         assertTrue(workflowAction.isUriResume(
2257                 "        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"));
2258
2259         assertFalse(workflowAction.isUriResume("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace"));
2260     }
2261
2262     @Test
2263     public void isRequestMacroServiceResumeTest() {
2264         ServiceInstance si = new ServiceInstance();
2265         when(bbSetupUtils.getAAIServiceInstanceById(anyString())).thenReturn(si);
2266         assertFalse(workflowAction.isRequestMacroServiceResume(false, WorkflowType.SERVICE, "createInstance", ""));
2267         assertTrue(workflowAction.isRequestMacroServiceResume(false, WorkflowType.SERVICE, "createInstance", "123"));
2268     }
2269
2270     @Test
2271     public void populateResourceIdsFromApiHandlerTest() {
2272         execution.setVariable("serviceInstanceId", "123");
2273         execution.setVariable("vnfId", "888");
2274         WorkflowResourceIds x = workflowAction.populateResourceIdsFromApiHandler(execution);
2275         assertEquals("123", x.getServiceInstanceId());
2276         assertEquals("888", x.getVnfId());
2277         assertNull(x.getVolumeGroupId());
2278     }
2279
2280     @Test
2281     public void handleRuntimeExceptionTest() {
2282         execution.setVariable("BPMN_javaExpMsg", "test runtime error message");
2283         execution.setVariable("testProcessKey", "testProcessKeyValue");
2284         try {
2285             workflowAction.handleRuntimeException(execution);
2286         } catch (BpmnError wfe) {
2287             assertEquals("MSOWorkflowException", wfe.getErrorCode());
2288         }
2289     }
2290
2291     private List<OrchestrationFlow> createFlowList(String... flowNames) {
2292         List<OrchestrationFlow> result = new ArrayList<>();
2293         int sequenceNumber = 1;
2294         for (String flowName : flowNames) {
2295             OrchestrationFlow orchFlow = new OrchestrationFlow();
2296             orchFlow.setFlowName(flowName);
2297             orchFlow.setSequenceNumber(sequenceNumber++);
2298             result.add(orchFlow);
2299         }
2300         return result;
2301     }
2302
2303     private void assertEqualsBulkFlowName(List<ExecuteBuildingBlock> ebbs, String... flowNames) {
2304         for (int i = 0; i < ebbs.size(); i++) {
2305             assertEquals(ebbs.get(i).getBuildingBlock().getBpmnFlowName(), flowNames[i]);
2306         }
2307         assertEquals(ebbs.size(), flowNames.length);
2308     }
2309
2310     private void initExecution(String gAction, String bpmnRequest, boolean isAlaCarte) {
2311         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
2312         execution.setVariable("requestAction", gAction);
2313         execution.setVariable("bpmnRequest", bpmnRequest);
2314         execution.setVariable("aLaCarte", isAlaCarte);
2315         execution.setVariable("apiVersion", "7");
2316     }
2317
2318     private String readBpmnRequestFromFile(String fileName) throws IOException {
2319         return new String(Files.readAllBytes(Paths.get("src/test/resources/__files/" + fileName)));
2320     }
2321
2322     private List<Resource> prepareListWithResources(boolean addPnf, boolean addPriorites) {
2323         List<Resource> resourceList = new ArrayList<>();
2324         Resource r1 = new Resource(WorkflowType.SERVICE, "3c40d244-808e-42ca-b09a-256d83d19d0a", false, null);
2325         resourceList.add(r1);
2326         Resource r2 = new Resource(WorkflowType.VNF, "ab153b6e-c364-44c0-bef6-1f2982117f04", false, r1);
2327         resourceList.add(r2);
2328         Resource r3 = new Resource(WorkflowType.VOLUMEGROUP, "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f", false, r2);
2329         resourceList.add(r3);
2330         Resource r4 = new Resource(WorkflowType.VFMODULE, "72d9d1cd-f46d-447a-abdb-451d6fb05fa8", false, r2);
2331         resourceList.add(r4);
2332         Resource r5 = new Resource(WorkflowType.VFMODULE, "3c40d244-808e-42ca-b09a-256d83d19d0a", false, r2);
2333         resourceList.add(r5);
2334         Resource r6 = new Resource(WorkflowType.VFMODULE, "da4d4327-fb7d-4311-ac7a-be7ba60cf969", false, r2);
2335         resourceList.add(r6);
2336         if (addPnf) {
2337             Resource r7 = new Resource(WorkflowType.PNF, "aa153b6e-c364-44c0-bef6-1f2982117f04", false, r1);
2338             resourceList.add(r7);
2339         }
2340         if (addPriorites) {
2341             r3.setProcessingPriority(2);
2342             r4.setProcessingPriority(1);
2343             r5.setProcessingPriority(4);
2344             r5.setBaseVfModule(true);
2345             r6.setProcessingPriority(3);
2346         }
2347         return resourceList;
2348     }
2349 }