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