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