Add Cloud Owner
[so.git] / bpmn / so-bpmn-tasks / src / test / java / org / onap / so / bpmn / infrastructure / workflow / tasks / WorkflowActionTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.bpmn.infrastructure.workflow.tasks;
22
23 import static org.hamcrest.CoreMatchers.containsString;
24 import static org.hamcrest.CoreMatchers.equalTo;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNull;
27 import static org.junit.Assert.assertThat;
28 import static org.mockito.ArgumentMatchers.anyObject;
29 import static org.mockito.ArgumentMatchers.anyString;
30 import static org.mockito.Mockito.doReturn;
31 import static org.mockito.Mockito.when;
32
33 import java.io.IOException;
34 import java.net.MalformedURLException;
35 import java.nio.file.Files;
36 import java.nio.file.Paths;
37 import java.util.ArrayList;
38 import java.util.Arrays;
39 import java.util.List;
40 import java.util.Optional;
41 import java.util.UUID;
42
43 import org.camunda.bpm.engine.delegate.BpmnError;
44 import org.camunda.bpm.engine.delegate.DelegateExecution;
45 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
46 import org.junit.Before;
47 import org.junit.Ignore;
48 import org.junit.Rule;
49 import org.junit.Test;
50 import org.junit.rules.ExpectedException;
51 import org.mockito.InjectMocks;
52 import org.onap.aai.domain.yang.GenericVnf;
53 import org.onap.aai.domain.yang.L3Network;
54 import org.onap.aai.domain.yang.ServiceInstance;
55 import org.onap.aai.domain.yang.VfModule;
56 import org.onap.aai.domain.yang.VfModules;
57 import org.onap.aai.domain.yang.VolumeGroup;
58 import org.onap.so.bpmn.BaseTaskTest;
59 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
60 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
61 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
62 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
63 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
64 import org.onap.so.db.catalog.beans.CollectionResource;
65 import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
66 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
67 import org.onap.so.db.catalog.beans.HeatEnvironment;
68 import org.onap.so.db.catalog.beans.HeatTemplate;
69 import org.onap.so.db.catalog.beans.InstanceGroup;
70 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
71 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
72 import org.onap.so.db.catalog.beans.Service;
73 import org.onap.so.db.catalog.beans.VfModuleCustomization;
74 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
75 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
76 import org.onap.so.serviceinstancebeans.RequestDetails;
77 import org.onap.so.serviceinstancebeans.RequestParameters;
78 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
79 import org.onap.so.serviceinstancebeans.SubscriberInfo;
80
81 import com.fasterxml.jackson.databind.ObjectMapper;
82
83 public class WorkflowActionTest extends BaseTaskTest {
84         @InjectMocks
85         protected WorkflowAction workflowAction;
86         
87         private DelegateExecution execution;
88         
89         @Rule
90         public ExpectedException thrown = ExpectedException.none();
91         
92         @Before
93         public void before() throws Exception {
94                 execution = new DelegateExecutionFake();
95                 org.onap.aai.domain.yang.ServiceInstance servInstance = new org.onap.aai.domain.yang.ServiceInstance();
96                 servInstance.setServiceInstanceId("TEST");
97                 when(bbSetupUtils.getAAIServiceInstanceByName(anyString(), anyObject())).thenReturn(servInstance);
98                 workflowAction.setBbInputSetupUtils(bbSetupUtils);
99                 workflowAction.setBbInputSetup(bbInputSetup);
100         }
101         /**
102          * ALACARTE TESTS
103          */
104         @Test
105         public void selectExecutionListALaCarteNetworkCreateTest() throws Exception{
106                 String gAction = "createInstance";
107                 String resource = "Network";
108                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
109                 execution.setVariable("requestAction", gAction);
110                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
111                 execution.setVariable("bpmnRequest", bpmnRequest);              
112                 execution.setVariable("aLaCarte", true);
113                 execution.setVariable("apiVersion", "7");
114                 execution.setVariable("requestUri", "v6/networks/123");
115                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
116                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
117                 List<OrchestrationFlow> orchFlows = createFlowList("AssignNetwork1802BB","CreateNetworkBB","ActivateNetworkBB");
118                 northBoundRequest.setOrchestrationFlowList(orchFlows);
119
120                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
121                 workflowAction.selectExecutionList(execution);
122                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
123                 assertEqualsBulkFlowName(ebbs,"AssignNetwork1802BB","CreateNetworkBB","ActivateNetworkBB");
124         }
125         
126         @Test
127         public void selectExecutionListALaCarteNetworkDeleteTest() throws Exception{
128                 String gAction = "deleteInstance";
129                 String resource = "Network";
130                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
131                 execution.setVariable("requestAction", gAction);
132                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
133                 execution.setVariable("bpmnRequest", bpmnRequest);              
134                 execution.setVariable("aLaCarte", true);
135                 execution.setVariable("apiVersion", "7");
136                 execution.setVariable("requestUri", "v6/networks/123");
137                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
138                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
139                 List<OrchestrationFlow> orchFlows = createFlowList("DeactivateNetworkBB","DeleteNetworkBB","UnassignNetwork1802BB");
140                 northBoundRequest.setOrchestrationFlowList(orchFlows);
141                 
142                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,true,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
143                 workflowAction.selectExecutionList(execution);
144                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
145                 assertEqualsBulkFlowName(ebbs,"DeactivateNetworkBB","DeleteNetworkBB","UnassignNetwork1802BB");
146         }
147         
148         @Test
149         public void selectExecutionListALaCarteServiceCreateTest() throws Exception{
150                 String gAction = "createInstance";
151                 String resource = "Service";
152                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
153                 execution.setVariable("requestAction", gAction);
154                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
155                 execution.setVariable("bpmnRequest", bpmnRequest);              
156                 execution.setVariable("aLaCarte", true);
157                 execution.setVariable("apiVersion", "7");
158                 execution.setVariable("requestUri", "v6/serviceInstances/123");
159                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
160                 
161                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
162                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","ActivateServiceInstanceBB");
163                 northBoundRequest.setOrchestrationFlowList(orchFlows);  
164                 
165                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,true,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
166                 workflowAction.selectExecutionList(execution);
167                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
168                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","ActivateServiceInstanceBB");
169         }
170         
171         /**
172          * SERVICE MACRO TESTS
173          */
174         @Test
175         public void selectExecutionListServiceMacroAssignTest() throws Exception{
176                 String gAction = "assignInstance";
177                 String resource = "Service";
178                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
179                 execution.setVariable("requestAction", gAction);
180                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
181                 execution.setVariable("bpmnRequest", bpmnRequest);
182                 execution.setVariable("aLaCarte", false);
183                 execution.setVariable("apiVersion", "7");
184                 execution.setVariable("requestUri", "v6/serviceInstances/123");
185                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
186                 
187                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
188                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB");
189                 northBoundRequest.setOrchestrationFlowList(orchFlows);
190                 
191                 VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
192                 vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
193                 HeatEnvironment volumeHeatEnv = new HeatEnvironment();
194                 vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
195                 org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
196                 HeatTemplate volumeHeatTemplate = new HeatTemplate();
197                 vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
198                 vfModuleCustomization.setVfModule(vfModule);
199                 
200                 VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
201                 vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
202                 HeatEnvironment heatEnvironment = new HeatEnvironment();
203                 vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
204                 org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
205                 HeatTemplate moduleHeatTemplate = new HeatTemplate();
206                 vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
207                 vfModuleCustomization2.setVfModule(vfModule2);
208                 
209                 VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
210                 vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
211                 
212                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
213                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f")).thenReturn(vfModuleCustomization);
214                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8")).thenReturn(vfModuleCustomization2);
215                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969")).thenReturn(vfModuleCustomization3);
216                 workflowAction.selectExecutionList(execution);
217                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
218                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB","AssignVfModuleBB","AssignVfModuleBB");
219         }
220         
221         @Test
222         public void selectExecutionListServiceMacroActivateTest() throws Exception{
223                 String gAction = "activateInstance";
224                 String resource = "Service";
225                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
226                 execution.setVariable("requestAction", gAction);
227                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
228                 execution.setVariable("bpmnRequest", bpmnRequest);              
229                 execution.setVariable("aLaCarte", false);
230                 execution.setVariable("apiVersion", "7");
231                 execution.setVariable("requestUri", "v6/serviceInstances/si0");
232                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
233
234                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
235                 List<OrchestrationFlow> orchFlows = createFlowList("CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB"
236                                 ,"ActivateVnfBB","ActivateServiceInstanceBB");
237                 northBoundRequest.setOrchestrationFlowList(orchFlows);  
238                 
239                 ServiceInstance serviceInstanceAAI = new ServiceInstance();
240                 serviceInstanceAAI.setServiceInstanceId("si0");
241                 org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO = new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
242                 org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf = new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
243                 vnf.setVnfId("vnf0");
244                 
245                 org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
246                 vfModule.setVfModuleId("vfModule0");
247                 vnf.getVfModules().add(vfModule);
248                 org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
249                 vfModule2.setVfModuleId("vfModule1");
250                 vnf.getVfModules().add(vfModule2);
251                 
252                 org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup = new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
253                 volumeGroup.setVolumeGroupId("volumeGroup0");
254                 vnf.getVolumeGroups().add(volumeGroup);
255                 
256                 serviceInstanceMSO.getVnfs().add(vnf);
257                 
258                 doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("si0");
259                 doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
260                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
261                 workflowAction.selectExecutionList(execution);
262                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
263                 assertEqualsBulkFlowName(ebbs,"CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","ActivateVfModuleBB","ActivateVnfBB","ActivateServiceInstanceBB");
264                 assertEquals("volumeGroup0", ebbs.get(0).getWorkflowResourceIds().getVolumeGroupId());
265                 assertEquals("volumeGroup0", ebbs.get(1).getWorkflowResourceIds().getVolumeGroupId());
266                 assertEquals("vfModule0", ebbs.get(2).getWorkflowResourceIds().getVfModuleId());
267                 assertEquals("vfModule1", ebbs.get(3).getWorkflowResourceIds().getVfModuleId());
268                 assertEquals("vfModule0", ebbs.get(4).getWorkflowResourceIds().getVfModuleId());
269                 assertEquals("vfModule1", ebbs.get(5).getWorkflowResourceIds().getVfModuleId());
270                 assertEquals("vnf0", ebbs.get(6).getWorkflowResourceIds().getVnfId());
271                 assertEquals("si0", ebbs.get(7).getWorkflowResourceIds().getServiceInstanceId());
272
273         }
274         
275         @Test
276         public void selectExecutionListServiceMacroDeactivateTest() throws Exception{
277                 String gAction = "deactivateInstance";
278                 String resource = "Service";
279                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
280                 execution.setVariable("requestAction", gAction);
281                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
282                 execution.setVariable("bpmnRequest", bpmnRequest);              
283                 execution.setVariable("aLaCarte", false);
284                 execution.setVariable("apiVersion", "7");
285                 execution.setVariable("requestUri", "v6/serviceInstances/123");
286                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
287                 
288                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
289                 List<OrchestrationFlow> orchFlows = createFlowList("DeactivateServiceInstanceBB");
290                 northBoundRequest.setOrchestrationFlowList(orchFlows);  
291                 
292                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
293                 workflowAction.selectExecutionList(execution);
294                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
295                 assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"DeactivateServiceInstanceBB");
296         }
297
298         @Test
299         public void selectExecutionListServiceMacroEmptyServiceTest() throws Exception{
300                 String gAction = "createInstance";
301                 String resource = "Service";
302                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
303                 execution.setVariable("requestAction", gAction);
304                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
305                 execution.setVariable("bpmnRequest", bpmnRequest);                      
306                 execution.setVariable("aLaCarte", false);
307                 execution.setVariable("apiVersion", "7");
308                 execution.setVariable("requestUri", "v6/serviceInstances/123");
309                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
310                 
311                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
312                 northBoundRequest.setIsToplevelflow(true);
313                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB"
314                                 ,"CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"
315                                 ,"ActivateVnfBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
316                 northBoundRequest.setOrchestrationFlowList(orchFlows);                  
317                 
318                 Service service = new Service();
319                 doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
320                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
321                 workflowAction.selectExecutionList(execution);
322                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
323                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","ActivateServiceInstanceBB");
324         }
325         
326         @Test
327         public void selectExecutionListServiceMacroCreateJustNetworkTest() throws Exception{
328                 String gAction = "createInstance";
329                 String resource = "Service";
330                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
331                 execution.setVariable("requestAction", gAction);
332                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
333                 execution.setVariable("bpmnRequest", bpmnRequest);                      
334                 execution.setVariable("aLaCarte", false);
335                 execution.setVariable("apiVersion", "7");
336                 execution.setVariable("requestUri", "v6/serviceInstances/123");
337                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
338                 
339                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
340                 northBoundRequest.setIsToplevelflow(true);
341                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB"
342                                 ,"CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"
343                                 ,"ActivateVnfBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
344                 northBoundRequest.setOrchestrationFlowList(orchFlows);                  
345                 
346                 Service service = new Service();
347                 NetworkResourceCustomization networkCustomization = new NetworkResourceCustomization();
348                 networkCustomization.setModelCustomizationUUID("1234");
349                 service.getNetworkCustomizations().add(networkCustomization);
350                 doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
351                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
352                 workflowAction.selectExecutionList(execution);
353                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
354                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","ActivateServiceInstanceBB");
355         }
356         
357         @Test
358         public void selectExecutionListServiceMacroCreateWithNetworkCollectionTest() throws Exception{
359                 String gAction = "createInstance";
360                 String resource = "Service";
361                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
362                 execution.setVariable("requestAction", gAction);
363                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
364                 execution.setVariable("bpmnRequest", bpmnRequest);                      
365                 execution.setVariable("aLaCarte", false);
366                 execution.setVariable("apiVersion", "7");
367                 execution.setVariable("requestUri", "v6/serviceInstances/123");
368                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
369                 
370                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
371                 northBoundRequest.setIsToplevelflow(true);
372                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB"
373                                 ,"CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"
374                                 ,"ActivateVnfBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
375                 northBoundRequest.setOrchestrationFlowList(orchFlows);                  
376                 
377                 Service service = new Service();
378                 List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
379                 NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
380                 networkCust.setModelCustomizationUUID("123");
381                 networkCustomizations.add(networkCust);
382                 service.setNetworkCustomizations(networkCustomizations);
383                 NetworkCollectionResourceCustomization collectionResourceCustomization = new NetworkCollectionResourceCustomization();
384                 collectionResourceCustomization.setModelCustomizationUUID("123");
385                 
386                 CollectionResource collectionResource = new CollectionResource();
387                 collectionResource.setToscaNodeType("NetworkCollection");
388                 InstanceGroup instanceGroup = new InstanceGroup();
389                 instanceGroup.setToscaNodeType("NetworkCollectionResource");
390                 instanceGroup.setCollectionNetworkResourceCustomizations(new ArrayList<>());
391                 CollectionNetworkResourceCustomization collectionNetworkResourceCust = new CollectionNetworkResourceCustomization();
392                 collectionNetworkResourceCust.setModelCustomizationUUID("123");
393                 collectionNetworkResourceCust.setNetworkResourceCustomization(collectionResourceCustomization);
394                 instanceGroup.getCollectionNetworkResourceCustomizations().add(collectionNetworkResourceCust );
395                 List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
396                 CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization = new CollectionResourceInstanceGroupCustomization();
397                 collectionInstanceGroupCustomization.setModelCustomizationUUID("123");
398                 collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
399                 collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
400                 collectionInstanceGroupCustomization.setInstanceGroup(instanceGroup);
401                 collectionInstanceGroupCustomization.setCollectionResourceCust(collectionResourceCustomization);
402                 instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
403                 collectionResource.setInstanceGroup(instanceGroup);
404                 collectionResourceCustomization.setCollectionResource(collectionResource);;
405                 service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
406                 doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
407                 doReturn(collectionResourceCustomization).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
408                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
409                 workflowAction.selectExecutionList(execution);
410                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
411                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB"
412                                 ,"AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
413                 assertEquals("Network id not empty", !ebbs.get(2).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
414                 assertEquals("Network id not empty", !ebbs.get(3).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
415                 assertEquals("Network id not empty", !ebbs.get(4).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
416                 assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
417                                 ebbs.get(2).getWorkflowResourceIds().getNetworkId() == ebbs.get(3).getWorkflowResourceIds().getNetworkId() 
418                                 && ebbs.get(3).getWorkflowResourceIds().getNetworkId() == ebbs.get(4).getWorkflowResourceIds().getNetworkId(), true);
419                 assertEquals("Network id not empty", !ebbs.get(5).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
420                 assertEquals("Network id not empty", !ebbs.get(6).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
421                 assertEquals("Network id not empty", !ebbs.get(7).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
422                 assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
423                                 ebbs.get(5).getWorkflowResourceIds().getNetworkId() == ebbs.get(6).getWorkflowResourceIds().getNetworkId() 
424                                 && ebbs.get(6).getWorkflowResourceIds().getNetworkId() == ebbs.get(7).getWorkflowResourceIds().getNetworkId(), true);
425                 assertEquals("Network id not empty", !ebbs.get(8).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
426                 assertEquals("Network id not empty", !ebbs.get(9).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
427                 assertEquals("Network id not empty", !ebbs.get(10).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
428                 assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
429                                 ebbs.get(8).getWorkflowResourceIds().getNetworkId() == ebbs.get(9).getWorkflowResourceIds().getNetworkId() 
430                                 && ebbs.get(9).getWorkflowResourceIds().getNetworkId() == ebbs.get(10).getWorkflowResourceIds().getNetworkId(), true);
431         }
432
433         @Test
434         public void selectExecutionListServiceMacroCreateWithUserParams() throws Exception{
435                 String gAction = "createInstance";
436                 String resource = "Service";
437                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
438                 execution.setVariable("requestAction", gAction);
439                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
440                 execution.setVariable("bpmnRequest", bpmnRequest);                      
441                 execution.setVariable("aLaCarte", false);
442                 execution.setVariable("apiVersion", "7");
443                 execution.setVariable("requestUri", "v6/serviceInstances/123");
444                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
445                 
446                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
447                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB"
448                                 ,"CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"
449                                 ,"ActivateVnfBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
450                 northBoundRequest.setOrchestrationFlowList(orchFlows);                  
451                 
452                 Service service = new Service();
453                 service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
454                 
455                 VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
456                 vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
457                 HeatEnvironment volumeHeatEnv = new HeatEnvironment();
458                 vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
459                 org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
460                 HeatTemplate volumeHeatTemplate = new HeatTemplate();
461                 vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
462                 vfModuleCustomization.setVfModule(vfModule);
463                 
464                 VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
465                 vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
466                 HeatEnvironment heatEnvironment = new HeatEnvironment();
467                 vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
468                 org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
469                 HeatTemplate moduleHeatTemplate = new HeatTemplate();
470                 vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
471                 vfModuleCustomization2.setVfModule(vfModule2);
472                 
473                 VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
474                 vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
475                 
476                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
477                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f")).thenReturn(vfModuleCustomization);
478                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8")).thenReturn(vfModuleCustomization2);
479                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969")).thenReturn(vfModuleCustomization3);
480                 when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
481                 workflowAction.selectExecutionList(execution);
482                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
483                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB","AssignVfModuleBB","AssignVfModuleBB","CreateVolumeGroupBB"
484                                 ,"ActivateVolumeGroupBB","CreateVfModuleBB","CreateVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","ActivateVfModuleBB","ActivateVfModuleBB","ActivateVnfBB","ActivateServiceInstanceBB");
485                 assertEquals(3,ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
486                 int randomUUIDLength = UUID.randomUUID().toString().length();
487                 assertEquals(randomUUIDLength,ebbs.get(1).getWorkflowResourceIds().getVnfId().length());
488                 assertEquals(randomUUIDLength,ebbs.get(2).getWorkflowResourceIds().getVolumeGroupId().length());
489                 assertEquals(randomUUIDLength,ebbs.get(3).getWorkflowResourceIds().getVfModuleId().length());
490                 assertEquals(randomUUIDLength,ebbs.get(4).getWorkflowResourceIds().getVfModuleId().length());
491                 assertEquals(randomUUIDLength,ebbs.get(5).getWorkflowResourceIds().getVfModuleId().length());
492                 assertEquals(randomUUIDLength,ebbs.get(6).getWorkflowResourceIds().getVolumeGroupId().length());
493                 assertEquals(randomUUIDLength,ebbs.get(7).getWorkflowResourceIds().getVolumeGroupId().length());
494                 assertEquals(randomUUIDLength,ebbs.get(8).getWorkflowResourceIds().getVfModuleId().length());
495                 assertEquals(randomUUIDLength,ebbs.get(9).getWorkflowResourceIds().getVfModuleId().length());
496                 assertEquals(randomUUIDLength,ebbs.get(10).getWorkflowResourceIds().getVfModuleId().length());
497                 assertEquals(randomUUIDLength,ebbs.get(11).getWorkflowResourceIds().getVfModuleId().length());
498                 assertEquals(randomUUIDLength,ebbs.get(12).getWorkflowResourceIds().getVfModuleId().length());
499                 assertEquals(randomUUIDLength,ebbs.get(13).getWorkflowResourceIds().getVfModuleId().length());
500                 assertEquals(randomUUIDLength,ebbs.get(14).getWorkflowResourceIds().getVnfId().length());
501                 assertEquals(3,ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
502                 assertEquals(true, execution.getVariable("homing"));
503         }
504         
505         @Test
506         public void selectExecutionListServiceMacroDeleteTest() throws Exception{
507                 String gAction = "deleteInstance";
508                 String resource = "Service";
509                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
510                 execution.setVariable("requestAction", gAction);
511                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
512                 execution.setVariable("bpmnRequest", bpmnRequest);              
513                 execution.setVariable("aLaCarte", false);
514                 execution.setVariable("apiVersion", "7");
515                 execution.setVariable("requestUri", "v6/serviceInstances/123");
516                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
517                 
518                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
519                 List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB","DeleteVfModuleBB","DeactivateVolumeGroupBB","DeleteVolumeGroupBB","DeactivateVnfBB","DeactivateNetworkBB"
520                                 ,"DeleteNetworkBB","DeleteNetworkCollectionBB","DeactivateServiceInstanceBB","UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignNetworkBB","UnassignServiceInstanceBB");
521                 northBoundRequest.setOrchestrationFlowList(orchFlows);  
522                 
523                 ServiceInstance serviceInstanceAAI = new ServiceInstance();
524                 serviceInstanceAAI.setServiceInstanceId("aaisi123");
525                 org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO = new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
526                 org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf = new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
527                 vnf.setVnfId("vnfId123");
528                 
529                 org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
530                 vfModule.setVfModuleId("vfModule1");
531                 vnf.getVfModules().add(vfModule);
532                 org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
533                 vfModule2.setVfModuleId("vfModule2");
534                 vnf.getVfModules().add(vfModule2);
535                 
536                 org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup = new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
537                 volumeGroup.setVolumeGroupId("vg123");
538                 vnf.getVolumeGroups().add(volumeGroup);
539                 
540                 serviceInstanceMSO.getVnfs().add(vnf);
541                 
542                 doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
543                 doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
544                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
545                 workflowAction.selectExecutionList(execution);
546                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
547                 assertEqualsBulkFlowName(ebbs,"DeactivateVfModuleBB","DeactivateVfModuleBB","DeleteVfModuleBB","DeleteVfModuleBB","DeactivateVolumeGroupBB","DeleteVolumeGroupBB","DeactivateVnfBB"
548                                 ,"DeactivateServiceInstanceBB","UnassignVfModuleBB","UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignServiceInstanceBB");
549         }
550         
551         @Test
552         public void selectExecutionListServiceMacroUnassignTest() throws Exception{
553                 String gAction = "unassignInstance";
554                 String resource = "Service";
555                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
556                 execution.setVariable("requestAction", gAction);
557                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
558                 execution.setVariable("bpmnRequest", bpmnRequest);                      
559                 execution.setVariable("aLaCarte", false);
560                 execution.setVariable("apiVersion", "7");
561                 execution.setVariable("requestUri", "v6/serviceInstances/123");
562                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
563                 
564                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
565                 List<OrchestrationFlow> orchFlows = createFlowList("UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignNetworkBB","UnassignServiceInstanceBB");
566                 northBoundRequest.setOrchestrationFlowList(orchFlows);          
567                 
568                 ServiceInstance serviceInstanceAAI = new ServiceInstance();
569                 serviceInstanceAAI.setServiceInstanceId("aaisi123");
570                 org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO = new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
571                 org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf = new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
572                 vnf.setVnfId("vnfId123");
573                 
574                 org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
575                 vfModule.setVfModuleId("vfModule1");
576                 vnf.getVfModules().add(vfModule);
577                 org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
578                 vfModule2.setVfModuleId("vfModule2");
579                 vnf.getVfModules().add(vfModule2);
580                 
581                 org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup = new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
582                 volumeGroup.setVolumeGroupId("vg123");
583                 vnf.getVolumeGroups().add(volumeGroup);
584                 
585                 serviceInstanceMSO.getVnfs().add(vnf);
586                 
587                 doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
588                 doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
589                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
590                 workflowAction.selectExecutionList(execution);
591                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
592                 assertEqualsBulkFlowName(ebbs,"UnassignVfModuleBB","UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignServiceInstanceBB");
593         }
594         
595         @Test
596         public void selectExecutionListServiceMacroDeleteNetworkCollectionTest() throws Exception{
597                 String gAction = "deleteInstance";
598                 String resource = "Service";
599                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
600                 execution.setVariable("requestAction", gAction);
601                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
602                 execution.setVariable("bpmnRequest", bpmnRequest);                      
603                 execution.setVariable("aLaCarte", false);
604                 execution.setVariable("apiVersion", "7");
605                 execution.setVariable("requestUri", "v6/serviceInstances/123");
606                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
607                 
608                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
609                 List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB","DeleteVfModuleBB","DeactivateVolumeGroupBB","DeleteVolumeGroupBB","DeactivateVnfBB","DeactivateNetworkBB"
610                                 ,"DeleteNetworkBB","DeleteNetworkCollectionBB","DeactivateServiceInstanceBB","UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignNetworkBB","UnassignServiceInstanceBB");
611                 northBoundRequest.setOrchestrationFlowList(orchFlows);  
612                 
613                 ServiceInstance serviceInstanceAAI = new ServiceInstance();
614                 serviceInstanceAAI.setServiceInstanceId("aaisi123");
615                 org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO = new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
616                 
617                 org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network = new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
618                 network.setNetworkId("123");
619                 serviceInstanceMSO.getNetworks().add(network);
620                 org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network2 = new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
621                 network2.setNetworkId("321");
622                 serviceInstanceMSO.getNetworks().add(network2);
623                 
624                 Collection collection = new Collection();
625                 serviceInstanceMSO.setCollection(collection);
626                 
627                 doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
628                 doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
629                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
630                 workflowAction.selectExecutionList(execution);
631                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
632                 assertEqualsBulkFlowName(ebbs,"DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeleteNetworkCollectionBB"
633                                 ,"DeactivateServiceInstanceBB","UnassignServiceInstanceBB");
634         }
635         
636         @Ignore
637         @Test
638         public void selectExecutionListNetworkCollectionMacroCreate() throws Exception{
639                 String gAction = "createInstance";
640                 String resource = "NetworkCollection";
641                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
642                 execution.setVariable("requestAction", gAction);
643                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/CreateNetworkCollection.json")));
644                 execution.setVariable("bpmnRequest", bpmnRequest);              
645                 execution.setVariable("aLaCarte", false);
646                 execution.setVariable("apiVersion", "7");
647                 execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
648                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
649                 
650                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
651                 List<OrchestrationFlow> orchFlows = createFlowList("CreateNetworkCollectionBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","ActivateNetworkCollectionBB");
652                 northBoundRequest.setOrchestrationFlowList(orchFlows);
653                 
654                 Service service = new Service();
655                 CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
656                 CollectionResource collectionResource = new CollectionResource();
657                 collectionResource.setToscaNodeType("Data NetworkCollection Data");
658                 collectionResourceCustomization.setCollectionResource(collectionResource);
659                 service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
660                 
661                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
662                 when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
663                 workflowAction.selectExecutionList(execution);
664                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
665                 assertEqualsBulkFlowName(ebbs,"CreateNetworkCollectionBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","ActivateNetworkCollectionBB");
666         }
667         
668         @Ignore
669         @Test
670         public void selectExecutionListNetworkCollectionMacroDelete() throws Exception{
671                 String gAction = "deleteInstance";
672                 String resource = "NetworkCollection";
673                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
674                 execution.setVariable("requestAction", gAction);
675                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/CreateNetworkCollection.json")));
676                 execution.setVariable("bpmnRequest", bpmnRequest);                      
677                 execution.setVariable("aLaCarte", false);
678                 execution.setVariable("apiVersion", "7");
679                 execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
680                 execution.setVariable("cloudOwner", "my-custom-cloud-owner");
681                 
682                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
683                 List<OrchestrationFlow> orchFlows = createFlowList("DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkCollectionBB","DeleteNetworkCollectionBB");
684                 northBoundRequest.setOrchestrationFlowList(orchFlows);          
685                 
686                 Service service = new Service();
687                 CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
688                 CollectionResource collectionResource = new CollectionResource();
689                 collectionResource.setToscaNodeType("Data NetworkCollection Data");
690                 collectionResourceCustomization.setCollectionResource(collectionResource);
691                 service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
692                 
693                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
694                 when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
695                 workflowAction.selectExecutionList(execution);
696                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
697                 assertEqualsBulkFlowName(ebbs,"DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkCollectionBB"
698                                 ,"DeleteNetworkCollectionBB");
699         }
700         
701         /**
702          * WorkflowActionBB Tests
703          */
704         
705         @Test
706         public void pluralTest() {
707                 List<String> items = Arrays.asList(
708                                 "serviceInstances, Service",
709                                 "vnfs, Vnf",
710                                 "vfModules, VfModule",
711                                 "networks, Network",
712                                 "invalidNames, invalidNames");
713                 items.forEach(item -> {
714                         String[] split = item.split(",");
715                         String type = split[0].trim();
716                         String expected = split[1].trim();
717                         assertThat(workflowAction.convertTypeFromPlural(type), equalTo(expected));
718                 });
719         }
720         
721         @Test
722         public void sortExecutionPathByObjectForVlanTaggingCreateTest() throws Exception{
723                 List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
724                 ExecuteBuildingBlock ebb = new ExecuteBuildingBlock();
725                 BuildingBlock bb = new BuildingBlock();
726                 bb.setBpmnFlowName("AssignNetworkBB");
727                 bb.setKey("0");
728                 ebb.setBuildingBlock(bb);
729                 executeFlows.add(ebb);
730                 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock();
731                 BuildingBlock bb2 = new BuildingBlock();
732                 bb2.setBpmnFlowName("AssignNetworkBB");
733                 bb2.setKey("1");
734                 ebb2.setBuildingBlock(bb2);
735                 executeFlows.add(ebb2);
736                 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock();
737                 BuildingBlock bb3 = new BuildingBlock();
738                 bb3.setBpmnFlowName("CreateNetworkBB");
739                 bb3.setKey("0");
740                 ebb3.setBuildingBlock(bb3);
741                 executeFlows.add(ebb3);
742                 ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock();
743                 BuildingBlock bb4 = new BuildingBlock();
744                 bb4.setBpmnFlowName("CreateNetworkBB");
745                 bb4.setKey("1");
746                 ebb4.setBuildingBlock(bb4);
747                 executeFlows.add(ebb4);
748                 ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock();
749                 BuildingBlock bb5 = new BuildingBlock();
750                 bb5.setBpmnFlowName("ActivateNetworkBB");
751                 bb5.setKey("0");
752                 ebb5.setBuildingBlock(bb5);
753                 executeFlows.add(ebb5);
754                 ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock();
755                 BuildingBlock bb6 = new BuildingBlock();
756                 bb6.setBpmnFlowName("ActivateNetworkBB");
757                 bb6.setKey("1");
758                 ebb6.setBuildingBlock(bb6);
759                 executeFlows.add(ebb6);
760
761                 List<ExecuteBuildingBlock> sorted = workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows,"createInstance");
762                 assertEqualsBulkFlowName(sorted,"AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB");
763         }
764         
765         @Test
766         public void sortExecutionPathByObjectForVlanTaggingDeleteTest() throws Exception{
767                 List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
768                 ExecuteBuildingBlock ebb = new ExecuteBuildingBlock();
769                 BuildingBlock bb = new BuildingBlock();
770                 bb.setBpmnFlowName("DeactivateNetworkBB");
771                 bb.setKey("0");
772                 ebb.setBuildingBlock(bb);
773                 executeFlows.add(ebb);
774                 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock();
775                 BuildingBlock bb2 = new BuildingBlock();
776                 bb2.setBpmnFlowName("DeactivateNetworkBB");
777                 bb2.setKey("1");
778                 ebb2.setBuildingBlock(bb2);
779                 executeFlows.add(ebb2);
780                 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock();
781                 BuildingBlock bb3 = new BuildingBlock();
782                 bb3.setBpmnFlowName("DeleteNetworkBB");
783                 bb3.setKey("0");
784                 ebb3.setBuildingBlock(bb3);
785                 executeFlows.add(ebb3);
786                 ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock();
787                 BuildingBlock bb4 = new BuildingBlock();
788                 bb4.setBpmnFlowName("DeleteNetworkBB");
789                 bb4.setKey("1");
790                 ebb4.setBuildingBlock(bb4);
791                 executeFlows.add(ebb4);
792                 ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock();
793                 BuildingBlock bb5 = new BuildingBlock();
794                 bb5.setBpmnFlowName("UnassignNetworkBB");
795                 bb5.setKey("0");
796                 ebb5.setBuildingBlock(bb5);
797                 executeFlows.add(ebb5);
798                 ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock();
799                 BuildingBlock bb6 = new BuildingBlock();
800                 bb6.setBpmnFlowName("UnassignNetworkBB");
801                 bb6.setKey("1");
802                 ebb6.setBuildingBlock(bb6);
803                 executeFlows.add(ebb6);
804                 
805                 List<ExecuteBuildingBlock> sorted = workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows,"deleteInstance");
806                 assertEqualsBulkFlowName(sorted,"DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB");
807         }
808         @Test
809         public void queryNorthBoundRequestCatalogDbNestedTest() throws MalformedURLException {
810                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
811                 List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB","AAISetVnfInMaintBB","VNF-Macro-Replace","SDNOVnfHealthCheckBB","AAIUnsetVnfInMaintBB");
812                 northBoundRequest.setOrchestrationFlowList(orchFlows);
813                 List<OrchestrationFlow> macroFlows = createFlowList("DeactivateVfModuleBB","DeleteVfModuleBB","DeactivateVnfBB","CreateVfModuleBB","ActivateVfModuleBB","ActivateVnfBB");
814                 
815                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner("replaceInstance","Vnf",false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
816                 when(catalogDbClient.getOrchestrationFlowByAction("VNF-Macro-Replace")).thenReturn(macroFlows);
817                 List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "replaceInstance", WorkflowType.VNF, false,"my-custom-cloud-owner");
818                 assertEquals(flows.get(0).getFlowName(),"AAICheckVnfInMaintBB");
819                 assertEquals(flows.get(1).getFlowName(),"AAISetVnfInMaintBB");
820                 assertEquals(flows.get(2).getFlowName(),"DeactivateVfModuleBB");
821                 assertEquals(flows.get(3).getFlowName(),"DeleteVfModuleBB");
822                 assertEquals(flows.get(4).getFlowName(),"DeactivateVnfBB");     
823                 assertEquals(flows.get(5).getFlowName(),"CreateVfModuleBB");    
824                 assertEquals(flows.get(6).getFlowName(),"ActivateVfModuleBB");  
825                 assertEquals(flows.get(7).getFlowName(),"ActivateVnfBB");       
826                 assertEquals(flows.get(8).getFlowName(),"SDNOVnfHealthCheckBB");
827                 assertEquals(flows.get(9).getFlowName(),"AAIUnsetVnfInMaintBB");
828         }       
829
830         @Test
831         public void extractResourceIdAndTypeFromUriTest(){
832                 String uri = "/v6/serviceInstances/123";
833                 String uri2 = "/v6/serviceInstances/123/vnfs/1234";
834                 String uri3 = "/v6/serviceInstances";
835                 String uri4 = "/v6/serviceInstances/assign";
836                 String uri5 = "'/v6/serviceInstances/123/vnfs";
837                 String uri6 = "/v6/serviceInstances/123/vnfs/1234/someAction";
838                 String uri7 = "/v6/serviceInstances/123/vnfs/1234/vfModules/5678/replace";
839                 String uri8 = "/v6/serviceInstances/123/vnfs/1234/vfModules/scaleOut";
840                 Resource expected1 = new Resource(WorkflowType.SERVICE, "123", true);
841                 Resource expected2 = new Resource(WorkflowType.VNF, "1234", false);
842                 Resource expected3 = new Resource(WorkflowType.VNF, "1234", false);
843                 Resource expected4 = new Resource(WorkflowType.VFMODULE, "5678", false);
844                 Resource result = workflowAction.extractResourceIdAndTypeFromUri(uri);
845                 assertEquals(expected1.getResourceId(),result.getResourceId());
846                 assertEquals(expected1.getResourceType(),result.getResourceType());
847                 result = workflowAction.extractResourceIdAndTypeFromUri(uri2);
848                 assertEquals(expected2.getResourceId(),result.getResourceId());
849                 assertEquals(expected2.getResourceType(),result.getResourceType());
850                 result = workflowAction.extractResourceIdAndTypeFromUri(uri3);
851                 assertEquals("Service", result.getResourceType().toString());
852                 assertEquals(UUID.randomUUID().toString().length(),result.getResourceId().length());
853                 result = workflowAction.extractResourceIdAndTypeFromUri(uri4);
854                 assertEquals("Service", result.getResourceType().toString());
855                 assertEquals(UUID.randomUUID().toString().length(),result.getResourceId().length());
856                 result = workflowAction.extractResourceIdAndTypeFromUri(uri5);
857                 assertEquals("Vnf", result.getResourceType().toString());
858                 assertEquals(UUID.randomUUID().toString().length(),result.getResourceId().length());
859                 result = workflowAction.extractResourceIdAndTypeFromUri(uri6);
860                 assertEquals(expected3.getResourceId(),result.getResourceId());
861                 assertEquals(expected3.getResourceType(),result.getResourceType());
862                 result = workflowAction.extractResourceIdAndTypeFromUri(uri7);
863                 assertEquals(expected4.getResourceId(),result.getResourceId());
864                 assertEquals(expected4.getResourceType(),result.getResourceType());
865                 result = workflowAction.extractResourceIdAndTypeFromUri(uri8);
866         assertEquals(UUID.randomUUID().toString().length(),result.getResourceId().length());    
867         assertEquals("VfModule", result.getResourceType().toString());
868                 
869         }
870         
871         @Test
872         public void extractResourceIdAndTypeFromUriInvalidTypeTest() {
873                 this.expectedException.expect(IllegalArgumentException.class);
874                 this.expectedException.expectMessage(containsString("Uri could not be parsed. No type found."));
875                 workflowAction.extractResourceIdAndTypeFromUri("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace");
876         }
877         
878         @Test
879         public void extractResourceIdAndTypeFromUriInvalidUriTest() {
880                 this.expectedException.expect(IllegalArgumentException.class);
881                 this.expectedException.expectMessage(containsString("Uri could not be parsed:"));
882                 workflowAction.extractResourceIdAndTypeFromUri("something that doesn't match anything");
883         }
884         
885         @Test
886         public void populateResourceIdsFromApiHandlerTest(){
887                 execution.setVariable("serviceInstanceId", "123");
888                 execution.setVariable("vnfId", "888");
889                 WorkflowResourceIds x = workflowAction.populateResourceIdsFromApiHandler(execution);
890                 assertEquals("123",x.getServiceInstanceId());
891                 assertEquals("888",x.getVnfId());
892                 assertNull(x.getVolumeGroupId());
893         }
894         
895         @Test
896         public void validateResourceIdInAAITest() throws Exception{
897                 //SI
898                 RequestDetails reqDetails = new RequestDetails();
899                 SubscriberInfo subInfo = new SubscriberInfo();
900                 subInfo.setGlobalSubscriberId("id123");
901                 reqDetails.setSubscriberInfo(subInfo);
902                 RequestParameters reqParams = new RequestParameters();
903                 reqParams.setSubscriptionServiceType("subServiceType123");
904                 reqDetails.setRequestParameters(reqParams );
905                 WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
906                 ServiceInstance si = new ServiceInstance();
907                 si.setServiceInstanceId("siId123");
908                 Optional<ServiceInstance> siOp = Optional.of(si);
909                 when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp);
910                 when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "111111")).thenReturn(Optional.empty());
911                 String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails, workflowResourceIds);
912                 assertEquals("siId123",id);
913                 String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "111111", reqDetails, workflowResourceIds);
914                 assertEquals("generatedId123",id2);
915                 
916                 //Network
917                 L3Network network = new L3Network();
918                 network.setNetworkId("id123");
919                 network.setNetworkName("name123");
920                 workflowResourceIds.setServiceInstanceId("siId123");
921                 Optional<L3Network> opNetwork = Optional.of(network);
922                 when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123","name123")).thenReturn(opNetwork);
923                 when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123","111111")).thenReturn(Optional.empty());
924                 id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "name123", reqDetails, workflowResourceIds);
925                 assertEquals("id123",id);
926                 id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "111111", reqDetails, workflowResourceIds);
927                 assertEquals("generatedId123",id2);
928                 
929                 //Vnf
930                 GenericVnf vnf = new GenericVnf();
931                 vnf.setVnfId("id123");
932                 vnf.setVnfName("vnfName123");
933                 Optional<GenericVnf> opVnf = Optional.of(vnf);
934                 when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123","name123")).thenReturn(opVnf);
935                 when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123","111111")).thenReturn(Optional.empty());
936                 id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "name123", reqDetails, workflowResourceIds);
937                 assertEquals("id123",id);
938                 id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "111111", reqDetails, workflowResourceIds);
939                 assertEquals("generatedId123",id2);
940                 
941                 //VfModule
942                 VfModules vfModules = new VfModules();
943                 VfModule vfModule = new VfModule();
944                 vfModule.setVfModuleId("id123");
945                 vfModule.setVfModuleName("name123");
946                 vfModules.getVfModule().add(vfModule);
947                 vnf.setVfModules(vfModules);
948                 workflowResourceIds.setVnfId("id123");
949                 when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf);
950                 id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "name123", reqDetails, workflowResourceIds);
951                 assertEquals("id123",id);
952
953                 GenericVnf vnf2 = new GenericVnf();
954                 VfModules vfModules2 = new VfModules();
955                 VfModule vfModule2 = new VfModule();
956                 vfModule2.setVfModuleId("id123");
957                 vfModule2.setVfModuleName("name123");
958                 vfModules2.getVfModule().add(vfModule2);
959                 vnf2.setVfModules(vfModules2);
960                 workflowResourceIds.setVnfId("id111");
961                 when(bbSetupUtils.getAAIGenericVnf("id111")).thenReturn(vnf2);
962                 id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "111111", reqDetails, workflowResourceIds);
963                 assertEquals("generatedId123",id2);
964                 
965                 //VolumeGroup
966                 VolumeGroup volumeGroup = new VolumeGroup();
967                 volumeGroup.setVolumeGroupId("id123");
968                 volumeGroup.setVolumeGroupName("name123");
969                 workflowResourceIds.setVnfId("id123");
970                 Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
971                 when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123","name123")).thenReturn(opVolumeGroup);
972                 id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails, workflowResourceIds);
973                 assertEquals("id123",id);
974                 
975                 workflowResourceIds.setVnfId("id444");
976                 when(bbSetupUtils.getAAIGenericVnf("id444")).thenReturn(vnf);
977                 when(bbSetupUtils.getRelatedVolumeGroupByNameFromVfModule("id123", "id123","111111")).thenReturn(opVolumeGroup);
978                 when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id444","111111")).thenReturn(Optional.empty());
979                 id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "111111", reqDetails, workflowResourceIds);
980                 assertEquals("id123",id2);
981         }
982         
983         @Test
984         public void handleRuntimeExceptionTest(){
985                 execution.setVariable("BPMN_javaExpMsg", "test runtime error message");
986                 execution.setVariable("testProcessKey", "testProcessKeyValue");
987                 try{
988                         workflowAction.handleRuntimeException(execution);
989                 } catch (BpmnError wfe) {
990                         assertEquals("MSOWorkflowException",wfe.getErrorCode());
991                 }
992         }
993         
994         @Ignore
995         @Test
996         public void traverseCatalogDbServiceMultipleNetworkTest() throws IOException{
997                 execution.setVariable("testProcessKey", "testProcessKeyValue");
998                 Service service = new Service();
999                 List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
1000                 NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
1001                 networkCust.setModelCustomizationUUID("123");
1002                 networkCustomizations.add(networkCust);
1003                 service.setNetworkCustomizations(networkCustomizations);
1004                 NetworkCollectionResourceCustomization collectionResourceCustomization = new NetworkCollectionResourceCustomization();
1005                 collectionResourceCustomization.setModelCustomizationUUID("123");
1006                 CollectionResource collectionResource = new CollectionResource();
1007                 collectionResource.setToscaNodeType("NetworkCollection");
1008                 InstanceGroup instanceGroup = new InstanceGroup();
1009                 List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
1010                 CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization = new CollectionResourceInstanceGroupCustomization();
1011                 collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
1012                 collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
1013                 instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
1014                 collectionResource.setInstanceGroup(instanceGroup);
1015                 collectionResourceCustomization.setCollectionResource(collectionResource);;
1016                 service.setModelUUID("abc");
1017                 service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
1018                 service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
1019                 doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
1020                 doReturn(collectionResourceCustomization).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
1021                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
1022                 ObjectMapper mapper = new ObjectMapper();
1023                 ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
1024                 List<Resource> resourceCounter = new ArrayList<>();
1025                 thrown.expect(BpmnError.class);
1026                 workflowAction.traverseCatalogDbService(execution, sIRequest, resourceCounter);
1027         }
1028         
1029         @Test
1030         public void sortVfModulesByBaseFirstTest(){
1031                 List<Resource> resources = new ArrayList<>();
1032                 Resource resource1 = new Resource(WorkflowType.VFMODULE,"111",false);
1033                 resource1.setBaseVfModule(false);
1034                 resources.add(resource1);
1035                 Resource resource2 = new Resource(WorkflowType.VFMODULE,"222",false);
1036                 resource2.setBaseVfModule(false);
1037                 resources.add(resource2);
1038                 Resource resource3 = new Resource(WorkflowType.VFMODULE,"333",false);
1039                 resource3.setBaseVfModule(true);
1040                 resources.add(resource3);
1041                 List<Resource> result = workflowAction.sortVfModulesByBaseFirst(resources);
1042                 assertEquals("333",result.get(0).getResourceId());
1043                 assertEquals("222",result.get(1).getResourceId());
1044                 assertEquals("111",result.get(2).getResourceId());
1045         }
1046         
1047         private List<OrchestrationFlow> createFlowList (String... flowNames){
1048                 List<OrchestrationFlow> result = new ArrayList<>();
1049                 for(String flowName : flowNames){
1050                         OrchestrationFlow orchFlow = new OrchestrationFlow();
1051                         orchFlow.setFlowName(flowName);
1052                         result.add(orchFlow);
1053                 }
1054                 return result;
1055         }
1056         
1057         private void assertEqualsBulkFlowName (List<ExecuteBuildingBlock> ebbs, String... flowNames){
1058                 for(int i = 0; i<ebbs.size(); i++){
1059                         assertEquals(ebbs.get(i).getBuildingBlock().getBpmnFlowName(),flowNames[i]);
1060                 }
1061         }
1062 }