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