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