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