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