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