24b87277c48cf06e9fcb0a6558f3747b175da31e
[so.git] /
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.Matchers.isA;
31 import static org.mockito.Mockito.doReturn;
32 import static org.mockito.Mockito.when;
33
34 import java.io.IOException;
35 import java.net.MalformedURLException;
36 import java.nio.file.Files;
37 import java.nio.file.Paths;
38 import java.util.ArrayList;
39 import java.util.Arrays;
40 import java.util.HashSet;
41 import java.util.List;
42 import java.util.Optional;
43 import java.util.UUID;
44 import java.util.Set;
45
46 import org.camunda.bpm.engine.delegate.BpmnError;
47 import org.camunda.bpm.engine.delegate.DelegateExecution;
48 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
49 import org.junit.Before;
50 import org.junit.Ignore;
51 import org.junit.Rule;
52 import org.junit.Test;
53 import org.junit.rules.ExpectedException;
54 import org.mockito.InjectMocks;
55 import org.mockito.Mock;
56 import org.onap.aai.domain.yang.GenericVnf;
57 import org.onap.aai.domain.yang.L3Network;
58 import org.onap.aai.domain.yang.Relationship;
59 import org.onap.aai.domain.yang.RelationshipList;
60 import org.onap.aai.domain.yang.ServiceInstance;
61 import org.onap.aai.domain.yang.VfModule;
62 import org.onap.aai.domain.yang.VfModules;
63 import org.onap.aai.domain.yang.VolumeGroup;
64 import org.onap.so.bpmn.BaseTaskTest;
65 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
66 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
67 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
68 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
69 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
70 import org.onap.so.client.aai.entities.Relationships;
71 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
72 import org.onap.so.db.catalog.beans.CollectionResource;
73 import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
74 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
75 import org.onap.so.db.catalog.beans.ConfigurationResource;
76 import org.onap.so.db.catalog.beans.CvnfcCustomization;
77 import org.onap.so.db.catalog.beans.HeatEnvironment;
78 import org.onap.so.db.catalog.beans.HeatTemplate;
79 import org.onap.so.db.catalog.beans.InstanceGroup;
80 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
81 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
82 import org.onap.so.db.catalog.beans.Service;
83 import org.onap.so.db.catalog.beans.VfModuleCustomization;
84 import org.onap.so.db.catalog.beans.VnfVfmoduleCvnfcConfigurationCustomization;
85 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
86 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
87 import org.onap.so.serviceinstancebeans.RequestDetails;
88 import org.onap.so.serviceinstancebeans.RequestParameters;
89 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
90 import org.onap.so.serviceinstancebeans.SubscriberInfo;
91 import org.springframework.core.env.Environment;
92
93 import com.fasterxml.jackson.databind.ObjectMapper;
94
95 public class WorkflowActionTest extends BaseTaskTest {
96         
97         
98         @Mock
99         protected Environment environment;
100         @InjectMocks
101         protected WorkflowAction workflowAction;
102         private DelegateExecution execution;
103
104         
105         @Rule
106         public ExpectedException thrown = ExpectedException.none();
107         
108         @Before
109         public void before() throws Exception {
110                 execution = new DelegateExecutionFake();
111                 org.onap.aai.domain.yang.ServiceInstance servInstance = new org.onap.aai.domain.yang.ServiceInstance();
112                 servInstance.setServiceInstanceId("TEST");
113                 when(bbSetupUtils.getAAIServiceInstanceByName(anyString(), anyObject())).thenReturn(servInstance);
114                 workflowAction.setBbInputSetupUtils(bbSetupUtils);
115                 workflowAction.setBbInputSetup(bbInputSetup);
116         }
117         /**
118          * ALACARTE TESTS
119          */
120         @Test
121         public void selectExecutionListALaCarteNetworkCreateTest() throws Exception{
122                 String gAction = "createInstance";
123                 String resource = "Network";
124                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
125                 execution.setVariable("requestAction", gAction);
126                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
127                 execution.setVariable("bpmnRequest", bpmnRequest);              
128                 execution.setVariable("aLaCarte", true);
129                 execution.setVariable("apiVersion", "7");
130                 execution.setVariable("requestUri", "v6/networks/123");
131                 
132                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
133                 List<OrchestrationFlow> orchFlows = createFlowList("AssignNetwork1802BB","CreateNetworkBB","ActivateNetworkBB");
134                 northBoundRequest.setOrchestrationFlowList(orchFlows);
135
136                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
137                 workflowAction.selectExecutionList(execution);
138                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
139                 assertEqualsBulkFlowName(ebbs,"AssignNetwork1802BB","CreateNetworkBB","ActivateNetworkBB");
140         }
141         
142         @Test
143         public void selectExecutionListALaCarteNetworkDeleteTest() throws Exception{
144                 String gAction = "deleteInstance";
145                 String resource = "Network";
146                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
147                 execution.setVariable("requestAction", gAction);
148                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
149                 execution.setVariable("bpmnRequest", bpmnRequest);              
150                 execution.setVariable("aLaCarte", true);
151                 execution.setVariable("apiVersion", "7");
152                 execution.setVariable("requestUri", "v6/networks/123");
153                 
154                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
155                 List<OrchestrationFlow> orchFlows = createFlowList("DeactivateNetworkBB","DeleteNetworkBB","UnassignNetwork1802BB");
156                 northBoundRequest.setOrchestrationFlowList(orchFlows);
157                 
158                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,true,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
159                 workflowAction.selectExecutionList(execution);
160                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
161                 assertEqualsBulkFlowName(ebbs,"DeactivateNetworkBB","DeleteNetworkBB","UnassignNetwork1802BB");
162         }
163         
164         @Test
165         public void selectExecutionListALaCarteServiceCreateTest() throws Exception{
166                 String gAction = "createInstance";
167                 String resource = "Service";
168                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
169                 execution.setVariable("requestAction", gAction);
170                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
171                 execution.setVariable("bpmnRequest", bpmnRequest);              
172                 execution.setVariable("aLaCarte", true);
173                 execution.setVariable("apiVersion", "7");
174                 execution.setVariable("requestUri", "v6/serviceInstances/123");
175                 
176                 
177                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
178                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","ActivateServiceInstanceBB");
179                 northBoundRequest.setOrchestrationFlowList(orchFlows);  
180                 
181                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,true,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
182                 workflowAction.selectExecutionList(execution);
183                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
184                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","ActivateServiceInstanceBB");
185         }
186         
187         /**
188          * SERVICE MACRO TESTS
189          */
190         @Test
191         public void selectExecutionListServiceMacroAssignTest() throws Exception{
192                 String gAction = "assignInstance";
193                 String resource = "Service";
194                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
195                 execution.setVariable("requestAction", gAction);
196                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
197                 execution.setVariable("bpmnRequest", bpmnRequest);
198                 execution.setVariable("aLaCarte", false);
199                 execution.setVariable("apiVersion", "7");
200                 execution.setVariable("requestUri", "v6/serviceInstances/123");
201                 
202                 
203                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
204                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB");
205                 northBoundRequest.setOrchestrationFlowList(orchFlows);
206                 
207                 VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
208                 vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
209                 HeatEnvironment volumeHeatEnv = new HeatEnvironment();
210                 vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
211                 org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
212                 HeatTemplate volumeHeatTemplate = new HeatTemplate();
213                 vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
214                 vfModuleCustomization.setVfModule(vfModule);
215                 
216                 VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
217                 vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
218                 HeatEnvironment heatEnvironment = new HeatEnvironment();
219                 vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
220                 org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
221                 HeatTemplate moduleHeatTemplate = new HeatTemplate();
222                 vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
223                 vfModuleCustomization2.setVfModule(vfModule2);
224                 
225                 VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
226                 vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
227                 
228                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
229                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f")).thenReturn(vfModuleCustomization);
230                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8")).thenReturn(vfModuleCustomization2);
231                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969")).thenReturn(vfModuleCustomization3);
232                 workflowAction.selectExecutionList(execution);
233                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
234                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB","AssignVfModuleBB","AssignVfModuleBB");
235         }
236         
237         @Test
238         public void selectExecutionListServiceMacroAssignNoCloudTest() throws Exception{
239                 String gAction = "assignInstance";
240                 String resource = "Service";
241                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
242                 execution.setVariable("requestAction", gAction);
243                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssignNoCloud.json")));
244                 execution.setVariable("bpmnRequest", bpmnRequest);
245                 execution.setVariable("aLaCarte", false);
246                 execution.setVariable("apiVersion", "7");
247                 execution.setVariable("requestUri", "v6/serviceInstances/123");
248                 
249                 
250                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
251                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB");
252                 northBoundRequest.setOrchestrationFlowList(orchFlows);
253                 
254                 VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
255                 vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
256                 HeatEnvironment volumeHeatEnv = new HeatEnvironment();
257                 vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
258                 org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
259                 HeatTemplate volumeHeatTemplate = new HeatTemplate();
260                 vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
261                 vfModuleCustomization.setVfModule(vfModule);
262                 
263                 VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
264                 vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
265                 HeatEnvironment heatEnvironment = new HeatEnvironment();
266                 vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
267                 org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
268                 HeatTemplate moduleHeatTemplate = new HeatTemplate();
269                 vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
270                 vfModuleCustomization2.setVfModule(vfModule2);
271                 
272                 VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
273                 vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
274                 
275                 when(environment.getProperty("org.onap.so.cloud-owner")).thenReturn("att-aic");
276                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"att-aic")).thenReturn(northBoundRequest);
277                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f")).thenReturn(vfModuleCustomization);
278                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8")).thenReturn(vfModuleCustomization2);
279                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969")).thenReturn(vfModuleCustomization3);
280                 workflowAction.selectExecutionList(execution);
281                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
282                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB","AssignVfModuleBB","AssignVfModuleBB");
283         }
284         
285         @Test
286         public void selectExecutionListServiceMacroActivateTest() throws Exception{
287                 String gAction = "activateInstance";
288                 String resource = "Service";
289                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
290                 execution.setVariable("requestAction", gAction);
291                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
292                 execution.setVariable("bpmnRequest", bpmnRequest);              
293                 execution.setVariable("aLaCarte", false);
294                 execution.setVariable("apiVersion", "7");
295                 execution.setVariable("requestUri", "v6/serviceInstances/si0");
296                 
297
298                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
299                 List<OrchestrationFlow> orchFlows = createFlowList("CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB"
300                                 ,"ActivateVnfBB","ActivateServiceInstanceBB");
301                 northBoundRequest.setOrchestrationFlowList(orchFlows);  
302                 
303                 ServiceInstance serviceInstanceAAI = new ServiceInstance();
304                 serviceInstanceAAI.setServiceInstanceId("si0");
305                 org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO = new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
306                 org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf = new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
307                 vnf.setVnfId("vnf0");
308                 
309                 org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
310                 vfModule.setVfModuleId("vfModule0");
311                 vnf.getVfModules().add(vfModule);
312                 org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
313                 vfModule2.setVfModuleId("vfModule1");
314                 vnf.getVfModules().add(vfModule2);
315                 
316                 org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup = new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
317                 volumeGroup.setVolumeGroupId("volumeGroup0");
318                 vnf.getVolumeGroups().add(volumeGroup);
319                 
320                 serviceInstanceMSO.getVnfs().add(vnf);
321                 
322                 doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("si0");
323                 doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
324                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
325                 workflowAction.selectExecutionList(execution);
326                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
327                 assertEqualsBulkFlowName(ebbs,"CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","ActivateVfModuleBB","ActivateVnfBB","ActivateServiceInstanceBB");
328                 assertEquals("volumeGroup0", ebbs.get(0).getWorkflowResourceIds().getVolumeGroupId());
329                 assertEquals("volumeGroup0", ebbs.get(1).getWorkflowResourceIds().getVolumeGroupId());
330                 assertEquals("vfModule0", ebbs.get(2).getWorkflowResourceIds().getVfModuleId());
331                 assertEquals("vfModule1", ebbs.get(3).getWorkflowResourceIds().getVfModuleId());
332                 assertEquals("vfModule0", ebbs.get(4).getWorkflowResourceIds().getVfModuleId());
333                 assertEquals("vfModule1", ebbs.get(5).getWorkflowResourceIds().getVfModuleId());
334                 assertEquals("vnf0", ebbs.get(6).getWorkflowResourceIds().getVnfId());
335                 assertEquals("si0", ebbs.get(7).getWorkflowResourceIds().getServiceInstanceId());
336
337         }
338         
339         @Test
340         public void selectExecutionListServiceMacroDeactivateTest() throws Exception{
341                 String gAction = "deactivateInstance";
342                 String resource = "Service";
343                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
344                 execution.setVariable("requestAction", gAction);
345                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
346                 execution.setVariable("bpmnRequest", bpmnRequest);              
347                 execution.setVariable("aLaCarte", false);
348                 execution.setVariable("apiVersion", "7");
349                 execution.setVariable("requestUri", "v6/serviceInstances/123");
350                 
351                 
352                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
353                 List<OrchestrationFlow> orchFlows = createFlowList("DeactivateServiceInstanceBB");
354                 northBoundRequest.setOrchestrationFlowList(orchFlows);  
355                 
356                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
357                 workflowAction.selectExecutionList(execution);
358                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
359                 assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(),"DeactivateServiceInstanceBB");
360         }
361
362         @Test
363         public void selectExecutionListServiceMacroEmptyServiceTest() throws Exception{
364                 String gAction = "createInstance";
365                 String resource = "Service";
366                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
367                 execution.setVariable("requestAction", gAction);
368                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
369                 execution.setVariable("bpmnRequest", bpmnRequest);                      
370                 execution.setVariable("aLaCarte", false);
371                 execution.setVariable("apiVersion", "7");
372                 execution.setVariable("requestUri", "v6/serviceInstances/123");
373                 
374                 
375                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
376                 northBoundRequest.setIsToplevelflow(true);
377                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB"
378                                 ,"CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"
379                                 ,"ActivateVnfBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
380                 northBoundRequest.setOrchestrationFlowList(orchFlows);                  
381                 
382                 Service service = new Service();
383                 doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
384                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
385                 workflowAction.selectExecutionList(execution);
386                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
387                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","ActivateServiceInstanceBB");
388         }
389         
390         @Test
391         public void selectExecutionListServiceMacroCreateJustNetworkTest() throws Exception{
392                 String gAction = "createInstance";
393                 String resource = "Service";
394                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
395                 execution.setVariable("requestAction", gAction);
396                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
397                 execution.setVariable("bpmnRequest", bpmnRequest);                      
398                 execution.setVariable("aLaCarte", false);
399                 execution.setVariable("apiVersion", "7");
400                 execution.setVariable("requestUri", "v6/serviceInstances/123");
401                 
402                 
403                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
404                 northBoundRequest.setIsToplevelflow(true);
405                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB"
406                                 ,"CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"
407                                 ,"ActivateVnfBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
408                 northBoundRequest.setOrchestrationFlowList(orchFlows);                  
409                 
410                 Service service = new Service();
411                 NetworkResourceCustomization networkCustomization = new NetworkResourceCustomization();
412                 networkCustomization.setModelCustomizationUUID("1234");
413                 service.getNetworkCustomizations().add(networkCustomization);
414                 doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
415                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
416                 workflowAction.selectExecutionList(execution);
417                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
418                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","ActivateServiceInstanceBB");
419         }
420         
421         @Test
422         public void selectExecutionListServiceMacroCreateWithNetworkCollectionTest() throws Exception{
423                 String gAction = "createInstance";
424                 String resource = "Service";
425                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
426                 execution.setVariable("requestAction", gAction);
427                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
428                 execution.setVariable("bpmnRequest", bpmnRequest);                      
429                 execution.setVariable("aLaCarte", false);
430                 execution.setVariable("apiVersion", "7");
431                 execution.setVariable("requestUri", "v6/serviceInstances/123");
432                 
433                 
434                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
435                 northBoundRequest.setIsToplevelflow(true);
436                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB"
437                                 ,"CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"
438                                 ,"ActivateVnfBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
439                 northBoundRequest.setOrchestrationFlowList(orchFlows);                  
440                 
441                 Service service = new Service();
442                 List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
443                 NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
444                 networkCust.setModelCustomizationUUID("123");
445                 networkCustomizations.add(networkCust);
446                 service.setNetworkCustomizations(networkCustomizations);
447                 NetworkCollectionResourceCustomization collectionResourceCustomization = new NetworkCollectionResourceCustomization();
448                 collectionResourceCustomization.setModelCustomizationUUID("123");
449                 
450                 CollectionResource collectionResource = new CollectionResource();
451                 collectionResource.setToscaNodeType("NetworkCollection");
452                 InstanceGroup instanceGroup = new InstanceGroup();
453                 instanceGroup.setToscaNodeType("NetworkCollectionResource");
454                 instanceGroup.setCollectionNetworkResourceCustomizations(new ArrayList<>());
455                 CollectionNetworkResourceCustomization collectionNetworkResourceCust = new CollectionNetworkResourceCustomization();
456                 collectionNetworkResourceCust.setModelCustomizationUUID("123");
457                 collectionNetworkResourceCust.setNetworkResourceCustomization(collectionResourceCustomization);
458                 instanceGroup.getCollectionNetworkResourceCustomizations().add(collectionNetworkResourceCust );
459                 List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
460                 CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization = new CollectionResourceInstanceGroupCustomization();
461                 collectionInstanceGroupCustomization.setModelCustomizationUUID("123");
462                 collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
463                 collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
464                 collectionInstanceGroupCustomization.setInstanceGroup(instanceGroup);
465                 collectionInstanceGroupCustomization.setCollectionResourceCust(collectionResourceCustomization);
466                 instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
467                 collectionResource.setInstanceGroup(instanceGroup);
468                 collectionResourceCustomization.setCollectionResource(collectionResource);;
469                 service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
470                 doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
471                 doReturn(collectionResourceCustomization).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
472                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
473                 workflowAction.selectExecutionList(execution);
474                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
475                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB"
476                                 ,"AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
477                 assertEquals("Network id not empty", !ebbs.get(2).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
478                 assertEquals("Network id not empty", !ebbs.get(3).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
479                 assertEquals("Network id not empty", !ebbs.get(4).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
480                 assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
481                                 ebbs.get(2).getWorkflowResourceIds().getNetworkId() == ebbs.get(3).getWorkflowResourceIds().getNetworkId() 
482                                 && ebbs.get(3).getWorkflowResourceIds().getNetworkId() == ebbs.get(4).getWorkflowResourceIds().getNetworkId(), true);
483                 assertEquals("Network id not empty", !ebbs.get(5).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
484                 assertEquals("Network id not empty", !ebbs.get(6).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
485                 assertEquals("Network id not empty", !ebbs.get(7).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
486                 assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
487                                 ebbs.get(5).getWorkflowResourceIds().getNetworkId() == ebbs.get(6).getWorkflowResourceIds().getNetworkId() 
488                                 && ebbs.get(6).getWorkflowResourceIds().getNetworkId() == ebbs.get(7).getWorkflowResourceIds().getNetworkId(), true);
489                 assertEquals("Network id not empty", !ebbs.get(8).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
490                 assertEquals("Network id not empty", !ebbs.get(9).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
491                 assertEquals("Network id not empty", !ebbs.get(10).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
492                 assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
493                                 ebbs.get(8).getWorkflowResourceIds().getNetworkId() == ebbs.get(9).getWorkflowResourceIds().getNetworkId() 
494                                 && ebbs.get(9).getWorkflowResourceIds().getNetworkId() == ebbs.get(10).getWorkflowResourceIds().getNetworkId(), true);
495         }
496
497         @Test
498         public void selectExecutionListServiceMacroCreateWithUserParams() throws Exception{
499                 String gAction = "createInstance";
500                 String resource = "Service";
501                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
502                 execution.setVariable("requestAction", gAction);
503                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
504                 execution.setVariable("bpmnRequest", bpmnRequest);                      
505                 execution.setVariable("aLaCarte", false);
506                 execution.setVariable("apiVersion", "7");
507                 execution.setVariable("requestUri", "v6/serviceInstances/123");
508                 
509                 
510                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
511                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB","CreateNetworkCollectionBB","AssignNetworkBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB"
512                                 ,"CreateNetworkBB","ActivateNetworkBB","CreateVolumeGroupBB","ActivateVolumeGroupBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"
513                                 ,"ActivateVnfBB","ActivateNetworkCollectionBB","ActivateServiceInstanceBB");
514                 northBoundRequest.setOrchestrationFlowList(orchFlows);                  
515                 
516                 Service service = new Service();
517                 service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
518                 
519                 VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
520                 vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
521                 HeatEnvironment volumeHeatEnv = new HeatEnvironment();
522                 vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
523                 org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
524                 HeatTemplate volumeHeatTemplate = new HeatTemplate();
525                 vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
526                 vfModuleCustomization.setVfModule(vfModule);
527                 
528                 VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
529                 vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
530                 HeatEnvironment heatEnvironment = new HeatEnvironment();
531                 vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
532                 org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
533                 HeatTemplate moduleHeatTemplate = new HeatTemplate();
534                 vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
535                 vfModuleCustomization2.setVfModule(vfModule2);
536                 
537                 VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
538                 vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
539                 
540                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
541                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f")).thenReturn(vfModuleCustomization);
542                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8")).thenReturn(vfModuleCustomization2);
543                 when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969")).thenReturn(vfModuleCustomization3);
544                 when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
545                 workflowAction.selectExecutionList(execution);
546                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
547                 assertEqualsBulkFlowName(ebbs,"AssignServiceInstanceBB","AssignVnfBB","AssignVolumeGroupBB","AssignVfModuleBB","AssignVfModuleBB","AssignVfModuleBB","CreateVolumeGroupBB"
548                                 ,"ActivateVolumeGroupBB","CreateVfModuleBB","CreateVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","ActivateVfModuleBB","ActivateVfModuleBB","ActivateVnfBB","ActivateServiceInstanceBB");
549                 assertEquals(3,ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
550                 int randomUUIDLength = UUID.randomUUID().toString().length();
551                 assertEquals(randomUUIDLength,ebbs.get(1).getWorkflowResourceIds().getVnfId().length());
552                 assertEquals(randomUUIDLength,ebbs.get(2).getWorkflowResourceIds().getVolumeGroupId().length());
553                 assertEquals(randomUUIDLength,ebbs.get(3).getWorkflowResourceIds().getVfModuleId().length());
554                 assertEquals(randomUUIDLength,ebbs.get(4).getWorkflowResourceIds().getVfModuleId().length());
555                 assertEquals(randomUUIDLength,ebbs.get(5).getWorkflowResourceIds().getVfModuleId().length());
556                 assertEquals(randomUUIDLength,ebbs.get(6).getWorkflowResourceIds().getVolumeGroupId().length());
557                 assertEquals(randomUUIDLength,ebbs.get(7).getWorkflowResourceIds().getVolumeGroupId().length());
558                 assertEquals(randomUUIDLength,ebbs.get(8).getWorkflowResourceIds().getVfModuleId().length());
559                 assertEquals(randomUUIDLength,ebbs.get(9).getWorkflowResourceIds().getVfModuleId().length());
560                 assertEquals(randomUUIDLength,ebbs.get(10).getWorkflowResourceIds().getVfModuleId().length());
561                 assertEquals(randomUUIDLength,ebbs.get(11).getWorkflowResourceIds().getVfModuleId().length());
562                 assertEquals(randomUUIDLength,ebbs.get(12).getWorkflowResourceIds().getVfModuleId().length());
563                 assertEquals(randomUUIDLength,ebbs.get(13).getWorkflowResourceIds().getVfModuleId().length());
564                 assertEquals(randomUUIDLength,ebbs.get(14).getWorkflowResourceIds().getVnfId().length());
565                 assertEquals(3,ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
566                 assertEquals(true, execution.getVariable("homing"));
567         }
568         
569         @Test
570         public void selectExecutionListServiceMacroDeleteTest() throws Exception{
571                 String gAction = "deleteInstance";
572                 String resource = "Service";
573                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
574                 execution.setVariable("requestAction", gAction);
575                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
576                 execution.setVariable("bpmnRequest", bpmnRequest);              
577                 execution.setVariable("aLaCarte", false);
578                 execution.setVariable("apiVersion", "7");
579                 execution.setVariable("requestUri", "v6/serviceInstances/123");
580                 
581                 
582                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
583                 List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB","DeleteVfModuleBB","DeactivateVolumeGroupBB","DeleteVolumeGroupBB","DeactivateVnfBB","DeactivateNetworkBB"
584                                 ,"DeleteNetworkBB","DeleteNetworkCollectionBB","DeactivateServiceInstanceBB","UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignNetworkBB","UnassignServiceInstanceBB");
585                 northBoundRequest.setOrchestrationFlowList(orchFlows);  
586                 
587                 ServiceInstance serviceInstanceAAI = new ServiceInstance();
588                 serviceInstanceAAI.setServiceInstanceId("aaisi123");
589                 org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO = new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
590                 org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf = new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
591                 vnf.setVnfId("vnfId123");
592                 
593                 org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
594                 vfModule.setVfModuleId("vfModule1");
595                 vnf.getVfModules().add(vfModule);
596                 org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
597                 vfModule2.setVfModuleId("vfModule2");
598                 vnf.getVfModules().add(vfModule2);
599                 
600                 org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup = new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
601                 volumeGroup.setVolumeGroupId("vg123");
602                 vnf.getVolumeGroups().add(volumeGroup);
603                 
604                 serviceInstanceMSO.getVnfs().add(vnf);
605                 
606                 doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
607                 doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
608                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
609                 workflowAction.selectExecutionList(execution);
610                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
611                 assertEqualsBulkFlowName(ebbs,"DeactivateVfModuleBB","DeactivateVfModuleBB","DeleteVfModuleBB","DeleteVfModuleBB","DeactivateVolumeGroupBB","DeleteVolumeGroupBB","DeactivateVnfBB"
612                                 ,"DeactivateServiceInstanceBB","UnassignVfModuleBB","UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignServiceInstanceBB");
613         }
614         
615         @Test
616         public void selectExecutionListServiceMacroUnassignTest() throws Exception{
617                 String gAction = "unassignInstance";
618                 String resource = "Service";
619                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
620                 execution.setVariable("requestAction", gAction);
621                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
622                 execution.setVariable("bpmnRequest", bpmnRequest);                      
623                 execution.setVariable("aLaCarte", false);
624                 execution.setVariable("apiVersion", "7");
625                 execution.setVariable("requestUri", "v6/serviceInstances/123");
626                 
627                 
628                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
629                 List<OrchestrationFlow> orchFlows = createFlowList("UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignNetworkBB","UnassignServiceInstanceBB");
630                 northBoundRequest.setOrchestrationFlowList(orchFlows);          
631                 
632                 ServiceInstance serviceInstanceAAI = new ServiceInstance();
633                 serviceInstanceAAI.setServiceInstanceId("aaisi123");
634                 org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO = new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
635                 org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf = new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
636                 vnf.setVnfId("vnfId123");
637                 
638                 org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
639                 vfModule.setVfModuleId("vfModule1");
640                 vnf.getVfModules().add(vfModule);
641                 org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
642                 vfModule2.setVfModuleId("vfModule2");
643                 vnf.getVfModules().add(vfModule2);
644                 
645                 org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup = new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
646                 volumeGroup.setVolumeGroupId("vg123");
647                 vnf.getVolumeGroups().add(volumeGroup);
648                 
649                 serviceInstanceMSO.getVnfs().add(vnf);
650                 
651                 doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
652                 doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
653                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
654                 workflowAction.selectExecutionList(execution);
655                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
656                 assertEqualsBulkFlowName(ebbs,"UnassignVfModuleBB","UnassignVfModuleBB","UnassignVolumeGroupBB","UnassignVnfBB","UnassignServiceInstanceBB");
657         }
658         
659         @Test
660         public void selectExecutionListServiceMacroDeleteNetworkCollectionTest() throws Exception{
661                 String gAction = "deleteInstance";
662                 String resource = "Service";
663                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
664                 execution.setVariable("requestAction", gAction);
665                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
666                 execution.setVariable("bpmnRequest", bpmnRequest);                      
667                 execution.setVariable("aLaCarte", false);
668                 execution.setVariable("apiVersion", "7");
669                 execution.setVariable("requestUri", "v6/serviceInstances/123");
670                 
671                 
672                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
673                 List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB","DeleteVfModuleBB","DeactivateVolumeGroupBB","DeleteVolumeGroupBB","DeactivateVnfBB","DeactivateNetworkBB"
674                                 ,"DeleteNetworkBB","DeleteNetworkCollectionBB","DeactivateServiceInstanceBB","UnassignVfModuleBB","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 = new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
680                 
681                 org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network = new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
682                 network.setNetworkId("123");
683                 serviceInstanceMSO.getNetworks().add(network);
684                 org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network2 = new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
685                 network2.setNetworkId("321");
686                 serviceInstanceMSO.getNetworks().add(network2);
687                 
688                 Collection collection = new Collection();
689                 serviceInstanceMSO.setCollection(collection);
690                 
691                 doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
692                 doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
693                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
694                 workflowAction.selectExecutionList(execution);
695                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
696                 assertEqualsBulkFlowName(ebbs,"DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeleteNetworkCollectionBB"
697                                 ,"DeactivateServiceInstanceBB","UnassignServiceInstanceBB");
698         }
699         
700     @Test
701     public void selectExecutionListVnfMacroRecreateTest() throws Exception{
702         String gAction = "recreateInstance";
703         String resource = "Vnf";
704         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
705         execution.setVariable("requestAction", gAction);
706         String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/VnfMacroReplace.json")));
707         execution.setVariable("bpmnRequest", bpmnRequest);          
708         execution.setVariable("aLaCarte", false);
709         execution.setVariable("apiVersion", "7");
710         execution.setVariable("requestUri", "v7/serviceInstances/123/vnfs/1234/recreate");
711         execution.setVariable("serviceInstanceId", "123");
712         execution.setVariable("vnfId", "1234");
713         
714         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
715         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB","AAISetVnfInMaintBB","DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB", "DeactivateVfModuleBB","DeleteVfModuleBB","DeactivateVnfBB","CreateVfModuleBB"
716                 ,"ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB","ActivateVnfBB","SDNOVnfHealthCheckBB","AAIUnsetVnfInMaintBB");
717         northBoundRequest.setOrchestrationFlowList(orchFlows);  
718         
719         ServiceInstance serviceInstanceAAI = new ServiceInstance();
720         serviceInstanceAAI.setServiceInstanceId("123");
721         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO = new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
722         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf = new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
723         vnf.setVnfId("1234");
724         
725         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
726         vfModule.setVfModuleId("vfModule1");
727         vnf.getVfModules().add(vfModule);
728         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
729         vfModule2.setVfModuleId("vfModule2");
730         vnf.getVfModules().add(vfModule2);
731         
732         serviceInstanceMSO.getVnfs().add(vnf);
733         
734         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
735         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
736         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"cloud-owner")).thenReturn(northBoundRequest);
737         workflowAction.selectExecutionList(execution);
738         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
739         assertEqualsBulkFlowName(ebbs,"AAICheckVnfInMaintBB","AAISetVnfInMaintBB","DeactivateVfModuleBB","DeactivateVfModuleBB","DeleteVfModuleBB","DeleteVfModuleBB","DeactivateVnfBB"
740                 ,"CreateVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","ActivateVfModuleBB","ActivateVnfBB","SDNOVnfHealthCheckBB","AAIUnsetVnfInMaintBB");
741     }
742     
743     @Test
744     public void selectExecutionListVnfMacroReplaceTest() throws Exception{
745         String gAction = "replaceInstance";
746         String resource = "Vnf";
747         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
748         execution.setVariable("requestAction", gAction);
749         String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/VnfMacroReplace.json")));
750         execution.setVariable("bpmnRequest", bpmnRequest);          
751         execution.setVariable("aLaCarte", false);
752         execution.setVariable("apiVersion", "7");
753         execution.setVariable("requestUri", "v7/serviceInstances/123/vnfs/1234/replace");
754         execution.setVariable("serviceInstanceId", "123");
755         execution.setVariable("vnfId", "1234");
756         
757         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
758         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB","AAISetVnfInMaintBB","DeactivateFabricConfigurationBB","UnassignFabricConfigurationBB","DeactivateVfModuleBB","DeleteVfModuleBB"
759                 ,"DeactivateVnfBB","ChangeModelVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB","ChangeModelVnfBB","ActivateVnfBB","ChangeModelServiceInstanceBB","SDNOVnfHealthCheckBB","AAIUnsetVnfInMaintBB");
760         northBoundRequest.setOrchestrationFlowList(orchFlows);  
761
762         ServiceInstance serviceInstanceAAI = new ServiceInstance();
763         serviceInstanceAAI.setServiceInstanceId("123");
764         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO = new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
765         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf = new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
766         vnf.setVnfId("1234");
767         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
768         vfModule.setVfModuleId("vfModule1");
769         vnf.getVfModules().add(vfModule);
770         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
771         vfModule2.setVfModuleId("vfModule2");
772         vnf.getVfModules().add(vfModule2);
773         serviceInstanceMSO.getVnfs().add(vnf);
774         VfModule vfModuleAAI = new VfModule();
775         vfModuleAAI.setVfModuleId("vfModule2");
776         RelationshipList relationshipList = new RelationshipList();
777         Relationship relationship = new Relationship();
778         relationshipList.getRelationship().add(relationship);
779         vfModuleAAI.setRelationshipList(relationshipList);
780         Relationships relationships = new Relationships("abc");
781         Configuration config = new Configuration();
782         config.setConfigurationId("configId");
783         Optional<Configuration> configOp = Optional.of(config);
784         Optional<Relationships> relationshipsOp = Optional.of(relationships);
785         
786         doReturn(relationshipsOp).when(workflowActionUtils).extractRelationshipsVnfc(isA(Relationships.class));
787         doReturn(configOp).when(workflowActionUtils).extractRelationshipsConfiguration(isA(Relationships.class));
788         doReturn(vfModuleAAI).when(bbSetupUtils).getAAIVfModule("1234", "vfModule2");
789         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
790         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
791         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"cloud-owner")).thenReturn(northBoundRequest);
792         workflowAction.selectExecutionList(execution);
793         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
794         assertEqualsBulkFlowName(ebbs,"AAICheckVnfInMaintBB","AAISetVnfInMaintBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB", "DeactivateVfModuleBB","DeactivateVfModuleBB","DeleteVfModuleBB","DeleteVfModuleBB","DeactivateVnfBB"
795                 ,"ChangeModelVfModuleBB" ,"ChangeModelVfModuleBB" , "CreateVfModuleBB","CreateVfModuleBB", "ActivateVfModuleBB","ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ChangeModelVnfBB", "ActivateVnfBB","ChangeModelServiceInstanceBB","SDNOVnfHealthCheckBB","AAIUnsetVnfInMaintBB");
796     }
797         
798         @Ignore
799         @Test
800         public void selectExecutionListNetworkCollectionMacroCreate() throws Exception{
801                 String gAction = "createInstance";
802                 String resource = "NetworkCollection";
803                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
804                 execution.setVariable("requestAction", gAction);
805                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/CreateNetworkCollection.json")));
806                 execution.setVariable("bpmnRequest", bpmnRequest);              
807                 execution.setVariable("aLaCarte", false);
808                 execution.setVariable("apiVersion", "7");
809                 execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
810                 
811                 
812                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
813                 List<OrchestrationFlow> orchFlows = createFlowList("CreateNetworkCollectionBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","ActivateNetworkCollectionBB");
814                 northBoundRequest.setOrchestrationFlowList(orchFlows);
815                 
816                 Service service = new Service();
817                 CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
818                 CollectionResource collectionResource = new CollectionResource();
819                 collectionResource.setToscaNodeType("Data NetworkCollection Data");
820                 collectionResourceCustomization.setCollectionResource(collectionResource);
821                 service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
822                 
823                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
824                 when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
825                 workflowAction.selectExecutionList(execution);
826                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
827                 assertEqualsBulkFlowName(ebbs,"CreateNetworkCollectionBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","ActivateNetworkCollectionBB");
828         }
829         
830         @Ignore
831         @Test
832         public void selectExecutionListNetworkCollectionMacroDelete() throws Exception{
833                 String gAction = "deleteInstance";
834                 String resource = "NetworkCollection";
835                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
836                 execution.setVariable("requestAction", gAction);
837                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/CreateNetworkCollection.json")));
838                 execution.setVariable("bpmnRequest", bpmnRequest);                      
839                 execution.setVariable("aLaCarte", false);
840                 execution.setVariable("apiVersion", "7");
841                 execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
842                 
843                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
844                 List<OrchestrationFlow> orchFlows = createFlowList("DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkCollectionBB","DeleteNetworkCollectionBB");
845                 northBoundRequest.setOrchestrationFlowList(orchFlows);          
846                 
847                 Service service = new Service();
848                 CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
849                 CollectionResource collectionResource = new CollectionResource();
850                 collectionResource.setToscaNodeType("Data NetworkCollection Data");
851                 collectionResourceCustomization.setCollectionResource(collectionResource);
852                 service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
853                 
854                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
855                 when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
856                 workflowAction.selectExecutionList(execution);
857                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
858                 assertEqualsBulkFlowName(ebbs,"DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkCollectionBB"
859                                 ,"DeleteNetworkCollectionBB");
860         }
861         
862         @Test
863         public void selectExecutionListALaCarteVfModuleNoFabricCreateTest() throws Exception{
864                 String gAction = "createInstance";
865                 String resource = "VfModule";
866                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
867                 execution.setVariable("requestAction", gAction);
868                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
869                 execution.setVariable("bpmnRequest", bpmnRequest);              
870                 execution.setVariable("aLaCarte", true);
871                 execution.setVariable("apiVersion", "7");
872                 execution.setVariable("requestUri", "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
873                 
874                 
875                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
876                 List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB");
877                 northBoundRequest.setOrchestrationFlowList(orchFlows);  
878                 
879                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,true,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
880                 workflowAction.selectExecutionList(execution);
881                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
882                 assertEqualsBulkFlowName(ebbs,"AssignVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB");
883         }
884         
885         @Test
886         public void selectExecutionListALaCarteVfModuleFabricCreateTest() throws Exception{
887                 String gAction = "createInstance";
888                 String resource = "VfModule";
889                 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
890                 execution.setVariable("requestAction", gAction);
891                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
892                 execution.setVariable("bpmnRequest", bpmnRequest);              
893                 execution.setVariable("aLaCarte", true);
894                 execution.setVariable("apiVersion", "7");
895                 execution.setVariable("requestUri", "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
896                 
897                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
898                 List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB");
899                 northBoundRequest.setOrchestrationFlowList(orchFlows);
900                 
901                 List<CvnfcCustomization> cvnfcCustomizations = new ArrayList<CvnfcCustomization>();
902                 CvnfcCustomization cvnfcCustomization = new CvnfcCustomization();
903                 VnfVfmoduleCvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization = new VnfVfmoduleCvnfcConfigurationCustomization();
904                 ConfigurationResource configurationResource = new ConfigurationResource();
905                 configurationResource.setToscaNodeType("FabricConfiguration");
906                 vnfVfmoduleCvnfcConfigurationCustomization.setConfigurationResource(configurationResource);
907                 Set<VnfVfmoduleCvnfcConfigurationCustomization> custSet = new HashSet<VnfVfmoduleCvnfcConfigurationCustomization>();
908                 custSet.add(vnfVfmoduleCvnfcConfigurationCustomization);
909                 cvnfcCustomization.setVnfVfmoduleCvnfcConfigurationCustomization(custSet);
910                 cvnfcCustomizations.add(cvnfcCustomization);
911                 
912                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,true,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
913                 when(catalogDbClient.getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID("fc25201d-36d6-43a3-8d39-fdae88e526ae", "9a6d01fd-19a7-490a-9800-460830a12e0b")).thenReturn(cvnfcCustomizations);
914                 workflowAction.selectExecutionList(execution);
915                 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
916                 assertEqualsBulkFlowName(ebbs,"AssignVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB");
917         }
918         
919         /**
920          * WorkflowActionBB Tests
921          */
922         
923         @Test
924         public void pluralTest() {
925                 List<String> items = Arrays.asList(
926                                 "serviceInstances, Service",
927                                 "vnfs, Vnf",
928                                 "vfModules, VfModule",
929                                 "networks, Network",
930                                 "invalidNames, invalidNames");
931                 items.forEach(item -> {
932                         String[] split = item.split(",");
933                         String type = split[0].trim();
934                         String expected = split[1].trim();
935                         assertThat(workflowAction.convertTypeFromPlural(type), equalTo(expected));
936                 });
937         }
938         
939         @Test
940         public void sortExecutionPathByObjectForVlanTaggingCreateTest() throws Exception{
941                 List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
942                 ExecuteBuildingBlock ebb = new ExecuteBuildingBlock();
943                 BuildingBlock bb = new BuildingBlock();
944                 bb.setBpmnFlowName("AssignNetworkBB");
945                 bb.setKey("0");
946                 ebb.setBuildingBlock(bb);
947                 executeFlows.add(ebb);
948                 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock();
949                 BuildingBlock bb2 = new BuildingBlock();
950                 bb2.setBpmnFlowName("AssignNetworkBB");
951                 bb2.setKey("1");
952                 ebb2.setBuildingBlock(bb2);
953                 executeFlows.add(ebb2);
954                 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock();
955                 BuildingBlock bb3 = new BuildingBlock();
956                 bb3.setBpmnFlowName("CreateNetworkBB");
957                 bb3.setKey("0");
958                 ebb3.setBuildingBlock(bb3);
959                 executeFlows.add(ebb3);
960                 ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock();
961                 BuildingBlock bb4 = new BuildingBlock();
962                 bb4.setBpmnFlowName("CreateNetworkBB");
963                 bb4.setKey("1");
964                 ebb4.setBuildingBlock(bb4);
965                 executeFlows.add(ebb4);
966                 ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock();
967                 BuildingBlock bb5 = new BuildingBlock();
968                 bb5.setBpmnFlowName("ActivateNetworkBB");
969                 bb5.setKey("0");
970                 ebb5.setBuildingBlock(bb5);
971                 executeFlows.add(ebb5);
972                 ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock();
973                 BuildingBlock bb6 = new BuildingBlock();
974                 bb6.setBpmnFlowName("ActivateNetworkBB");
975                 bb6.setKey("1");
976                 ebb6.setBuildingBlock(bb6);
977                 executeFlows.add(ebb6);
978
979                 List<ExecuteBuildingBlock> sorted = workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows,"createInstance");
980                 assertEqualsBulkFlowName(sorted,"AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB","AssignNetworkBB","CreateNetworkBB","ActivateNetworkBB");
981         }
982         
983         @Test
984         public void sortExecutionPathByObjectForVlanTaggingDeleteTest() throws Exception{
985                 List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
986                 ExecuteBuildingBlock ebb = new ExecuteBuildingBlock();
987                 BuildingBlock bb = new BuildingBlock();
988                 bb.setBpmnFlowName("DeactivateNetworkBB");
989                 bb.setKey("0");
990                 ebb.setBuildingBlock(bb);
991                 executeFlows.add(ebb);
992                 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock();
993                 BuildingBlock bb2 = new BuildingBlock();
994                 bb2.setBpmnFlowName("DeactivateNetworkBB");
995                 bb2.setKey("1");
996                 ebb2.setBuildingBlock(bb2);
997                 executeFlows.add(ebb2);
998                 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock();
999                 BuildingBlock bb3 = new BuildingBlock();
1000                 bb3.setBpmnFlowName("DeleteNetworkBB");
1001                 bb3.setKey("0");
1002                 ebb3.setBuildingBlock(bb3);
1003                 executeFlows.add(ebb3);
1004                 ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock();
1005                 BuildingBlock bb4 = new BuildingBlock();
1006                 bb4.setBpmnFlowName("DeleteNetworkBB");
1007                 bb4.setKey("1");
1008                 ebb4.setBuildingBlock(bb4);
1009                 executeFlows.add(ebb4);
1010                 ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock();
1011                 BuildingBlock bb5 = new BuildingBlock();
1012                 bb5.setBpmnFlowName("UnassignNetworkBB");
1013                 bb5.setKey("0");
1014                 ebb5.setBuildingBlock(bb5);
1015                 executeFlows.add(ebb5);
1016                 ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock();
1017                 BuildingBlock bb6 = new BuildingBlock();
1018                 bb6.setBpmnFlowName("UnassignNetworkBB");
1019                 bb6.setKey("1");
1020                 ebb6.setBuildingBlock(bb6);
1021                 executeFlows.add(ebb6);
1022                 
1023                 List<ExecuteBuildingBlock> sorted = workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows,"deleteInstance");
1024                 assertEqualsBulkFlowName(sorted,"DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB","DeactivateNetworkBB","DeleteNetworkBB","UnassignNetworkBB");
1025         }
1026         @Test
1027         public void queryNorthBoundRequestCatalogDbNestedTest() throws MalformedURLException {
1028                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1029                 List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB","AAISetVnfInMaintBB","VNF-Macro-Replace","SDNOVnfHealthCheckBB","AAIUnsetVnfInMaintBB");
1030                 northBoundRequest.setOrchestrationFlowList(orchFlows);
1031                 List<OrchestrationFlow> macroFlows = createFlowList("DeactivateVfModuleBB","DeleteVfModuleBB","DeactivateVnfBB","CreateVfModuleBB","ActivateVfModuleBB","ActivateVnfBB");
1032                 
1033                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner("replaceInstance","Vnf",false,"my-custom-cloud-owner")).thenReturn(northBoundRequest);
1034                 when(catalogDbClient.getOrchestrationFlowByAction("VNF-Macro-Replace")).thenReturn(macroFlows);
1035                 List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "replaceInstance", WorkflowType.VNF, false,"my-custom-cloud-owner");
1036                 assertEquals(flows.get(0).getFlowName(),"AAICheckVnfInMaintBB");
1037                 assertEquals(flows.get(1).getFlowName(),"AAISetVnfInMaintBB");
1038                 assertEquals(flows.get(2).getFlowName(),"DeactivateVfModuleBB");
1039                 assertEquals(flows.get(3).getFlowName(),"DeleteVfModuleBB");
1040                 assertEquals(flows.get(4).getFlowName(),"DeactivateVnfBB");     
1041                 assertEquals(flows.get(5).getFlowName(),"CreateVfModuleBB");    
1042                 assertEquals(flows.get(6).getFlowName(),"ActivateVfModuleBB");  
1043                 assertEquals(flows.get(7).getFlowName(),"ActivateVnfBB");       
1044                 assertEquals(flows.get(8).getFlowName(),"SDNOVnfHealthCheckBB");
1045                 assertEquals(flows.get(9).getFlowName(),"AAIUnsetVnfInMaintBB");
1046         }       
1047         
1048         @Test
1049         public void queryNorthBoundRequestCatalogDbTransportTest() throws MalformedURLException {
1050                 NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1051                 List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
1052                 northBoundRequest.setOrchestrationFlowList(orchFlows);
1053                 when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwnerAndServiceType("createInstance","Service",true,"my-custom-cloud-owner","TRANSPORT")).thenReturn(northBoundRequest);
1054
1055                 List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "createInstance", WorkflowType.SERVICE, true,"my-custom-cloud-owner","TRANSPORT");
1056                 assertEquals(flows.get(0).getFlowName(),"AssignServiceInstanceBB");
1057         }
1058
1059         @Test
1060         public void extractResourceIdAndTypeFromUriTest(){
1061                 String uri = "/v6/serviceInstances/123";
1062                 String uri2 = "/v6/serviceInstances/123/vnfs/1234";
1063                 String uri3 = "/v6/serviceInstances";
1064                 String uri4 = "/v6/serviceInstances/assign";
1065                 String uri5 = "'/v6/serviceInstances/123/vnfs";
1066                 String uri6 = "/v6/serviceInstances/123/vnfs/1234/someAction";
1067                 String uri7 = "/v6/serviceInstances/123/vnfs/1234/vfModules/5678/replace";
1068                 String uri8 = "/v6/serviceInstances/123/vnfs/1234/vfModules/scaleOut";
1069                 Resource expected1 = new Resource(WorkflowType.SERVICE, "123", true);
1070                 Resource expected2 = new Resource(WorkflowType.VNF, "1234", false);
1071                 Resource expected3 = new Resource(WorkflowType.VNF, "1234", false);
1072                 Resource expected4 = new Resource(WorkflowType.VFMODULE, "5678", false);
1073                 Resource result = workflowAction.extractResourceIdAndTypeFromUri(uri);
1074                 assertEquals(expected1.getResourceId(),result.getResourceId());
1075                 assertEquals(expected1.getResourceType(),result.getResourceType());
1076                 result = workflowAction.extractResourceIdAndTypeFromUri(uri2);
1077                 assertEquals(expected2.getResourceId(),result.getResourceId());
1078                 assertEquals(expected2.getResourceType(),result.getResourceType());
1079                 result = workflowAction.extractResourceIdAndTypeFromUri(uri3);
1080                 assertEquals("Service", result.getResourceType().toString());
1081                 assertEquals(UUID.randomUUID().toString().length(),result.getResourceId().length());
1082                 result = workflowAction.extractResourceIdAndTypeFromUri(uri4);
1083                 assertEquals("Service", result.getResourceType().toString());
1084                 assertEquals(UUID.randomUUID().toString().length(),result.getResourceId().length());
1085                 result = workflowAction.extractResourceIdAndTypeFromUri(uri5);
1086                 assertEquals("Vnf", result.getResourceType().toString());
1087                 assertEquals(UUID.randomUUID().toString().length(),result.getResourceId().length());
1088                 result = workflowAction.extractResourceIdAndTypeFromUri(uri6);
1089                 assertEquals(expected3.getResourceId(),result.getResourceId());
1090                 assertEquals(expected3.getResourceType(),result.getResourceType());
1091                 result = workflowAction.extractResourceIdAndTypeFromUri(uri7);
1092                 assertEquals(expected4.getResourceId(),result.getResourceId());
1093                 assertEquals(expected4.getResourceType(),result.getResourceType());
1094                 result = workflowAction.extractResourceIdAndTypeFromUri(uri8);
1095         assertEquals(UUID.randomUUID().toString().length(),result.getResourceId().length());    
1096         assertEquals("VfModule", result.getResourceType().toString());
1097                 
1098         }
1099         
1100         @Test
1101         public void extractResourceIdAndTypeFromUriInvalidTypeTest() {
1102                 this.expectedException.expect(IllegalArgumentException.class);
1103                 this.expectedException.expectMessage(containsString("Uri could not be parsed. No type found."));
1104                 workflowAction.extractResourceIdAndTypeFromUri("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace");
1105         }
1106         
1107         @Test
1108         public void extractResourceIdAndTypeFromUriInvalidUriTest() {
1109                 this.expectedException.expect(IllegalArgumentException.class);
1110                 this.expectedException.expectMessage(containsString("Uri could not be parsed:"));
1111                 workflowAction.extractResourceIdAndTypeFromUri("something that doesn't match anything");
1112         }
1113         
1114         @Test
1115         public void populateResourceIdsFromApiHandlerTest(){
1116                 execution.setVariable("serviceInstanceId", "123");
1117                 execution.setVariable("vnfId", "888");
1118                 WorkflowResourceIds x = workflowAction.populateResourceIdsFromApiHandler(execution);
1119                 assertEquals("123",x.getServiceInstanceId());
1120                 assertEquals("888",x.getVnfId());
1121                 assertNull(x.getVolumeGroupId());
1122         }
1123         
1124         @Test
1125         public void validateResourceIdInAAITest() throws Exception{
1126                 //SI
1127                 RequestDetails reqDetails = new RequestDetails();
1128                 SubscriberInfo subInfo = new SubscriberInfo();
1129                 subInfo.setGlobalSubscriberId("id123");
1130                 reqDetails.setSubscriberInfo(subInfo);
1131                 RequestParameters reqParams = new RequestParameters();
1132                 reqParams.setSubscriptionServiceType("subServiceType123");
1133                 reqDetails.setRequestParameters(reqParams );
1134                 WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
1135                 ServiceInstance si = new ServiceInstance();
1136                 si.setServiceInstanceId("siId123");
1137                 Optional<ServiceInstance> siOp = Optional.of(si);
1138                 when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp);
1139                 when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "111111")).thenReturn(Optional.empty());
1140                 String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails, workflowResourceIds);
1141                 assertEquals("siId123",id);
1142                 String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "111111", reqDetails, workflowResourceIds);
1143                 assertEquals("generatedId123",id2);
1144                 
1145                 //Network
1146                 L3Network network = new L3Network();
1147                 network.setNetworkId("id123");
1148                 network.setNetworkName("name123");
1149                 workflowResourceIds.setServiceInstanceId("siId123");
1150                 Optional<L3Network> opNetwork = Optional.of(network);
1151                 when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123","name123")).thenReturn(opNetwork);
1152                 when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123","111111")).thenReturn(Optional.empty());
1153                 id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "name123", reqDetails, workflowResourceIds);
1154                 assertEquals("id123",id);
1155                 id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "111111", reqDetails, workflowResourceIds);
1156                 assertEquals("generatedId123",id2);
1157                 
1158                 //Vnf
1159                 GenericVnf vnf = new GenericVnf();
1160                 vnf.setVnfId("id123");
1161                 vnf.setVnfName("vnfName123");
1162                 Optional<GenericVnf> opVnf = Optional.of(vnf);
1163                 when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123","name123")).thenReturn(opVnf);
1164                 when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123","111111")).thenReturn(Optional.empty());
1165                 id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "name123", reqDetails, workflowResourceIds);
1166                 assertEquals("id123",id);
1167                 id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "111111", reqDetails, workflowResourceIds);
1168                 assertEquals("generatedId123",id2);
1169                 
1170                 //VfModule
1171                 VfModules vfModules = new VfModules();
1172                 VfModule vfModule = new VfModule();
1173                 vfModule.setVfModuleId("id123");
1174                 vfModule.setVfModuleName("name123");
1175                 vfModules.getVfModule().add(vfModule);
1176                 vnf.setVfModules(vfModules);
1177                 workflowResourceIds.setVnfId("id123");
1178                 when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf);
1179                 id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "name123", reqDetails, workflowResourceIds);
1180                 assertEquals("id123",id);
1181
1182                 GenericVnf vnf2 = new GenericVnf();
1183                 VfModules vfModules2 = new VfModules();
1184                 VfModule vfModule2 = new VfModule();
1185                 vfModule2.setVfModuleId("id123");
1186                 vfModule2.setVfModuleName("name123");
1187                 vfModules2.getVfModule().add(vfModule2);
1188                 vnf2.setVfModules(vfModules2);
1189                 workflowResourceIds.setVnfId("id111");
1190                 when(bbSetupUtils.getAAIGenericVnf("id111")).thenReturn(vnf2);
1191                 id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "111111", reqDetails, workflowResourceIds);
1192                 assertEquals("generatedId123",id2);
1193                 
1194                 //VolumeGroup
1195                 VolumeGroup volumeGroup = new VolumeGroup();
1196                 volumeGroup.setVolumeGroupId("id123");
1197                 volumeGroup.setVolumeGroupName("name123");
1198                 workflowResourceIds.setVnfId("id123");
1199                 Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
1200                 when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123","name123")).thenReturn(opVolumeGroup);
1201                 id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails, workflowResourceIds);
1202                 assertEquals("id123",id);
1203                 
1204                 workflowResourceIds.setVnfId("id444");
1205                 when(bbSetupUtils.getAAIGenericVnf("id444")).thenReturn(vnf);
1206                 when(bbSetupUtils.getRelatedVolumeGroupByNameFromVfModule("id123", "id123","111111")).thenReturn(opVolumeGroup);
1207                 when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id444","111111")).thenReturn(Optional.empty());
1208                 id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "111111", reqDetails, workflowResourceIds);
1209                 assertEquals("id123",id2);
1210         }
1211         
1212         @Test
1213         public void handleRuntimeExceptionTest(){
1214                 execution.setVariable("BPMN_javaExpMsg", "test runtime error message");
1215                 execution.setVariable("testProcessKey", "testProcessKeyValue");
1216                 try{
1217                         workflowAction.handleRuntimeException(execution);
1218                 } catch (BpmnError wfe) {
1219                         assertEquals("MSOWorkflowException",wfe.getErrorCode());
1220                 }
1221         }
1222         
1223         @Ignore
1224         @Test
1225         public void traverseCatalogDbServiceMultipleNetworkTest() throws IOException{
1226                 execution.setVariable("testProcessKey", "testProcessKeyValue");
1227                 Service service = new Service();
1228                 List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
1229                 NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
1230                 networkCust.setModelCustomizationUUID("123");
1231                 networkCustomizations.add(networkCust);
1232                 service.setNetworkCustomizations(networkCustomizations);
1233                 NetworkCollectionResourceCustomization collectionResourceCustomization = new NetworkCollectionResourceCustomization();
1234                 collectionResourceCustomization.setModelCustomizationUUID("123");
1235                 CollectionResource collectionResource = new CollectionResource();
1236                 collectionResource.setToscaNodeType("NetworkCollection");
1237                 InstanceGroup instanceGroup = new InstanceGroup();
1238                 List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
1239                 CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization = new CollectionResourceInstanceGroupCustomization();
1240                 collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
1241                 collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
1242                 instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
1243                 collectionResource.setInstanceGroup(instanceGroup);
1244                 collectionResourceCustomization.setCollectionResource(collectionResource);;
1245                 service.setModelUUID("abc");
1246                 service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
1247                 service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
1248                 doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
1249                 doReturn(collectionResourceCustomization).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
1250                 String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
1251                 ObjectMapper mapper = new ObjectMapper();
1252                 ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
1253                 List<Resource> resourceCounter = new ArrayList<>();
1254                 thrown.expect(BpmnError.class);
1255                 workflowAction.traverseCatalogDbService(execution, sIRequest, resourceCounter);
1256         }
1257         
1258         @Test
1259         public void sortVfModulesByBaseFirstTest(){
1260                 List<Resource> resources = new ArrayList<>();
1261                 Resource resource1 = new Resource(WorkflowType.VFMODULE,"111",false);
1262                 resource1.setBaseVfModule(false);
1263                 resources.add(resource1);
1264                 Resource resource2 = new Resource(WorkflowType.VFMODULE,"222",false);
1265                 resource2.setBaseVfModule(false);
1266                 resources.add(resource2);
1267                 Resource resource3 = new Resource(WorkflowType.VFMODULE,"333",false);
1268                 resource3.setBaseVfModule(true);
1269                 resources.add(resource3);
1270                 List<Resource> result = workflowAction.sortVfModulesByBaseFirst(resources);
1271                 assertEquals("333",result.get(0).getResourceId());
1272                 assertEquals("222",result.get(1).getResourceId());
1273                 assertEquals("111",result.get(2).getResourceId());
1274         }
1275         
1276         @Test
1277         public void sortVfModulesByBaseLastTest(){
1278                 List<Resource> resources = new ArrayList<>();
1279                 Resource resource1 = new Resource(WorkflowType.VFMODULE,"111",false);
1280                 resource1.setBaseVfModule(true);
1281                 resources.add(resource1);
1282                 Resource resource2 = new Resource(WorkflowType.VFMODULE,"222",false);
1283                 resource2.setBaseVfModule(false);
1284                 resources.add(resource2);
1285                 Resource resource3 = new Resource(WorkflowType.VFMODULE,"333",false);
1286                 resource3.setBaseVfModule(false);
1287                 resources.add(resource3);
1288                 List<Resource> result = workflowAction.sortVfModulesByBaseLast(resources);
1289                 assertEquals("333",result.get(0).getResourceId());
1290                 assertEquals("222",result.get(1).getResourceId());
1291                 assertEquals("111",result.get(2).getResourceId());
1292         }
1293         
1294         private List<OrchestrationFlow> createFlowList (String... flowNames){
1295                 List<OrchestrationFlow> result = new ArrayList<>();
1296                 for(String flowName : flowNames){
1297                         OrchestrationFlow orchFlow = new OrchestrationFlow();
1298                         orchFlow.setFlowName(flowName);
1299                         result.add(orchFlow);
1300                 }
1301                 return result;
1302         }
1303         
1304         private void assertEqualsBulkFlowName (List<ExecuteBuildingBlock> ebbs, String... flowNames){
1305                 for(int i = 0; i<ebbs.size(); i++){
1306                         assertEquals(ebbs.get(i).getBuildingBlock().getBpmnFlowName(),flowNames[i]);
1307                 }
1308         }
1309 }