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