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