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