c762c16d92b5702def1b2e4bac355196900a3454
[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();
1651         dataObj.setsIRequest(sIRequest);
1652         dataObj.setOrchFlows(orchFlows);
1653         dataObj.setRequestId(requestId);
1654         dataObj.setResourceKey(resourceKey);
1655         dataObj.setApiVersion(apiVersion);
1656         dataObj.setResourceId(resourceId);
1657         dataObj.setRequestAction(requestAction);
1658         dataObj.setaLaCarte(aLaCarte);
1659         dataObj.setVnfType(vnfType);
1660         dataObj.setWorkflowResourceIds(workflowResourceIds);
1661         dataObj.setRequestDetails(requestDetails);
1662         dataObj.setExecution(execution);
1663
1664         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1665         vnf.setVnfId("vnf0");
1666         vnf.setModelCustomizationId("modelCustomizationId");
1667         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
1668
1669         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1670         vfModule.setModelCustomizationId("modelCustomizationId");
1671         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(null);
1672
1673         SPY_workflowAction.getConfigBuildingBlocks(dataObj);
1674     }
1675
1676     @Test
1677     public void selectExecutionListALaCarteVfModuleNoFabricDeleteTest() throws Exception {
1678         String gAction = "deleteInstance";
1679         String resource = "VfModule";
1680         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1681         execution.setVariable("requestAction", gAction);
1682         String bpmnRequest =
1683                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1684         execution.setVariable("bpmnRequest", bpmnRequest);
1685         execution.setVariable("aLaCarte", true);
1686         execution.setVariable("apiVersion", "7");
1687         execution.setVariable("requestUri",
1688                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1689
1690         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1691         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1692                 "UnassignVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB");
1693         northBoundRequest.setOrchestrationFlowList(orchFlows);
1694
1695         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1696                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1697
1698         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1699         vnf.setVnfId("vnf0");
1700         vnf.setModelCustomizationId("modelCustomizationId");
1701         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
1702
1703         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1704         vfModule.setModelCustomizationId("modelCustomizationId");
1705         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(vfModule);
1706
1707         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1708         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1709         vnfc.setModelInvariantId("modelInvariantId");
1710         vnfc.setVnfcName("testVnfcName");
1711         vnfcs.add(vnfc);
1712         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(anyObject(), anyObject(), anyObject(),
1713                 anyObject());
1714
1715         List<org.onap.aai.domain.yang.Configuration> configurations =
1716                 new ArrayList<org.onap.aai.domain.yang.Configuration>();
1717         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
1718         doReturn(configurations).when(SPY_workflowAction).getRelatedResourcesInVnfc(anyObject(), anyObject(),
1719                 anyObject());
1720
1721         doReturn("testName").when(SPY_workflowAction).getVnfcNameForConfiguration(anyObject());
1722
1723         SPY_workflowAction.selectExecutionList(execution);
1724         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1725         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleBB", "UnassignVfModuleBB");
1726     }
1727
1728     @Test
1729     public void selectExecutionListMacroResumeTest() throws Exception {
1730         String gAction = "createInstance";
1731         String resource = "Service";
1732         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1733         execution.setVariable("requestAction", gAction);
1734         String bpmnRequest =
1735                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
1736         execution.setVariable("bpmnRequest", bpmnRequest);
1737         execution.setVariable("aLaCarte", false);
1738         execution.setVariable("apiVersion", "7");
1739         execution.setVariable("requestUri", "v6/serviceInstances/123");
1740
1741         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1742         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
1743         northBoundRequest.setOrchestrationFlowList(orchFlows);
1744
1745         Service service = new Service();
1746         service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
1747
1748         ServiceInstance si = new ServiceInstance();
1749
1750         when(bbSetupUtils.getAAIServiceInstanceById("123")).thenReturn(si);
1751         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
1752
1753         String flowsToExecuteString =
1754                 "[{\"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\"}}]";
1755         ObjectMapper om = new ObjectMapper();
1756         List<ExecuteBuildingBlock> flowsToExecute = null;
1757         try {
1758             ExecuteBuildingBlock[] asArray = om.readValue(flowsToExecuteString, ExecuteBuildingBlock[].class);
1759             flowsToExecute = Arrays.asList(asArray);
1760         } catch (Exception e) {
1761             e.printStackTrace();
1762         }
1763
1764         when(bbSetupUtils.loadOriginalFlowExecutionPath(anyString())).thenReturn(flowsToExecute);
1765
1766         workflowAction.selectExecutionList(execution);
1767         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1768         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB");
1769     }
1770
1771     @Test
1772     public void getRelatedResourcesInVfModuleTest() throws Exception {
1773         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1774         vnfc.setModelInvariantId("modelInvariantId");
1775         vnfc.setVnfcName("testVnfcName");
1776
1777         String vfncPayload =
1778                 new String(Files.readAllBytes(Paths.get(RESOURCE_PATH + "/BuildingBlocks/vnfcResponse.json")));
1779         AAIResultWrapper vfncWrapper = new AAIResultWrapper(vfncPayload);
1780
1781         String configurationPayload =
1782                 new String(Files.readAllBytes(Paths.get(RESOURCE_PATH + "/BuildingBlocks/configurationResponse.json")));
1783         AAIResultWrapper configurationWrapper = new AAIResultWrapper(configurationPayload);
1784         List<AAIResultWrapper> configurationResultWrappers = new ArrayList<AAIResultWrapper>();
1785         configurationResultWrappers.add(configurationWrapper);
1786
1787         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.VNFC, vnfc.getVnfcName());
1788         when(bbSetupUtils.getAAIResourceDepthOne(uri)).thenReturn(vfncWrapper);
1789
1790         doReturn(configurationResultWrappers).when(SPY_workflowAction).getResultWrappersFromRelationships(anyObject(),
1791                 anyObject());
1792         List<org.onap.aai.domain.yang.Configuration> configurationsList = SPY_workflowAction.getRelatedResourcesInVnfc(
1793                 vnfc, org.onap.aai.domain.yang.Configuration.class, AAIObjectType.CONFIGURATION);
1794         assertEquals(1, configurationsList.size());
1795         assertEquals("testConfigurationId", configurationsList.get(0).getConfigurationId());
1796     }
1797
1798     /**
1799      * WorkflowActionBB Tests
1800      */
1801
1802     @Test
1803     public void pluralTest() {
1804         List<String> items = Arrays.asList("serviceInstances, Service", "vnfs, Vnf", "vfModules, VfModule",
1805                 "networks, Network", "invalidNames, invalidNames");
1806         items.forEach(item -> {
1807             String[] split = item.split(",");
1808             String type = split[0].trim();
1809             String expected = split[1].trim();
1810             assertThat(workflowAction.convertTypeFromPlural(type), equalTo(expected));
1811         });
1812     }
1813
1814     @Test
1815     public void sortExecutionPathByObjectForVlanTaggingCreateTest() throws Exception {
1816         List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
1817
1818         BuildingBlock bb = new BuildingBlock().setBpmnFlowName("AssignNetworkBB").setKey("0");
1819         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock();
1820         ebb.setBuildingBlock(bb);
1821         executeFlows.add(ebb);
1822
1823         BuildingBlock bb2 = new BuildingBlock().setBpmnFlowName("AssignNetworkBB").setKey("1");
1824         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock();
1825         ebb2.setBuildingBlock(bb2);
1826         executeFlows.add(ebb2);
1827
1828         BuildingBlock bb3 = new BuildingBlock().setBpmnFlowName("CreateNetworkBB").setKey("0");
1829         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock();
1830         ebb3.setBuildingBlock(bb3);
1831         executeFlows.add(ebb3);
1832
1833         BuildingBlock bb4 = new BuildingBlock().setBpmnFlowName("CreateNetworkBB").setKey("1");
1834         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock();
1835         ebb4.setBuildingBlock(bb4);
1836         executeFlows.add(ebb4);
1837
1838         BuildingBlock bb5 = new BuildingBlock().setBpmnFlowName("ActivateNetworkBB").setKey("0");
1839         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock();
1840         ebb5.setBuildingBlock(bb5);
1841         executeFlows.add(ebb5);
1842
1843         BuildingBlock bb6 = new BuildingBlock().setBpmnFlowName("ActivateNetworkBB").setKey("1");
1844         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock();
1845         ebb6.setBuildingBlock(bb6);
1846         executeFlows.add(ebb6);
1847
1848         List<ExecuteBuildingBlock> sorted =
1849                 workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows, "createInstance");
1850         assertEqualsBulkFlowName(sorted, "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB", "AssignNetworkBB",
1851                 "CreateNetworkBB", "ActivateNetworkBB");
1852     }
1853
1854     @Test
1855     public void sortExecutionPathByObjectForVlanTaggingDeleteTest() throws Exception {
1856         List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
1857
1858         BuildingBlock bb = new BuildingBlock().setBpmnFlowName("DeactivateNetworkBB").setKey("0");
1859         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock();
1860         ebb.setBuildingBlock(bb);
1861         executeFlows.add(ebb);
1862
1863         BuildingBlock bb2 = new BuildingBlock().setBpmnFlowName("DeactivateNetworkBB").setKey("1");
1864         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock();
1865         ebb2.setBuildingBlock(bb2);
1866         executeFlows.add(ebb2);
1867
1868         BuildingBlock bb3 = new BuildingBlock().setBpmnFlowName("DeleteNetworkBB").setKey("0");
1869         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock();
1870         ebb3.setBuildingBlock(bb3);
1871         executeFlows.add(ebb3);
1872
1873         BuildingBlock bb4 = new BuildingBlock().setBpmnFlowName("DeleteNetworkBB").setKey("1");
1874         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock();
1875         ebb4.setBuildingBlock(bb4);
1876         executeFlows.add(ebb4);
1877
1878         BuildingBlock bb5 = new BuildingBlock().setBpmnFlowName("UnassignNetworkBB").setKey("0");
1879         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock();
1880         ebb5.setBuildingBlock(bb5);
1881         executeFlows.add(ebb5);
1882
1883         BuildingBlock bb6 = new BuildingBlock().setBpmnFlowName("UnassignNetworkBB").setKey("1");
1884         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock();
1885         ebb6.setBuildingBlock(bb6);
1886         executeFlows.add(ebb6);
1887
1888         List<ExecuteBuildingBlock> sorted =
1889                 workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows, "deleteInstance");
1890         assertEqualsBulkFlowName(sorted, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
1891                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB");
1892     }
1893
1894     @Test
1895     public void queryNorthBoundRequestCatalogDbNestedTest() throws MalformedURLException {
1896         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1897         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
1898                 "VNF-Macro-Replace", "SDNOVnfHealthCheckBB", "AAIUnsetVnfInMaintBB");
1899         northBoundRequest.setOrchestrationFlowList(orchFlows);
1900         List<OrchestrationFlow> macroFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1901                 "DeactivateVnfBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB");
1902
1903         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner("replaceInstance",
1904                 "Vnf", false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1905         when(catalogDbClient.getOrchestrationFlowByAction("VNF-Macro-Replace")).thenReturn(macroFlows);
1906         List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "replaceInstance",
1907                 WorkflowType.VNF, false, "my-custom-cloud-owner");
1908         assertEquals(flows.get(0).getFlowName(), "AAICheckVnfInMaintBB");
1909         assertEquals(flows.get(1).getFlowName(), "AAISetVnfInMaintBB");
1910         assertEquals(flows.get(2).getFlowName(), "DeactivateVfModuleBB");
1911         assertEquals(flows.get(3).getFlowName(), "DeleteVfModuleBB");
1912         assertEquals(flows.get(4).getFlowName(), "DeactivateVnfBB");
1913         assertEquals(flows.get(5).getFlowName(), "CreateVfModuleBB");
1914         assertEquals(flows.get(6).getFlowName(), "ActivateVfModuleBB");
1915         assertEquals(flows.get(7).getFlowName(), "ActivateVnfBB");
1916         assertEquals(flows.get(8).getFlowName(), "SDNOVnfHealthCheckBB");
1917         assertEquals(flows.get(9).getFlowName(), "AAIUnsetVnfInMaintBB");
1918     }
1919
1920     @Test
1921     public void queryNorthBoundRequestCatalogDbTransportTest() throws MalformedURLException {
1922         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1923         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
1924         northBoundRequest.setOrchestrationFlowList(orchFlows);
1925         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwnerAndServiceType(
1926                 "createInstance", "Service", true, "my-custom-cloud-owner", "TRANSPORT")).thenReturn(northBoundRequest);
1927
1928         List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "createInstance",
1929                 WorkflowType.SERVICE, true, "my-custom-cloud-owner", "TRANSPORT");
1930         assertEquals(flows.get(0).getFlowName(), "AssignServiceInstanceBB");
1931     }
1932
1933     @Test
1934     public void extractResourceIdAndTypeFromUriTest() {
1935         String uri = "/v6/serviceInstances/123";
1936         String uri2 = "/v6/serviceInstances/123/vnfs/1234";
1937         String uri3 = "/v6/serviceInstances";
1938         String uri4 = "/v6/serviceInstances/assign";
1939         String uri5 = "'/v6/serviceInstances/123/vnfs";
1940         String uri6 = "/v6/serviceInstances/123/vnfs/1234/someAction";
1941         String uri7 = "/v6/serviceInstances/123/vnfs/1234/vfModules/5678/replace";
1942         String uri8 = "/v6/serviceInstances/123/vnfs/1234/vfModules/scaleOut";
1943         Resource expected1 = new Resource(WorkflowType.SERVICE, "123", true);
1944         Resource expected2 = new Resource(WorkflowType.VNF, "1234", false);
1945         Resource expected3 = new Resource(WorkflowType.VNF, "1234", false);
1946         Resource expected4 = new Resource(WorkflowType.VFMODULE, "5678", false);
1947         Resource result = workflowAction.extractResourceIdAndTypeFromUri(uri);
1948         assertEquals(expected1.getResourceId(), result.getResourceId());
1949         assertEquals(expected1.getResourceType(), result.getResourceType());
1950         result = workflowAction.extractResourceIdAndTypeFromUri(uri2);
1951         assertEquals(expected2.getResourceId(), result.getResourceId());
1952         assertEquals(expected2.getResourceType(), result.getResourceType());
1953         result = workflowAction.extractResourceIdAndTypeFromUri(uri3);
1954         assertEquals("Service", result.getResourceType().toString());
1955         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1956         result = workflowAction.extractResourceIdAndTypeFromUri(uri4);
1957         assertEquals("Service", result.getResourceType().toString());
1958         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1959         result = workflowAction.extractResourceIdAndTypeFromUri(uri5);
1960         assertEquals("Vnf", result.getResourceType().toString());
1961         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1962         result = workflowAction.extractResourceIdAndTypeFromUri(uri6);
1963         assertEquals(expected3.getResourceId(), result.getResourceId());
1964         assertEquals(expected3.getResourceType(), result.getResourceType());
1965         result = workflowAction.extractResourceIdAndTypeFromUri(uri7);
1966         assertEquals(expected4.getResourceId(), result.getResourceId());
1967         assertEquals(expected4.getResourceType(), result.getResourceType());
1968         result = workflowAction.extractResourceIdAndTypeFromUri(uri8);
1969         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1970         assertEquals("VfModule", result.getResourceType().toString());
1971
1972     }
1973
1974     @Test
1975     public void extractResourceIdAndTypeFromUriInvalidTypeTest() {
1976         this.expectedException.expect(IllegalArgumentException.class);
1977         this.expectedException.expectMessage(containsString("Uri could not be parsed. No type found."));
1978         workflowAction.extractResourceIdAndTypeFromUri("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace");
1979     }
1980
1981     @Test
1982     public void extractResourceIdAndTypeFromUriInvalidUriTest() {
1983         this.expectedException.expect(IllegalArgumentException.class);
1984         this.expectedException.expectMessage(containsString("Uri could not be parsed:"));
1985         workflowAction.extractResourceIdAndTypeFromUri("something that doesn't match anything");
1986     }
1987
1988     @Test
1989     public void extractResourceIdAndTypeFromUriResumeTest() {
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 extractResourceIdAndTypeFromUriReplaceResumeTest() {
1997         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
1998                 "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");
1999         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
2000     }
2001
2002     @Test
2003     public void extractResourceIdAndTypeFromUriDeActiveResumeTest() {
2004         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
2005                 "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");
2006         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
2007     }
2008
2009     @Test
2010     public void extractResourceIdAndTypeFromUriResumeIdOnly() {
2011         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
2012                 "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");
2013         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
2014     }
2015
2016     @Test
2017     public void isUriResumeTest() {
2018         assertTrue(workflowAction.isUriResume(
2019                 "http://localhost:9100/onap/so/infra/orchestrationRequests/v7/requests/2f8ab587-ef6a-4456-b7b2-d73f9363dabd/resume"));
2020         assertTrue(workflowAction.isUriResume(
2021                 "        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"));
2022
2023         assertFalse(workflowAction.isUriResume("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace"));
2024     }
2025
2026     @Test
2027     public void isRequestMacroServiceResumeTest() {
2028         ServiceInstance si = new ServiceInstance();
2029         when(bbSetupUtils.getAAIServiceInstanceById(anyString())).thenReturn(si);
2030         assertFalse(workflowAction.isRequestMacroServiceResume(false, WorkflowType.SERVICE, "createInstance", ""));
2031         assertTrue(workflowAction.isRequestMacroServiceResume(false, WorkflowType.SERVICE, "createInstance", "123"));
2032     }
2033
2034     @Test
2035     public void populateResourceIdsFromApiHandlerTest() {
2036         execution.setVariable("serviceInstanceId", "123");
2037         execution.setVariable("vnfId", "888");
2038         WorkflowResourceIds x = workflowAction.populateResourceIdsFromApiHandler(execution);
2039         assertEquals("123", x.getServiceInstanceId());
2040         assertEquals("888", x.getVnfId());
2041         assertNull(x.getVolumeGroupId());
2042     }
2043
2044     private RequestDetails setupRequestDetails(String globalSubscriberId, String subscriptionServiceType,
2045             String modelCustomizationId) {
2046         RequestDetails reqDetails = new RequestDetails();
2047         SubscriberInfo subInfo = new SubscriberInfo();
2048         subInfo.setGlobalSubscriberId(globalSubscriberId);
2049         reqDetails.setSubscriberInfo(subInfo);
2050         RequestParameters reqParams = new RequestParameters();
2051         reqParams.setSubscriptionServiceType(subscriptionServiceType);
2052         reqDetails.setRequestParameters(reqParams);
2053         ModelInfo modelInfo = new ModelInfo();
2054         modelInfo.setModelCustomizationId(modelCustomizationId);
2055         reqDetails.setModelInfo(modelInfo);
2056         return reqDetails;
2057     }
2058
2059     @Test
2060     public void validateResourceIdInAAIVnfTest() throws Exception {
2061         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2062         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2063         workflowResourceIds.setServiceInstanceId("siId123");
2064         // Vnf
2065         GenericVnf vnf = new GenericVnf();
2066         vnf.setVnfId("id123");
2067         vnf.setVnfName("vnfName123");
2068         vnf.setModelCustomizationId("1234567");
2069         Optional<GenericVnf> opVnf = Optional.of(vnf);
2070         GenericVnf vnf2 = new GenericVnf();
2071         vnf2.setVnfId("id123");
2072         vnf2.setVnfName("vnfName222");
2073         vnf2.setModelCustomizationId("222");
2074         Optional<GenericVnf> opVnf2 = Optional.of(vnf2);
2075         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf);
2076         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName222")).thenReturn(opVnf2);
2077         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "111111")).thenReturn(Optional.empty());
2078         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName123", reqDetails,
2079                 workflowResourceIds);
2080         assertEquals("id123", id);
2081         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "111111", reqDetails,
2082                 workflowResourceIds);
2083         assertEquals("generatedId123", id2);
2084
2085         this.expectedException.expect(DuplicateNameException.class);
2086         this.expectedException.expectMessage(containsString(
2087                 "generic-vnf with name (vnfName222), same parent and different customization id (222) already exists. The name must be unique."));
2088         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName222", reqDetails,
2089                 workflowResourceIds);
2090     }
2091
2092     @Test
2093     public void validateResourceIdInAAIVnfNotGloballyUniqueTest() throws Exception {
2094         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2095         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2096         workflowResourceIds.setServiceInstanceId("siId123");
2097
2098         // Vnf
2099         GenericVnfs genericVnfs = new GenericVnfs();
2100         GenericVnf vnf3 = new GenericVnf();
2101         vnf3.setVnfId("id123");
2102         vnf3.setVnfName("vnfName333");
2103         genericVnfs.getGenericVnf().add(vnf3);
2104         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName333")).thenReturn(Optional.empty());
2105         when(bbSetupUtils.getAAIVnfsGloballyByName("vnfName333")).thenReturn(genericVnfs);
2106
2107         this.expectedException.expect(DuplicateNameException.class);
2108         this.expectedException.expectMessage(containsString(
2109                 "generic-vnf with name (vnfName333) id (id123) and different parent relationship already exists. The name must be unique."));
2110         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName333", reqDetails,
2111                 workflowResourceIds);
2112     }
2113
2114     @Test
2115     public void validateResourceIdInAAINetworkTest() throws Exception {
2116         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2117         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2118         workflowResourceIds.setServiceInstanceId("siId123");
2119
2120         // Network
2121         L3Network network = new L3Network();
2122         network.setNetworkId("id123");
2123         network.setNetworkName("name123");
2124         network.setModelCustomizationId("1234567");
2125         workflowResourceIds.setServiceInstanceId("siId123");
2126         Optional<L3Network> opNetwork = Optional.of(network);
2127         L3Network network2 = new L3Network();
2128         network2.setNetworkId("id123");
2129         network2.setNetworkName("networkName222");
2130         network2.setModelCustomizationId("222");
2131         Optional<L3Network> opNetwork2 = Optional.of(network2);
2132         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")).thenReturn(opNetwork);
2133         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "networkName222"))
2134                 .thenReturn(opNetwork2);
2135         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "111111")).thenReturn(Optional.empty());
2136         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "name123",
2137                 reqDetails, workflowResourceIds);
2138         assertEquals("id123", id);
2139         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "111111",
2140                 reqDetails, workflowResourceIds);
2141         assertEquals("generatedId123", id2);
2142
2143         this.expectedException.expect(DuplicateNameException.class);
2144         this.expectedException.expectMessage(containsString(
2145                 "l3Network with name (networkName222), same parent and different customization id (222) already exists. The name must be unique."));
2146         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "networkName222", reqDetails,
2147                 workflowResourceIds);
2148     }
2149
2150     @Test
2151     public void validateNetworkResourceNameExistsInAAITest() throws Exception {
2152         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2153         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2154         workflowResourceIds.setServiceInstanceId("siId123");
2155
2156         // Network
2157         L3Network network = new L3Network();
2158         network.setNetworkId("id123");
2159         network.setNetworkName("name123");
2160         network.setModelCustomizationId("1234567");
2161         workflowResourceIds.setServiceInstanceId("siId123");
2162
2163         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("networkName333", "111111"))
2164                 .thenReturn(Optional.empty());
2165         when(bbSetupUtils.existsAAINetworksGloballyByName("networkName333")).thenReturn(true);
2166
2167         this.expectedException.expect(DuplicateNameException.class);
2168         this.expectedException.expectMessage(containsString(
2169                 "l3Network with name (networkName333) id (siId123) and different parent relationship already exists. The name must be unique."));
2170         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "networkName333", reqDetails,
2171                 workflowResourceIds);
2172     }
2173
2174     @Test
2175     public void validateResourceIdInAAIVfModuleTest() throws Exception {
2176         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2177         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2178         workflowResourceIds.setServiceInstanceId("siId123");
2179
2180         GenericVnf vnf = new GenericVnf();
2181         vnf.setVnfId("id123");
2182         vnf.setVnfName("vnfName123");
2183         vnf.setModelCustomizationId("222");
2184
2185         // VfModule
2186         VfModules vfModules = new VfModules();
2187         VfModule vfModule = new VfModule();
2188         vfModule.setVfModuleId("id123");
2189         vfModule.setVfModuleName("name123");
2190         vfModule.setModelCustomizationId("1234567");
2191         vfModules.getVfModule().add(vfModule);
2192         vnf.setVfModules(vfModules);
2193         workflowResourceIds.setVnfId("id123");
2194         when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf);
2195         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "name123",
2196                 reqDetails, workflowResourceIds);
2197         assertEquals("id123", id);
2198
2199         GenericVnf vnf1 = new GenericVnf();
2200         VfModules vfModules2 = new VfModules();
2201         VfModule vfModule2 = new VfModule();
2202         vfModule2.setVfModuleId("id123");
2203         vfModule2.setVfModuleName("vFModName222");
2204         vfModule2.setModelCustomizationId("222");
2205         vfModules2.getVfModule().add(vfModule2);
2206         vnf1.setVfModules(vfModules2);
2207         workflowResourceIds.setVnfId("id111");
2208         when(bbSetupUtils.getAAIGenericVnf("id111")).thenReturn(vnf1);
2209         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "111111",
2210                 reqDetails, workflowResourceIds);
2211         assertEquals("generatedId123", id2);
2212
2213         this.expectedException.expect(DuplicateNameException.class);
2214         this.expectedException.expectMessage(containsString(
2215                 "vfModule with name (vFModName222), same parent and different customization id (1234567) already exists. The name must be unique."));
2216         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "vFModName222", reqDetails,
2217                 workflowResourceIds);
2218     }
2219
2220     @Test
2221     public void validateResourceIdInAAIVfModuleNotGloballyUniqueTest() throws Exception {
2222         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2223         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2224         workflowResourceIds.setVnfId("id111");
2225
2226         GenericVnf vnf1 = new GenericVnf();
2227         workflowResourceIds.setVnfId("id111");
2228         when(bbSetupUtils.getAAIGenericVnf("id111")).thenReturn(vnf1);
2229
2230         when(bbSetupUtils.existsAAIVfModuleGloballyByName("vFModName333")).thenReturn(true);
2231         this.expectedException.expect(DuplicateNameException.class);
2232         this.expectedException.expectMessage(
2233                 containsString("vfModule with name vFModName333 already exists. The name must be unique."));
2234         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "vFModName333", reqDetails,
2235                 workflowResourceIds);
2236     }
2237
2238     @Test
2239     public void validateResourceIdInAAIVolumeGroupTest() throws Exception {
2240         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2241         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2242         workflowResourceIds.setServiceInstanceId("siId123");
2243
2244         GenericVnf vnf = new GenericVnf();
2245         vnf.setVnfId("id123");
2246         vnf.setVnfName("vnfName123");
2247         vnf.setModelCustomizationId("1234567");
2248
2249         GenericVnf vnf2 = new GenericVnf();
2250         vnf2.setVnfId("id123");
2251         vnf2.setVnfName("vnfName123");
2252         vnf2.setModelCustomizationId("222");
2253
2254         // VolumeGroup
2255         VolumeGroup volumeGroup = new VolumeGroup();
2256         volumeGroup.setVolumeGroupId("id123");
2257         volumeGroup.setVolumeGroupName("name123");
2258         volumeGroup.setVfModuleModelCustomizationId("1234567");
2259         workflowResourceIds.setVnfId("id123");
2260         Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
2261
2262         workflowResourceIds.setVnfId("id123");
2263
2264         when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf);
2265         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "name123")).thenReturn(opVolumeGroup);
2266         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123",
2267                 reqDetails, workflowResourceIds);
2268         assertEquals("id123", id);
2269
2270         when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf2);
2271         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVfModule("id123", "id123", "111111"))
2272                 .thenReturn(opVolumeGroup);
2273
2274         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "111111")).thenReturn(Optional.empty());
2275         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "111111",
2276                 reqDetails, workflowResourceIds);
2277         assertEquals("generatedId123", id2);
2278     }
2279
2280     @Test
2281     public void validatesourceIdInAAIVolumeGroupNotGloballyUniqueTest() throws Exception {
2282         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2283         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2284         workflowResourceIds.setVnfId("id123");
2285         GenericVnf vnf = new GenericVnf();
2286         vnf.setVnfId("id123");
2287         when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf);
2288         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "testVolumeGroup")).thenReturn(Optional.empty());
2289
2290         when(bbSetupUtils.existsAAIVolumeGroupGloballyByName("testVolumeGroup")).thenReturn(true);
2291         this.expectedException.expect(DuplicateNameException.class);
2292         this.expectedException.expectMessage(
2293                 containsString("volumeGroup with name testVolumeGroup already exists. The name must be unique."));
2294         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "testVolumeGroup",
2295                 reqDetails, workflowResourceIds);
2296     }
2297
2298     @Test
2299     public void validateResourceIdInAAIConfigurationTest() throws Exception {
2300         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2301         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2302         workflowResourceIds.setServiceInstanceId("siId123");
2303
2304         // Configuration
2305         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
2306         configuration.setConfigurationId("id123");
2307         configuration.setConfigurationName("name123");
2308         configuration.setModelCustomizationId("1234567");
2309         Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration);
2310
2311         org.onap.aai.domain.yang.Configuration configuration2 = new org.onap.aai.domain.yang.Configuration();
2312         configuration2.setConfigurationId("id123");
2313         configuration2.setConfigurationName("name123");
2314         configuration2.setModelCustomizationId("222");
2315         Optional<org.onap.aai.domain.yang.Configuration> opConfiguration2 = Optional.of(configuration2);
2316
2317         workflowResourceIds.setVnfId("id123");
2318
2319         when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
2320                 .thenReturn(opConfiguration);
2321         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "name123",
2322                 reqDetails, workflowResourceIds);
2323         assertEquals("id123", id);
2324
2325         when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "111111"))
2326                 .thenReturn(Optional.empty());
2327         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "111111",
2328                 reqDetails, workflowResourceIds);
2329         assertEquals("generatedId123", id2);
2330
2331         when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name222"))
2332                 .thenReturn(opConfiguration2);
2333         this.expectedException.expect(DuplicateNameException.class);
2334         this.expectedException.expectMessage(containsString(
2335                 "configuration with name (name222), same parent and different customization id (id123) already exists. The name must be unique."));
2336         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "name222", reqDetails,
2337                 workflowResourceIds);
2338     }
2339
2340     @Test
2341     public void validateResourceIdInAAIConfigurationNotGloballyUniqueTest() throws Exception {
2342         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2343         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2344         workflowResourceIds.setServiceInstanceId("siId123");
2345
2346         when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "testConfig"))
2347                 .thenReturn(Optional.empty());
2348         when(bbSetupUtils.existsAAIConfigurationGloballyByName("testConfig")).thenReturn(true);
2349         this.expectedException.expect(DuplicateNameException.class);
2350         this.expectedException.expectMessage(
2351                 containsString("configuration with name testConfig already exists. The name must be unique."));
2352         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "testConfig", reqDetails,
2353                 workflowResourceIds);
2354     }
2355
2356     @Test
2357     public void validateResourceIdInAAISITest() throws Exception {
2358         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2359         workflowResourceIds.setServiceInstanceId("siId123");
2360         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2361         reqDetails.getModelInfo().setModelVersionId("1234567");
2362
2363         ServiceInstance si = new ServiceInstance();
2364         si.setServiceInstanceId("siId123");
2365         si.setModelVersionId("1234567");
2366         ServiceInstances serviceInstances = new ServiceInstances();
2367         serviceInstances.getServiceInstance().add(si);
2368         Optional<ServiceInstance> siOp = Optional.of(si);
2369         ServiceInstance si2 = new ServiceInstance();
2370         si2.setServiceInstanceId("siId222");
2371         si2.setModelVersionId("22222");
2372         si2.setServiceInstanceName("siName222");
2373         Optional<ServiceInstance> siOp2 = Optional.of(si2);
2374         ServiceInstances serviceInstances2 = new ServiceInstances();
2375         serviceInstances2.getServiceInstance().add(si2);
2376
2377         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp);
2378         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName222")).thenReturn(siOp2);
2379         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "111111"))
2380                 .thenReturn(Optional.empty());
2381
2382         when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances);
2383         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123",
2384                 reqDetails, workflowResourceIds);
2385         assertEquals("siId123", id);
2386         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "111111",
2387                 reqDetails, workflowResourceIds);
2388         assertEquals("generatedId123", id2);
2389
2390         when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName222")).thenReturn(serviceInstances2);
2391         this.expectedException.expect(DuplicateNameException.class);
2392         this.expectedException.expectMessage(containsString(
2393                 "serviceInstance with name (siName222) and different version id (1234567) already exists. The name must be unique."));
2394         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName222", reqDetails,
2395                 workflowResourceIds);
2396     }
2397
2398     @Test
2399     public void validateResourceIdInAAIMultipleSITest() throws Exception {
2400         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2401         workflowResourceIds.setServiceInstanceId("siId123");
2402         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2403         reqDetails.getModelInfo().setModelVersionId("1234567");
2404
2405         ServiceInstance si = new ServiceInstance();
2406         si.setServiceInstanceId("siId123");
2407         si.setModelVersionId("1234567");
2408         ServiceInstances serviceInstances = new ServiceInstances();
2409         serviceInstances.getServiceInstance().add(si);
2410
2411         ServiceInstance si2 = new ServiceInstance();
2412         si2.setServiceInstanceId("siId222");
2413         si2.setModelVersionId("22222");
2414         si2.setServiceInstanceName("siName222");
2415         serviceInstances.getServiceInstance().add(si2);
2416
2417         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siId123"))
2418                 .thenReturn(Optional.empty());
2419
2420         when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances);
2421
2422         this.expectedException.expect(DuplicateNameException.class);
2423         this.expectedException.expectMessage(containsString(
2424                 "serviceInstance with name (siName123) and multiple combination of model-version-id + service-type + global-customer-id already exists. The name must be unique."));
2425         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails,
2426                 workflowResourceIds);
2427     }
2428
2429     @Test
2430     public void validateResourceIdInAAISIExistsTest() throws Exception {
2431         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2432         workflowResourceIds.setServiceInstanceId("siId123");
2433         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2434         reqDetails.getModelInfo().setModelVersionId("1234567");
2435
2436         ServiceInstance si = new ServiceInstance();
2437         si.setServiceInstanceId("siId123");
2438         si.setModelVersionId("1234567");
2439         ServiceInstances serviceInstances = new ServiceInstances();
2440         serviceInstances.getServiceInstance().add(si);
2441
2442         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siId123"))
2443                 .thenReturn(Optional.empty());
2444
2445         when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances);
2446
2447         Map<String, String> uriKeys = new HashMap<>();
2448         uriKeys.put(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId, "globalCustomerId");
2449         uriKeys.put(AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType, "serviceType");
2450
2451         when(bbSetupUtils.getURIKeysFromServiceInstance("siId123")).thenReturn(uriKeys);
2452
2453         this.expectedException.expect(DuplicateNameException.class);
2454         this.expectedException.expectMessage(containsString(
2455                 "serviceInstance with name (siName123) and global-customer-id (globalCustomerId), service-type (serviceType), model-version-id (1234567) already exists. The name must be unique."));
2456         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails,
2457                 workflowResourceIds);
2458     }
2459
2460     @Test
2461     public void validateServiceResourceIdInAAINoDupTest() throws Exception {
2462         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2463         reqDetails.getModelInfo().setModelVersionId("1234567");
2464         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123"))
2465                 .thenReturn(Optional.empty());
2466         when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(null);
2467         String id = workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails);
2468         assertEquals("generatedId123", id);
2469     }
2470
2471     @Test
2472     public void validateServiceResourceIdInAAISameModelVersionId() throws Exception {
2473         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2474         reqDetails.getModelInfo().setModelVersionId("1234567");
2475
2476         ServiceInstance si = new ServiceInstance();
2477         si.setServiceInstanceId("siId123");
2478         si.setModelVersionId("1234567");
2479         Optional<ServiceInstance> siOp = Optional.of(si);
2480
2481         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp);
2482         String id = workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails);
2483         assertEquals("siId123", id);
2484     }
2485
2486     @Test
2487     public void validateServiceResourceIdInAAIDifferentModelVersionId() throws Exception {
2488         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2489         reqDetails.getModelInfo().setModelVersionId("1234567");
2490
2491         ServiceInstance si = new ServiceInstance();
2492         si.setServiceInstanceId("siId123");
2493         si.setModelVersionId("9999999");
2494         ServiceInstances serviceInstances = new ServiceInstances();
2495         serviceInstances.getServiceInstance().add(si);
2496         Optional<ServiceInstance> siOp = Optional.of(si);
2497
2498         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp);
2499
2500         this.expectedException.expect(DuplicateNameException.class);
2501         this.expectedException.expectMessage(containsString(
2502                 "serviceInstance with name (siName123) and different version id (1234567) already exists. The name must be unique."));
2503
2504         String id = workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails);
2505         assertEquals("siId123", id);
2506     }
2507
2508     @Test
2509     public void validateServiceResourceIdInAAIDuplicateNameTest() throws Exception {
2510
2511         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2512         reqDetails.getModelInfo().setModelVersionId("1234567");
2513
2514         ServiceInstance si = new ServiceInstance();
2515         si.setServiceInstanceId("siId123");
2516         si.setModelVersionId("1234567");
2517
2518         ServiceInstances serviceInstances = new ServiceInstances();
2519         serviceInstances.getServiceInstance().add(si);
2520
2521         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName"))
2522                 .thenReturn(Optional.empty());
2523         when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName")).thenReturn(serviceInstances);
2524
2525         this.expectedException.expect(DuplicateNameException.class);
2526         this.expectedException.expectMessage(containsString(
2527                 "serviceInstance with name (siName) and global-customer-id (null), service-type (null), model-version-id (1234567) already exists. The name must be unique."));
2528
2529         workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName", reqDetails);
2530     }
2531
2532     @Test
2533     public void validateServiceResourceIdInAAIDuplicateNameMultipleTest() throws Exception {
2534
2535         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2536         reqDetails.getModelInfo().setModelVersionId("1234567");
2537
2538         ServiceInstance si = new ServiceInstance();
2539         si.setServiceInstanceId("siId123");
2540         si.setModelVersionId("1234567");
2541
2542         ServiceInstance si2 = new ServiceInstance();
2543         si2.setServiceInstanceId("siId222");
2544         si2.setModelVersionId("22222");
2545         si2.setServiceInstanceName("siName222");
2546
2547         ServiceInstances serviceInstances = new ServiceInstances();
2548         serviceInstances.getServiceInstance().add(si);
2549         serviceInstances.getServiceInstance().add(si2);
2550
2551         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName"))
2552                 .thenReturn(Optional.empty());
2553         when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName")).thenReturn(serviceInstances);
2554
2555         this.expectedException.expect(DuplicateNameException.class);
2556         this.expectedException.expectMessage(containsString(
2557                 "serviceInstance with name (siName) and multiple combination of model-version-id + service-type + global-customer-id already exists. The name must be unique."));
2558
2559         workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName", reqDetails);
2560     }
2561
2562     @Test
2563     public void validateNetworkResourceIdInAAITest() throws Exception {
2564         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2565         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2566         workflowResourceIds.setServiceInstanceId("siId123");
2567
2568         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123"))
2569                 .thenReturn(Optional.empty());
2570         when(bbSetupUtils.existsAAINetworksGloballyByName("name123")).thenReturn(false);
2571
2572         String id = workflowAction.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails,
2573                 workflowResourceIds);
2574         assertEquals("generatedId123", id);
2575     }
2576
2577     @Test
2578     public void validateNetworkResourceIdInAAISameModelCustIdTest() throws Exception {
2579         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2580         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2581         workflowResourceIds.setServiceInstanceId("siId123");
2582
2583         L3Network network = new L3Network();
2584         network.setNetworkId("id123");
2585         network.setNetworkName("name123");
2586         network.setModelCustomizationId("1234567");
2587         Optional<L3Network> opNetwork = Optional.of(network);
2588
2589         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")).thenReturn(opNetwork);
2590
2591         String id = workflowAction.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails,
2592                 workflowResourceIds);
2593         assertEquals("id123", id);
2594     }
2595
2596     @Test
2597     public void validateNetworkResourceIdInAAIDuplicateNameTest() throws Exception {
2598         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2599         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2600         workflowResourceIds.setServiceInstanceId("siId123");
2601
2602         L3Network network = new L3Network();
2603         network.setNetworkId("id123");
2604         network.setNetworkName("name123");
2605         network.setModelCustomizationId("9999999");
2606         Optional<L3Network> opNetwork = Optional.of(network);
2607
2608         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")).thenReturn(opNetwork);
2609
2610         this.expectedException.expect(DuplicateNameException.class);
2611         this.expectedException.expectMessage(containsString(
2612                 "l3Network with name (name123), same parent and different customization id (9999999) already exists. The name must be unique."));
2613
2614         workflowAction.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
2615     }
2616
2617     @Test
2618     public void validateNetworkResourceIdInAAINotGloballyUniqueTest() throws Exception {
2619         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2620         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2621         workflowResourceIds.setServiceInstanceId("siId123");
2622
2623         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123"))
2624                 .thenReturn(Optional.empty());
2625         when(bbSetupUtils.existsAAINetworksGloballyByName("name123")).thenReturn(true);
2626
2627         this.expectedException.expect(DuplicateNameException.class);
2628         this.expectedException.expectMessage(containsString(
2629                 "l3Network with name (name123) id (siId123) and different parent relationship already exists. The name must be unique."));
2630
2631         workflowAction.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
2632     }
2633
2634     @Test
2635     public void validateVnfResourceIdInAAITest() throws Exception {
2636         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2637         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2638         workflowResourceIds.setServiceInstanceId("siId123");
2639         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(Optional.empty());
2640         String id = workflowAction.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails,
2641                 workflowResourceIds);
2642         assertEquals("generatedId123", id);
2643     }
2644
2645     @Test
2646     public void validateVnfResourceIdInAAISameModelCustomizationIdTest() throws Exception {
2647         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2648         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2649         workflowResourceIds.setServiceInstanceId("siId123");
2650
2651         GenericVnf vnf = new GenericVnf();
2652         vnf.setVnfId("id123");
2653         vnf.setVnfName("vnfName123");
2654         vnf.setModelCustomizationId("1234567");
2655         Optional<GenericVnf> opVnf = Optional.of(vnf);
2656
2657         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf);
2658         String id = workflowAction.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails,
2659                 workflowResourceIds);
2660         assertEquals("id123", id);
2661     }
2662
2663     @Test
2664     public void validateVnfResourceIdInAAIDiffModelCustomizationIdTest() throws Exception {
2665         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2666         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2667         workflowResourceIds.setServiceInstanceId("siId123");
2668
2669         GenericVnf vnf = new GenericVnf();
2670         vnf.setVnfId("id123");
2671         vnf.setVnfName("vnfName123");
2672         vnf.setModelCustomizationId("9999999");
2673         Optional<GenericVnf> opVnf = Optional.of(vnf);
2674
2675         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf);
2676
2677         this.expectedException.expect(DuplicateNameException.class);
2678         this.expectedException.expectMessage(containsString(
2679                 "generic-vnf with name (vnfName123), same parent and different customization id (9999999) already exists. The name must be unique."));
2680
2681         workflowAction.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, workflowResourceIds);
2682     }
2683
2684     @Test
2685     public void validateVnfResourceIdInAAINotGloballyUniqueTest() throws Exception {
2686         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2687         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2688         workflowResourceIds.setServiceInstanceId("siId123");
2689
2690
2691         GenericVnf vnf = new GenericVnf();
2692         vnf.setVnfId("id123");
2693         vnf.setVnfName("vnfName123");
2694         GenericVnfs genericVnfs = new GenericVnfs();
2695         genericVnfs.getGenericVnf().add(vnf);
2696
2697         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(Optional.empty());
2698         when(bbSetupUtils.getAAIVnfsGloballyByName("vnfName123")).thenReturn(genericVnfs);
2699
2700         this.expectedException.expect(DuplicateNameException.class);
2701         this.expectedException.expectMessage(containsString(
2702                 "generic-vnf with name (vnfName123) id (id123) and different parent relationship already exists. The name must be unique."));
2703
2704         workflowAction.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, workflowResourceIds);
2705     }
2706
2707     @Test
2708     public void validateVfModuleResourceIdTest() throws Exception {
2709         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2710         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2711         workflowResourceIds.setVnfId("vnfId123");
2712
2713         when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(null);
2714         when(bbSetupUtils.existsAAIVfModuleGloballyByName("name123")).thenReturn(false);
2715
2716         String id = workflowAction.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails,
2717                 workflowResourceIds);
2718         assertEquals("generatedId123", id);
2719     }
2720
2721     @Test
2722     public void validateVfModuleResourceIdSameModelCustIdTest() throws Exception {
2723         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2724         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2725         workflowResourceIds.setVnfId("vnfId123");
2726
2727         VfModules vfModules = new VfModules();
2728         VfModule vfModule = new VfModule();
2729         vfModule.setVfModuleId("id123");
2730         vfModule.setVfModuleName("name123");
2731         vfModule.setModelCustomizationId("1234567");
2732         vfModules.getVfModule().add(vfModule);
2733
2734         GenericVnf vnf = new GenericVnf();
2735         vnf.setVnfId("id123");
2736         vnf.setVnfName("vnfName123");
2737         vnf.setVfModules(vfModules);
2738
2739         when(bbSetupUtils.getAAIGenericVnf("vnfId123")).thenReturn(vnf);
2740
2741         String id = workflowAction.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails,
2742                 workflowResourceIds);
2743         assertEquals("id123", id);
2744     }
2745
2746     @Test
2747     public void validateVfModuleResourceIdDifferentModelCustIdTest() throws Exception {
2748         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2749         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2750         workflowResourceIds.setVnfId("vnfId123");
2751
2752         VfModules vfModules = new VfModules();
2753         VfModule vfModule = new VfModule();
2754         vfModule.setVfModuleId("id123");
2755         vfModule.setVfModuleName("name123");
2756         vfModule.setModelCustomizationId("9999999");
2757         vfModules.getVfModule().add(vfModule);
2758
2759         GenericVnf vnf = new GenericVnf();
2760         vnf.setVnfId("id123");
2761         vnf.setVnfName("vnfName123");
2762         vnf.setVfModules(vfModules);
2763
2764         when(bbSetupUtils.getAAIGenericVnf("vnfId123")).thenReturn(vnf);
2765
2766         this.expectedException.expect(DuplicateNameException.class);
2767         this.expectedException.expectMessage(containsString(
2768                 "vfModule with name (name123), same parent and different customization id (1234567) already exists. The name must be unique."));
2769
2770         workflowAction.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
2771
2772     }
2773
2774     @Test
2775     public void validateVfModuleResourceIdNotGloballyUniqueTest() throws Exception {
2776         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2777         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2778         workflowResourceIds.setVnfId("vnfId123");
2779
2780         when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(null);
2781         when(bbSetupUtils.existsAAIVfModuleGloballyByName("name123")).thenReturn(true);
2782
2783         this.expectedException.expect(DuplicateNameException.class);
2784         this.expectedException
2785                 .expectMessage(containsString("vfModule with name name123 already exists. The name must be unique."));
2786
2787         workflowAction.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
2788     }
2789
2790     @Test
2791     public void validateVolumeGroupResourceIdInAAITest() throws Exception {
2792         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2793         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2794         workflowResourceIds.setVnfId("vnfId123");
2795
2796         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "name123")).thenReturn(Optional.empty());
2797         when(bbSetupUtils.existsAAIVolumeGroupGloballyByName("name123")).thenReturn(false);
2798
2799         String id = workflowAction.validateVolumeGroupResourceIdInAAI("generatedId123", "name123", reqDetails,
2800                 workflowResourceIds);
2801         assertEquals("generatedId123", id);
2802     }
2803
2804     @Test
2805     public void validateVolumeGroupResourceIdInAAISameModelCustIdTest() 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("1234567");
2815
2816         Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
2817
2818         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(opVolumeGroup);
2819         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123",
2820                 reqDetails, workflowResourceIds);
2821
2822         assertEquals("id123", id);
2823     }
2824
2825     @Test
2826     public void validateVolumeGroupResourceIdInAAIDifferentModelCustIdTest() throws Exception {
2827         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2828         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2829         workflowResourceIds.setServiceInstanceId("siId123");
2830         workflowResourceIds.setVnfId("vnfId123");
2831
2832         VolumeGroup volumeGroup = new VolumeGroup();
2833         volumeGroup.setVolumeGroupId("id123");
2834         volumeGroup.setVolumeGroupName("name123");
2835         volumeGroup.setVfModuleModelCustomizationId("9999999");
2836
2837         Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
2838
2839         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(opVolumeGroup);
2840
2841         this.expectedException.expect(DuplicateNameException.class);
2842         this.expectedException.expectMessage(
2843                 containsString("volumeGroup with name name123 already exists. The name must be unique."));
2844
2845         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails,
2846                 workflowResourceIds);
2847     }
2848
2849     @Test
2850     public void validateVolumeGroupResourceIdInAAINotGloballyUniqueTest() throws Exception {
2851         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2852         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2853         workflowResourceIds.setVnfId("vnfId123");
2854
2855         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(Optional.empty());
2856         when(bbSetupUtils.existsAAIVolumeGroupGloballyByName("name123")).thenReturn(true);
2857
2858         this.expectedException.expect(DuplicateNameException.class);
2859         this.expectedException.expectMessage(
2860                 containsString("volumeGroup with name name123 already exists. The name must be unique."));
2861
2862         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails,
2863                 workflowResourceIds);
2864     }
2865
2866     @Test
2867     public void validateConfigurationResourceIdInAAITest() throws Exception {
2868         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2869         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2870         workflowResourceIds.setServiceInstanceId("siId123");
2871
2872         when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
2873                 .thenReturn(Optional.empty());
2874         when(bbSetupUtils.existsAAIConfigurationGloballyByName("name123")).thenReturn(false);
2875
2876         String id = workflowAction.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails,
2877                 workflowResourceIds);
2878         assertEquals("generatedId123", id);
2879     }
2880
2881     @Test
2882     public void validateConfigurationResourceIdInAAISameModelCustIdTest() 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("1234567");
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         String id = workflowAction.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails,
2898                 workflowResourceIds);
2899         assertEquals("id123", id);
2900     }
2901
2902     @Test
2903     public void validateConfigurationResourceIdInAAIDifferentModelCustIdTest() throws Exception {
2904         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2905         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2906         workflowResourceIds.setServiceInstanceId("siId123");
2907
2908         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
2909         configuration.setConfigurationId("id123");
2910         configuration.setConfigurationName("name123");
2911         configuration.setModelCustomizationId("9999999");
2912         Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration);
2913
2914         when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
2915                 .thenReturn(opConfiguration);
2916         when(bbSetupUtils.existsAAIConfigurationGloballyByName("name123")).thenReturn(false);
2917
2918         this.expectedException.expect(DuplicateNameException.class);
2919         this.expectedException.expectMessage(containsString(
2920                 "configuration with name (name123), same parent and different customization id (id123) already exists. The name must be unique."));
2921
2922         workflowAction.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails,
2923                 workflowResourceIds);
2924     }
2925
2926     @Test
2927     public void validateConfigurationResourceIdInAAINotGloballyUniqueTest() throws Exception {
2928         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
2929         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
2930         workflowResourceIds.setServiceInstanceId("siId123");
2931
2932         when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
2933                 .thenReturn(Optional.empty());
2934         when(bbSetupUtils.existsAAIConfigurationGloballyByName("name123")).thenReturn(true);
2935
2936         this.expectedException.expect(DuplicateNameException.class);
2937         this.expectedException.expectMessage(
2938                 containsString("configuration with name name123 already exists. The name must be unique."));
2939
2940         workflowAction.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails,
2941                 workflowResourceIds);
2942     }
2943
2944     @Test
2945     public void handleRuntimeExceptionTest() {
2946         execution.setVariable("BPMN_javaExpMsg", "test runtime error message");
2947         execution.setVariable("testProcessKey", "testProcessKeyValue");
2948         try {
2949             workflowAction.handleRuntimeException(execution);
2950         } catch (BpmnError wfe) {
2951             assertEquals("MSOWorkflowException", wfe.getErrorCode());
2952         }
2953     }
2954
2955     @Ignore
2956     @Test
2957     public void traverseCatalogDbServiceMultipleNetworkTest() throws IOException, VrfBondingServiceException {
2958         execution.setVariable("testProcessKey", "testProcessKeyValue");
2959         Service service = new Service();
2960         List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
2961         NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
2962         networkCust.setModelCustomizationUUID("123");
2963         networkCustomizations.add(networkCust);
2964         service.setNetworkCustomizations(networkCustomizations);
2965         NetworkCollectionResourceCustomization collectionResourceCustomization =
2966                 new NetworkCollectionResourceCustomization();
2967         collectionResourceCustomization.setModelCustomizationUUID("123");
2968         CollectionResource collectionResource = new CollectionResource();
2969         collectionResource.setToscaNodeType("NetworkCollection");
2970         InstanceGroup instanceGroup = new InstanceGroup();
2971         List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
2972         CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization =
2973                 new CollectionResourceInstanceGroupCustomization();
2974         collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
2975         collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
2976         instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
2977         collectionResource.setInstanceGroup(instanceGroup);
2978         collectionResourceCustomization.setCollectionResource(collectionResource);;
2979         service.setModelUUID("abc");
2980         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
2981         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
2982         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
2983         doReturn(collectionResourceCustomization).when(catalogDbClient)
2984                 .getNetworkCollectionResourceCustomizationByID("123");
2985         String bpmnRequest = new String(Files
2986                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
2987         ObjectMapper mapper = new ObjectMapper();
2988         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
2989         List<Resource> resourceCounter = new ArrayList<>();
2990         thrown.expect(BpmnError.class);
2991         List<Pair<WorkflowType, String>> aaiResourceIds = new ArrayList<>();
2992         workflowAction.traverseCatalogDbService(execution, sIRequest, resourceCounter, aaiResourceIds);
2993     }
2994
2995     @Test
2996     public void sortVfModulesByBaseFirstTest() {
2997         List<Resource> resources = new ArrayList<>();
2998         Resource resource1 = new Resource(WorkflowType.VFMODULE, "111", false);
2999         resource1.setBaseVfModule(false);
3000         resources.add(resource1);
3001         Resource resource2 = new Resource(WorkflowType.VFMODULE, "222", false);
3002         resource2.setBaseVfModule(false);
3003         resources.add(resource2);
3004         Resource resource3 = new Resource(WorkflowType.VFMODULE, "333", false);
3005         resource3.setBaseVfModule(true);
3006         resources.add(resource3);
3007         List<Resource> result = workflowAction.sortVfModulesByBaseFirst(resources);
3008         assertEquals("333", result.get(0).getResourceId());
3009         assertEquals("222", result.get(1).getResourceId());
3010         assertEquals("111", result.get(2).getResourceId());
3011     }
3012
3013     @Test
3014     public void sortVfModulesByBaseLastTest() {
3015         List<Resource> resources = new ArrayList<>();
3016         Resource resource1 = new Resource(WorkflowType.VFMODULE, "111", false);
3017         resource1.setBaseVfModule(true);
3018         resources.add(resource1);
3019         Resource resource2 = new Resource(WorkflowType.VFMODULE, "222", false);
3020         resource2.setBaseVfModule(false);
3021         resources.add(resource2);
3022         Resource resource3 = new Resource(WorkflowType.VFMODULE, "333", false);
3023         resource3.setBaseVfModule(false);
3024         resources.add(resource3);
3025         List<Resource> result = workflowAction.sortVfModulesByBaseLast(resources);
3026         assertEquals("333", result.get(0).getResourceId());
3027         assertEquals("222", result.get(1).getResourceId());
3028         assertEquals("111", result.get(2).getResourceId());
3029     }
3030
3031     @Test
3032     public void findCatalogNetworkCollectionTest() {
3033         Service service = new Service();
3034         NetworkCollectionResourceCustomization networkCustomization = new NetworkCollectionResourceCustomization();
3035         networkCustomization.setModelCustomizationUUID("123");
3036         service.getCollectionResourceCustomizations().add(networkCustomization);
3037         doReturn(networkCustomization).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
3038         CollectionResourceCustomization customization = workflowAction.findCatalogNetworkCollection(execution, service);
3039         assertNotNull(customization);
3040     }
3041
3042     @Test
3043     public void findCatalogNetworkCollectionEmptyTest() {
3044         Service service = new Service();
3045         NetworkCollectionResourceCustomization networkCustomization = new NetworkCollectionResourceCustomization();
3046         networkCustomization.setModelCustomizationUUID("123");
3047         service.getCollectionResourceCustomizations().add(networkCustomization);
3048         CollectionResourceCustomization customization = workflowAction.findCatalogNetworkCollection(execution, service);
3049         assertNull(customization);
3050     }
3051
3052     @Test
3053     public void findCatalogNetworkCollectionMoreThanOneTest() {
3054         Service service = new Service();
3055         NetworkCollectionResourceCustomization networkCustomization1 = new NetworkCollectionResourceCustomization();
3056         networkCustomization1.setModelCustomizationUUID("123");
3057         NetworkCollectionResourceCustomization networkCustomization2 = new NetworkCollectionResourceCustomization();
3058         networkCustomization2.setModelCustomizationUUID("321");
3059         service.getCollectionResourceCustomizations().add(networkCustomization1);
3060         service.getCollectionResourceCustomizations().add(networkCustomization2);
3061         doReturn(networkCustomization1).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
3062         doReturn(networkCustomization2).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("321");
3063         workflowAction.findCatalogNetworkCollection(execution, service);
3064         assertEquals("Found multiple Network Collections in the Service model, only one per Service is supported.",
3065                 execution.getVariable("WorkflowActionErrorMessage"));
3066     }
3067
3068     @Test
3069     public void verifyLackOfNullPointerExceptionForNullResource() {
3070         ExecuteBuildingBlock result = null;
3071         try {
3072             result = workflowAction.buildExecuteBuildingBlock(new OrchestrationFlow(), null, null, null, null, null,
3073                     false, null, null, null, false, null, null, true);
3074         } catch (NullPointerException e) {
3075             fail("NullPointerException should not be thrown when 'resource' is null");
3076         }
3077         assertNotNull(result);
3078     }
3079
3080     @Test
3081     public void traverseAAIServiceTest() {
3082         List<Resource> resourceCounter = new ArrayList<>();
3083         String resourceId = "si0";
3084         List<Pair<WorkflowType, String>> aaiResourceIds = new ArrayList<>();
3085
3086         ServiceInstance serviceInstanceAAI = new ServiceInstance();
3087         serviceInstanceAAI.setServiceInstanceId(resourceId);
3088
3089         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstance = setServiceInstance();
3090         setGenericVnf();
3091         setVfModule(true);
3092         setVolumeGroup();
3093         setL3Network();
3094         setCollection();
3095         setConfiguration();
3096
3097         Configuration config = new Configuration();
3098         config.setConfigurationId("testConfigurationId2");
3099         serviceInstance.getConfigurations().add(config);
3100
3101         Relationship relationship1 = new Relationship();
3102         relationship1.setRelatedTo("vnfc");
3103         RelationshipList relationshipList1 = new RelationshipList();
3104         relationshipList1.getRelationship().add(relationship1);
3105
3106         Relationship relationship2 = new Relationship();
3107         relationship2.setRelatedTo("vpn-binding");
3108         RelationshipList relationshipList2 = new RelationshipList();
3109         relationshipList2.getRelationship().add(relationship2);
3110
3111         org.onap.aai.domain.yang.Configuration aaiConfiguration1 = new org.onap.aai.domain.yang.Configuration();
3112         aaiConfiguration1.setConfigurationId("testConfigurationId");
3113         aaiConfiguration1.setRelationshipList(relationshipList1);
3114
3115         org.onap.aai.domain.yang.Configuration aaiConfiguration2 = new org.onap.aai.domain.yang.Configuration();
3116         aaiConfiguration2.setConfigurationId("testConfigurationId2");
3117         aaiConfiguration2.setRelationshipList(relationshipList1);
3118
3119         try {
3120             doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById(resourceId);
3121             doReturn(serviceInstance).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
3122             doReturn(Optional.of(aaiConfiguration1)).when(aaiConfigurationResources)
3123                     .getConfiguration("testConfigurationId");
3124             doReturn(Optional.of(aaiConfiguration2)).when(aaiConfigurationResources)
3125                     .getConfiguration("testConfigurationId2");
3126             workflowAction.traverseAAIService(execution, resourceCounter, resourceId, aaiResourceIds);
3127             assertEquals(8, resourceCounter.size());
3128             assertTrue(resourceCounter.get(2).isBaseVfModule());
3129             assertThat(aaiResourceIds, sameBeanAs(getExpectedResourceIds()));
3130         } catch (Exception e) {
3131             fail("Unexpected exception was thrown.");
3132         }
3133     }
3134
3135     private List<Pair<WorkflowType, String>> getExpectedResourceIds() {
3136         List<Pair<WorkflowType, String>> resourceIds = new ArrayList<>();
3137         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VNF, "testVnfId1"));
3138         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VFMODULE, "testVfModuleId1"));
3139         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VOLUMEGROUP, "testVolumeGroupId1"));
3140         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.NETWORK, "testNetworkId1"));
3141         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.NETWORKCOLLECTION, "testId"));
3142         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.CONFIGURATION, "testConfigurationId"));
3143         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.CONFIGURATION, "testConfigurationId2"));
3144         return resourceIds;
3145     }
3146
3147     private List<OrchestrationFlow> createFlowList(String... flowNames) {
3148         List<OrchestrationFlow> result = new ArrayList<>();
3149         for (String flowName : flowNames) {
3150             OrchestrationFlow orchFlow = new OrchestrationFlow();
3151             orchFlow.setFlowName(flowName);
3152             result.add(orchFlow);
3153         }
3154         return result;
3155     }
3156
3157     private void assertEqualsBulkFlowName(List<ExecuteBuildingBlock> ebbs, String... flowNames) {
3158         for (int i = 0; i < ebbs.size(); i++) {
3159             assertEquals(ebbs.get(i).getBuildingBlock().getBpmnFlowName(), flowNames[i]);
3160         }
3161     }
3162 }