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