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