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