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