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