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