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