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