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