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