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