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