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