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