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