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