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