Merge "Sonar improvements in WorkflowAction"
[so.git] / bpmn / so-bpmn-tasks / src / test / java / org / onap / so / bpmn / infrastructure / workflow / tasks / WorkflowActionBBTasksTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (c) 2020 Nokia
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 org.camunda.bpm.engine.delegate.BpmnError;
26 import org.camunda.bpm.engine.delegate.DelegateExecution;
27 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
28 import org.junit.Before;
29 import org.junit.Rule;
30 import org.junit.Test;
31 import org.junit.rules.ExpectedException;
32 import org.mockito.InjectMocks;
33 import org.mockito.Mock;
34 import org.mockito.Mockito;
35 import org.mockito.Spy;
36 import org.onap.aai.domain.yang.Configuration;
37 import org.onap.aai.domain.yang.GenericVnf;
38 import org.onap.aai.domain.yang.InstanceGroup;
39 import org.onap.aai.domain.yang.L3Network;
40 import org.onap.aai.domain.yang.ServiceInstance;
41 import org.onap.aai.domain.yang.VfModule;
42 import org.onap.aai.domain.yang.VolumeGroup;
43 import org.onap.so.bpmn.BaseTaskTest;
44 import org.onap.so.bpmn.common.listener.flowmanipulator.FlowManipulatorListenerRunner;
45 import org.onap.so.bpmn.core.WorkflowException;
46 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
47 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
48 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
49 import org.onap.so.db.request.beans.InfraActiveRequests;
50 import org.onap.so.serviceinstancebeans.ModelInfo;
51 import org.onap.so.serviceinstancebeans.RequestDetails;
52 import org.springframework.core.env.Environment;
53 import java.util.ArrayList;
54 import java.util.List;
55 import java.util.Optional;
56 import static org.junit.Assert.assertEquals;
57 import static org.junit.Assert.assertFalse;
58 import static org.junit.Assert.assertTrue;
59 import static org.mockito.ArgumentMatchers.anyObject;
60 import static org.mockito.ArgumentMatchers.anyString;
61 import static org.mockito.ArgumentMatchers.isA;
62 import static org.mockito.Mockito.doNothing;
63 import static org.mockito.Mockito.doReturn;
64 import static org.mockito.Mockito.when;
65
66 public class WorkflowActionBBTasksTest extends BaseTaskTest {
67
68     private static final String SAMPLE_MSO_REQUEST_ID = "00f704ca-c5e5-4f95-a72c-6889db7b0688";
69     private static final String SAMPLE_REQUEST_ACTION = "Delete-Network-Collection";
70     private static final int SAMPLE_SEQUENCE = 0;
71     private static final String EMPTY_STRING = "";
72     @Mock
73     protected WorkflowAction workflowAction;
74
75     @Mock
76     protected WorkflowActionBBFailure workflowActionBBFailure;
77
78     @InjectMocks
79     @Spy
80     protected WorkflowActionBBTasks workflowActionBBTasks;
81
82     @Mock
83     InfraActiveRequests reqMock;
84
85     private DelegateExecution execution;
86
87     @Mock
88     protected Environment environment;
89
90     @Mock
91     private FlowManipulatorListenerRunner flowManipulatorListenerRunner;
92
93     @Rule
94     public ExpectedException thrown = ExpectedException.none();
95
96     @Before
97     public void before() throws Exception {
98         execution = new DelegateExecutionFake();
99         ServiceInstance servInstance = new ServiceInstance();
100         servInstance.setServiceInstanceId("TEST");
101         when(bbSetupUtils.getAAIServiceInstanceByName(anyString(), anyObject())).thenReturn(servInstance);
102         workflowAction.setBbInputSetupUtils(bbSetupUtils);
103         workflowAction.setBbInputSetup(bbInputSetup);
104     }
105
106     @Test
107     public void selectBBTest() {
108         String vnfCustomizationUUID = "1234567";
109         String modelUuid = "1234567";
110         prepareDelegateExecution();
111         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
112
113         BuildingBlock buildingBlock =
114                 new BuildingBlock().setBpmnFlowName("ConfigAssignVnfBB").setKey(vnfCustomizationUUID);
115         RequestDetails rd = new RequestDetails();
116         ModelInfo mi = new ModelInfo();
117         mi.setModelUuid(modelUuid);
118         rd.setModelInfo(mi);
119         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock).setRequestDetails(rd);
120         flowsToExecute.add(ebb);
121
122         List<VnfResourceCustomization> vnfResourceCustomizations = new ArrayList<>();
123         VnfResourceCustomization vrc = new VnfResourceCustomization();
124         vrc.setSkipPostInstConf(false);
125         vrc.setModelCustomizationUUID(vnfCustomizationUUID);
126         vnfResourceCustomizations.add(vrc);
127         GenericVnf genericVnf = new GenericVnf();
128         genericVnf.setModelCustomizationId(vnfCustomizationUUID);
129         doReturn(vnfResourceCustomizations).when(catalogDbClient).getVnfResourceCustomizationByModelUuid(modelUuid);
130         doReturn(vrc).when(catalogDbClient).findVnfResourceCustomizationInList(vnfCustomizationUUID,
131                 vnfResourceCustomizations);
132
133         execution.setVariable("flowsToExecute", flowsToExecute);
134         workflowActionBBTasks.selectBB(execution);
135         boolean success = (boolean) execution.getVariable("completed");
136         int currentSequence = (int) execution.getVariable("gCurrentSequence");
137         assertTrue(success);
138         assertEquals(1, currentSequence);
139     }
140
141     @Test
142     public void select2BBTest() {
143         String vnfCustomizationUUID = "1234567";
144         String modelUuid = "1234567";
145
146         prepareDelegateExecution();
147         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
148         BuildingBlock buildingBlock =
149                 new BuildingBlock().setBpmnFlowName("ConfigDeployVnfBB").setKey(vnfCustomizationUUID);
150         RequestDetails rd = new RequestDetails();
151         ModelInfo mi = new ModelInfo();
152         mi.setModelUuid(modelUuid);
153         rd.setModelInfo(mi);
154         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock).setRequestDetails(rd);
155         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock();
156
157         flowsToExecute.add(ebb);
158
159         List<VnfResourceCustomization> vnfResourceCustomizations = new ArrayList<>();
160         VnfResourceCustomization vrc = new VnfResourceCustomization();
161
162         vrc.setSkipPostInstConf(false);
163         vrc.setModelCustomizationUUID(vnfCustomizationUUID);
164         vnfResourceCustomizations.add(vrc);
165         GenericVnf genericVnf = new GenericVnf();
166         genericVnf.setModelCustomizationId(vnfCustomizationUUID);
167
168         doReturn(vnfResourceCustomizations).when(catalogDbClient).getVnfResourceCustomizationByModelUuid(modelUuid);
169         doReturn(vrc).when(catalogDbClient).findVnfResourceCustomizationInList(vnfCustomizationUUID,
170                 vnfResourceCustomizations);
171
172         flowsToExecute.add(ebb2);
173         execution.setVariable("flowsToExecute", flowsToExecute);
174         workflowActionBBTasks.selectBB(execution);
175         boolean success = (boolean) execution.getVariable("completed");
176         int currentSequence = (int) execution.getVariable("gCurrentSequence");
177         assertFalse(success);
178         assertEquals(1, currentSequence);
179     }
180
181     @Test
182     public void updateRequestStatusToCompleteTest() {
183         String reqId = "reqId123";
184         execution.setVariable("mso-request-id", reqId);
185         execution.setVariable("requestAction", "createInstance");
186         execution.setVariable("resourceName", "Service");
187         execution.setVariable("aLaCarte", true);
188         InfraActiveRequests req = new InfraActiveRequests();
189         doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId(reqId);
190         doNothing().when(requestsDbClient).updateInfraActiveRequests(isA(InfraActiveRequests.class));
191         workflowActionBBTasks.updateRequestStatusToComplete(execution);
192         assertEquals("ALaCarte-Service-createInstance request was executed correctly.",
193                 execution.getVariable("finalStatusMessage"));
194     }
195
196     @Test
197     public void rollbackExecutionPathTest() {
198         execution.setVariable("handlingCode", "Rollback");
199         execution.setVariable("isRollback", false);
200         execution.setVariable("requestAction", EMPTY_STRING);
201         execution.setVariable("resourceName", EMPTY_STRING);
202         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
203         BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
204         ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
205         flowsToExecute.add(ebb1);
206
207         BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
208         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
209         flowsToExecute.add(ebb2);
210
211         BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
212         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
213         flowsToExecute.add(ebb3);
214
215         execution.setVariable("flowsToExecute", flowsToExecute);
216         execution.setVariable("gCurrentSequence", 3);
217         doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
218
219         workflowActionBBTasks.rollbackExecutionPath(execution);
220         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
221         assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(), "DeactivateVfModuleBB");
222         assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(), "DeleteVfModuleBB");
223         assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(), "UnassignVfModuleBB");
224         assertEquals(0, execution.getVariable("gCurrentSequence"));
225     }
226
227     @Test
228     public void rollbackExecutionPathUnfinishedFlowTest() {
229         execution.setVariable("handlingCode", "Rollback");
230         execution.setVariable("isRollback", false);
231         execution.setVariable("requestAction", EMPTY_STRING);
232         execution.setVariable("resourceName", EMPTY_STRING);
233         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
234         BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
235         ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
236         flowsToExecute.add(ebb1);
237
238         BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
239         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
240         flowsToExecute.add(ebb2);
241
242         BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
243         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
244         flowsToExecute.add(ebb3);
245
246         execution.setVariable("flowsToExecute", flowsToExecute);
247         execution.setVariable("gCurrentSequence", 2);
248         doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
249
250         workflowActionBBTasks.rollbackExecutionPath(execution);
251         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
252         assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(), "DeleteVfModuleBB");
253         assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(), "UnassignVfModuleBB");
254         assertEquals(0, execution.getVariable("gCurrentSequence"));
255         assertEquals(0, execution.getVariable("retryCount"));
256     }
257
258     @Test
259     public void rollbackExecutionTest() {
260         execution.setVariable("handlingCode", "Rollback");
261         execution.setVariable("isRollback", false);
262         execution.setVariable("requestAction", EMPTY_STRING);
263         execution.setVariable("resourceName", EMPTY_STRING);
264         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
265         BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignServiceInstanceBB");
266         ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
267         flowsToExecute.add(ebb1);
268
269         BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateNetworkCollectionBB");
270         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
271         flowsToExecute.add(ebb2);
272
273         BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("AssignNetworkBB");
274         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
275         flowsToExecute.add(ebb3);
276
277         BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("CreateNetworkBB");
278         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
279         flowsToExecute.add(ebb4);
280
281         execution.setVariable("flowsToExecute", flowsToExecute);
282         execution.setVariable("gCurrentSequence", 3);
283         doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
284
285         workflowActionBBTasks.rollbackExecutionPath(execution);
286         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
287         assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(), "UnassignNetworkBB");
288         assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(), "DeleteNetworkCollectionBB");
289         assertEquals(ebbs.get(2).getBuildingBlock().getBpmnFlowName(), "UnassignServiceInstanceBB");
290         assertEquals(0, execution.getVariable("gCurrentSequence"));
291     }
292
293     @Test
294     public void rollbackExecutionRollbackToAssignedTest() {
295         execution.setVariable("isRollback", false);
296         execution.setVariable("handlingCode", "RollbackToAssigned");
297         execution.setVariable("requestAction", EMPTY_STRING);
298         execution.setVariable("resourceName", EMPTY_STRING);
299         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
300
301         BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
302         ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
303         flowsToExecute.add(ebb1);
304
305         BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
306         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
307         flowsToExecute.add(ebb2);
308
309         BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
310         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
311         flowsToExecute.add(ebb3);
312
313         execution.setVariable("flowsToExecute", flowsToExecute);
314         execution.setVariable("gCurrentSequence", 2);
315
316         workflowActionBBTasks.rollbackExecutionPath(execution);
317         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
318         assertEquals("DeleteVfModuleBB", ebbs.get(0).getBuildingBlock().getBpmnFlowName());
319         assertEquals(0, execution.getVariable("gCurrentSequence"));
320         assertEquals(1, ebbs.size());
321     }
322
323     @Test
324     public void rollbackExecutionPathChangeBBForReplaceVFModuleTest() {
325         execution.setVariable("handlingCode", "Rollback");
326         execution.setVariable("isRollback", false);
327         execution.setVariable("requestAction", "replaceInstance");
328         execution.setVariable("resourceName", "VfModule");
329         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
330         BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
331         ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
332         flowsToExecute.add(ebb1);
333
334         BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
335         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
336         flowsToExecute.add(ebb2);
337
338         BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
339         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
340         flowsToExecute.add(ebb3);
341
342
343         BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("ChangeModelVnfBB");
344         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
345         flowsToExecute.add(ebb4);
346
347         BuildingBlock buildingBlock5 = new BuildingBlock().setBpmnFlowName("ChangeModelServiceInstanceBB");
348         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock5);
349         flowsToExecute.add(ebb5);
350
351         execution.setVariable("flowsToExecute", flowsToExecute);
352         execution.setVariable("gCurrentSequence", 5);
353         doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
354
355         workflowActionBBTasks.rollbackExecutionPath(execution);
356         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
357         assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(), "ChangeModelVnfBB");
358         assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(), "ChangeModelServiceInstanceBB");
359         assertEquals(0, execution.getVariable("gCurrentSequence"));
360     }
361
362     @Test
363     public void rollbackExecutionRollbackToAssignedWithFabricTest() {
364         execution.setVariable("isRollback", false);
365         execution.setVariable("handlingCode", "RollbackToAssigned");
366         execution.setVariable("requestAction", EMPTY_STRING);
367         execution.setVariable("resourceName", EMPTY_STRING);
368         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
369
370         BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
371         ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
372         flowsToExecute.add(ebb1);
373
374         BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
375         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
376         flowsToExecute.add(ebb2);
377
378         BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
379         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
380         flowsToExecute.add(ebb3);
381
382         BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("AddFabricConfigurationBB");
383         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
384         flowsToExecute.add(ebb4);
385
386         execution.setVariable("flowsToExecute", flowsToExecute);
387         execution.setVariable("gCurrentSequence", 4);
388
389         workflowActionBBTasks.rollbackExecutionPath(execution);
390         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
391         assertEquals(0, execution.getVariable("gCurrentSequence"));
392         assertEquals(3, ebbs.size());
393         assertEquals("DeleteFabricConfigurationBB", ebbs.get(0).getBuildingBlock().getBpmnFlowName());
394         assertEquals("DeactivateVfModuleBB", ebbs.get(1).getBuildingBlock().getBpmnFlowName());
395         assertEquals("DeleteVfModuleBB", ebbs.get(2).getBuildingBlock().getBpmnFlowName());
396
397     }
398
399     @Test
400     public void rollbackExecutionRollbackToCreatedTest() {
401         execution.setVariable("isRollback", false);
402         execution.setVariable("handlingCode", "RollbackToCreated");
403         execution.setVariable("requestAction", EMPTY_STRING);
404         execution.setVariable("resourceName", EMPTY_STRING);
405         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
406         BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
407         ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
408         flowsToExecute.add(ebb1);
409
410         BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
411         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
412         flowsToExecute.add(ebb2);
413
414         BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
415         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
416         flowsToExecute.add(ebb3);
417
418         execution.setVariable("flowsToExecute", flowsToExecute);
419         execution.setVariable("gCurrentSequence", 3);
420
421         workflowActionBBTasks.rollbackExecutionPath(execution);
422         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
423         assertEquals("DeactivateVfModuleBB", ebbs.get(0).getBuildingBlock().getBpmnFlowName());
424         assertEquals(0, execution.getVariable("gCurrentSequence"));
425         assertEquals(1, ebbs.size());
426     }
427
428     @Test
429     public void rollbackExecutionRollbackInPlaceSoftwareUpdateTest() {
430         execution.setVariable("isRollback", false);
431         execution.setVariable("handlingCode", "Rollback");
432         execution.setVariable("requestAction", EMPTY_STRING);
433         execution.setVariable("resourceName", EMPTY_STRING);
434         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
435         BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("VNFCheckPserversLockedFlagActivity");
436         ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
437         flowsToExecute.add(ebb1);
438
439         BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("VNFCheckInMaintFlagActivity");
440         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
441         flowsToExecute.add(ebb2);
442
443         BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("VNFSetInMaintFlagActivity");
444         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
445         flowsToExecute.add(ebb3);
446
447         BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("VNFCheckClosedLoopDisabledFlagActivity");
448         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
449         flowsToExecute.add(ebb4);
450
451         BuildingBlock buildingBlock5 = new BuildingBlock().setBpmnFlowName("VNFSetClosedLoopDisabledFlagActivity");
452         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock5);
453         flowsToExecute.add(ebb5);
454
455         BuildingBlock buildingBlock6 = new BuildingBlock().setBpmnFlowName("VNFLockActivity");
456         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock6);
457         flowsToExecute.add(ebb6);
458
459         BuildingBlock buildingBlock7 = new BuildingBlock().setBpmnFlowName("VNFUpgradePreCheckActivity");
460         ExecuteBuildingBlock ebb7 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock7);
461         flowsToExecute.add(ebb7);
462
463         BuildingBlock buildingBlock8 = new BuildingBlock().setBpmnFlowName("VNFQuiesceTrafficActivity");
464         ExecuteBuildingBlock ebb8 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock8);
465         flowsToExecute.add(ebb8);
466
467         BuildingBlock buildingBlock9 = new BuildingBlock().setBpmnFlowName("VNFStopActivity");
468         ExecuteBuildingBlock ebb9 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock9);
469         flowsToExecute.add(ebb9);
470
471         BuildingBlock buildingBlock10 = new BuildingBlock().setBpmnFlowName("VNFSnapShotActivity");
472         ExecuteBuildingBlock ebb10 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock10);
473         flowsToExecute.add(ebb10);
474
475         execution.setVariable("flowsToExecute", flowsToExecute);
476         execution.setVariable("gCurrentSequence", 10);
477
478         workflowActionBBTasks.rollbackExecutionPath(execution);
479         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
480         assertEquals("VNFStartActivity", ebbs.get(0).getBuildingBlock().getBpmnFlowName());
481         assertEquals("VNFResumeTrafficActivity", ebbs.get(1).getBuildingBlock().getBpmnFlowName());
482         assertEquals("VNFUnlockActivity", ebbs.get(2).getBuildingBlock().getBpmnFlowName());
483         assertEquals("VNFUnsetClosedLoopDisabledFlagActivity", ebbs.get(3).getBuildingBlock().getBpmnFlowName());
484         assertEquals("VNFUnsetInMaintFlagActivity", ebbs.get(4).getBuildingBlock().getBpmnFlowName());
485         assertEquals(0, execution.getVariable("gCurrentSequence"));
486         assertEquals(5, ebbs.size());
487     }
488
489     @Test
490     public void rollbackExecutionRollbackConfigModifyTest() {
491         execution.setVariable("isRollback", false);
492         execution.setVariable("handlingCode", "Rollback");
493         execution.setVariable("requestAction", EMPTY_STRING);
494         execution.setVariable("resourceName", EMPTY_STRING);
495         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
496         BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("VNFCheckPserversLockedFlagActivity");
497         ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
498         flowsToExecute.add(ebb1);
499
500         BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("VNFCheckInMaintFlagActivity");
501         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
502         flowsToExecute.add(ebb2);
503
504         BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("VNFSetInMaintFlagActivity");
505         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
506         flowsToExecute.add(ebb3);
507
508         BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("VNFCheckClosedLoopDisabledFlagActivity");
509         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
510         flowsToExecute.add(ebb4);
511
512         BuildingBlock buildingBlock5 = new BuildingBlock().setBpmnFlowName("VNFSetClosedLoopDisabledFlagActivity");
513         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock5);
514         flowsToExecute.add(ebb5);
515
516         BuildingBlock buildingBlock6 = new BuildingBlock().setBpmnFlowName("VNFHealthCheckActivity");
517         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock6);
518         flowsToExecute.add(ebb6);
519
520         execution.setVariable("flowsToExecute", flowsToExecute);
521         execution.setVariable("gCurrentSequence", 6);
522
523         workflowActionBBTasks.rollbackExecutionPath(execution);
524         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
525         assertEquals("VNFUnsetClosedLoopDisabledFlagActivity", ebbs.get(0).getBuildingBlock().getBpmnFlowName());
526         assertEquals("VNFUnsetInMaintFlagActivity", ebbs.get(1).getBuildingBlock().getBpmnFlowName());
527         assertEquals(0, execution.getVariable("gCurrentSequence"));
528         assertEquals(2, ebbs.size());
529     }
530
531
532     @Test
533     public void checkRetryStatusTest() {
534         String reqId = "reqId123";
535         execution.setVariable("mso-request-id", reqId);
536         doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
537         doReturn("6").when(environment).getProperty("mso.rainyDay.maxRetries");
538         execution.setVariable("handlingCode", "Retry");
539         execution.setVariable("retryCount", 1);
540         execution.setVariable("gCurrentSequence", 1);
541         InfraActiveRequests req = new InfraActiveRequests();
542         doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId(reqId);
543         workflowActionBBTasks.checkRetryStatus(execution);
544         assertEquals(0, execution.getVariable("gCurrentSequence"));
545     }
546
547     @Test
548     public void checkRetryStatusTestExceededMaxRetries() {
549         String reqId = "reqId123";
550         execution.setVariable("mso-request-id", reqId);
551         doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
552         doReturn("6").when(environment).getProperty("mso.rainyDay.maxRetries");
553         execution.setVariable("handlingCode", "Retry");
554         execution.setVariable("retryCount", 6);
555         execution.setVariable("gCurrentSequence", 1);
556         InfraActiveRequests req = new InfraActiveRequests();
557         doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId(reqId);
558         try {
559             workflowActionBBTasks.checkRetryStatus(execution);
560         } catch (BpmnError e) {
561             WorkflowException exception = (WorkflowException) execution.getVariable("WorkflowException");
562             assertEquals("Exceeded maximum retries. Ending flow with status Abort", exception.getErrorMessage());
563         }
564     }
565
566     @Test
567     public void checkRetryStatusNoRetryTest() {
568         String reqId = "reqId123";
569         execution.setVariable("mso-request-id", reqId);
570         execution.setVariable("retryCount", 3);
571         execution.setVariable("handlingCode", "Success");
572         execution.setVariable("gCurrentSequence", 1);
573         InfraActiveRequests req = new InfraActiveRequests();
574         doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId(reqId);
575         workflowActionBBTasks.checkRetryStatus(execution);
576         assertEquals(0, execution.getVariable("retryCount"));
577     }
578
579     @Test
580     public void updateInstanceId() {
581         String reqId = "req123";
582         String instanceId = "123123123";
583         execution.setVariable("mso-request-id", reqId);
584         execution.setVariable("resourceId", instanceId);
585         execution.setVariable("resourceType", WorkflowType.SERVICE);
586         doReturn(reqMock).when(requestsDbClient).getInfraActiveRequestbyRequestId(reqId);
587         doNothing().when(requestsDbClient).updateInfraActiveRequests(isA(InfraActiveRequests.class));
588         workflowActionBBTasks.updateInstanceId(execution);
589         Mockito.verify(reqMock, Mockito.times(1)).setServiceInstanceId(instanceId);
590     }
591
592     @Test
593     public void getConfigurationId() {
594         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
595         vnfc.setModelInvariantId("modelInvariantId");
596         vnfc.setVnfcName("testVnfcName");
597         List<Configuration> configurations = new ArrayList<>();
598         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
599         configuration.setConfigurationId("configurationId");
600         configuration.setModelCustomizationId("modelCustimizationId");
601         configuration.setConfigurationName("testConfigurationName");
602         configurations.add(configuration);
603         doReturn(configurations.get(0).getConfigurationId()).when(workflowActionBBTasks).getConfigurationId(vnfc);
604         assertEquals(workflowActionBBTasks.getConfigurationId(vnfc), "configurationId");
605     }
606
607     @Test
608     public void setServiceInstanceNameTest() {
609         String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
610         WorkflowType resourceType = WorkflowType.SERVICE;
611         InfraActiveRequests request = new InfraActiveRequests();
612         ServiceInstance service = new ServiceInstance();
613         service.setServiceInstanceName("serviceInstanceName");
614         doReturn(service).when(bbSetupUtils).getAAIServiceInstanceById(resourceId);
615
616         workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
617         assertEquals("serviceInstanceName", request.getServiceInstanceName());
618     }
619
620     @Test
621     public void setVnfNameTest() {
622         String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
623         WorkflowType resourceType = WorkflowType.VNF;
624         InfraActiveRequests request = new InfraActiveRequests();
625         GenericVnf vnf = new GenericVnf();
626         vnf.setVnfName("vnfName");
627         doReturn(vnf).when(bbSetupUtils).getAAIGenericVnf(resourceId);
628
629         workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
630         assertEquals("vnfName", request.getVnfName());
631     }
632
633     @Test
634     public void setVfModuleNameTest() {
635         String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
636         WorkflowType resourceType = WorkflowType.VFMODULE;
637         InfraActiveRequests request = new InfraActiveRequests();
638         request.setVnfId("ae5cc3e8-c13c-4d88-aaf6-694ab4977b0e");
639         VfModule vfModule = new VfModule();
640         vfModule.setVfModuleName("vfModuleName");
641         doReturn(vfModule).when(bbSetupUtils).getAAIVfModule("ae5cc3e8-c13c-4d88-aaf6-694ab4977b0e", resourceId);
642
643         workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
644         assertEquals("vfModuleName", request.getVfModuleName());
645     }
646
647     @Test
648     public void setNetworkNameTest() {
649         String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
650         WorkflowType resourceType = WorkflowType.NETWORK;
651         InfraActiveRequests request = new InfraActiveRequests();
652         L3Network network = new L3Network();
653         network.setNetworkName("networkName");
654         doReturn(network).when(bbSetupUtils).getAAIL3Network(resourceId);
655
656         workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
657         assertEquals("networkName", request.getNetworkName());
658     }
659
660     @Test
661     public void setConfigurationNameTest() {
662         String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
663         WorkflowType resourceType = WorkflowType.CONFIGURATION;
664         InfraActiveRequests request = new InfraActiveRequests();
665         Configuration configuration = new Configuration();
666         configuration.setConfigurationName("configurationName");
667         doReturn(configuration).when(bbSetupUtils).getAAIConfiguration(resourceId);
668
669         workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
670         assertEquals("configurationName", request.getConfigurationName());
671     }
672
673     @Test
674     public void setInstanceGroupNameTest() {
675         String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
676         WorkflowType resourceType = WorkflowType.INSTANCE_GROUP;
677         InfraActiveRequests request = new InfraActiveRequests();
678         InstanceGroup instanceGroup = new InstanceGroup();
679         instanceGroup.setInstanceGroupName("instanceGroupName");
680         doReturn(instanceGroup).when(bbSetupUtils).getAAIInstanceGroup(resourceId);
681
682         workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
683         assertEquals("instanceGroupName", request.getInstanceGroupName());
684     }
685
686     @Test
687     public void setVolumeGroupNameTest() {
688         String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
689         WorkflowType resourceType = WorkflowType.VOLUMEGROUP;
690         InfraActiveRequests request = new InfraActiveRequests();
691         request.setVnfId("4aa72c90-21eb-4465-8847-997e27af6c3e");
692         VolumeGroup volumeGroup = new VolumeGroup();
693         volumeGroup.setVolumeGroupName("volumeGroupName");
694         Optional<VolumeGroup> returnVolumeGroup = Optional.of(volumeGroup);
695
696         doReturn(returnVolumeGroup).when(bbSetupUtils).getRelatedVolumeGroupByIdFromVnf(request.getVnfId(), resourceId);
697         workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
698
699         assertEquals("volumeGroupName", request.getVolumeGroupName());
700     }
701
702     private void prepareDelegateExecution() {
703         execution.setVariable("mso-request-id", SAMPLE_MSO_REQUEST_ID);
704         execution.setVariable("requestAction", SAMPLE_REQUEST_ACTION);
705         execution.setVariable("gCurrentSequence", SAMPLE_SEQUENCE);
706         execution.setVariable("homing", false);
707         execution.setVariable("calledHoming", false);
708     }
709 }