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