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