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