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