eea885288e81465cc942f0aa93d2c5547c3fd894
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (c) 2019 Samsung
8  * ================================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.so.bpmn.infrastructure.workflow.tasks;
24
25 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
26 import static org.hamcrest.CoreMatchers.containsString;
27 import static org.hamcrest.CoreMatchers.equalTo;
28 import static org.junit.Assert.assertEquals;
29 import static org.junit.Assert.assertFalse;
30 import static org.junit.Assert.assertNotNull;
31 import static org.junit.Assert.assertNull;
32 import static org.junit.Assert.assertThat;
33 import static org.junit.Assert.assertTrue;
34 import static org.junit.Assert.fail;
35 import static org.mockito.ArgumentMatchers.anyObject;
36 import static org.mockito.ArgumentMatchers.anyString;
37 import static org.mockito.ArgumentMatchers.isA;
38 import static org.mockito.Mockito.doReturn;
39 import static org.mockito.Mockito.when;
40 import com.fasterxml.jackson.databind.ObjectMapper;
41 import java.io.IOException;
42 import java.net.MalformedURLException;
43 import java.nio.file.Files;
44 import java.nio.file.Paths;
45 import java.util.ArrayList;
46 import java.util.Arrays;
47 import java.util.HashMap;
48 import java.util.HashSet;
49 import java.util.List;
50 import java.util.Map;
51 import java.util.Optional;
52 import java.util.Set;
53 import java.util.UUID;
54 import org.camunda.bpm.engine.delegate.BpmnError;
55 import org.camunda.bpm.engine.delegate.DelegateExecution;
56 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
57 import org.javatuples.Pair;
58 import org.junit.Before;
59 import org.junit.Ignore;
60 import org.junit.Rule;
61 import org.junit.Test;
62 import org.junit.rules.ExpectedException;
63 import org.mockito.InjectMocks;
64 import org.mockito.Mock;
65 import org.mockito.Spy;
66 import org.onap.aai.domain.yang.GenericVnf;
67 import org.onap.aai.domain.yang.GenericVnfs;
68 import org.onap.aai.domain.yang.L3Network;
69 import org.onap.aai.domain.yang.L3Networks;
70 import org.onap.aai.domain.yang.Relationship;
71 import org.onap.aai.domain.yang.RelationshipList;
72 import org.onap.aai.domain.yang.ServiceInstance;
73 import org.onap.aai.domain.yang.ServiceInstances;
74 import org.onap.aai.domain.yang.VfModule;
75 import org.onap.aai.domain.yang.VfModules;
76 import org.onap.aai.domain.yang.VolumeGroup;
77 import org.onap.so.bpmn.BaseTaskTest;
78 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
79 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
80 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
81 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
82 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
83 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoVfModule;
84 import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.DuplicateNameException;
85 import org.onap.so.client.aai.AAIObjectType;
86 import org.onap.so.client.aai.entities.AAIResultWrapper;
87 import org.onap.so.client.aai.entities.Relationships;
88 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
89 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
90 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
91 import org.onap.so.db.catalog.beans.CollectionResource;
92 import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
93 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
94 import org.onap.so.db.catalog.beans.ConfigurationResource;
95 import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
96 import org.onap.so.db.catalog.beans.CvnfcCustomization;
97 import org.onap.so.db.catalog.beans.HeatEnvironment;
98 import org.onap.so.db.catalog.beans.HeatTemplate;
99 import org.onap.so.db.catalog.beans.InstanceGroup;
100 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
101 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
102 import org.onap.so.db.catalog.beans.Service;
103 import org.onap.so.db.catalog.beans.VfModuleCustomization;
104 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
105 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
106 import org.onap.so.db.request.beans.InfraActiveRequests;
107 import org.onap.so.db.request.beans.RequestProcessingData;
108 import org.onap.so.serviceinstancebeans.ModelInfo;
109 import org.onap.so.serviceinstancebeans.RequestDetails;
110 import org.onap.so.serviceinstancebeans.RequestParameters;
111 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
112 import org.onap.so.serviceinstancebeans.SubscriberInfo;
113 import org.springframework.core.env.Environment;
114
115 public class WorkflowActionTest extends BaseTaskTest {
116
117
118     @Mock
119     protected Environment environment;
120     @InjectMocks
121     protected WorkflowAction workflowAction;
122     private DelegateExecution execution;
123
124     @InjectMocks
125     @Spy
126     protected WorkflowAction SPY_workflowAction;
127
128     @Rule
129     public ExpectedException thrown = ExpectedException.none();
130
131     private String RESOURCE_PATH = "src/test/resources/__files/";
132
133     @Before
134     public void before() throws Exception {
135         execution = new DelegateExecutionFake();
136         org.onap.aai.domain.yang.ServiceInstance servInstance = new org.onap.aai.domain.yang.ServiceInstance();
137         servInstance.setServiceInstanceId("TEST");
138         when(bbSetupUtils.getAAIServiceInstanceByName(anyString(), anyObject())).thenReturn(servInstance);
139         workflowAction.setBbInputSetupUtils(bbSetupUtils);
140         workflowAction.setBbInputSetup(bbInputSetup);
141     }
142
143     /**
144      * ALACARTE TESTS
145      */
146     @Test
147     public void selectExecutionListALaCarteNetworkCreateTest() throws Exception {
148         String gAction = "createInstance";
149         String resource = "Network";
150         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
151         execution.setVariable("requestAction", gAction);
152         String bpmnRequest =
153                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
154         execution.setVariable("bpmnRequest", bpmnRequest);
155         execution.setVariable("aLaCarte", true);
156         execution.setVariable("apiVersion", "7");
157         execution.setVariable("requestUri", "v6/networks/123");
158
159         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
160         List<OrchestrationFlow> orchFlows =
161                 createFlowList("AssignNetwork1802BB", "CreateNetworkBB", "ActivateNetworkBB");
162         northBoundRequest.setOrchestrationFlowList(orchFlows);
163
164         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
165                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
166         workflowAction.selectExecutionList(execution);
167         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
168         assertEqualsBulkFlowName(ebbs, "AssignNetwork1802BB", "CreateNetworkBB", "ActivateNetworkBB");
169     }
170
171     @Test
172     public void selectExecutionListALaCarteNetworkDeleteTest() throws Exception {
173         String gAction = "deleteInstance";
174         String resource = "Network";
175         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
176         execution.setVariable("requestAction", gAction);
177         String bpmnRequest =
178                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
179         execution.setVariable("bpmnRequest", bpmnRequest);
180         execution.setVariable("aLaCarte", true);
181         execution.setVariable("apiVersion", "7");
182         execution.setVariable("requestUri", "v6/networks/123");
183
184         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
185         List<OrchestrationFlow> orchFlows =
186                 createFlowList("DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetwork1802BB");
187         northBoundRequest.setOrchestrationFlowList(orchFlows);
188
189         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
190                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
191         workflowAction.selectExecutionList(execution);
192         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
193         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetwork1802BB");
194     }
195
196     @Test
197     public void selectExecutionListALaCarteServiceCreateTest() throws Exception {
198         String gAction = "createInstance";
199         String resource = "Service";
200         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
201         execution.setVariable("requestAction", gAction);
202         String bpmnRequest =
203                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
204         execution.setVariable("bpmnRequest", bpmnRequest);
205         execution.setVariable("aLaCarte", true);
206         execution.setVariable("apiVersion", "7");
207         execution.setVariable("requestUri", "v6/serviceInstances/123");
208
209
210         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
211         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "ActivateServiceInstanceBB");
212         northBoundRequest.setOrchestrationFlowList(orchFlows);
213
214         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
215                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
216         workflowAction.selectExecutionList(execution);
217         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
218         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "ActivateServiceInstanceBB");
219     }
220
221     /**
222      * SERVICE MACRO TESTS
223      */
224     @Test
225     public void selectExecutionListServiceMacroAssignTest() throws Exception {
226         String gAction = "assignInstance";
227         String resource = "Service";
228         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
229         execution.setVariable("requestAction", gAction);
230         String bpmnRequest =
231                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
232         execution.setVariable("bpmnRequest", bpmnRequest);
233         execution.setVariable("aLaCarte", false);
234         execution.setVariable("apiVersion", "7");
235         execution.setVariable("requestUri", "v6/serviceInstances/123");
236
237
238         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
239         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "AssignNetworkBB", "AssignVnfBB",
240                 "AssignVolumeGroupBB", "AssignVfModuleBB");
241         northBoundRequest.setOrchestrationFlowList(orchFlows);
242
243         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
244         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
245         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
246         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
247         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
248         HeatTemplate volumeHeatTemplate = new HeatTemplate();
249         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
250         vfModuleCustomization.setVfModule(vfModule);
251
252         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
253         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
254         HeatEnvironment heatEnvironment = new HeatEnvironment();
255         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
256         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
257         HeatTemplate moduleHeatTemplate = new HeatTemplate();
258         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
259         vfModuleCustomization2.setVfModule(vfModule2);
260
261         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
262         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
263
264         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
265                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
266         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
267                 .thenReturn(vfModuleCustomization);
268         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
269                 .thenReturn(vfModuleCustomization2);
270         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
271                 .thenReturn(vfModuleCustomization3);
272         workflowAction.selectExecutionList(execution);
273         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
274         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
275                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB");
276     }
277
278     @Test
279     public void selectExecutionListServiceMacroAssignNoCloudTest() throws Exception {
280         String gAction = "assignInstance";
281         String resource = "Service";
282         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
283         execution.setVariable("requestAction", gAction);
284         String bpmnRequest = new String(
285                 Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssignNoCloud.json")));
286         execution.setVariable("bpmnRequest", bpmnRequest);
287         execution.setVariable("aLaCarte", false);
288         execution.setVariable("apiVersion", "7");
289         execution.setVariable("requestUri", "v6/serviceInstances/123");
290
291
292         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
293         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "AssignNetworkBB", "AssignVnfBB",
294                 "AssignVolumeGroupBB", "AssignVfModuleBB");
295         northBoundRequest.setOrchestrationFlowList(orchFlows);
296
297         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
298         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
299         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
300         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
301         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
302         HeatTemplate volumeHeatTemplate = new HeatTemplate();
303         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
304         vfModuleCustomization.setVfModule(vfModule);
305
306         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
307         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
308         HeatEnvironment heatEnvironment = new HeatEnvironment();
309         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
310         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
311         HeatTemplate moduleHeatTemplate = new HeatTemplate();
312         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
313         vfModuleCustomization2.setVfModule(vfModule2);
314
315         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
316         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
317
318         when(environment.getProperty("org.onap.so.cloud-owner")).thenReturn("att-aic");
319         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
320                 false, "att-aic")).thenReturn(northBoundRequest);
321         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
322                 .thenReturn(vfModuleCustomization);
323         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
324                 .thenReturn(vfModuleCustomization2);
325         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
326                 .thenReturn(vfModuleCustomization3);
327         workflowAction.selectExecutionList(execution);
328         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
329         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
330                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB");
331     }
332
333     @Test
334     public void selectExecutionListServiceMacroActivateTest() throws Exception {
335         String gAction = "activateInstance";
336         String resource = "Service";
337         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
338         execution.setVariable("requestAction", gAction);
339         String bpmnRequest = new String(Files
340                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
341         execution.setVariable("bpmnRequest", bpmnRequest);
342         execution.setVariable("aLaCarte", false);
343         execution.setVariable("apiVersion", "7");
344         execution.setVariable("requestUri", "v6/serviceInstances/si0");
345
346
347         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
348         List<OrchestrationFlow> orchFlows =
349                 createFlowList("CreateNetworkBB", "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB",
350                         "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB", "ActivateServiceInstanceBB");
351         northBoundRequest.setOrchestrationFlowList(orchFlows);
352
353         ServiceInstance serviceInstanceAAI = new ServiceInstance();
354         serviceInstanceAAI.setServiceInstanceId("si0");
355         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
356                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
357         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
358                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
359         vnf.setVnfId("vnf0");
360
361
362         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
363         vnf.getVfModules().add(vfModule);
364         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
365         vnf.getVfModules().add(vfModule2);
366
367         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
368                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
369         volumeGroup.setVolumeGroupId("volumeGroup0");
370         vnf.getVolumeGroups().add(volumeGroup);
371
372         serviceInstanceMSO.getVnfs().add(vnf);
373
374         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("si0");
375         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
376         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
377                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
378         workflowAction.selectExecutionList(execution);
379         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
380         assertEqualsBulkFlowName(ebbs, "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
381                 "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB",
382                 "ActivateServiceInstanceBB");
383         assertEquals("volumeGroup0", ebbs.get(0).getWorkflowResourceIds().getVolumeGroupId());
384         assertEquals("volumeGroup0", ebbs.get(1).getWorkflowResourceIds().getVolumeGroupId());
385         assertEquals("testVfModuleId1", ebbs.get(2).getWorkflowResourceIds().getVfModuleId());
386         assertEquals("testVfModuleId2", ebbs.get(3).getWorkflowResourceIds().getVfModuleId());
387         assertEquals("testVfModuleId1", ebbs.get(4).getWorkflowResourceIds().getVfModuleId());
388         assertEquals("testVfModuleId2", ebbs.get(5).getWorkflowResourceIds().getVfModuleId());
389         assertEquals("vnf0", ebbs.get(6).getWorkflowResourceIds().getVnfId());
390         assertEquals("si0", ebbs.get(7).getWorkflowResourceIds().getServiceInstanceId());
391
392     }
393
394     @Test
395     public void selectExecutionListServiceMacroDeactivateTest() throws Exception {
396         String gAction = "deactivateInstance";
397         String resource = "Service";
398         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
399         execution.setVariable("requestAction", gAction);
400         String bpmnRequest = new String(Files
401                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
402         execution.setVariable("bpmnRequest", bpmnRequest);
403         execution.setVariable("aLaCarte", false);
404         execution.setVariable("apiVersion", "7");
405         execution.setVariable("requestUri", "v6/serviceInstances/123");
406
407
408         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
409         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateServiceInstanceBB");
410         northBoundRequest.setOrchestrationFlowList(orchFlows);
411
412         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
413                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
414         workflowAction.selectExecutionList(execution);
415         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
416         assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(), "DeactivateServiceInstanceBB");
417     }
418
419     @Test
420     public void selectExecutionListServiceMacroEmptyServiceTest() throws Exception {
421         String gAction = "createInstance";
422         String resource = "Service";
423         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
424         execution.setVariable("requestAction", gAction);
425         String bpmnRequest = new String(Files
426                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
427         execution.setVariable("bpmnRequest", bpmnRequest);
428         execution.setVariable("aLaCarte", false);
429         execution.setVariable("apiVersion", "7");
430         execution.setVariable("requestUri", "v6/serviceInstances/123");
431
432
433         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
434         northBoundRequest.setIsToplevelflow(true);
435         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
436                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
437                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
438                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
439                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
440         northBoundRequest.setOrchestrationFlowList(orchFlows);
441
442         Service service = new Service();
443         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
444         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
445                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
446         workflowAction.selectExecutionList(execution);
447         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
448         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "ActivateServiceInstanceBB");
449     }
450
451     @Test
452     public void selectExecutionListServiceMacroCreateJustNetworkTest() throws Exception {
453         String gAction = "createInstance";
454         String resource = "Service";
455         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
456         execution.setVariable("requestAction", gAction);
457         String bpmnRequest = new String(Files
458                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
459         execution.setVariable("bpmnRequest", bpmnRequest);
460         execution.setVariable("aLaCarte", false);
461         execution.setVariable("apiVersion", "7");
462         execution.setVariable("requestUri", "v6/serviceInstances/123");
463
464
465         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
466         northBoundRequest.setIsToplevelflow(true);
467         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
468                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
469                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
470                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
471                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
472         northBoundRequest.setOrchestrationFlowList(orchFlows);
473
474         Service service = new Service();
475         NetworkResourceCustomization networkCustomization = new NetworkResourceCustomization();
476         networkCustomization.setModelCustomizationUUID("1234");
477         service.getNetworkCustomizations().add(networkCustomization);
478         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
479         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
480                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
481         workflowAction.selectExecutionList(execution);
482         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
483         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignNetworkBB", "CreateNetworkBB",
484                 "ActivateNetworkBB", "ActivateServiceInstanceBB");
485     }
486
487     @Test
488     public void selectExecutionListServiceMacroCreateWithNetworkCollectionTest() throws Exception {
489         String gAction = "createInstance";
490         String resource = "Service";
491         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
492         execution.setVariable("requestAction", gAction);
493         String bpmnRequest = new String(Files
494                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
495         execution.setVariable("bpmnRequest", bpmnRequest);
496         execution.setVariable("aLaCarte", false);
497         execution.setVariable("apiVersion", "7");
498         execution.setVariable("requestUri", "v6/serviceInstances/123");
499
500
501         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
502         northBoundRequest.setIsToplevelflow(true);
503         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
504                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
505                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
506                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
507                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
508         northBoundRequest.setOrchestrationFlowList(orchFlows);
509
510         Service service = new Service();
511         List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
512         NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
513         networkCust.setModelCustomizationUUID("123");
514         networkCustomizations.add(networkCust);
515         service.setNetworkCustomizations(networkCustomizations);
516         NetworkCollectionResourceCustomization collectionResourceCustomization =
517                 new NetworkCollectionResourceCustomization();
518         collectionResourceCustomization.setModelCustomizationUUID("123");
519
520         CollectionResource collectionResource = new CollectionResource();
521         collectionResource.setToscaNodeType("NetworkCollection");
522         InstanceGroup instanceGroup = new InstanceGroup();
523         instanceGroup.setToscaNodeType("NetworkCollectionResource");
524         instanceGroup.setCollectionNetworkResourceCustomizations(new ArrayList<>());
525         CollectionNetworkResourceCustomization collectionNetworkResourceCust =
526                 new CollectionNetworkResourceCustomization();
527         collectionNetworkResourceCust.setModelCustomizationUUID("123");
528         collectionNetworkResourceCust.setNetworkResourceCustomization(collectionResourceCustomization);
529         instanceGroup.getCollectionNetworkResourceCustomizations().add(collectionNetworkResourceCust);
530         List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
531         CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization =
532                 new CollectionResourceInstanceGroupCustomization();
533         collectionInstanceGroupCustomization.setModelCustomizationUUID("123");
534         collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
535         collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
536         collectionInstanceGroupCustomization.setInstanceGroup(instanceGroup);
537         collectionInstanceGroupCustomization.setCollectionResourceCust(collectionResourceCustomization);
538         instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
539         collectionResource.setInstanceGroup(instanceGroup);
540         collectionResourceCustomization.setCollectionResource(collectionResource);;
541         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
542         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
543         doReturn(collectionResourceCustomization).when(catalogDbClient)
544                 .getNetworkCollectionResourceCustomizationByID("123");
545         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
546                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
547         workflowAction.selectExecutionList(execution);
548         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
549         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "CreateNetworkCollectionBB", "AssignNetworkBB",
550                 "CreateNetworkBB", "ActivateNetworkBB", "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB",
551                 "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB", "ActivateNetworkCollectionBB",
552                 "ActivateServiceInstanceBB");
553         assertEquals("Network id not empty", !ebbs.get(2).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
554         assertEquals("Network id not empty", !ebbs.get(3).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
555         assertEquals("Network id not empty", !ebbs.get(4).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
556         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
557                 ebbs.get(2).getWorkflowResourceIds().getNetworkId() == ebbs.get(3).getWorkflowResourceIds()
558                         .getNetworkId()
559                         && ebbs.get(3).getWorkflowResourceIds().getNetworkId() == ebbs.get(4).getWorkflowResourceIds()
560                                 .getNetworkId(),
561                 true);
562         assertEquals("Network id not empty", !ebbs.get(5).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
563         assertEquals("Network id not empty", !ebbs.get(6).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
564         assertEquals("Network id not empty", !ebbs.get(7).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
565         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
566                 ebbs.get(5).getWorkflowResourceIds().getNetworkId() == ebbs.get(6).getWorkflowResourceIds()
567                         .getNetworkId()
568                         && ebbs.get(6).getWorkflowResourceIds().getNetworkId() == ebbs.get(7).getWorkflowResourceIds()
569                                 .getNetworkId(),
570                 true);
571         assertEquals("Network id not empty", !ebbs.get(8).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
572         assertEquals("Network id not empty", !ebbs.get(9).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
573         assertEquals("Network id not empty", !ebbs.get(10).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
574         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
575                 ebbs.get(8).getWorkflowResourceIds().getNetworkId() == ebbs.get(9).getWorkflowResourceIds()
576                         .getNetworkId()
577                         && ebbs.get(9).getWorkflowResourceIds().getNetworkId() == ebbs.get(10).getWorkflowResourceIds()
578                                 .getNetworkId(),
579                 true);
580     }
581
582     @Test
583     public void selectExecutionListServiceMacroCreateWithUserParams() throws Exception {
584         String gAction = "createInstance";
585         String resource = "Service";
586         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
587         execution.setVariable("requestAction", gAction);
588         String bpmnRequest =
589                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
590         execution.setVariable("bpmnRequest", bpmnRequest);
591         execution.setVariable("aLaCarte", false);
592         execution.setVariable("apiVersion", "7");
593         execution.setVariable("requestUri", "v6/serviceInstances/123");
594
595
596         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
597         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
598                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
599                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
600                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
601                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
602         northBoundRequest.setOrchestrationFlowList(orchFlows);
603
604         Service service = new Service();
605         service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
606
607         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
608         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
609         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
610         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
611         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
612         HeatTemplate volumeHeatTemplate = new HeatTemplate();
613         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
614         vfModuleCustomization.setVfModule(vfModule);
615
616         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
617         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
618         HeatEnvironment heatEnvironment = new HeatEnvironment();
619         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
620         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
621         HeatTemplate moduleHeatTemplate = new HeatTemplate();
622         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
623         vfModuleCustomization2.setVfModule(vfModule2);
624
625         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
626         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
627
628         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
629                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
630         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
631                 .thenReturn(vfModuleCustomization);
632         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
633                 .thenReturn(vfModuleCustomization2);
634         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
635                 .thenReturn(vfModuleCustomization3);
636         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
637         workflowAction.selectExecutionList(execution);
638         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
639         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
640                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB", "CreateVolumeGroupBB",
641                 "ActivateVolumeGroupBB", "CreateVfModuleBB", "CreateVfModuleBB", "CreateVfModuleBB",
642                 "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB",
643                 "ActivateServiceInstanceBB");
644         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
645         int randomUUIDLength = UUID.randomUUID().toString().length();
646         assertEquals(randomUUIDLength, ebbs.get(1).getWorkflowResourceIds().getVnfId().length());
647         assertEquals(randomUUIDLength, ebbs.get(2).getWorkflowResourceIds().getVolumeGroupId().length());
648         assertEquals(randomUUIDLength, ebbs.get(3).getWorkflowResourceIds().getVfModuleId().length());
649         assertEquals(randomUUIDLength, ebbs.get(4).getWorkflowResourceIds().getVfModuleId().length());
650         assertEquals(randomUUIDLength, ebbs.get(5).getWorkflowResourceIds().getVfModuleId().length());
651         assertEquals(randomUUIDLength, ebbs.get(6).getWorkflowResourceIds().getVolumeGroupId().length());
652         assertEquals(randomUUIDLength, ebbs.get(7).getWorkflowResourceIds().getVolumeGroupId().length());
653         assertEquals(randomUUIDLength, ebbs.get(8).getWorkflowResourceIds().getVfModuleId().length());
654         assertEquals(randomUUIDLength, ebbs.get(9).getWorkflowResourceIds().getVfModuleId().length());
655         assertEquals(randomUUIDLength, ebbs.get(10).getWorkflowResourceIds().getVfModuleId().length());
656         assertEquals(randomUUIDLength, ebbs.get(11).getWorkflowResourceIds().getVfModuleId().length());
657         assertEquals(randomUUIDLength, ebbs.get(12).getWorkflowResourceIds().getVfModuleId().length());
658         assertEquals(randomUUIDLength, ebbs.get(13).getWorkflowResourceIds().getVfModuleId().length());
659         assertEquals(randomUUIDLength, ebbs.get(14).getWorkflowResourceIds().getVnfId().length());
660         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
661         assertEquals(true, execution.getVariable("homing"));
662     }
663
664     @Test
665     public void selectExecutionListServiceMacroDeleteTest() throws Exception {
666         String gAction = "deleteInstance";
667         String resource = "Service";
668         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
669         execution.setVariable("requestAction", gAction);
670         String bpmnRequest = new String(Files
671                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
672         execution.setVariable("bpmnRequest", bpmnRequest);
673         execution.setVariable("aLaCarte", false);
674         execution.setVariable("apiVersion", "7");
675         execution.setVariable("requestUri", "v6/serviceInstances/123");
676
677
678         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
679         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
680                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivateNetworkBB",
681                 "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB", "UnassignVfModuleBB",
682                 "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB", "UnassignServiceInstanceBB");
683         northBoundRequest.setOrchestrationFlowList(orchFlows);
684
685         ServiceInstance serviceInstanceAAI = new ServiceInstance();
686         serviceInstanceAAI.setServiceInstanceId("aaisi123");
687         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
688                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
689         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
690                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
691         vnf.setVnfId("vnfId123");
692
693         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
694         vnf.getVfModules().add(vfModule);
695         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
696         vnf.getVfModules().add(vfModule2);
697
698         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
699                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
700         volumeGroup.setVolumeGroupId("vg123");
701         vnf.getVolumeGroups().add(volumeGroup);
702
703         serviceInstanceMSO.getVnfs().add(vnf);
704
705         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
706         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
707         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
708                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
709         workflowAction.selectExecutionList(execution);
710         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
711         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeactivateVfModuleBB", "DeleteVfModuleBB",
712                 "DeleteVfModuleBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB",
713                 "DeactivateServiceInstanceBB", "UnassignVfModuleBB", "UnassignVfModuleBB", "UnassignVolumeGroupBB",
714                 "UnassignVnfBB", "UnassignServiceInstanceBB");
715     }
716
717     @Test
718     public void selectExecutionListServiceMacroUnassignTest() throws Exception {
719         String gAction = "unassignInstance";
720         String resource = "Service";
721         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
722         execution.setVariable("requestAction", gAction);
723         String bpmnRequest = new String(Files
724                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
725         execution.setVariable("bpmnRequest", bpmnRequest);
726         execution.setVariable("aLaCarte", false);
727         execution.setVariable("apiVersion", "7");
728         execution.setVariable("requestUri", "v6/serviceInstances/123");
729
730
731         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
732         List<OrchestrationFlow> orchFlows = createFlowList("UnassignVfModuleBB", "UnassignVolumeGroupBB",
733                 "UnassignVnfBB", "UnassignNetworkBB", "UnassignServiceInstanceBB");
734         northBoundRequest.setOrchestrationFlowList(orchFlows);
735
736         ServiceInstance serviceInstanceAAI = new ServiceInstance();
737         serviceInstanceAAI.setServiceInstanceId("aaisi123");
738         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
739                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
740         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
741                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
742         vnf.setVnfId("vnfId123");
743
744         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
745         vnf.getVfModules().add(vfModule);
746         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
747         vnf.getVfModules().add(vfModule2);
748
749         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
750                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
751         volumeGroup.setVolumeGroupId("vg123");
752         vnf.getVolumeGroups().add(volumeGroup);
753
754         serviceInstanceMSO.getVnfs().add(vnf);
755
756         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
757         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
758         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
759                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
760         workflowAction.selectExecutionList(execution);
761         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
762         assertEqualsBulkFlowName(ebbs, "UnassignVfModuleBB", "UnassignVfModuleBB", "UnassignVolumeGroupBB",
763                 "UnassignVnfBB", "UnassignServiceInstanceBB");
764     }
765
766     @Test
767     public void selectExecutionListServiceMacroDeleteNetworkCollectionTest() throws Exception {
768         String gAction = "deleteInstance";
769         String resource = "Service";
770         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
771         execution.setVariable("requestAction", gAction);
772         String bpmnRequest = new String(Files
773                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
774         execution.setVariable("bpmnRequest", bpmnRequest);
775         execution.setVariable("aLaCarte", false);
776         execution.setVariable("apiVersion", "7");
777         execution.setVariable("requestUri", "v6/serviceInstances/123");
778
779
780         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
781         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
782                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivateNetworkBB",
783                 "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB", "UnassignVfModuleBB",
784                 "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB", "UnassignServiceInstanceBB");
785         northBoundRequest.setOrchestrationFlowList(orchFlows);
786
787         ServiceInstance serviceInstanceAAI = new ServiceInstance();
788         serviceInstanceAAI.setServiceInstanceId("aaisi123");
789         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
790                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
791
792         org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network =
793                 new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
794         network.setNetworkId("123");
795         serviceInstanceMSO.getNetworks().add(network);
796         org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network2 =
797                 new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
798         network2.setNetworkId("321");
799         serviceInstanceMSO.getNetworks().add(network2);
800
801         Collection collection = new Collection();
802         serviceInstanceMSO.setCollection(collection);
803
804         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
805         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
806         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
807                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
808         workflowAction.selectExecutionList(execution);
809         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
810         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
811                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB", "DeleteNetworkCollectionBB",
812                 "DeactivateServiceInstanceBB", "UnassignServiceInstanceBB");
813     }
814
815     @Test
816     public void selectExecutionListVnfMacroRecreateTest() throws Exception {
817         String gAction = "recreateInstance";
818         String resource = "Vnf";
819         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
820         execution.setVariable("requestAction", gAction);
821         String bpmnRequest =
822                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/VnfMacroReplace.json")));
823         execution.setVariable("bpmnRequest", bpmnRequest);
824         execution.setVariable("aLaCarte", false);
825         execution.setVariable("apiVersion", "7");
826         execution.setVariable("requestUri", "v7/serviceInstances/123/vnfs/1234/recreate");
827         execution.setVariable("serviceInstanceId", "123");
828         execution.setVariable("vnfId", "1234");
829
830         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
831         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
832                 "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB", "DeactivateVfModuleBB",
833                 "DeleteVfModuleBB", "DeactivateVnfBB", "CreateVfModuleBB", "ActivateVfModuleBB",
834                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB", "SDNOVnfHealthCheckBB",
835                 "AAIUnsetVnfInMaintBB");
836         northBoundRequest.setOrchestrationFlowList(orchFlows);
837
838         ServiceInstance serviceInstanceAAI = new ServiceInstance();
839         serviceInstanceAAI.setServiceInstanceId("123");
840         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
841                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
842         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
843                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
844         vnf.setVnfId("1234");
845
846         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
847                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
848         vfModule.setVfModuleId("vfModule1");
849         vnf.getVfModules().add(vfModule);
850         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 =
851                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
852         vfModule2.setVfModuleId("vfModule2");
853         vnf.getVfModules().add(vfModule2);
854
855         serviceInstanceMSO.getVnfs().add(vnf);
856
857         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
858         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
859         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
860                 false, "cloud-owner")).thenReturn(northBoundRequest);
861         workflowAction.selectExecutionList(execution);
862         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
863         assertEqualsBulkFlowName(ebbs, "AAICheckVnfInMaintBB", "AAISetVnfInMaintBB", "DeactivateVfModuleBB",
864                 "DeactivateVfModuleBB", "DeleteVfModuleBB", "DeleteVfModuleBB", "DeactivateVnfBB", "CreateVfModuleBB",
865                 "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB", "SDNOVnfHealthCheckBB",
866                 "AAIUnsetVnfInMaintBB");
867     }
868
869     @Test
870     public void selectExecutionListVnfMacroReplaceTest() throws Exception {
871         String gAction = "replaceInstance";
872         String resource = "Vnf";
873         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
874         execution.setVariable("requestAction", gAction);
875         String bpmnRequest =
876                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/VnfMacroReplace.json")));
877         execution.setVariable("bpmnRequest", bpmnRequest);
878         execution.setVariable("aLaCarte", false);
879         execution.setVariable("apiVersion", "7");
880         execution.setVariable("requestUri", "v7/serviceInstances/123/vnfs/1234/replace");
881         execution.setVariable("serviceInstanceId", "123");
882         execution.setVariable("vnfId", "1234");
883
884         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
885         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
886                 "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB", "DeactivateVfModuleBB",
887                 "DeleteVfModuleBB", "DeactivateVnfBB", "ChangeModelVfModuleBB", "CreateVfModuleBB",
888                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB",
889                 "ChangeModelVnfBB", "ActivateVnfBB", "ChangeModelServiceInstanceBB", "SDNOVnfHealthCheckBB",
890                 "AAIUnsetVnfInMaintBB");
891         northBoundRequest.setOrchestrationFlowList(orchFlows);
892
893         ServiceInstance serviceInstanceAAI = new ServiceInstance();
894         serviceInstanceAAI.setServiceInstanceId("123");
895         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
896                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
897         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
898                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
899         vnf.setVnfId("1234");
900         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
901                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
902         vfModule.setVfModuleId("vfModule1");
903         vnf.getVfModules().add(vfModule);
904         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 =
905                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
906         vfModule2.setVfModuleId("vfModule2");
907         vnf.getVfModules().add(vfModule2);
908         serviceInstanceMSO.getVnfs().add(vnf);
909         VfModule vfModuleAAI = new VfModule();
910         vfModuleAAI.setVfModuleId("vfModule2");
911         RelationshipList relationshipList = new RelationshipList();
912         Relationship relationship = new Relationship();
913         relationshipList.getRelationship().add(relationship);
914         vfModuleAAI.setRelationshipList(relationshipList);
915         Relationships relationships = new Relationships("abc");
916         Configuration config = new Configuration();
917         config.setConfigurationId("configId");
918         Optional<Configuration> configOp = Optional.of(config);
919         Optional<Relationships> relationshipsOp = Optional.of(relationships);
920
921         doReturn(relationshipsOp).when(workflowActionUtils).extractRelationshipsVnfc(isA(Relationships.class));
922         doReturn(configOp).when(workflowActionUtils).extractRelationshipsConfiguration(isA(Relationships.class));
923         doReturn(vfModuleAAI).when(bbSetupUtils).getAAIVfModule("1234", "vfModule2");
924         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
925         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
926         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
927                 false, "cloud-owner")).thenReturn(northBoundRequest);
928         workflowAction.selectExecutionList(execution);
929         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
930         assertEqualsBulkFlowName(ebbs, "AAICheckVnfInMaintBB", "AAISetVnfInMaintBB", "DeactivateFabricConfigurationBB",
931                 "UnassignFabricConfigurationBB", "DeactivateVfModuleBB", "DeactivateVfModuleBB", "DeleteVfModuleBB",
932                 "DeleteVfModuleBB", "DeactivateVnfBB", "ChangeModelVfModuleBB", "ChangeModelVfModuleBB",
933                 "CreateVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB",
934                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ChangeModelVnfBB", "ActivateVnfBB",
935                 "ChangeModelServiceInstanceBB", "SDNOVnfHealthCheckBB", "AAIUnsetVnfInMaintBB");
936     }
937
938     @Ignore
939     @Test
940     public void selectExecutionListNetworkCollectionMacroCreate() throws Exception {
941         String gAction = "createInstance";
942         String resource = "NetworkCollection";
943         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
944         execution.setVariable("requestAction", gAction);
945         String bpmnRequest = new String(
946                 Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/CreateNetworkCollection.json")));
947         execution.setVariable("bpmnRequest", bpmnRequest);
948         execution.setVariable("aLaCarte", false);
949         execution.setVariable("apiVersion", "7");
950         execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
951
952
953         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
954         List<OrchestrationFlow> orchFlows = createFlowList("CreateNetworkCollectionBB", "AssignNetworkBB",
955                 "CreateNetworkBB", "ActivateNetworkBB", "ActivateNetworkCollectionBB");
956         northBoundRequest.setOrchestrationFlowList(orchFlows);
957
958         Service service = new Service();
959         CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
960         CollectionResource collectionResource = new CollectionResource();
961         collectionResource.setToscaNodeType("Data NetworkCollection Data");
962         collectionResourceCustomization.setCollectionResource(collectionResource);
963         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
964
965         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
966                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
967         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
968         workflowAction.selectExecutionList(execution);
969         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
970         assertEqualsBulkFlowName(ebbs, "CreateNetworkCollectionBB", "AssignNetworkBB", "CreateNetworkBB",
971                 "ActivateNetworkBB", "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB",
972                 "ActivateNetworkCollectionBB");
973     }
974
975     @Ignore
976     @Test
977     public void selectExecutionListNetworkCollectionMacroDelete() throws Exception {
978         String gAction = "deleteInstance";
979         String resource = "NetworkCollection";
980         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
981         execution.setVariable("requestAction", gAction);
982         String bpmnRequest = new String(
983                 Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/CreateNetworkCollection.json")));
984         execution.setVariable("bpmnRequest", bpmnRequest);
985         execution.setVariable("aLaCarte", false);
986         execution.setVariable("apiVersion", "7");
987         execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
988
989         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
990         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateNetworkBB", "DeleteNetworkBB",
991                 "UnassignNetworkBB", "DeactivateNetworkCollectionBB", "DeleteNetworkCollectionBB");
992         northBoundRequest.setOrchestrationFlowList(orchFlows);
993
994         Service service = new Service();
995         CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
996         CollectionResource collectionResource = new CollectionResource();
997         collectionResource.setToscaNodeType("Data NetworkCollection Data");
998         collectionResourceCustomization.setCollectionResource(collectionResource);
999         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
1000
1001         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1002                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1003         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
1004         workflowAction.selectExecutionList(execution);
1005         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1006         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
1007                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB", "DeactivateNetworkCollectionBB",
1008                 "DeleteNetworkCollectionBB");
1009     }
1010
1011     @Test
1012     public void selectExecutionListALaCarteVfModuleNoFabricCreateTest() throws Exception {
1013         String gAction = "createInstance";
1014         String resource = "VfModule";
1015         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1016         execution.setVariable("requestAction", gAction);
1017         String bpmnRequest =
1018                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1019         execution.setVariable("bpmnRequest", bpmnRequest);
1020         execution.setVariable("aLaCarte", true);
1021         execution.setVariable("apiVersion", "7");
1022         execution.setVariable("requestUri",
1023                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1024
1025
1026         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1027         List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1028                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB");
1029         northBoundRequest.setOrchestrationFlowList(orchFlows);
1030
1031         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1032                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1033         workflowAction.selectExecutionList(execution);
1034         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1035         assertEqualsBulkFlowName(ebbs, "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB");
1036     }
1037
1038     @Test
1039     public void selectExecutionListALaCarteVfModuleFabricCreateTest() throws Exception {
1040         String gAction = "createInstance";
1041         String resource = "VfModule";
1042         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1043         execution.setVariable("requestAction", gAction);
1044         String bpmnRequest =
1045                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1046         execution.setVariable("bpmnRequest", bpmnRequest);
1047         execution.setVariable("aLaCarte", true);
1048         execution.setVariable("apiVersion", "7");
1049         execution.setVariable("requestUri",
1050                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1051
1052         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1053         List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1054                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB");
1055         northBoundRequest.setOrchestrationFlowList(orchFlows);
1056
1057         List<CvnfcCustomization> cvnfcCustomizations = new ArrayList<CvnfcCustomization>();
1058         CvnfcCustomization cvnfcCustomization = new CvnfcCustomization();
1059         CvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization =
1060                 new CvnfcConfigurationCustomization();
1061         ConfigurationResource configurationResource = new ConfigurationResource();
1062         configurationResource.setToscaNodeType("FabricConfiguration");
1063         vnfVfmoduleCvnfcConfigurationCustomization.setConfigurationResource(configurationResource);
1064         vnfVfmoduleCvnfcConfigurationCustomization.setModelInstanceName("modelInstanceName1");
1065         vnfVfmoduleCvnfcConfigurationCustomization.setCvnfcCustomization(cvnfcCustomization);
1066         List<CvnfcConfigurationCustomization> custSet = new ArrayList<CvnfcConfigurationCustomization>();
1067         custSet.add(vnfVfmoduleCvnfcConfigurationCustomization);
1068         cvnfcCustomization.setCvnfcConfigurationCustomization(custSet);
1069         cvnfcCustomization.setDescription("description");
1070         cvnfcCustomizations.add(cvnfcCustomization);
1071
1072         CvnfcCustomization cvnfcCustomization2 = new CvnfcCustomization();
1073         CvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization2 =
1074                 new CvnfcConfigurationCustomization();
1075         ConfigurationResource configurationResource2 = new ConfigurationResource();
1076         configurationResource2.setToscaNodeType("FabricConfiguration");
1077         vnfVfmoduleCvnfcConfigurationCustomization2.setConfigurationResource(configurationResource2);
1078         vnfVfmoduleCvnfcConfigurationCustomization2.setModelInstanceName("modelInstanceName2");
1079         vnfVfmoduleCvnfcConfigurationCustomization2.setCvnfcCustomization(cvnfcCustomization2);
1080         List<CvnfcConfigurationCustomization> custSet2 = new ArrayList<CvnfcConfigurationCustomization>();
1081         custSet2.add(vnfVfmoduleCvnfcConfigurationCustomization2);
1082         cvnfcCustomization2.setCvnfcConfigurationCustomization(custSet2);
1083         cvnfcCustomization2.setDescription("description2");
1084         cvnfcCustomizations.add(cvnfcCustomization2);
1085
1086         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1087                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1088         // when(catalogDbClient.getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID("fc25201d-36d6-43a3-8d39-fdae88e526ae",
1089         // "9a6d01fd-19a7-490a-9800-460830a12e0b")).thenReturn(cvnfcCustomizations);
1090         workflowAction.selectExecutionList(execution);
1091         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1092         assertEqualsBulkFlowName(ebbs, "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1093                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "AssignFabricConfigurationBB",
1094                 "ActivateFabricConfigurationBB");
1095     }
1096
1097     @Test
1098     public void selectExecutionListALaCarteVfModuleFabricDeleteTest() throws Exception {
1099         String gAction = "deleteInstance";
1100         String resource = "VfModule";
1101         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1102         execution.setVariable("requestAction", gAction);
1103         String bpmnRequest =
1104                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1105         execution.setVariable("bpmnRequest", bpmnRequest);
1106         execution.setVariable("aLaCarte", true);
1107         execution.setVariable("apiVersion", "7");
1108         execution.setVariable("requestUri",
1109                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1110
1111         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1112         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1113                 "UnassignVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB");
1114         northBoundRequest.setOrchestrationFlowList(orchFlows);
1115
1116         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1117                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1118
1119         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1120         vnf.setVnfId("vnf0");
1121         vnf.setModelCustomizationId("modelCustomizationId");
1122         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
1123
1124         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1125         vfModule.setModelCustomizationId("modelCustomizationId");
1126         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(vfModule);
1127
1128         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1129         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1130         vnfc.setModelInvariantId("modelInvariantId");
1131         vnfc.setVnfcName("testVnfcName");
1132         vnfcs.add(vnfc);
1133         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(anyObject(), anyObject(), anyObject(),
1134                 anyObject());
1135
1136         List<org.onap.aai.domain.yang.Configuration> configurations =
1137                 new ArrayList<org.onap.aai.domain.yang.Configuration>();
1138         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
1139         configuration.setConfigurationId("configurationId");
1140         configuration.setModelCustomizationId("modelCustimizationId");
1141         configuration.setConfigurationName("testConfigurationName");
1142         configurations.add(configuration);
1143         doReturn(configurations).when(SPY_workflowAction).getRelatedResourcesInVnfc(anyObject(), anyObject(),
1144                 anyObject());
1145
1146         doReturn("testName").when(SPY_workflowAction).getVnfcNameForConfiguration(anyObject());
1147
1148         SPY_workflowAction.selectExecutionList(execution);
1149         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1150         assertEqualsBulkFlowName(ebbs, "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB",
1151                 "DeactivateVfModuleBB", "DeleteVfModuleBB", "UnassignVfModuleBB");
1152     }
1153
1154     @Test
1155     public void selectExecutionListALaCarteVfModuleNoFabricDeleteTest() throws Exception {
1156         String gAction = "deleteInstance";
1157         String resource = "VfModule";
1158         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1159         execution.setVariable("requestAction", gAction);
1160         String bpmnRequest =
1161                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1162         execution.setVariable("bpmnRequest", bpmnRequest);
1163         execution.setVariable("aLaCarte", true);
1164         execution.setVariable("apiVersion", "7");
1165         execution.setVariable("requestUri",
1166                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1167
1168         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1169         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1170                 "UnassignVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB");
1171         northBoundRequest.setOrchestrationFlowList(orchFlows);
1172
1173         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1174                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1175
1176         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1177         vnf.setVnfId("vnf0");
1178         vnf.setModelCustomizationId("modelCustomizationId");
1179         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
1180
1181         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1182         vfModule.setModelCustomizationId("modelCustomizationId");
1183         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(vfModule);
1184
1185         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1186         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1187         vnfc.setModelInvariantId("modelInvariantId");
1188         vnfc.setVnfcName("testVnfcName");
1189         vnfcs.add(vnfc);
1190         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(anyObject(), anyObject(), anyObject(),
1191                 anyObject());
1192
1193         List<org.onap.aai.domain.yang.Configuration> configurations =
1194                 new ArrayList<org.onap.aai.domain.yang.Configuration>();
1195         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
1196         doReturn(configurations).when(SPY_workflowAction).getRelatedResourcesInVnfc(anyObject(), anyObject(),
1197                 anyObject());
1198
1199         doReturn("testName").when(SPY_workflowAction).getVnfcNameForConfiguration(anyObject());
1200
1201         SPY_workflowAction.selectExecutionList(execution);
1202         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1203         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleBB", "UnassignVfModuleBB");
1204     }
1205
1206     @Test
1207     public void selectExecutionListMacroResumeTest() throws Exception {
1208         String gAction = "createInstance";
1209         String resource = "Service";
1210         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1211         execution.setVariable("requestAction", gAction);
1212         String bpmnRequest =
1213                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
1214         execution.setVariable("bpmnRequest", bpmnRequest);
1215         execution.setVariable("aLaCarte", false);
1216         execution.setVariable("apiVersion", "7");
1217         execution.setVariable("requestUri", "v6/serviceInstances/123");
1218
1219         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1220         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
1221         northBoundRequest.setOrchestrationFlowList(orchFlows);
1222
1223         Service service = new Service();
1224         service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
1225
1226         ServiceInstance si = new ServiceInstance();
1227
1228         when(bbSetupUtils.getAAIServiceInstanceById("123")).thenReturn(si);
1229         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
1230
1231         String flowsToExecuteString =
1232                 "[{\"buildingBlock\":{\"mso-id\":\"2f9ddc4b-4dcf-4129-a35f-be1625ae0176\",\"bpmn-flow-name\":\"AssignServiceInstanceBB\",\"key\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"is-virtual-link\":false,\"virtual-link-key\":null},\"requestId\":\"9c944122-d161-4280-8594-48c06a9d96d5\",\"apiVersion\":\"7\",\"resourceId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"requestAction\":\"deleteInstance\",\"vnfType\":\"\",\"aLaCarte\":true,\"homing\":false,\"workflowResourceIds\":{\"serviceInstanceId\":\"ff9dae72-05bb-4277-ad2b-1b082467c138\",\"vnfId\":\"84a29830-e533-4f20-a838-910c740bf24c\",\"networkId\":\"\",\"volumeGroupId\":\"\",\"vfModuleId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"networkCollectionId\":null,\"configurationId\":\"10f8a3a3-91bf-4821-9515-c01b2864dff0\",\"instanceGroupId\":\"\"},\"requestDetails\":{\"modelInfo\":{\"modelCustomizationName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelInvariantId\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelType\":\"vfModule\",\"modelId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelVersion\":\"1\",\"modelCustomizationUuid\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelVersionId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelCustomizationId\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelUuid\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelInvariantUuid\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelInstanceName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\"},\"requestInfo\":{\"source\":\"VID\",\"suppressRollback\":false,\"requestorId\":\"pj8646\"},\"cloudConfiguration\":{\"tenantId\":\"e2a6af59d1cb43b2874e943bbbf8470a\",\"cloudOwner\":\"att-nc\",\"lcpCloudRegionId\":\"auk51b\"},\"requestParameters\":{\"testApi\":\"GR_API\"}},\"configurationResourceKeys\":{\"vfModuleCustomizationUUID\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"vnfResourceCustomizationUUID\":\"a80f05b8-d651-44af-b999-8ed78fb4582f\",\"cvnfcCustomizationUUID\":\"69cce457-9ffd-4359-962b-0596a1e83ad1\",\"vnfcName\":\"zauk51bmcmr01mcm001\"}}]";
1233         ObjectMapper om = new ObjectMapper();
1234         List<ExecuteBuildingBlock> flowsToExecute = null;
1235         try {
1236             ExecuteBuildingBlock[] asArray = om.readValue(flowsToExecuteString, ExecuteBuildingBlock[].class);
1237             flowsToExecute = Arrays.asList(asArray);
1238         } catch (Exception e) {
1239             e.printStackTrace();
1240         }
1241
1242         when(bbSetupUtils.loadOriginalFlowExecutionPath(anyString())).thenReturn(flowsToExecute);
1243
1244         workflowAction.selectExecutionList(execution);
1245         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1246         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB");
1247     }
1248
1249     @Test
1250     public void getRelatedResourcesInVfModuleTest() throws Exception {
1251         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1252         vnfc.setModelInvariantId("modelInvariantId");
1253         vnfc.setVnfcName("testVnfcName");
1254
1255         String vfncPayload =
1256                 new String(Files.readAllBytes(Paths.get(RESOURCE_PATH + "/BuildingBlocks/vnfcResponse.json")));
1257         AAIResultWrapper vfncWrapper = new AAIResultWrapper(vfncPayload);
1258
1259         String configurationPayload =
1260                 new String(Files.readAllBytes(Paths.get(RESOURCE_PATH + "/BuildingBlocks/configurationResponse.json")));
1261         AAIResultWrapper configurationWrapper = new AAIResultWrapper(configurationPayload);
1262         List<AAIResultWrapper> configurationResultWrappers = new ArrayList<AAIResultWrapper>();
1263         configurationResultWrappers.add(configurationWrapper);
1264
1265         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.VNFC, vnfc.getVnfcName());
1266         when(bbSetupUtils.getAAIResourceDepthOne(uri)).thenReturn(vfncWrapper);
1267
1268         doReturn(configurationResultWrappers).when(SPY_workflowAction).getResultWrappersFromRelationships(anyObject(),
1269                 anyObject());
1270         List<org.onap.aai.domain.yang.Configuration> configurationsList = SPY_workflowAction.getRelatedResourcesInVnfc(
1271                 vnfc, org.onap.aai.domain.yang.Configuration.class, AAIObjectType.CONFIGURATION);
1272         assertEquals(1, configurationsList.size());
1273         assertEquals("testConfigurationId", configurationsList.get(0).getConfigurationId());
1274     }
1275
1276     /**
1277      * WorkflowActionBB Tests
1278      */
1279
1280     @Test
1281     public void pluralTest() {
1282         List<String> items = Arrays.asList("serviceInstances, Service", "vnfs, Vnf", "vfModules, VfModule",
1283                 "networks, Network", "invalidNames, invalidNames");
1284         items.forEach(item -> {
1285             String[] split = item.split(",");
1286             String type = split[0].trim();
1287             String expected = split[1].trim();
1288             assertThat(workflowAction.convertTypeFromPlural(type), equalTo(expected));
1289         });
1290     }
1291
1292     @Test
1293     public void sortExecutionPathByObjectForVlanTaggingCreateTest() throws Exception {
1294         List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
1295         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock();
1296         BuildingBlock bb = new BuildingBlock();
1297         bb.setBpmnFlowName("AssignNetworkBB");
1298         bb.setKey("0");
1299         ebb.setBuildingBlock(bb);
1300         executeFlows.add(ebb);
1301         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock();
1302         BuildingBlock bb2 = new BuildingBlock();
1303         bb2.setBpmnFlowName("AssignNetworkBB");
1304         bb2.setKey("1");
1305         ebb2.setBuildingBlock(bb2);
1306         executeFlows.add(ebb2);
1307         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock();
1308         BuildingBlock bb3 = new BuildingBlock();
1309         bb3.setBpmnFlowName("CreateNetworkBB");
1310         bb3.setKey("0");
1311         ebb3.setBuildingBlock(bb3);
1312         executeFlows.add(ebb3);
1313         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock();
1314         BuildingBlock bb4 = new BuildingBlock();
1315         bb4.setBpmnFlowName("CreateNetworkBB");
1316         bb4.setKey("1");
1317         ebb4.setBuildingBlock(bb4);
1318         executeFlows.add(ebb4);
1319         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock();
1320         BuildingBlock bb5 = new BuildingBlock();
1321         bb5.setBpmnFlowName("ActivateNetworkBB");
1322         bb5.setKey("0");
1323         ebb5.setBuildingBlock(bb5);
1324         executeFlows.add(ebb5);
1325         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock();
1326         BuildingBlock bb6 = new BuildingBlock();
1327         bb6.setBpmnFlowName("ActivateNetworkBB");
1328         bb6.setKey("1");
1329         ebb6.setBuildingBlock(bb6);
1330         executeFlows.add(ebb6);
1331
1332         List<ExecuteBuildingBlock> sorted =
1333                 workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows, "createInstance");
1334         assertEqualsBulkFlowName(sorted, "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB", "AssignNetworkBB",
1335                 "CreateNetworkBB", "ActivateNetworkBB");
1336     }
1337
1338     @Test
1339     public void sortExecutionPathByObjectForVlanTaggingDeleteTest() throws Exception {
1340         List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
1341         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock();
1342         BuildingBlock bb = new BuildingBlock();
1343         bb.setBpmnFlowName("DeactivateNetworkBB");
1344         bb.setKey("0");
1345         ebb.setBuildingBlock(bb);
1346         executeFlows.add(ebb);
1347         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock();
1348         BuildingBlock bb2 = new BuildingBlock();
1349         bb2.setBpmnFlowName("DeactivateNetworkBB");
1350         bb2.setKey("1");
1351         ebb2.setBuildingBlock(bb2);
1352         executeFlows.add(ebb2);
1353         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock();
1354         BuildingBlock bb3 = new BuildingBlock();
1355         bb3.setBpmnFlowName("DeleteNetworkBB");
1356         bb3.setKey("0");
1357         ebb3.setBuildingBlock(bb3);
1358         executeFlows.add(ebb3);
1359         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock();
1360         BuildingBlock bb4 = new BuildingBlock();
1361         bb4.setBpmnFlowName("DeleteNetworkBB");
1362         bb4.setKey("1");
1363         ebb4.setBuildingBlock(bb4);
1364         executeFlows.add(ebb4);
1365         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock();
1366         BuildingBlock bb5 = new BuildingBlock();
1367         bb5.setBpmnFlowName("UnassignNetworkBB");
1368         bb5.setKey("0");
1369         ebb5.setBuildingBlock(bb5);
1370         executeFlows.add(ebb5);
1371         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock();
1372         BuildingBlock bb6 = new BuildingBlock();
1373         bb6.setBpmnFlowName("UnassignNetworkBB");
1374         bb6.setKey("1");
1375         ebb6.setBuildingBlock(bb6);
1376         executeFlows.add(ebb6);
1377
1378         List<ExecuteBuildingBlock> sorted =
1379                 workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows, "deleteInstance");
1380         assertEqualsBulkFlowName(sorted, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
1381                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB");
1382     }
1383
1384     @Test
1385     public void queryNorthBoundRequestCatalogDbNestedTest() throws MalformedURLException {
1386         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1387         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
1388                 "VNF-Macro-Replace", "SDNOVnfHealthCheckBB", "AAIUnsetVnfInMaintBB");
1389         northBoundRequest.setOrchestrationFlowList(orchFlows);
1390         List<OrchestrationFlow> macroFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1391                 "DeactivateVnfBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB");
1392
1393         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner("replaceInstance",
1394                 "Vnf", false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1395         when(catalogDbClient.getOrchestrationFlowByAction("VNF-Macro-Replace")).thenReturn(macroFlows);
1396         List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "replaceInstance",
1397                 WorkflowType.VNF, false, "my-custom-cloud-owner");
1398         assertEquals(flows.get(0).getFlowName(), "AAICheckVnfInMaintBB");
1399         assertEquals(flows.get(1).getFlowName(), "AAISetVnfInMaintBB");
1400         assertEquals(flows.get(2).getFlowName(), "DeactivateVfModuleBB");
1401         assertEquals(flows.get(3).getFlowName(), "DeleteVfModuleBB");
1402         assertEquals(flows.get(4).getFlowName(), "DeactivateVnfBB");
1403         assertEquals(flows.get(5).getFlowName(), "CreateVfModuleBB");
1404         assertEquals(flows.get(6).getFlowName(), "ActivateVfModuleBB");
1405         assertEquals(flows.get(7).getFlowName(), "ActivateVnfBB");
1406         assertEquals(flows.get(8).getFlowName(), "SDNOVnfHealthCheckBB");
1407         assertEquals(flows.get(9).getFlowName(), "AAIUnsetVnfInMaintBB");
1408     }
1409
1410     @Test
1411     public void queryNorthBoundRequestCatalogDbTransportTest() throws MalformedURLException {
1412         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1413         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
1414         northBoundRequest.setOrchestrationFlowList(orchFlows);
1415         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwnerAndServiceType(
1416                 "createInstance", "Service", true, "my-custom-cloud-owner", "TRANSPORT")).thenReturn(northBoundRequest);
1417
1418         List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "createInstance",
1419                 WorkflowType.SERVICE, true, "my-custom-cloud-owner", "TRANSPORT");
1420         assertEquals(flows.get(0).getFlowName(), "AssignServiceInstanceBB");
1421     }
1422
1423     @Test
1424     public void extractResourceIdAndTypeFromUriTest() {
1425         String uri = "/v6/serviceInstances/123";
1426         String uri2 = "/v6/serviceInstances/123/vnfs/1234";
1427         String uri3 = "/v6/serviceInstances";
1428         String uri4 = "/v6/serviceInstances/assign";
1429         String uri5 = "'/v6/serviceInstances/123/vnfs";
1430         String uri6 = "/v6/serviceInstances/123/vnfs/1234/someAction";
1431         String uri7 = "/v6/serviceInstances/123/vnfs/1234/vfModules/5678/replace";
1432         String uri8 = "/v6/serviceInstances/123/vnfs/1234/vfModules/scaleOut";
1433         Resource expected1 = new Resource(WorkflowType.SERVICE, "123", true);
1434         Resource expected2 = new Resource(WorkflowType.VNF, "1234", false);
1435         Resource expected3 = new Resource(WorkflowType.VNF, "1234", false);
1436         Resource expected4 = new Resource(WorkflowType.VFMODULE, "5678", false);
1437         Resource result = workflowAction.extractResourceIdAndTypeFromUri(uri);
1438         assertEquals(expected1.getResourceId(), result.getResourceId());
1439         assertEquals(expected1.getResourceType(), result.getResourceType());
1440         result = workflowAction.extractResourceIdAndTypeFromUri(uri2);
1441         assertEquals(expected2.getResourceId(), result.getResourceId());
1442         assertEquals(expected2.getResourceType(), result.getResourceType());
1443         result = workflowAction.extractResourceIdAndTypeFromUri(uri3);
1444         assertEquals("Service", result.getResourceType().toString());
1445         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1446         result = workflowAction.extractResourceIdAndTypeFromUri(uri4);
1447         assertEquals("Service", result.getResourceType().toString());
1448         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1449         result = workflowAction.extractResourceIdAndTypeFromUri(uri5);
1450         assertEquals("Vnf", result.getResourceType().toString());
1451         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1452         result = workflowAction.extractResourceIdAndTypeFromUri(uri6);
1453         assertEquals(expected3.getResourceId(), result.getResourceId());
1454         assertEquals(expected3.getResourceType(), result.getResourceType());
1455         result = workflowAction.extractResourceIdAndTypeFromUri(uri7);
1456         assertEquals(expected4.getResourceId(), result.getResourceId());
1457         assertEquals(expected4.getResourceType(), result.getResourceType());
1458         result = workflowAction.extractResourceIdAndTypeFromUri(uri8);
1459         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1460         assertEquals("VfModule", result.getResourceType().toString());
1461
1462     }
1463
1464     @Test
1465     public void extractResourceIdAndTypeFromUriInvalidTypeTest() {
1466         this.expectedException.expect(IllegalArgumentException.class);
1467         this.expectedException.expectMessage(containsString("Uri could not be parsed. No type found."));
1468         workflowAction.extractResourceIdAndTypeFromUri("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace");
1469     }
1470
1471     @Test
1472     public void extractResourceIdAndTypeFromUriInvalidUriTest() {
1473         this.expectedException.expect(IllegalArgumentException.class);
1474         this.expectedException.expectMessage(containsString("Uri could not be parsed:"));
1475         workflowAction.extractResourceIdAndTypeFromUri("something that doesn't match anything");
1476     }
1477
1478     @Test
1479     public void isUriResumeTest() {
1480         assertTrue(workflowAction.isUriResume(
1481                 "http://localhost:9100/onap/so/infra/orchestrationRequests/v7/requests/2f8ab587-ef6a-4456-b7b2-d73f9363dabd/resume"));
1482         assertFalse(workflowAction.isUriResume("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace"));
1483     }
1484
1485     @Test
1486     public void isRequestMacroServiceResumeTest() {
1487         ServiceInstance si = new ServiceInstance();
1488         when(bbSetupUtils.getAAIServiceInstanceById(anyString())).thenReturn(si);
1489         assertFalse(workflowAction.isRequestMacroServiceResume(false, WorkflowType.SERVICE, "createInstance", ""));
1490         assertTrue(workflowAction.isRequestMacroServiceResume(false, WorkflowType.SERVICE, "createInstance", "123"));
1491     }
1492
1493     @Test
1494     public void populateResourceIdsFromApiHandlerTest() {
1495         execution.setVariable("serviceInstanceId", "123");
1496         execution.setVariable("vnfId", "888");
1497         WorkflowResourceIds x = workflowAction.populateResourceIdsFromApiHandler(execution);
1498         assertEquals("123", x.getServiceInstanceId());
1499         assertEquals("888", x.getVnfId());
1500         assertNull(x.getVolumeGroupId());
1501     }
1502
1503     private RequestDetails setupRequestDetails(String globalSubscriberId, String subscriptionServiceType,
1504             String modelCustomizationId) {
1505         RequestDetails reqDetails = new RequestDetails();
1506         SubscriberInfo subInfo = new SubscriberInfo();
1507         subInfo.setGlobalSubscriberId(globalSubscriberId);
1508         reqDetails.setSubscriberInfo(subInfo);
1509         RequestParameters reqParams = new RequestParameters();
1510         reqParams.setSubscriptionServiceType(subscriptionServiceType);
1511         reqDetails.setRequestParameters(reqParams);
1512         ModelInfo modelInfo = new ModelInfo();
1513         modelInfo.setModelCustomizationId(modelCustomizationId);
1514         reqDetails.setModelInfo(modelInfo);
1515         return reqDetails;
1516     }
1517
1518     @Test
1519     public void validateVnfResourceIdInAAITest() throws Exception {
1520         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
1521         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
1522         workflowResourceIds.setServiceInstanceId("siId123");
1523         // Vnf
1524         GenericVnf vnf = new GenericVnf();
1525         vnf.setVnfId("id123");
1526         vnf.setVnfName("vnfName123");
1527         vnf.setModelCustomizationId("1234567");
1528         Optional<GenericVnf> opVnf = Optional.of(vnf);
1529         GenericVnf vnf2 = new GenericVnf();
1530         vnf2.setVnfId("id123");
1531         vnf2.setVnfName("vnfName222");
1532         vnf2.setModelCustomizationId("222");
1533         Optional<GenericVnf> opVnf2 = Optional.of(vnf2);
1534         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf);
1535         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName222")).thenReturn(opVnf2);
1536         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "111111")).thenReturn(Optional.empty());
1537         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName123", reqDetails,
1538                 workflowResourceIds);
1539         assertEquals("id123", id);
1540         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "111111", reqDetails,
1541                 workflowResourceIds);
1542         assertEquals("generatedId123", id2);
1543
1544         this.expectedException.expect(DuplicateNameException.class);
1545         this.expectedException.expectMessage(containsString(
1546                 "generic-vnf with name (vnfName222), same parent and different customization id (222) already exists. The name must be unique."));
1547         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName222", reqDetails,
1548                 workflowResourceIds);
1549     }
1550
1551     @Test
1552     public void validateVnfResourceNameInAAITest() throws Exception {
1553         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
1554         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
1555         workflowResourceIds.setServiceInstanceId("siId123");
1556
1557         // Vnf
1558         GenericVnfs genericVnfs = new GenericVnfs();
1559         GenericVnf vnf3 = new GenericVnf();
1560         vnf3.setVnfId("id123");
1561         vnf3.setVnfName("vnfName333");
1562         genericVnfs.getGenericVnf().add(vnf3);
1563         when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName333")).thenReturn(Optional.empty());
1564         when(bbSetupUtils.getAAIVnfsGloballyByName("vnfName333")).thenReturn(genericVnfs);
1565
1566         this.expectedException.expect(DuplicateNameException.class);
1567         this.expectedException.expectMessage(containsString(
1568                 "generic-vnf with name (vnfName333) id (id123) and different parent relationship already exists. The name must be unique."));
1569         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName333", reqDetails,
1570                 workflowResourceIds);
1571     }
1572
1573     @Test
1574     public void validateNetworkResourceIdInAAITest() throws Exception {
1575         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
1576         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
1577         workflowResourceIds.setServiceInstanceId("siId123");
1578
1579         // Network
1580         L3Network network = new L3Network();
1581         network.setNetworkId("id123");
1582         network.setNetworkName("name123");
1583         network.setModelCustomizationId("1234567");
1584         workflowResourceIds.setServiceInstanceId("siId123");
1585         Optional<L3Network> opNetwork = Optional.of(network);
1586         L3Network network2 = new L3Network();
1587         network2.setNetworkId("id123");
1588         network2.setNetworkName("networkName222");
1589         network2.setModelCustomizationId("222");
1590         Optional<L3Network> opNetwork2 = Optional.of(network2);
1591         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")).thenReturn(opNetwork);
1592         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "networkName222"))
1593                 .thenReturn(opNetwork2);
1594         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "111111")).thenReturn(Optional.empty());
1595         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "name123",
1596                 reqDetails, workflowResourceIds);
1597         assertEquals("id123", id);
1598         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "111111",
1599                 reqDetails, workflowResourceIds);
1600         assertEquals("generatedId123", id2);
1601
1602         this.expectedException.expect(DuplicateNameException.class);
1603         this.expectedException.expectMessage(containsString(
1604                 "l3Network with name (networkName222), same parent and different customization id (222) already exists. The name must be unique."));
1605         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "networkName222", reqDetails,
1606                 workflowResourceIds);
1607     }
1608
1609     @Test
1610     public void validateNetworkResourceNameExistsInAAITest() throws Exception {
1611         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
1612         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
1613         workflowResourceIds.setServiceInstanceId("siId123");
1614
1615         // Network
1616         L3Network network = new L3Network();
1617         network.setNetworkId("id123");
1618         network.setNetworkName("name123");
1619         network.setModelCustomizationId("1234567");
1620         workflowResourceIds.setServiceInstanceId("siId123");
1621
1622         when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("networkName333", "111111"))
1623                 .thenReturn(Optional.empty());
1624         when(bbSetupUtils.existsAAINetworksGloballyByName("networkName333")).thenReturn(true);
1625
1626         this.expectedException.expect(DuplicateNameException.class);
1627         this.expectedException.expectMessage(containsString(
1628                 "l3Network with name (networkName333) id (siId123) and different parent relationship already exists. The name must be unique."));
1629         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "networkName333", reqDetails,
1630                 workflowResourceIds);
1631     }
1632
1633     @Test
1634     public void validateVfModuleResourceIdInAAITest() throws Exception {
1635         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
1636         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
1637         workflowResourceIds.setServiceInstanceId("siId123");
1638
1639         GenericVnf vnf = new GenericVnf();
1640         vnf.setVnfId("id123");
1641         vnf.setVnfName("vnfName123");
1642         vnf.setModelCustomizationId("222");
1643
1644         // VfModule
1645         VfModules vfModules = new VfModules();
1646         VfModule vfModule = new VfModule();
1647         vfModule.setVfModuleId("id123");
1648         vfModule.setVfModuleName("name123");
1649         vfModule.setModelCustomizationId("1234567");
1650         vfModules.getVfModule().add(vfModule);
1651         vnf.setVfModules(vfModules);
1652         workflowResourceIds.setVnfId("id123");
1653         when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf);
1654         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "name123",
1655                 reqDetails, workflowResourceIds);
1656         assertEquals("id123", id);
1657
1658         GenericVnf vnf1 = new GenericVnf();
1659         VfModules vfModules2 = new VfModules();
1660         VfModule vfModule2 = new VfModule();
1661         vfModule2.setVfModuleId("id123");
1662         vfModule2.setVfModuleName("vFModName222");
1663         vfModule2.setModelCustomizationId("222");
1664         vfModules2.getVfModule().add(vfModule2);
1665         vnf1.setVfModules(vfModules2);
1666         workflowResourceIds.setVnfId("id111");
1667         when(bbSetupUtils.getAAIGenericVnf("id111")).thenReturn(vnf1);
1668         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "111111",
1669                 reqDetails, workflowResourceIds);
1670         assertEquals("generatedId123", id2);
1671
1672         this.expectedException.expect(DuplicateNameException.class);
1673         this.expectedException.expectMessage(containsString(
1674                 "vfModule with name (vFModName222), same parent and different customization id (1234567) already exists. The name must be unique."));
1675         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "vFModName222", reqDetails,
1676                 workflowResourceIds);
1677
1678     }
1679
1680     @Test
1681     public void validateVolumeGroupResourceIdInAAITest() throws Exception {
1682         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
1683         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
1684         workflowResourceIds.setServiceInstanceId("siId123");
1685
1686         GenericVnf vnf = new GenericVnf();
1687         vnf.setVnfId("id123");
1688         vnf.setVnfName("vnfName123");
1689         vnf.setModelCustomizationId("1234567");
1690
1691         GenericVnf vnf2 = new GenericVnf();
1692         vnf2.setVnfId("id123");
1693         vnf2.setVnfName("vnfName123");
1694         vnf2.setModelCustomizationId("222");
1695
1696         // VolumeGroup
1697         VolumeGroup volumeGroup = new VolumeGroup();
1698         volumeGroup.setVolumeGroupId("id123");
1699         volumeGroup.setVolumeGroupName("name123");
1700         workflowResourceIds.setVnfId("id123");
1701         Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
1702
1703         workflowResourceIds.setVnfId("id123");
1704
1705         when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf);
1706         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "name123")).thenReturn(opVolumeGroup);
1707         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123",
1708                 reqDetails, workflowResourceIds);
1709         assertEquals("id123", id);
1710
1711         when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf2);
1712         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVfModule("id123", "id123", "111111"))
1713                 .thenReturn(opVolumeGroup);
1714
1715         when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "111111")).thenReturn(Optional.empty());
1716         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "111111",
1717                 reqDetails, workflowResourceIds);
1718         assertEquals("generatedId123", id2);
1719     }
1720
1721     @Test
1722     public void validateConfigurationResourceIdInAAITest() throws Exception {
1723         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
1724         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
1725         workflowResourceIds.setServiceInstanceId("siId123");
1726
1727         // Configuration
1728         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
1729         configuration.setConfigurationId("id123");
1730         configuration.setConfigurationName("name123");
1731         configuration.setModelCustomizationId("1234567");
1732         Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration);
1733
1734         org.onap.aai.domain.yang.Configuration configuration2 = new org.onap.aai.domain.yang.Configuration();
1735         configuration2.setConfigurationId("id123");
1736         configuration2.setConfigurationName("name123");
1737         configuration2.setModelCustomizationId("222");
1738         Optional<org.onap.aai.domain.yang.Configuration> opConfiguration2 = Optional.of(configuration2);
1739
1740         workflowResourceIds.setVnfId("id123");
1741
1742         when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
1743                 .thenReturn(opConfiguration);
1744         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "name123",
1745                 reqDetails, workflowResourceIds);
1746         assertEquals("id123", id);
1747
1748         when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "111111"))
1749                 .thenReturn(Optional.empty());
1750         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "111111",
1751                 reqDetails, workflowResourceIds);
1752         assertEquals("generatedId123", id2);
1753
1754         when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name222"))
1755                 .thenReturn(opConfiguration2);
1756         this.expectedException.expect(DuplicateNameException.class);
1757         this.expectedException.expectMessage(containsString(
1758                 "configuration with name (name222), same parent and different customization id (id123) already exists. The name must be unique."));
1759         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "name222", reqDetails,
1760                 workflowResourceIds);
1761     }
1762
1763     @Test
1764     public void validateServiceInstanceResourceIdInAAITest() throws Exception {
1765         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
1766         workflowResourceIds.setServiceInstanceId("siId123");
1767         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
1768         reqDetails.getModelInfo().setModelVersionId("1234567");
1769
1770         ServiceInstance si = new ServiceInstance();
1771         si.setServiceInstanceId("siId123");
1772         si.setModelVersionId("1234567");
1773         ServiceInstances serviceInstances = new ServiceInstances();
1774         serviceInstances.getServiceInstance().add(si);
1775         Optional<ServiceInstance> siOp = Optional.of(si);
1776         ServiceInstance si2 = new ServiceInstance();
1777         si2.setServiceInstanceId("siId222");
1778         si2.setModelVersionId("22222");
1779         si2.setServiceInstanceName("siName222");
1780         Optional<ServiceInstance> siOp2 = Optional.of(si2);
1781         ServiceInstances serviceInstances2 = new ServiceInstances();
1782         serviceInstances2.getServiceInstance().add(si2);
1783
1784         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp);
1785         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName222")).thenReturn(siOp2);
1786         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "111111"))
1787                 .thenReturn(Optional.empty());
1788
1789         when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances);
1790         String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123",
1791                 reqDetails, workflowResourceIds);
1792         assertEquals("siId123", id);
1793         String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "111111",
1794                 reqDetails, workflowResourceIds);
1795         assertEquals("generatedId123", id2);
1796
1797         when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName222")).thenReturn(serviceInstances2);
1798         this.expectedException.expect(DuplicateNameException.class);
1799         this.expectedException.expectMessage(containsString(
1800                 "serviceInstance with name (siName222) and different version id (1234567) already exists. The name must be unique."));
1801         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName222", reqDetails,
1802                 workflowResourceIds);
1803     }
1804
1805     @Test
1806     public void validateServiceInstanceResourceIdInAAIMultipleTest() throws Exception {
1807         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
1808         workflowResourceIds.setServiceInstanceId("siId123");
1809         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
1810         reqDetails.getModelInfo().setModelVersionId("1234567");
1811
1812         ServiceInstance si = new ServiceInstance();
1813         si.setServiceInstanceId("siId123");
1814         si.setModelVersionId("1234567");
1815         ServiceInstances serviceInstances = new ServiceInstances();
1816         serviceInstances.getServiceInstance().add(si);
1817
1818         ServiceInstance si2 = new ServiceInstance();
1819         si2.setServiceInstanceId("siId222");
1820         si2.setModelVersionId("22222");
1821         si2.setServiceInstanceName("siName222");
1822         serviceInstances.getServiceInstance().add(si2);
1823
1824         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siId123"))
1825                 .thenReturn(Optional.empty());
1826
1827         when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances);
1828
1829         this.expectedException.expect(DuplicateNameException.class);
1830         this.expectedException.expectMessage(containsString(
1831                 "serviceInstance with name (siName123) and multiple combination of model-version-id + service-type + global-customer-id already exists. The name must be unique."));
1832         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails,
1833                 workflowResourceIds);
1834     }
1835
1836     @Test
1837     public void validateServiceInstanceResourceIdInAAIExistsTest() throws Exception {
1838         WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
1839         workflowResourceIds.setServiceInstanceId("siId123");
1840         RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
1841         reqDetails.getModelInfo().setModelVersionId("1234567");
1842
1843         ServiceInstance si = new ServiceInstance();
1844         si.setServiceInstanceId("siId123");
1845         si.setModelVersionId("1234567");
1846         ServiceInstances serviceInstances = new ServiceInstances();
1847         serviceInstances.getServiceInstance().add(si);
1848
1849         when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siId123"))
1850                 .thenReturn(Optional.empty());
1851
1852         when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances);
1853
1854         Map<String, String> uriKeys = new HashMap<>();
1855         uriKeys.put("global-customer-id", "globalCustomerId");
1856         uriKeys.put("service-type", "serviceType");
1857
1858         when(bbSetupUtils.getURIKeysFromServiceInstance("siId123")).thenReturn(uriKeys);
1859
1860         this.expectedException.expect(DuplicateNameException.class);
1861         this.expectedException.expectMessage(containsString(
1862                 "serviceInstance with name (siName123) and global-customer-id (globalCustomerId), service-type (serviceType), model-version-id (1234567) already exists. The name must be unique."));
1863         workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails,
1864                 workflowResourceIds);
1865     }
1866
1867     @Test
1868     public void handleRuntimeExceptionTest() {
1869         execution.setVariable("BPMN_javaExpMsg", "test runtime error message");
1870         execution.setVariable("testProcessKey", "testProcessKeyValue");
1871         try {
1872             workflowAction.handleRuntimeException(execution);
1873         } catch (BpmnError wfe) {
1874             assertEquals("MSOWorkflowException", wfe.getErrorCode());
1875         }
1876     }
1877
1878     @Ignore
1879     @Test
1880     public void traverseCatalogDbServiceMultipleNetworkTest() throws IOException, VrfBondingServiceException {
1881         execution.setVariable("testProcessKey", "testProcessKeyValue");
1882         Service service = new Service();
1883         List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
1884         NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
1885         networkCust.setModelCustomizationUUID("123");
1886         networkCustomizations.add(networkCust);
1887         service.setNetworkCustomizations(networkCustomizations);
1888         NetworkCollectionResourceCustomization collectionResourceCustomization =
1889                 new NetworkCollectionResourceCustomization();
1890         collectionResourceCustomization.setModelCustomizationUUID("123");
1891         CollectionResource collectionResource = new CollectionResource();
1892         collectionResource.setToscaNodeType("NetworkCollection");
1893         InstanceGroup instanceGroup = new InstanceGroup();
1894         List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
1895         CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization =
1896                 new CollectionResourceInstanceGroupCustomization();
1897         collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
1898         collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
1899         instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
1900         collectionResource.setInstanceGroup(instanceGroup);
1901         collectionResourceCustomization.setCollectionResource(collectionResource);;
1902         service.setModelUUID("abc");
1903         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
1904         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
1905         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
1906         doReturn(collectionResourceCustomization).when(catalogDbClient)
1907                 .getNetworkCollectionResourceCustomizationByID("123");
1908         String bpmnRequest = new String(Files
1909                 .readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroActivateDeleteUnassign.json")));
1910         ObjectMapper mapper = new ObjectMapper();
1911         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
1912         List<Resource> resourceCounter = new ArrayList<>();
1913         thrown.expect(BpmnError.class);
1914         List<Pair<WorkflowType, String>> aaiResourceIds = new ArrayList<>();
1915         workflowAction.traverseCatalogDbService(execution, sIRequest, resourceCounter, aaiResourceIds);
1916     }
1917
1918     @Test
1919     public void sortVfModulesByBaseFirstTest() {
1920         List<Resource> resources = new ArrayList<>();
1921         Resource resource1 = new Resource(WorkflowType.VFMODULE, "111", false);
1922         resource1.setBaseVfModule(false);
1923         resources.add(resource1);
1924         Resource resource2 = new Resource(WorkflowType.VFMODULE, "222", false);
1925         resource2.setBaseVfModule(false);
1926         resources.add(resource2);
1927         Resource resource3 = new Resource(WorkflowType.VFMODULE, "333", false);
1928         resource3.setBaseVfModule(true);
1929         resources.add(resource3);
1930         List<Resource> result = workflowAction.sortVfModulesByBaseFirst(resources);
1931         assertEquals("333", result.get(0).getResourceId());
1932         assertEquals("222", result.get(1).getResourceId());
1933         assertEquals("111", result.get(2).getResourceId());
1934     }
1935
1936     @Test
1937     public void sortVfModulesByBaseLastTest() {
1938         List<Resource> resources = new ArrayList<>();
1939         Resource resource1 = new Resource(WorkflowType.VFMODULE, "111", false);
1940         resource1.setBaseVfModule(true);
1941         resources.add(resource1);
1942         Resource resource2 = new Resource(WorkflowType.VFMODULE, "222", false);
1943         resource2.setBaseVfModule(false);
1944         resources.add(resource2);
1945         Resource resource3 = new Resource(WorkflowType.VFMODULE, "333", false);
1946         resource3.setBaseVfModule(false);
1947         resources.add(resource3);
1948         List<Resource> result = workflowAction.sortVfModulesByBaseLast(resources);
1949         assertEquals("333", result.get(0).getResourceId());
1950         assertEquals("222", result.get(1).getResourceId());
1951         assertEquals("111", result.get(2).getResourceId());
1952     }
1953
1954     @Test
1955     public void findCatalogNetworkCollectionTest() {
1956         Service service = new Service();
1957         NetworkCollectionResourceCustomization networkCustomization = new NetworkCollectionResourceCustomization();
1958         networkCustomization.setModelCustomizationUUID("123");
1959         service.getCollectionResourceCustomizations().add(networkCustomization);
1960         doReturn(networkCustomization).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
1961         CollectionResourceCustomization customization = workflowAction.findCatalogNetworkCollection(execution, service);
1962         assertNotNull(customization);
1963     }
1964
1965     @Test
1966     public void findCatalogNetworkCollectionEmptyTest() {
1967         Service service = new Service();
1968         NetworkCollectionResourceCustomization networkCustomization = new NetworkCollectionResourceCustomization();
1969         networkCustomization.setModelCustomizationUUID("123");
1970         service.getCollectionResourceCustomizations().add(networkCustomization);
1971         CollectionResourceCustomization customization = workflowAction.findCatalogNetworkCollection(execution, service);
1972         assertNull(customization);
1973     }
1974
1975     @Test
1976     public void findCatalogNetworkCollectionMoreThanOneTest() {
1977         Service service = new Service();
1978         NetworkCollectionResourceCustomization networkCustomization1 = new NetworkCollectionResourceCustomization();
1979         networkCustomization1.setModelCustomizationUUID("123");
1980         NetworkCollectionResourceCustomization networkCustomization2 = new NetworkCollectionResourceCustomization();
1981         networkCustomization2.setModelCustomizationUUID("321");
1982         service.getCollectionResourceCustomizations().add(networkCustomization1);
1983         service.getCollectionResourceCustomizations().add(networkCustomization2);
1984         doReturn(networkCustomization1).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
1985         doReturn(networkCustomization2).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("321");
1986         workflowAction.findCatalogNetworkCollection(execution, service);
1987         assertEquals("Found multiple Network Collections in the Service model, only one per Service is supported.",
1988                 execution.getVariable("WorkflowActionErrorMessage"));
1989     }
1990
1991     @Test
1992     public void verifyLackOfNullPointerExceptionForNullResource() {
1993         ExecuteBuildingBlock result = null;
1994         try {
1995             result = workflowAction.buildExecuteBuildingBlock(new OrchestrationFlow(), null, null, null, null, null,
1996                     false, null, null, null, false, null, true);
1997         } catch (NullPointerException e) {
1998             fail("NullPointerException should not be thrown when 'resource' is null");
1999         }
2000         assertNotNull(result);
2001     }
2002
2003     @Test
2004     public void traverseAAIServiceTest() {
2005         List<Resource> resourceCounter = new ArrayList<>();
2006         String resourceId = "si0";
2007         List<Pair<WorkflowType, String>> aaiResourceIds = new ArrayList<>();
2008
2009         ServiceInstance serviceInstanceAAI = new ServiceInstance();
2010         serviceInstanceAAI.setServiceInstanceId(resourceId);
2011
2012         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstance = setServiceInstance();
2013         setGenericVnf();
2014         setVfModule(true);
2015         setVolumeGroup();
2016         setL3Network();
2017         setCollection();
2018         setConfiguration();
2019
2020         Configuration config = new Configuration();
2021         config.setConfigurationId("testConfigurationId2");
2022         serviceInstance.getConfigurations().add(config);
2023
2024         Relationship relationship1 = new Relationship();
2025         relationship1.setRelatedTo("vnfc");
2026         RelationshipList relationshipList1 = new RelationshipList();
2027         relationshipList1.getRelationship().add(relationship1);
2028
2029         Relationship relationship2 = new Relationship();
2030         relationship2.setRelatedTo("vpn-binding");
2031         RelationshipList relationshipList2 = new RelationshipList();
2032         relationshipList2.getRelationship().add(relationship2);
2033
2034         org.onap.aai.domain.yang.Configuration aaiConfiguration1 = new org.onap.aai.domain.yang.Configuration();
2035         aaiConfiguration1.setConfigurationId("testConfigurationId");
2036         aaiConfiguration1.setRelationshipList(relationshipList1);
2037
2038         org.onap.aai.domain.yang.Configuration aaiConfiguration2 = new org.onap.aai.domain.yang.Configuration();
2039         aaiConfiguration2.setConfigurationId("testConfigurationId2");
2040         aaiConfiguration2.setRelationshipList(relationshipList1);
2041
2042         try {
2043             doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById(resourceId);
2044             doReturn(serviceInstance).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
2045             doReturn(Optional.of(aaiConfiguration1)).when(aaiConfigurationResources)
2046                     .getConfiguration("testConfigurationId");
2047             doReturn(Optional.of(aaiConfiguration2)).when(aaiConfigurationResources)
2048                     .getConfiguration("testConfigurationId2");
2049             workflowAction.traverseAAIService(execution, resourceCounter, resourceId, aaiResourceIds);
2050             assertEquals(8, resourceCounter.size());
2051             assertTrue(resourceCounter.get(2).isBaseVfModule());
2052             assertThat(aaiResourceIds, sameBeanAs(getExpectedResourceIds()));
2053         } catch (Exception e) {
2054             fail("Unexpected exception was thrown.");
2055         }
2056     }
2057
2058     private List<Pair<WorkflowType, String>> getExpectedResourceIds() {
2059         List<Pair<WorkflowType, String>> resourceIds = new ArrayList<>();
2060         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VNF, "testVnfId1"));
2061         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VFMODULE, "testVfModuleId1"));
2062         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VOLUMEGROUP, "testVolumeGroupId1"));
2063         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.NETWORK, "testNetworkId1"));
2064         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.NETWORKCOLLECTION, "testId"));
2065         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.CONFIGURATION, "testConfigurationId"));
2066         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.CONFIGURATION, "testConfigurationId2"));
2067         return resourceIds;
2068     }
2069
2070     private List<OrchestrationFlow> createFlowList(String... flowNames) {
2071         List<OrchestrationFlow> result = new ArrayList<>();
2072         for (String flowName : flowNames) {
2073             OrchestrationFlow orchFlow = new OrchestrationFlow();
2074             orchFlow.setFlowName(flowName);
2075             result.add(orchFlow);
2076         }
2077         return result;
2078     }
2079
2080     private void assertEqualsBulkFlowName(List<ExecuteBuildingBlock> ebbs, String... flowNames) {
2081         for (int i = 0; i < ebbs.size(); i++) {
2082             assertEquals(ebbs.get(i).getBuildingBlock().getBpmnFlowName(), flowNames[i]);
2083         }
2084     }
2085 }