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