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