176a09a04be93da69c5b0990e69f03e26c181688
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (c) 2019 Samsung
8  * ================================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.so.bpmn.infrastructure.workflow.tasks;
24
25 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
26 import static org.hamcrest.CoreMatchers.containsString;
27 import static org.hamcrest.CoreMatchers.equalTo;
28 import static org.junit.Assert.assertEquals;
29 import static org.junit.Assert.assertNotNull;
30 import static org.junit.Assert.assertNull;
31 import static org.junit.Assert.assertThat;
32 import static org.junit.Assert.assertTrue;
33 import static org.junit.Assert.fail;
34 import static org.mockito.ArgumentMatchers.anyObject;
35 import static org.mockito.ArgumentMatchers.anyString;
36 import static org.mockito.ArgumentMatchers.isA;
37 import static org.mockito.Mockito.doReturn;
38 import static org.mockito.Mockito.when;
39 import com.fasterxml.jackson.databind.ObjectMapper;
40 import java.io.IOException;
41 import java.net.MalformedURLException;
42 import java.nio.file.Files;
43 import java.nio.file.Paths;
44 import java.util.ArrayList;
45 import java.util.Arrays;
46 import java.util.HashSet;
47 import java.util.List;
48 import java.util.Optional;
49 import java.util.Set;
50 import java.util.UUID;
51 import org.camunda.bpm.engine.delegate.BpmnError;
52 import org.camunda.bpm.engine.delegate.DelegateExecution;
53 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
54 import org.javatuples.Pair;
55 import org.junit.Before;
56 import org.junit.Ignore;
57 import org.junit.Rule;
58 import org.junit.Test;
59 import org.junit.rules.ExpectedException;
60 import org.mockito.InjectMocks;
61 import org.mockito.Mock;
62 import org.mockito.Spy;
63 import org.onap.aai.domain.yang.GenericVnf;
64 import org.onap.aai.domain.yang.L3Network;
65 import org.onap.aai.domain.yang.Relationship;
66 import org.onap.aai.domain.yang.RelationshipList;
67 import org.onap.aai.domain.yang.ServiceInstance;
68 import org.onap.aai.domain.yang.VfModule;
69 import org.onap.aai.domain.yang.VfModules;
70 import org.onap.aai.domain.yang.VolumeGroup;
71 import org.onap.so.bpmn.BaseTaskTest;
72 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
73 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
74 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
75 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
76 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
77 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoVfModule;
78 import org.onap.so.client.aai.AAIObjectType;
79 import org.onap.so.client.aai.entities.AAIResultWrapper;
80 import org.onap.so.client.aai.entities.Relationships;
81 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
82 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
83 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
84 import org.onap.so.db.catalog.beans.CollectionResource;
85 import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
86 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
87 import org.onap.so.db.catalog.beans.ConfigurationResource;
88 import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
89 import org.onap.so.db.catalog.beans.CvnfcCustomization;
90 import org.onap.so.db.catalog.beans.HeatEnvironment;
91 import org.onap.so.db.catalog.beans.HeatTemplate;
92 import org.onap.so.db.catalog.beans.InstanceGroup;
93 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
94 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
95 import org.onap.so.db.catalog.beans.Service;
96 import org.onap.so.db.catalog.beans.VfModuleCustomization;
97 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
98 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
99 import org.onap.so.serviceinstancebeans.RequestDetails;
100 import org.onap.so.serviceinstancebeans.RequestParameters;
101 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
102 import org.onap.so.serviceinstancebeans.SubscriberInfo;
103 import org.springframework.core.env.Environment;
104
105 public class WorkflowActionTest extends BaseTaskTest {
106
107
108     @Mock
109     protected Environment environment;
110     @InjectMocks
111     protected WorkflowAction workflowAction;
112     private DelegateExecution execution;
113
114
115     @InjectMocks
116     @Spy
117     protected WorkflowAction SPY_workflowAction;
118
119     @Rule
120     public ExpectedException thrown = ExpectedException.none();
121
122     private String RESOURCE_PATH = "src/test/resources/__files/";
123
124     @Before
125     public void before() throws Exception {
126         execution = new DelegateExecutionFake();
127         org.onap.aai.domain.yang.ServiceInstance servInstance = new org.onap.aai.domain.yang.ServiceInstance();
128         servInstance.setServiceInstanceId("TEST");
129         when(bbSetupUtils.getAAIServiceInstanceByName(anyString(), anyObject())).thenReturn(servInstance);
130         workflowAction.setBbInputSetupUtils(bbSetupUtils);
131         workflowAction.setBbInputSetup(bbInputSetup);
132     }
133
134     /**
135      * ALACARTE TESTS
136      */
137     @Test
138     public void selectExecutionListALaCarteNetworkCreateTest() throws Exception {
139         String gAction = "createInstance";
140         String resource = "Network";
141         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
142         execution.setVariable("requestAction", gAction);
143         String bpmnRequest =
144                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
145         execution.setVariable("bpmnRequest", bpmnRequest);
146         execution.setVariable("aLaCarte", true);
147         execution.setVariable("apiVersion", "7");
148         execution.setVariable("requestUri", "v6/networks/123");
149
150         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
151         List<OrchestrationFlow> orchFlows =
152                 createFlowList("AssignNetwork1802BB", "CreateNetworkBB", "ActivateNetworkBB");
153         northBoundRequest.setOrchestrationFlowList(orchFlows);
154
155         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
156                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
157         workflowAction.selectExecutionList(execution);
158         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
159         assertEqualsBulkFlowName(ebbs, "AssignNetwork1802BB", "CreateNetworkBB", "ActivateNetworkBB");
160     }
161
162     @Test
163     public void selectExecutionListALaCarteNetworkDeleteTest() throws Exception {
164         String gAction = "deleteInstance";
165         String resource = "Network";
166         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
167         execution.setVariable("requestAction", gAction);
168         String bpmnRequest =
169                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
170         execution.setVariable("bpmnRequest", bpmnRequest);
171         execution.setVariable("aLaCarte", true);
172         execution.setVariable("apiVersion", "7");
173         execution.setVariable("requestUri", "v6/networks/123");
174
175         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
176         List<OrchestrationFlow> orchFlows =
177                 createFlowList("DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetwork1802BB");
178         northBoundRequest.setOrchestrationFlowList(orchFlows);
179
180         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
181                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
182         workflowAction.selectExecutionList(execution);
183         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
184         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetwork1802BB");
185     }
186
187     @Test
188     public void selectExecutionListALaCarteServiceCreateTest() throws Exception {
189         String gAction = "createInstance";
190         String resource = "Service";
191         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
192         execution.setVariable("requestAction", gAction);
193         String bpmnRequest =
194                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
195         execution.setVariable("bpmnRequest", bpmnRequest);
196         execution.setVariable("aLaCarte", true);
197         execution.setVariable("apiVersion", "7");
198         execution.setVariable("requestUri", "v6/serviceInstances/123");
199
200
201         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
202         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "ActivateServiceInstanceBB");
203         northBoundRequest.setOrchestrationFlowList(orchFlows);
204
205         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
206                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
207         workflowAction.selectExecutionList(execution);
208         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
209         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "ActivateServiceInstanceBB");
210     }
211
212     /**
213      * SERVICE MACRO TESTS
214      */
215     @Test
216     public void selectExecutionListServiceMacroAssignTest() throws Exception {
217         String gAction = "assignInstance";
218         String resource = "Service";
219         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
220         execution.setVariable("requestAction", gAction);
221         String bpmnRequest =
222                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
223         execution.setVariable("bpmnRequest", bpmnRequest);
224         execution.setVariable("aLaCarte", false);
225         execution.setVariable("apiVersion", "7");
226         execution.setVariable("requestUri", "v6/serviceInstances/123");
227
228
229         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
230         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "AssignNetworkBB", "AssignVnfBB",
231                 "AssignVolumeGroupBB", "AssignVfModuleBB");
232         northBoundRequest.setOrchestrationFlowList(orchFlows);
233
234         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
235         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
236         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
237         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
238         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
239         HeatTemplate volumeHeatTemplate = new HeatTemplate();
240         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
241         vfModuleCustomization.setVfModule(vfModule);
242
243         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
244         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
245         HeatEnvironment heatEnvironment = new HeatEnvironment();
246         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
247         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
248         HeatTemplate moduleHeatTemplate = new HeatTemplate();
249         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
250         vfModuleCustomization2.setVfModule(vfModule2);
251
252         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
253         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
254
255         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
256                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
257         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
258                 .thenReturn(vfModuleCustomization);
259         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
260                 .thenReturn(vfModuleCustomization2);
261         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
262                 .thenReturn(vfModuleCustomization3);
263         workflowAction.selectExecutionList(execution);
264         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
265         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
266                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB");
267     }
268
269     @Test
270     public void selectExecutionListServiceMacroAssignNoCloudTest() throws Exception {
271         String gAction = "assignInstance";
272         String resource = "Service";
273         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
274         execution.setVariable("requestAction", gAction);
275         String bpmnRequest = new String(
276                 Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssignNoCloud.json")));
277         execution.setVariable("bpmnRequest", bpmnRequest);
278         execution.setVariable("aLaCarte", false);
279         execution.setVariable("apiVersion", "7");
280         execution.setVariable("requestUri", "v6/serviceInstances/123");
281
282
283         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
284         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "AssignNetworkBB", "AssignVnfBB",
285                 "AssignVolumeGroupBB", "AssignVfModuleBB");
286         northBoundRequest.setOrchestrationFlowList(orchFlows);
287
288         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
289         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
290         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
291         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
292         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
293         HeatTemplate volumeHeatTemplate = new HeatTemplate();
294         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
295         vfModuleCustomization.setVfModule(vfModule);
296
297         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
298         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
299         HeatEnvironment heatEnvironment = new HeatEnvironment();
300         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
301         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
302         HeatTemplate moduleHeatTemplate = new HeatTemplate();
303         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
304         vfModuleCustomization2.setVfModule(vfModule2);
305
306         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
307         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
308
309         when(environment.getProperty("org.onap.so.cloud-owner")).thenReturn("att-aic");
310         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
311                 false, "att-aic")).thenReturn(northBoundRequest);
312         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
313                 .thenReturn(vfModuleCustomization);
314         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
315                 .thenReturn(vfModuleCustomization2);
316         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
317                 .thenReturn(vfModuleCustomization3);
318         workflowAction.selectExecutionList(execution);
319         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
320         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
321                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB");
322     }
323
324     @Test
325     public void selectExecutionListServiceMacroActivateTest() throws Exception {
326         String gAction = "activateInstance";
327         String resource = "Service";
328         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
329         execution.setVariable("requestAction", gAction);
330         String bpmnRequest = new String(Files
331                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
332         execution.setVariable("bpmnRequest", bpmnRequest);
333         execution.setVariable("aLaCarte", false);
334         execution.setVariable("apiVersion", "7");
335         execution.setVariable("requestUri", "v6/serviceInstances/si0");
336
337
338         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
339         List<OrchestrationFlow> orchFlows =
340                 createFlowList("CreateNetworkBB", "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB",
341                         "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB", "ActivateServiceInstanceBB");
342         northBoundRequest.setOrchestrationFlowList(orchFlows);
343
344         ServiceInstance serviceInstanceAAI = new ServiceInstance();
345         serviceInstanceAAI.setServiceInstanceId("si0");
346         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
347                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
348         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
349                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
350         vnf.setVnfId("vnf0");
351
352
353         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
354         vnf.getVfModules().add(vfModule);
355         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
356         vnf.getVfModules().add(vfModule2);
357
358         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
359                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
360         volumeGroup.setVolumeGroupId("volumeGroup0");
361         vnf.getVolumeGroups().add(volumeGroup);
362
363         serviceInstanceMSO.getVnfs().add(vnf);
364
365         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("si0");
366         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
367         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
368                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
369         workflowAction.selectExecutionList(execution);
370         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
371         assertEqualsBulkFlowName(ebbs, "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
372                 "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB",
373                 "ActivateServiceInstanceBB");
374         assertEquals("volumeGroup0", ebbs.get(0).getWorkflowResourceIds().getVolumeGroupId());
375         assertEquals("volumeGroup0", ebbs.get(1).getWorkflowResourceIds().getVolumeGroupId());
376         assertEquals("testVfModuleId1", ebbs.get(2).getWorkflowResourceIds().getVfModuleId());
377         assertEquals("testVfModuleId2", ebbs.get(3).getWorkflowResourceIds().getVfModuleId());
378         assertEquals("testVfModuleId1", ebbs.get(4).getWorkflowResourceIds().getVfModuleId());
379         assertEquals("testVfModuleId2", ebbs.get(5).getWorkflowResourceIds().getVfModuleId());
380         assertEquals("vnf0", ebbs.get(6).getWorkflowResourceIds().getVnfId());
381         assertEquals("si0", ebbs.get(7).getWorkflowResourceIds().getServiceInstanceId());
382
383     }
384
385     @Test
386     public void selectExecutionListServiceMacroDeactivateTest() throws Exception {
387         String gAction = "deactivateInstance";
388         String resource = "Service";
389         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
390         execution.setVariable("requestAction", gAction);
391         String bpmnRequest = new String(Files
392                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
393         execution.setVariable("bpmnRequest", bpmnRequest);
394         execution.setVariable("aLaCarte", false);
395         execution.setVariable("apiVersion", "7");
396         execution.setVariable("requestUri", "v6/serviceInstances/123");
397
398
399         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
400         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateServiceInstanceBB");
401         northBoundRequest.setOrchestrationFlowList(orchFlows);
402
403         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
404                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
405         workflowAction.selectExecutionList(execution);
406         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
407         assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(), "DeactivateServiceInstanceBB");
408     }
409
410     @Test
411     public void selectExecutionListServiceMacroEmptyServiceTest() throws Exception {
412         String gAction = "createInstance";
413         String resource = "Service";
414         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
415         execution.setVariable("requestAction", gAction);
416         String bpmnRequest = new String(Files
417                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
418         execution.setVariable("bpmnRequest", bpmnRequest);
419         execution.setVariable("aLaCarte", false);
420         execution.setVariable("apiVersion", "7");
421         execution.setVariable("requestUri", "v6/serviceInstances/123");
422
423
424         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
425         northBoundRequest.setIsToplevelflow(true);
426         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
427                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
428                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
429                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
430                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
431         northBoundRequest.setOrchestrationFlowList(orchFlows);
432
433         Service service = new Service();
434         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
435         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
436                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
437         workflowAction.selectExecutionList(execution);
438         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
439         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "ActivateServiceInstanceBB");
440     }
441
442     @Test
443     public void selectExecutionListServiceMacroCreateJustNetworkTest() throws Exception {
444         String gAction = "createInstance";
445         String resource = "Service";
446         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
447         execution.setVariable("requestAction", gAction);
448         String bpmnRequest = new String(Files
449                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
450         execution.setVariable("bpmnRequest", bpmnRequest);
451         execution.setVariable("aLaCarte", false);
452         execution.setVariable("apiVersion", "7");
453         execution.setVariable("requestUri", "v6/serviceInstances/123");
454
455
456         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
457         northBoundRequest.setIsToplevelflow(true);
458         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
459                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
460                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
461                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
462                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
463         northBoundRequest.setOrchestrationFlowList(orchFlows);
464
465         Service service = new Service();
466         NetworkResourceCustomization networkCustomization = new NetworkResourceCustomization();
467         networkCustomization.setModelCustomizationUUID("1234");
468         service.getNetworkCustomizations().add(networkCustomization);
469         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
470         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
471                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
472         workflowAction.selectExecutionList(execution);
473         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
474         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignNetworkBB", "CreateNetworkBB",
475                 "ActivateNetworkBB", "ActivateServiceInstanceBB");
476     }
477
478     @Test
479     public void selectExecutionListServiceMacroCreateWithNetworkCollectionTest() throws Exception {
480         String gAction = "createInstance";
481         String resource = "Service";
482         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
483         execution.setVariable("requestAction", gAction);
484         String bpmnRequest = new String(Files
485                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
486         execution.setVariable("bpmnRequest", bpmnRequest);
487         execution.setVariable("aLaCarte", false);
488         execution.setVariable("apiVersion", "7");
489         execution.setVariable("requestUri", "v6/serviceInstances/123");
490
491
492         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
493         northBoundRequest.setIsToplevelflow(true);
494         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
495                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
496                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
497                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
498                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
499         northBoundRequest.setOrchestrationFlowList(orchFlows);
500
501         Service service = new Service();
502         List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
503         NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
504         networkCust.setModelCustomizationUUID("123");
505         networkCustomizations.add(networkCust);
506         service.setNetworkCustomizations(networkCustomizations);
507         NetworkCollectionResourceCustomization collectionResourceCustomization =
508                 new NetworkCollectionResourceCustomization();
509         collectionResourceCustomization.setModelCustomizationUUID("123");
510
511         CollectionResource collectionResource = new CollectionResource();
512         collectionResource.setToscaNodeType("NetworkCollection");
513         InstanceGroup instanceGroup = new InstanceGroup();
514         instanceGroup.setToscaNodeType("NetworkCollectionResource");
515         instanceGroup.setCollectionNetworkResourceCustomizations(new ArrayList<>());
516         CollectionNetworkResourceCustomization collectionNetworkResourceCust =
517                 new CollectionNetworkResourceCustomization();
518         collectionNetworkResourceCust.setModelCustomizationUUID("123");
519         collectionNetworkResourceCust.setNetworkResourceCustomization(collectionResourceCustomization);
520         instanceGroup.getCollectionNetworkResourceCustomizations().add(collectionNetworkResourceCust);
521         List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
522         CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization =
523                 new CollectionResourceInstanceGroupCustomization();
524         collectionInstanceGroupCustomization.setModelCustomizationUUID("123");
525         collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
526         collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
527         collectionInstanceGroupCustomization.setInstanceGroup(instanceGroup);
528         collectionInstanceGroupCustomization.setCollectionResourceCust(collectionResourceCustomization);
529         instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
530         collectionResource.setInstanceGroup(instanceGroup);
531         collectionResourceCustomization.setCollectionResource(collectionResource);;
532         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
533         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
534         doReturn(collectionResourceCustomization).when(catalogDbClient)
535                 .getNetworkCollectionResourceCustomizationByID("123");
536         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
537                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
538         workflowAction.selectExecutionList(execution);
539         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
540         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "CreateNetworkCollectionBB", "AssignNetworkBB",
541                 "CreateNetworkBB", "ActivateNetworkBB", "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB",
542                 "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB", "ActivateNetworkCollectionBB",
543                 "ActivateServiceInstanceBB");
544         assertEquals("Network id not empty", !ebbs.get(2).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
545         assertEquals("Network id not empty", !ebbs.get(3).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
546         assertEquals("Network id not empty", !ebbs.get(4).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
547         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
548                 ebbs.get(2).getWorkflowResourceIds().getNetworkId() == ebbs.get(3).getWorkflowResourceIds()
549                         .getNetworkId()
550                         && ebbs.get(3).getWorkflowResourceIds().getNetworkId() == ebbs.get(4).getWorkflowResourceIds()
551                                 .getNetworkId(),
552                 true);
553         assertEquals("Network id not empty", !ebbs.get(5).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
554         assertEquals("Network id not empty", !ebbs.get(6).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
555         assertEquals("Network id not empty", !ebbs.get(7).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
556         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
557                 ebbs.get(5).getWorkflowResourceIds().getNetworkId() == ebbs.get(6).getWorkflowResourceIds()
558                         .getNetworkId()
559                         && ebbs.get(6).getWorkflowResourceIds().getNetworkId() == ebbs.get(7).getWorkflowResourceIds()
560                                 .getNetworkId(),
561                 true);
562         assertEquals("Network id not empty", !ebbs.get(8).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
563         assertEquals("Network id not empty", !ebbs.get(9).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
564         assertEquals("Network id not empty", !ebbs.get(10).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
565         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
566                 ebbs.get(8).getWorkflowResourceIds().getNetworkId() == ebbs.get(9).getWorkflowResourceIds()
567                         .getNetworkId()
568                         && ebbs.get(9).getWorkflowResourceIds().getNetworkId() == ebbs.get(10).getWorkflowResourceIds()
569                                 .getNetworkId(),
570                 true);
571     }
572
573     @Test
574     public void selectExecutionListServiceMacroCreateWithUserParams() throws Exception {
575         String gAction = "createInstance";
576         String resource = "Service";
577         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
578         execution.setVariable("requestAction", gAction);
579         String bpmnRequest =
580                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
581         execution.setVariable("bpmnRequest", bpmnRequest);
582         execution.setVariable("aLaCarte", false);
583         execution.setVariable("apiVersion", "7");
584         execution.setVariable("requestUri", "v6/serviceInstances/123");
585
586
587         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
588         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
589                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
590                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
591                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
592                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
593         northBoundRequest.setOrchestrationFlowList(orchFlows);
594
595         Service service = new Service();
596         service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
597
598         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
599         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
600         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
601         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
602         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
603         HeatTemplate volumeHeatTemplate = new HeatTemplate();
604         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
605         vfModuleCustomization.setVfModule(vfModule);
606
607         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
608         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
609         HeatEnvironment heatEnvironment = new HeatEnvironment();
610         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
611         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
612         HeatTemplate moduleHeatTemplate = new HeatTemplate();
613         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
614         vfModuleCustomization2.setVfModule(vfModule2);
615
616         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
617         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
618
619         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
620                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
621         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
622                 .thenReturn(vfModuleCustomization);
623         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
624                 .thenReturn(vfModuleCustomization2);
625         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
626                 .thenReturn(vfModuleCustomization3);
627         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
628         workflowAction.selectExecutionList(execution);
629         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
630         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
631                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB", "CreateVolumeGroupBB",
632                 "ActivateVolumeGroupBB", "CreateVfModuleBB", "CreateVfModuleBB", "CreateVfModuleBB",
633                 "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB",
634                 "ActivateServiceInstanceBB");
635         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
636         int randomUUIDLength = UUID.randomUUID().toString().length();
637         assertEquals(randomUUIDLength, ebbs.get(1).getWorkflowResourceIds().getVnfId().length());
638         assertEquals(randomUUIDLength, ebbs.get(2).getWorkflowResourceIds().getVolumeGroupId().length());
639         assertEquals(randomUUIDLength, ebbs.get(3).getWorkflowResourceIds().getVfModuleId().length());
640         assertEquals(randomUUIDLength, ebbs.get(4).getWorkflowResourceIds().getVfModuleId().length());
641         assertEquals(randomUUIDLength, ebbs.get(5).getWorkflowResourceIds().getVfModuleId().length());
642         assertEquals(randomUUIDLength, ebbs.get(6).getWorkflowResourceIds().getVolumeGroupId().length());
643         assertEquals(randomUUIDLength, ebbs.get(7).getWorkflowResourceIds().getVolumeGroupId().length());
644         assertEquals(randomUUIDLength, ebbs.get(8).getWorkflowResourceIds().getVfModuleId().length());
645         assertEquals(randomUUIDLength, ebbs.get(9).getWorkflowResourceIds().getVfModuleId().length());
646         assertEquals(randomUUIDLength, ebbs.get(10).getWorkflowResourceIds().getVfModuleId().length());
647         assertEquals(randomUUIDLength, ebbs.get(11).getWorkflowResourceIds().getVfModuleId().length());
648         assertEquals(randomUUIDLength, ebbs.get(12).getWorkflowResourceIds().getVfModuleId().length());
649         assertEquals(randomUUIDLength, ebbs.get(13).getWorkflowResourceIds().getVfModuleId().length());
650         assertEquals(randomUUIDLength, ebbs.get(14).getWorkflowResourceIds().getVnfId().length());
651         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
652         assertEquals(true, execution.getVariable("homing"));
653     }
654
655     @Test
656     public void selectExecutionListServiceMacroDeleteTest() throws Exception {
657         String gAction = "deleteInstance";
658         String resource = "Service";
659         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
660         execution.setVariable("requestAction", gAction);
661         String bpmnRequest = new String(Files
662                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
663         execution.setVariable("bpmnRequest", bpmnRequest);
664         execution.setVariable("aLaCarte", false);
665         execution.setVariable("apiVersion", "7");
666         execution.setVariable("requestUri", "v6/serviceInstances/123");
667
668
669         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
670         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
671                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivateNetworkBB",
672                 "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB", "UnassignVfModuleBB",
673                 "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB", "UnassignServiceInstanceBB");
674         northBoundRequest.setOrchestrationFlowList(orchFlows);
675
676         ServiceInstance serviceInstanceAAI = new ServiceInstance();
677         serviceInstanceAAI.setServiceInstanceId("aaisi123");
678         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
679                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
680         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
681                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
682         vnf.setVnfId("vnfId123");
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
696         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
697         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
698         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
699                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
700         workflowAction.selectExecutionList(execution);
701         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
702         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeactivateVfModuleBB", "DeleteVfModuleBB",
703                 "DeleteVfModuleBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB",
704                 "DeactivateServiceInstanceBB", "UnassignVfModuleBB", "UnassignVfModuleBB", "UnassignVolumeGroupBB",
705                 "UnassignVnfBB", "UnassignServiceInstanceBB");
706     }
707
708     @Test
709     public void selectExecutionListServiceMacroUnassignTest() throws Exception {
710         String gAction = "unassignInstance";
711         String resource = "Service";
712         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
713         execution.setVariable("requestAction", gAction);
714         String bpmnRequest = new String(Files
715                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
716         execution.setVariable("bpmnRequest", bpmnRequest);
717         execution.setVariable("aLaCarte", false);
718         execution.setVariable("apiVersion", "7");
719         execution.setVariable("requestUri", "v6/serviceInstances/123");
720
721
722         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
723         List<OrchestrationFlow> orchFlows = createFlowList("UnassignVfModuleBB", "UnassignVolumeGroupBB",
724                 "UnassignVnfBB", "UnassignNetworkBB", "UnassignServiceInstanceBB");
725         northBoundRequest.setOrchestrationFlowList(orchFlows);
726
727         ServiceInstance serviceInstanceAAI = new ServiceInstance();
728         serviceInstanceAAI.setServiceInstanceId("aaisi123");
729         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
730                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
731         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
732                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
733         vnf.setVnfId("vnfId123");
734
735         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
736         vnf.getVfModules().add(vfModule);
737         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
738         vnf.getVfModules().add(vfModule2);
739
740         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
741                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
742         volumeGroup.setVolumeGroupId("vg123");
743         vnf.getVolumeGroups().add(volumeGroup);
744
745         serviceInstanceMSO.getVnfs().add(vnf);
746
747         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
748         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
749         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
750                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
751         workflowAction.selectExecutionList(execution);
752         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
753         assertEqualsBulkFlowName(ebbs, "UnassignVfModuleBB", "UnassignVfModuleBB", "UnassignVolumeGroupBB",
754                 "UnassignVnfBB", "UnassignServiceInstanceBB");
755     }
756
757     @Test
758     public void selectExecutionListServiceMacroDeleteNetworkCollectionTest() throws Exception {
759         String gAction = "deleteInstance";
760         String resource = "Service";
761         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
762         execution.setVariable("requestAction", gAction);
763         String bpmnRequest = new String(Files
764                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
765         execution.setVariable("bpmnRequest", bpmnRequest);
766         execution.setVariable("aLaCarte", false);
767         execution.setVariable("apiVersion", "7");
768         execution.setVariable("requestUri", "v6/serviceInstances/123");
769
770
771         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
772         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
773                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivateNetworkBB",
774                 "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB", "UnassignVfModuleBB",
775                 "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB", "UnassignServiceInstanceBB");
776         northBoundRequest.setOrchestrationFlowList(orchFlows);
777
778         ServiceInstance serviceInstanceAAI = new ServiceInstance();
779         serviceInstanceAAI.setServiceInstanceId("aaisi123");
780         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
781                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
782
783         org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network =
784                 new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
785         network.setNetworkId("123");
786         serviceInstanceMSO.getNetworks().add(network);
787         org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network2 =
788                 new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
789         network2.setNetworkId("321");
790         serviceInstanceMSO.getNetworks().add(network2);
791
792         Collection collection = new Collection();
793         serviceInstanceMSO.setCollection(collection);
794
795         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
796         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
797         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
798                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
799         workflowAction.selectExecutionList(execution);
800         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
801         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
802                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB", "DeleteNetworkCollectionBB",
803                 "DeactivateServiceInstanceBB", "UnassignServiceInstanceBB");
804     }
805
806     @Test
807     public void selectExecutionListVnfMacroRecreateTest() throws Exception {
808         String gAction = "recreateInstance";
809         String resource = "Vnf";
810         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
811         execution.setVariable("requestAction", gAction);
812         String bpmnRequest =
813                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/VnfMacroReplace.json")));
814         execution.setVariable("bpmnRequest", bpmnRequest);
815         execution.setVariable("aLaCarte", false);
816         execution.setVariable("apiVersion", "7");
817         execution.setVariable("requestUri", "v7/serviceInstances/123/vnfs/1234/recreate");
818         execution.setVariable("serviceInstanceId", "123");
819         execution.setVariable("vnfId", "1234");
820
821         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
822         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
823                 "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB", "DeactivateVfModuleBB",
824                 "DeleteVfModuleBB", "DeactivateVnfBB", "CreateVfModuleBB", "ActivateVfModuleBB",
825                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB", "SDNOVnfHealthCheckBB",
826                 "AAIUnsetVnfInMaintBB");
827         northBoundRequest.setOrchestrationFlowList(orchFlows);
828
829         ServiceInstance serviceInstanceAAI = new ServiceInstance();
830         serviceInstanceAAI.setServiceInstanceId("123");
831         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
832                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
833         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
834                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
835         vnf.setVnfId("1234");
836
837         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
838                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
839         vfModule.setVfModuleId("vfModule1");
840         vnf.getVfModules().add(vfModule);
841         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 =
842                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
843         vfModule2.setVfModuleId("vfModule2");
844         vnf.getVfModules().add(vfModule2);
845
846         serviceInstanceMSO.getVnfs().add(vnf);
847
848         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
849         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
850         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
851                 false, "cloud-owner")).thenReturn(northBoundRequest);
852         workflowAction.selectExecutionList(execution);
853         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
854         assertEqualsBulkFlowName(ebbs, "AAICheckVnfInMaintBB", "AAISetVnfInMaintBB", "DeactivateVfModuleBB",
855                 "DeactivateVfModuleBB", "DeleteVfModuleBB", "DeleteVfModuleBB", "DeactivateVnfBB", "CreateVfModuleBB",
856                 "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB", "SDNOVnfHealthCheckBB",
857                 "AAIUnsetVnfInMaintBB");
858     }
859
860     @Test
861     public void selectExecutionListVnfMacroReplaceTest() throws Exception {
862         String gAction = "replaceInstance";
863         String resource = "Vnf";
864         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
865         execution.setVariable("requestAction", gAction);
866         String bpmnRequest =
867                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/VnfMacroReplace.json")));
868         execution.setVariable("bpmnRequest", bpmnRequest);
869         execution.setVariable("aLaCarte", false);
870         execution.setVariable("apiVersion", "7");
871         execution.setVariable("requestUri", "v7/serviceInstances/123/vnfs/1234/replace");
872         execution.setVariable("serviceInstanceId", "123");
873         execution.setVariable("vnfId", "1234");
874
875         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
876         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
877                 "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB", "DeactivateVfModuleBB",
878                 "DeleteVfModuleBB", "DeactivateVnfBB", "ChangeModelVfModuleBB", "CreateVfModuleBB",
879                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB",
880                 "ChangeModelVnfBB", "ActivateVnfBB", "ChangeModelServiceInstanceBB", "SDNOVnfHealthCheckBB",
881                 "AAIUnsetVnfInMaintBB");
882         northBoundRequest.setOrchestrationFlowList(orchFlows);
883
884         ServiceInstance serviceInstanceAAI = new ServiceInstance();
885         serviceInstanceAAI.setServiceInstanceId("123");
886         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
887                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
888         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
889                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
890         vnf.setVnfId("1234");
891         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
892                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
893         vfModule.setVfModuleId("vfModule1");
894         vnf.getVfModules().add(vfModule);
895         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 =
896                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
897         vfModule2.setVfModuleId("vfModule2");
898         vnf.getVfModules().add(vfModule2);
899         serviceInstanceMSO.getVnfs().add(vnf);
900         VfModule vfModuleAAI = new VfModule();
901         vfModuleAAI.setVfModuleId("vfModule2");
902         RelationshipList relationshipList = new RelationshipList();
903         Relationship relationship = new Relationship();
904         relationshipList.getRelationship().add(relationship);
905         vfModuleAAI.setRelationshipList(relationshipList);
906         Relationships relationships = new Relationships("abc");
907         Configuration config = new Configuration();
908         config.setConfigurationId("configId");
909         Optional<Configuration> configOp = Optional.of(config);
910         Optional<Relationships> relationshipsOp = Optional.of(relationships);
911
912         doReturn(relationshipsOp).when(workflowActionUtils).extractRelationshipsVnfc(isA(Relationships.class));
913         doReturn(configOp).when(workflowActionUtils).extractRelationshipsConfiguration(isA(Relationships.class));
914         doReturn(vfModuleAAI).when(bbSetupUtils).getAAIVfModule("1234", "vfModule2");
915         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
916         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
917         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
918                 false, "cloud-owner")).thenReturn(northBoundRequest);
919         workflowAction.selectExecutionList(execution);
920         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
921         assertEqualsBulkFlowName(ebbs, "AAICheckVnfInMaintBB", "AAISetVnfInMaintBB", "DeactivateFabricConfigurationBB",
922                 "UnassignFabricConfigurationBB", "DeactivateVfModuleBB", "DeactivateVfModuleBB", "DeleteVfModuleBB",
923                 "DeleteVfModuleBB", "DeactivateVnfBB", "ChangeModelVfModuleBB", "ChangeModelVfModuleBB",
924                 "CreateVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB",
925                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ChangeModelVnfBB", "ActivateVnfBB",
926                 "ChangeModelServiceInstanceBB", "SDNOVnfHealthCheckBB", "AAIUnsetVnfInMaintBB");
927     }
928
929     @Ignore
930     @Test
931     public void selectExecutionListNetworkCollectionMacroCreate() throws Exception {
932         String gAction = "createInstance";
933         String resource = "NetworkCollection";
934         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
935         execution.setVariable("requestAction", gAction);
936         String bpmnRequest = new String(
937                 Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/CreateNetworkCollection.json")));
938         execution.setVariable("bpmnRequest", bpmnRequest);
939         execution.setVariable("aLaCarte", false);
940         execution.setVariable("apiVersion", "7");
941         execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
942
943
944         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
945         List<OrchestrationFlow> orchFlows = createFlowList("CreateNetworkCollectionBB", "AssignNetworkBB",
946                 "CreateNetworkBB", "ActivateNetworkBB", "ActivateNetworkCollectionBB");
947         northBoundRequest.setOrchestrationFlowList(orchFlows);
948
949         Service service = new Service();
950         CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
951         CollectionResource collectionResource = new CollectionResource();
952         collectionResource.setToscaNodeType("Data NetworkCollection Data");
953         collectionResourceCustomization.setCollectionResource(collectionResource);
954         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
955
956         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
957                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
958         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
959         workflowAction.selectExecutionList(execution);
960         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
961         assertEqualsBulkFlowName(ebbs, "CreateNetworkCollectionBB", "AssignNetworkBB", "CreateNetworkBB",
962                 "ActivateNetworkBB", "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB",
963                 "ActivateNetworkCollectionBB");
964     }
965
966     @Ignore
967     @Test
968     public void selectExecutionListNetworkCollectionMacroDelete() throws Exception {
969         String gAction = "deleteInstance";
970         String resource = "NetworkCollection";
971         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
972         execution.setVariable("requestAction", gAction);
973         String bpmnRequest = new String(
974                 Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/CreateNetworkCollection.json")));
975         execution.setVariable("bpmnRequest", bpmnRequest);
976         execution.setVariable("aLaCarte", false);
977         execution.setVariable("apiVersion", "7");
978         execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
979
980         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
981         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateNetworkBB", "DeleteNetworkBB",
982                 "UnassignNetworkBB", "DeactivateNetworkCollectionBB", "DeleteNetworkCollectionBB");
983         northBoundRequest.setOrchestrationFlowList(orchFlows);
984
985         Service service = new Service();
986         CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
987         CollectionResource collectionResource = new CollectionResource();
988         collectionResource.setToscaNodeType("Data NetworkCollection Data");
989         collectionResourceCustomization.setCollectionResource(collectionResource);
990         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
991
992         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
993                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
994         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
995         workflowAction.selectExecutionList(execution);
996         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
997         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
998                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB", "DeactivateNetworkCollectionBB",
999                 "DeleteNetworkCollectionBB");
1000     }
1001
1002     @Test
1003     public void selectExecutionListALaCarteVfModuleNoFabricCreateTest() throws Exception {
1004         String gAction = "createInstance";
1005         String resource = "VfModule";
1006         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1007         execution.setVariable("requestAction", gAction);
1008         String bpmnRequest =
1009                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1010         execution.setVariable("bpmnRequest", bpmnRequest);
1011         execution.setVariable("aLaCarte", true);
1012         execution.setVariable("apiVersion", "7");
1013         execution.setVariable("requestUri",
1014                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1015
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         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1034         execution.setVariable("requestAction", gAction);
1035         String bpmnRequest =
1036                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1037         execution.setVariable("bpmnRequest", bpmnRequest);
1038         execution.setVariable("aLaCarte", true);
1039         execution.setVariable("apiVersion", "7");
1040         execution.setVariable("requestUri",
1041                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1042
1043         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1044         List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1045                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB");
1046         northBoundRequest.setOrchestrationFlowList(orchFlows);
1047
1048         List<CvnfcCustomization> cvnfcCustomizations = new ArrayList<CvnfcCustomization>();
1049         CvnfcCustomization cvnfcCustomization = new CvnfcCustomization();
1050         CvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization =
1051                 new CvnfcConfigurationCustomization();
1052         ConfigurationResource configurationResource = new ConfigurationResource();
1053         configurationResource.setToscaNodeType("FabricConfiguration");
1054         vnfVfmoduleCvnfcConfigurationCustomization.setConfigurationResource(configurationResource);
1055         vnfVfmoduleCvnfcConfigurationCustomization.setModelInstanceName("modelInstanceName1");
1056         vnfVfmoduleCvnfcConfigurationCustomization.setCvnfcCustomization(cvnfcCustomization);
1057         List<CvnfcConfigurationCustomization> custSet = new ArrayList<CvnfcConfigurationCustomization>();
1058         custSet.add(vnfVfmoduleCvnfcConfigurationCustomization);
1059         cvnfcCustomization.setCvnfcConfigurationCustomization(custSet);
1060         cvnfcCustomization.setDescription("description");
1061         cvnfcCustomizations.add(cvnfcCustomization);
1062
1063         CvnfcCustomization cvnfcCustomization2 = new CvnfcCustomization();
1064         CvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization2 =
1065                 new CvnfcConfigurationCustomization();
1066         ConfigurationResource configurationResource2 = new ConfigurationResource();
1067         configurationResource2.setToscaNodeType("FabricConfiguration");
1068         vnfVfmoduleCvnfcConfigurationCustomization2.setConfigurationResource(configurationResource2);
1069         vnfVfmoduleCvnfcConfigurationCustomization2.setModelInstanceName("modelInstanceName2");
1070         vnfVfmoduleCvnfcConfigurationCustomization2.setCvnfcCustomization(cvnfcCustomization2);
1071         List<CvnfcConfigurationCustomization> custSet2 = new ArrayList<CvnfcConfigurationCustomization>();
1072         custSet2.add(vnfVfmoduleCvnfcConfigurationCustomization2);
1073         cvnfcCustomization2.setCvnfcConfigurationCustomization(custSet2);
1074         cvnfcCustomization2.setDescription("description2");
1075         cvnfcCustomizations.add(cvnfcCustomization2);
1076
1077         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1078                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1079         // when(catalogDbClient.getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID("fc25201d-36d6-43a3-8d39-fdae88e526ae",
1080         // "9a6d01fd-19a7-490a-9800-460830a12e0b")).thenReturn(cvnfcCustomizations);
1081         workflowAction.selectExecutionList(execution);
1082         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1083         assertEqualsBulkFlowName(ebbs, "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1084                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "AssignFabricConfigurationBB",
1085                 "ActivateFabricConfigurationBB");
1086     }
1087
1088     @Test
1089     public void selectExecutionListALaCarteVfModuleFabricDeleteTest() throws Exception {
1090         String gAction = "deleteInstance";
1091         String resource = "VfModule";
1092         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1093         execution.setVariable("requestAction", gAction);
1094         String bpmnRequest =
1095                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1096         execution.setVariable("bpmnRequest", bpmnRequest);
1097         execution.setVariable("aLaCarte", true);
1098         execution.setVariable("apiVersion", "7");
1099         execution.setVariable("requestUri",
1100                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1101
1102         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1103         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1104                 "UnassignVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB");
1105         northBoundRequest.setOrchestrationFlowList(orchFlows);
1106
1107         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1108                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1109
1110         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1111         vnf.setVnfId("vnf0");
1112         vnf.setModelCustomizationId("modelCustomizationId");
1113         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
1114
1115         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1116         vfModule.setModelCustomizationId("modelCustomizationId");
1117         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(vfModule);
1118
1119         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1120         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1121         vnfc.setModelInvariantId("modelInvariantId");
1122         vnfc.setVnfcName("testVnfcName");
1123         vnfcs.add(vnfc);
1124         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(anyObject(), anyObject(), anyObject(),
1125                 anyObject());
1126
1127         List<org.onap.aai.domain.yang.Configuration> configurations =
1128                 new ArrayList<org.onap.aai.domain.yang.Configuration>();
1129         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
1130         configuration.setConfigurationId("configurationId");
1131         configuration.setModelCustomizationId("modelCustimizationId");
1132         configuration.setConfigurationName("testConfigurationName");
1133         configurations.add(configuration);
1134         doReturn(configurations).when(SPY_workflowAction).getRelatedResourcesInVnfc(anyObject(), anyObject(),
1135                 anyObject());
1136
1137         doReturn("testName").when(SPY_workflowAction).getVnfcNameForConfiguration(anyObject());
1138
1139         SPY_workflowAction.selectExecutionList(execution);
1140         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1141         assertEqualsBulkFlowName(ebbs, "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB",
1142                 "DeactivateVfModuleBB", "DeleteVfModuleBB", "UnassignVfModuleBB");
1143     }
1144
1145     @Test
1146     public void selectExecutionListALaCarteVfModuleNoFabricDeleteTest() throws Exception {
1147         String gAction = "deleteInstance";
1148         String resource = "VfModule";
1149         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1150         execution.setVariable("requestAction", gAction);
1151         String bpmnRequest =
1152                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1153         execution.setVariable("bpmnRequest", bpmnRequest);
1154         execution.setVariable("aLaCarte", true);
1155         execution.setVariable("apiVersion", "7");
1156         execution.setVariable("requestUri",
1157                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1158
1159         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1160         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1161                 "UnassignVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB");
1162         northBoundRequest.setOrchestrationFlowList(orchFlows);
1163
1164         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1165                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1166
1167         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1168         vnf.setVnfId("vnf0");
1169         vnf.setModelCustomizationId("modelCustomizationId");
1170         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
1171
1172         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1173         vfModule.setModelCustomizationId("modelCustomizationId");
1174         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(vfModule);
1175
1176         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1177         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1178         vnfc.setModelInvariantId("modelInvariantId");
1179         vnfc.setVnfcName("testVnfcName");
1180         vnfcs.add(vnfc);
1181         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(anyObject(), anyObject(), anyObject(),
1182                 anyObject());
1183
1184         List<org.onap.aai.domain.yang.Configuration> configurations =
1185                 new ArrayList<org.onap.aai.domain.yang.Configuration>();
1186         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
1187         doReturn(configurations).when(SPY_workflowAction).getRelatedResourcesInVnfc(anyObject(), anyObject(),
1188                 anyObject());
1189
1190         doReturn("testName").when(SPY_workflowAction).getVnfcNameForConfiguration(anyObject());
1191
1192         SPY_workflowAction.selectExecutionList(execution);
1193         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1194         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleBB", "UnassignVfModuleBB");
1195     }
1196
1197     @Test
1198     public void getRelatedResourcesInVfModuleTest() throws Exception {
1199         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1200         vnfc.setModelInvariantId("modelInvariantId");
1201         vnfc.setVnfcName("testVnfcName");
1202
1203         String vfncPayload =
1204                 new String(Files.readAllBytes(Paths.get(RESOURCE_PATH + "/BuildingBlocks/vnfcResponse.json")));
1205         AAIResultWrapper vfncWrapper = new AAIResultWrapper(vfncPayload);
1206
1207         String configurationPayload =
1208                 new String(Files.readAllBytes(Paths.get(RESOURCE_PATH + "/BuildingBlocks/configurationResponse.json")));
1209         AAIResultWrapper configurationWrapper = new AAIResultWrapper(configurationPayload);
1210         List<AAIResultWrapper> configurationResultWrappers = new ArrayList<AAIResultWrapper>();
1211         configurationResultWrappers.add(configurationWrapper);
1212
1213         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.VNFC, vnfc.getVnfcName());
1214         when(bbSetupUtils.getAAIResourceDepthOne(uri)).thenReturn(vfncWrapper);
1215
1216         doReturn(configurationResultWrappers).when(SPY_workflowAction).getResultWrappersFromRelationships(anyObject(),
1217                 anyObject());
1218         List<org.onap.aai.domain.yang.Configuration> configurationsList = SPY_workflowAction.getRelatedResourcesInVnfc(
1219                 vnfc, org.onap.aai.domain.yang.Configuration.class, AAIObjectType.CONFIGURATION);
1220         assertEquals(1, configurationsList.size());
1221         assertEquals("testConfigurationId", configurationsList.get(0).getConfigurationId());
1222     }
1223
1224     /**
1225      * WorkflowActionBB Tests
1226      */
1227
1228     @Test
1229     public void pluralTest() {
1230         List<String> items = Arrays.asList("serviceInstances, Service", "vnfs, Vnf", "vfModules, VfModule",
1231                 "networks, Network", "invalidNames, invalidNames");
1232         items.forEach(item -> {
1233             String[] split = item.split(",");
1234             String type = split[0].trim();
1235             String expected = split[1].trim();
1236             assertThat(workflowAction.convertTypeFromPlural(type), equalTo(expected));
1237         });
1238     }
1239
1240     @Test
1241     public void sortExecutionPathByObjectForVlanTaggingCreateTest() throws Exception {
1242         List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
1243         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock();
1244         BuildingBlock bb = new BuildingBlock();
1245         bb.setBpmnFlowName("AssignNetworkBB");
1246         bb.setKey("0");
1247         ebb.setBuildingBlock(bb);
1248         executeFlows.add(ebb);
1249         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock();
1250         BuildingBlock bb2 = new BuildingBlock();
1251         bb2.setBpmnFlowName("AssignNetworkBB");
1252         bb2.setKey("1");
1253         ebb2.setBuildingBlock(bb2);
1254         executeFlows.add(ebb2);
1255         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock();
1256         BuildingBlock bb3 = new BuildingBlock();
1257         bb3.setBpmnFlowName("CreateNetworkBB");
1258         bb3.setKey("0");
1259         ebb3.setBuildingBlock(bb3);
1260         executeFlows.add(ebb3);
1261         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock();
1262         BuildingBlock bb4 = new BuildingBlock();
1263         bb4.setBpmnFlowName("CreateNetworkBB");
1264         bb4.setKey("1");
1265         ebb4.setBuildingBlock(bb4);
1266         executeFlows.add(ebb4);
1267         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock();
1268         BuildingBlock bb5 = new BuildingBlock();
1269         bb5.setBpmnFlowName("ActivateNetworkBB");
1270         bb5.setKey("0");
1271         ebb5.setBuildingBlock(bb5);
1272         executeFlows.add(ebb5);
1273         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock();
1274         BuildingBlock bb6 = new BuildingBlock();
1275         bb6.setBpmnFlowName("ActivateNetworkBB");
1276         bb6.setKey("1");
1277         ebb6.setBuildingBlock(bb6);
1278         executeFlows.add(ebb6);
1279
1280         List<ExecuteBuildingBlock> sorted =
1281                 workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows, "createInstance");
1282         assertEqualsBulkFlowName(sorted, "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB", "AssignNetworkBB",
1283                 "CreateNetworkBB", "ActivateNetworkBB");
1284     }
1285
1286     @Test
1287     public void sortExecutionPathByObjectForVlanTaggingDeleteTest() throws Exception {
1288         List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
1289         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock();
1290         BuildingBlock bb = new BuildingBlock();
1291         bb.setBpmnFlowName("DeactivateNetworkBB");
1292         bb.setKey("0");
1293         ebb.setBuildingBlock(bb);
1294         executeFlows.add(ebb);
1295         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock();
1296         BuildingBlock bb2 = new BuildingBlock();
1297         bb2.setBpmnFlowName("DeactivateNetworkBB");
1298         bb2.setKey("1");
1299         ebb2.setBuildingBlock(bb2);
1300         executeFlows.add(ebb2);
1301         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock();
1302         BuildingBlock bb3 = new BuildingBlock();
1303         bb3.setBpmnFlowName("DeleteNetworkBB");
1304         bb3.setKey("0");
1305         ebb3.setBuildingBlock(bb3);
1306         executeFlows.add(ebb3);
1307         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock();
1308         BuildingBlock bb4 = new BuildingBlock();
1309         bb4.setBpmnFlowName("DeleteNetworkBB");
1310         bb4.setKey("1");
1311         ebb4.setBuildingBlock(bb4);
1312         executeFlows.add(ebb4);
1313         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock();
1314         BuildingBlock bb5 = new BuildingBlock();
1315         bb5.setBpmnFlowName("UnassignNetworkBB");
1316         bb5.setKey("0");
1317         ebb5.setBuildingBlock(bb5);
1318         executeFlows.add(ebb5);
1319         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock();
1320         BuildingBlock bb6 = new BuildingBlock();
1321         bb6.setBpmnFlowName("UnassignNetworkBB");
1322         bb6.setKey("1");
1323         ebb6.setBuildingBlock(bb6);
1324         executeFlows.add(ebb6);
1325
1326         List<ExecuteBuildingBlock> sorted =
1327                 workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows, "deleteInstance");
1328         assertEqualsBulkFlowName(sorted, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
1329                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB");
1330     }
1331
1332     @Test
1333     public void queryNorthBoundRequestCatalogDbNestedTest() throws MalformedURLException {
1334         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1335         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
1336                 "VNF-Macro-Replace", "SDNOVnfHealthCheckBB", "AAIUnsetVnfInMaintBB");
1337         northBoundRequest.setOrchestrationFlowList(orchFlows);
1338         List<OrchestrationFlow> macroFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1339                 "DeactivateVnfBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB");
1340
1341         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner("replaceInstance",
1342                 "Vnf", false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1343         when(catalogDbClient.getOrchestrationFlowByAction("VNF-Macro-Replace")).thenReturn(macroFlows);
1344         List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "replaceInstance",
1345                 WorkflowType.VNF, false, "my-custom-cloud-owner");
1346         assertEquals(flows.get(0).getFlowName(), "AAICheckVnfInMaintBB");
1347         assertEquals(flows.get(1).getFlowName(), "AAISetVnfInMaintBB");
1348         assertEquals(flows.get(2).getFlowName(), "DeactivateVfModuleBB");
1349         assertEquals(flows.get(3).getFlowName(), "DeleteVfModuleBB");
1350         assertEquals(flows.get(4).getFlowName(), "DeactivateVnfBB");
1351         assertEquals(flows.get(5).getFlowName(), "CreateVfModuleBB");
1352         assertEquals(flows.get(6).getFlowName(), "ActivateVfModuleBB");
1353         assertEquals(flows.get(7).getFlowName(), "ActivateVnfBB");
1354         assertEquals(flows.get(8).getFlowName(), "SDNOVnfHealthCheckBB");
1355         assertEquals(flows.get(9).getFlowName(), "AAIUnsetVnfInMaintBB");
1356     }
1357
1358     @Test
1359     public void queryNorthBoundRequestCatalogDbTransportTest() throws MalformedURLException {
1360         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1361         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
1362         northBoundRequest.setOrchestrationFlowList(orchFlows);
1363         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwnerAndServiceType(
1364                 "createInstance", "Service", true, "my-custom-cloud-owner", "TRANSPORT")).thenReturn(northBoundRequest);
1365
1366         List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "createInstance",
1367                 WorkflowType.SERVICE, true, "my-custom-cloud-owner", "TRANSPORT");
1368         assertEquals(flows.get(0).getFlowName(), "AssignServiceInstanceBB");
1369     }
1370
1371     @Test
1372     public void extractResourceIdAndTypeFromUriTest() {
1373         String uri = "/v6/serviceInstances/123";
1374         String uri2 = "/v6/serviceInstances/123/vnfs/1234";
1375         String uri3 = "/v6/serviceInstances";
1376         String uri4 = "/v6/serviceInstances/assign";
1377         String uri5 = "'/v6/serviceInstances/123/vnfs";
1378         String uri6 = "/v6/serviceInstances/123/vnfs/1234/someAction";
1379         String uri7 = "/v6/serviceInstances/123/vnfs/1234/vfModules/5678/replace";
1380         String uri8 = "/v6/serviceInstances/123/vnfs/1234/vfModules/scaleOut";
1381         Resource expected1 = new Resource(WorkflowType.SERVICE, "123", true);
1382         Resource expected2 = new Resource(WorkflowType.VNF, "1234", false);
1383         Resource expected3 = new Resource(WorkflowType.VNF, "1234", false);
1384         Resource expected4 = new Resource(WorkflowType.VFMODULE, "5678", false);
1385         Resource result = workflowAction.extractResourceIdAndTypeFromUri(uri);
1386         assertEquals(expected1.getResourceId(), result.getResourceId());
1387         assertEquals(expected1.getResourceType(), result.getResourceType());
1388         result = workflowAction.extractResourceIdAndTypeFromUri(uri2);
1389         assertEquals(expected2.getResourceId(), result.getResourceId());
1390         assertEquals(expected2.getResourceType(), result.getResourceType());
1391         result = workflowAction.extractResourceIdAndTypeFromUri(uri3);
1392         assertEquals("Service", result.getResourceType().toString());
1393         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1394         result = workflowAction.extractResourceIdAndTypeFromUri(uri4);
1395         assertEquals("Service", result.getResourceType().toString());
1396         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1397         result = workflowAction.extractResourceIdAndTypeFromUri(uri5);
1398         assertEquals("Vnf", result.getResourceType().toString());
1399         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1400         result = workflowAction.extractResourceIdAndTypeFromUri(uri6);
1401         assertEquals(expected3.getResourceId(), result.getResourceId());
1402         assertEquals(expected3.getResourceType(), result.getResourceType());
1403         result = workflowAction.extractResourceIdAndTypeFromUri(uri7);
1404         assertEquals(expected4.getResourceId(), result.getResourceId());
1405         assertEquals(expected4.getResourceType(), result.getResourceType());
1406         result = workflowAction.extractResourceIdAndTypeFromUri(uri8);
1407         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1408         assertEquals("VfModule", result.getResourceType().toString());
1409
1410     }
1411
1412     @Test
1413     public void extractResourceIdAndTypeFromUriInvalidTypeTest() {
1414         this.expectedException.expect(IllegalArgumentException.class);
1415         this.expectedException.expectMessage(containsString("Uri could not be parsed. No type found."));
1416         workflowAction.extractResourceIdAndTypeFromUri("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace");
1417     }
1418
1419     @Test
1420     public void extractResourceIdAndTypeFromUriInvalidUriTest() {
1421         this.expectedException.expect(IllegalArgumentException.class);
1422         this.expectedException.expectMessage(containsString("Uri could not be parsed:"));
1423         workflowAction.extractResourceIdAndTypeFromUri("something that doesn't match anything");
1424     }
1425
1426     @Test
1427     public void populateResourceIdsFromApiHandlerTest() {
1428         execution.setVariable("serviceInstanceId", "123");
1429         execution.setVariable("vnfId", "888");
1430         WorkflowResourceIds x = workflowAction.populateResourceIdsFromApiHandler(execution);
1431         assertEquals("123", x.getServiceInstanceId());
1432         assertEquals("888", x.getVnfId());
1433         assertNull(x.getVolumeGroupId());
1434     }
1435
1436     @Test
1437     public void validateResourceIdInAAITest() throws Exception {
1438         // SI
1439         RequestDetails reqDetails = new RequestDetails();
1440         SubscriberInfo subInfo = new SubscriberInfo();
1441         subInfo.setGlobalSubscriberId("id123");
1442         reqDetails.setSubscriberInfo(subInfo);
1443         RequestParameters reqParams = new RequestParameters();
1444         reqParams.setSubscriptionServiceType("subServiceType123");
1445         reqDetails.setRequestParameters(reqParams);
1446         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
1447         ServiceInstance si = new ServiceInstance();
1448         si.setServiceInstanceId("siId123");
1449         Optional<ServiceInstance> siOp = Optional.of(si);
1450         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp);
1451         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "111111"))
1452                 .thenReturn(Optional.empty());
1453         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123",
1454                 reqDetails, workflowResourceIds);
1455         assertEquals("siId123", id);
1456         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "111111",
1457                 reqDetails, workflowResourceIds);
1458         assertEquals("generatedId123", id2);
1459
1460         // Network
1461         L3Network network = new L3Network();
1462         network.setNetworkId("id123");
1463         network.setNetworkName("name123");
1464         workflowResourceIds.setServiceInstanceId("siId123");
1465         Optional<L3Network> opNetwork = Optional.of(network);
1466         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")).thenReturn(opNetwork);
1467         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "111111")).thenReturn(Optional.empty());
1468         id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "name123", reqDetails,
1469                 workflowResourceIds);
1470         assertEquals("id123", id);
1471         id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "111111", reqDetails,
1472                 workflowResourceIds);
1473         assertEquals("generatedId123", id2);
1474
1475         // Vnf
1476         GenericVnf vnf = new GenericVnf();
1477         vnf.setVnfId("id123");
1478         vnf.setVnfName("vnfName123");
1479         Optional<GenericVnf> opVnf = Optional.of(vnf);
1480         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "name123")).thenReturn(opVnf);
1481         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "111111")).thenReturn(Optional.empty());
1482         id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "name123", reqDetails,
1483                 workflowResourceIds);
1484         assertEquals("id123", id);
1485         id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "111111", reqDetails,
1486                 workflowResourceIds);
1487         assertEquals("generatedId123", id2);
1488
1489         // VfModule
1490         VfModules vfModules = new VfModules();
1491         VfModule vfModule = new VfModule();
1492         vfModule.setVfModuleId("id123");
1493         vfModule.setVfModuleName("name123");
1494         vfModules.getVfModule().add(vfModule);
1495         vnf.setVfModules(vfModules);
1496         workflowResourceIds.setVnfId("id123");
1497         when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf);
1498         id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "name123", reqDetails,
1499                 workflowResourceIds);
1500         assertEquals("id123", id);
1501
1502         GenericVnf vnf2 = new GenericVnf();
1503         VfModules vfModules2 = new VfModules();
1504         VfModule vfModule2 = new VfModule();
1505         vfModule2.setVfModuleId("id123");
1506         vfModule2.setVfModuleName("name123");
1507         vfModules2.getVfModule().add(vfModule2);
1508         vnf2.setVfModules(vfModules2);
1509         workflowResourceIds.setVnfId("id111");
1510         when(bbSetupUtils.getAAIGenericVnf("id111")).thenReturn(vnf2);
1511         id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "111111", reqDetails,
1512                 workflowResourceIds);
1513         assertEquals("generatedId123", id2);
1514
1515         // VolumeGroup
1516         VolumeGroup volumeGroup = new VolumeGroup();
1517         volumeGroup.setVolumeGroupId("id123");
1518         volumeGroup.setVolumeGroupName("name123");
1519         workflowResourceIds.setVnfId("id123");
1520         Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
1521         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "name123")).thenReturn(opVolumeGroup);
1522         id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails,
1523                 workflowResourceIds);
1524         assertEquals("id123", id);
1525
1526         workflowResourceIds.setVnfId("id444");
1527         when(bbSetupUtils.getAAIGenericVnf("id444")).thenReturn(vnf);
1528         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVfModule("id123", "id123", "111111"))
1529                 .thenReturn(opVolumeGroup);
1530         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id444", "111111")).thenReturn(Optional.empty());
1531         id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "111111", reqDetails,
1532                 workflowResourceIds);
1533         assertEquals("id123", id2);
1534     }
1535
1536     @Test
1537     public void handleRuntimeExceptionTest() {
1538         execution.setVariable("BPMN_javaExpMsg", "test runtime error message");
1539         execution.setVariable("testProcessKey", "testProcessKeyValue");
1540         try {
1541             workflowAction.handleRuntimeException(execution);
1542         } catch (BpmnError wfe) {
1543             assertEquals("MSOWorkflowException", wfe.getErrorCode());
1544         }
1545     }
1546
1547     @Ignore
1548     @Test
1549     public void traverseCatalogDbServiceMultipleNetworkTest() throws IOException, VrfBondingServiceException {
1550         execution.setVariable("testProcessKey", "testProcessKeyValue");
1551         Service service = new Service();
1552         List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
1553         NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
1554         networkCust.setModelCustomizationUUID("123");
1555         networkCustomizations.add(networkCust);
1556         service.setNetworkCustomizations(networkCustomizations);
1557         NetworkCollectionResourceCustomization collectionResourceCustomization =
1558                 new NetworkCollectionResourceCustomization();
1559         collectionResourceCustomization.setModelCustomizationUUID("123");
1560         CollectionResource collectionResource = new CollectionResource();
1561         collectionResource.setToscaNodeType("NetworkCollection");
1562         InstanceGroup instanceGroup = new InstanceGroup();
1563         List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
1564         CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization =
1565                 new CollectionResourceInstanceGroupCustomization();
1566         collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
1567         collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
1568         instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
1569         collectionResource.setInstanceGroup(instanceGroup);
1570         collectionResourceCustomization.setCollectionResource(collectionResource);;
1571         service.setModelUUID("abc");
1572         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
1573         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
1574         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
1575         doReturn(collectionResourceCustomization).when(catalogDbClient)
1576                 .getNetworkCollectionResourceCustomizationByID("123");
1577         String bpmnRequest = new String(Files
1578                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
1579         ObjectMapper mapper = new ObjectMapper();
1580         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
1581         List<Resource> resourceCounter = new ArrayList<>();
1582         thrown.expect(BpmnError.class);
1583         List<Pair<WorkflowType, String>> aaiResourceIds = new ArrayList<>();
1584         workflowAction.traverseCatalogDbService(execution, sIRequest, resourceCounter, aaiResourceIds);
1585     }
1586
1587     @Test
1588     public void sortVfModulesByBaseFirstTest() {
1589         List<Resource> resources = new ArrayList<>();
1590         Resource resource1 = new Resource(WorkflowType.VFMODULE, "111", false);
1591         resource1.setBaseVfModule(false);
1592         resources.add(resource1);
1593         Resource resource2 = new Resource(WorkflowType.VFMODULE, "222", false);
1594         resource2.setBaseVfModule(false);
1595         resources.add(resource2);
1596         Resource resource3 = new Resource(WorkflowType.VFMODULE, "333", false);
1597         resource3.setBaseVfModule(true);
1598         resources.add(resource3);
1599         List<Resource> result = workflowAction.sortVfModulesByBaseFirst(resources);
1600         assertEquals("333", result.get(0).getResourceId());
1601         assertEquals("222", result.get(1).getResourceId());
1602         assertEquals("111", result.get(2).getResourceId());
1603     }
1604
1605     @Test
1606     public void sortVfModulesByBaseLastTest() {
1607         List<Resource> resources = new ArrayList<>();
1608         Resource resource1 = new Resource(WorkflowType.VFMODULE, "111", false);
1609         resource1.setBaseVfModule(true);
1610         resources.add(resource1);
1611         Resource resource2 = new Resource(WorkflowType.VFMODULE, "222", false);
1612         resource2.setBaseVfModule(false);
1613         resources.add(resource2);
1614         Resource resource3 = new Resource(WorkflowType.VFMODULE, "333", false);
1615         resource3.setBaseVfModule(false);
1616         resources.add(resource3);
1617         List<Resource> result = workflowAction.sortVfModulesByBaseLast(resources);
1618         assertEquals("333", result.get(0).getResourceId());
1619         assertEquals("222", result.get(1).getResourceId());
1620         assertEquals("111", result.get(2).getResourceId());
1621     }
1622
1623     @Test
1624     public void findCatalogNetworkCollectionTest() {
1625         Service service = new Service();
1626         NetworkCollectionResourceCustomization networkCustomization = new NetworkCollectionResourceCustomization();
1627         networkCustomization.setModelCustomizationUUID("123");
1628         service.getCollectionResourceCustomizations().add(networkCustomization);
1629         doReturn(networkCustomization).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
1630         CollectionResourceCustomization customization = workflowAction.findCatalogNetworkCollection(execution, service);
1631         assertNotNull(customization);
1632     }
1633
1634     @Test
1635     public void findCatalogNetworkCollectionEmptyTest() {
1636         Service service = new Service();
1637         NetworkCollectionResourceCustomization networkCustomization = new NetworkCollectionResourceCustomization();
1638         networkCustomization.setModelCustomizationUUID("123");
1639         service.getCollectionResourceCustomizations().add(networkCustomization);
1640         CollectionResourceCustomization customization = workflowAction.findCatalogNetworkCollection(execution, service);
1641         assertNull(customization);
1642     }
1643
1644     @Test
1645     public void findCatalogNetworkCollectionMoreThanOneTest() {
1646         Service service = new Service();
1647         NetworkCollectionResourceCustomization networkCustomization1 = new NetworkCollectionResourceCustomization();
1648         networkCustomization1.setModelCustomizationUUID("123");
1649         NetworkCollectionResourceCustomization networkCustomization2 = new NetworkCollectionResourceCustomization();
1650         networkCustomization2.setModelCustomizationUUID("321");
1651         service.getCollectionResourceCustomizations().add(networkCustomization1);
1652         service.getCollectionResourceCustomizations().add(networkCustomization2);
1653         doReturn(networkCustomization1).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
1654         doReturn(networkCustomization2).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("321");
1655         workflowAction.findCatalogNetworkCollection(execution, service);
1656         assertEquals("Found multiple Network Collections in the Service model, only one per Service is supported.",
1657                 execution.getVariable("WorkflowActionErrorMessage"));
1658     }
1659
1660     @Test
1661     public void verifyLackOfNullPointerExceptionForNullResource() {
1662         ExecuteBuildingBlock result = null;
1663         try {
1664             result = workflowAction.buildExecuteBuildingBlock(new OrchestrationFlow(), null, null, null, null, null,
1665                     false, null, null, null, false, null, true);
1666         } catch (NullPointerException e) {
1667             fail("NullPointerException should not be thrown when 'resource' is null");
1668         }
1669         assertNotNull(result);
1670     }
1671
1672     @Test
1673     public void traverseAAIServiceTest() {
1674         List<Resource> resourceCounter = new ArrayList<>();
1675         String resourceId = "si0";
1676         List<Pair<WorkflowType, String>> aaiResourceIds = new ArrayList<>();
1677
1678         ServiceInstance serviceInstanceAAI = new ServiceInstance();
1679         serviceInstanceAAI.setServiceInstanceId(resourceId);
1680
1681         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstance = setServiceInstance();
1682         setGenericVnf();
1683         setVfModule(true);
1684         setVolumeGroup();
1685         setL3Network();
1686         setCollection();
1687         setConfiguration();
1688
1689         Configuration config = new Configuration();
1690         config.setConfigurationId("testConfigurationId2");
1691         serviceInstance.getConfigurations().add(config);
1692
1693         Relationship relationship1 = new Relationship();
1694         relationship1.setRelatedTo("vnfc");
1695         RelationshipList relationshipList1 = new RelationshipList();
1696         relationshipList1.getRelationship().add(relationship1);
1697
1698         Relationship relationship2 = new Relationship();
1699         relationship2.setRelatedTo("vpn-binding");
1700         RelationshipList relationshipList2 = new RelationshipList();
1701         relationshipList2.getRelationship().add(relationship2);
1702
1703         org.onap.aai.domain.yang.Configuration aaiConfiguration1 = new org.onap.aai.domain.yang.Configuration();
1704         aaiConfiguration1.setConfigurationId("testConfigurationId");
1705         aaiConfiguration1.setRelationshipList(relationshipList1);
1706
1707         org.onap.aai.domain.yang.Configuration aaiConfiguration2 = new org.onap.aai.domain.yang.Configuration();
1708         aaiConfiguration2.setConfigurationId("testConfigurationId2");
1709         aaiConfiguration2.setRelationshipList(relationshipList1);
1710
1711         try {
1712             doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById(resourceId);
1713             doReturn(serviceInstance).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
1714             doReturn(Optional.of(aaiConfiguration1)).when(aaiConfigurationResources)
1715                     .getConfiguration("testConfigurationId");
1716             doReturn(Optional.of(aaiConfiguration2)).when(aaiConfigurationResources)
1717                     .getConfiguration("testConfigurationId2");
1718             workflowAction.traverseAAIService(execution, resourceCounter, resourceId, aaiResourceIds);
1719             assertEquals(8, resourceCounter.size());
1720             assertTrue(resourceCounter.get(2).isBaseVfModule());
1721             assertThat(aaiResourceIds, sameBeanAs(getExpectedResourceIds()));
1722         } catch (Exception e) {
1723             fail("Unexpected exception was thrown.");
1724         }
1725     }
1726
1727     private List<Pair<WorkflowType, String>> getExpectedResourceIds() {
1728         List<Pair<WorkflowType, String>> resourceIds = new ArrayList<>();
1729         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VNF, "testVnfId1"));
1730         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VFMODULE, "testVfModuleId1"));
1731         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VOLUMEGROUP, "testVolumeGroupId1"));
1732         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.NETWORK, "testNetworkId1"));
1733         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.NETWORKCOLLECTION, "testId"));
1734         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.CONFIGURATION, "testConfigurationId"));
1735         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.CONFIGURATION, "testConfigurationId2"));
1736         return resourceIds;
1737     }
1738
1739     private List<OrchestrationFlow> createFlowList(String... flowNames) {
1740         List<OrchestrationFlow> result = new ArrayList<>();
1741         for (String flowName : flowNames) {
1742             OrchestrationFlow orchFlow = new OrchestrationFlow();
1743             orchFlow.setFlowName(flowName);
1744             result.add(orchFlow);
1745         }
1746         return result;
1747     }
1748
1749     private void assertEqualsBulkFlowName(List<ExecuteBuildingBlock> ebbs, String... flowNames) {
1750         for (int i = 0; i < ebbs.size(); i++) {
1751             assertEquals(ebbs.get(i).getBuildingBlock().getBpmnFlowName(), flowNames[i]);
1752         }
1753     }
1754 }