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