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