2 * ============LICENSE_START=======================================================
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
23 package org.onap.so.bpmn.infrastructure.workflow.tasks;
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.core.WorkflowException;
45 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
46 import org.onap.so.bpmn.servicedecomposition.entities.ConfigurationResourceKeys;
47 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
48 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
49 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
50 import org.onap.so.db.request.beans.InfraActiveRequests;
51 import org.onap.so.serviceinstancebeans.ModelInfo;
52 import org.onap.so.serviceinstancebeans.RequestDetails;
53 import org.springframework.core.env.Environment;
54 import java.util.ArrayList;
55 import java.util.List;
56 import java.util.Optional;
57 import static org.assertj.core.api.Assertions.assertThat;
58 import static org.junit.Assert.assertEquals;
59 import static org.junit.Assert.assertFalse;
60 import static org.junit.Assert.assertTrue;
61 import static org.mockito.ArgumentMatchers.anyObject;
62 import static org.mockito.ArgumentMatchers.anyString;
63 import static org.mockito.ArgumentMatchers.isA;
64 import static org.mockito.Mockito.doNothing;
65 import static org.mockito.Mockito.doReturn;
66 import static org.mockito.Mockito.when;
68 public class WorkflowActionBBTasksTest extends BaseTaskTest {
70 private static final String SAMPLE_MSO_REQUEST_ID = "00f704ca-c5e5-4f95-a72c-6889db7b0688";
71 private static final String SAMPLE_REQUEST_ACTION = "Delete-Network-Collection";
72 private static final int SAMPLE_SEQUENCE = 0;
73 private static final String EMPTY_STRING = "";
75 protected WorkflowAction workflowAction;
78 protected WorkflowActionBBFailure workflowActionBBFailure;
82 protected WorkflowActionBBTasks workflowActionBBTasks;
85 InfraActiveRequests reqMock;
87 private DelegateExecution execution;
90 protected Environment environment;
93 public ExpectedException thrown = ExpectedException.none();
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);
106 public void selectBBTest() {
107 String vnfCustomizationUUID = "1234567";
108 String modelUuid = "1234567";
109 prepareDelegateExecution();
110 List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
112 BuildingBlock buildingBlock =
113 new BuildingBlock().setBpmnFlowName("ConfigAssignVnfBB").setKey(vnfCustomizationUUID);
114 RequestDetails rd = new RequestDetails();
115 ModelInfo mi = new ModelInfo();
116 mi.setModelUuid(modelUuid);
118 ExecuteBuildingBlock ebb = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock).setRequestDetails(rd);
119 flowsToExecute.add(ebb);
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);
132 execution.setVariable("flowsToExecute", flowsToExecute);
133 workflowActionBBTasks.selectBB(execution);
134 boolean success = (boolean) execution.getVariable("completed");
135 int currentSequence = (int) execution.getVariable("gCurrentSequence");
137 assertEquals(1, currentSequence);
141 public void select2BBTest() {
142 String vnfCustomizationUUID = "1234567";
143 String modelUuid = "1234567";
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);
153 ExecuteBuildingBlock ebb = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock).setRequestDetails(rd);
154 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock();
156 flowsToExecute.add(ebb);
158 List<VnfResourceCustomization> vnfResourceCustomizations = new ArrayList<>();
159 VnfResourceCustomization vrc = new VnfResourceCustomization();
161 vrc.setSkipPostInstConf(false);
162 vrc.setModelCustomizationUUID(vnfCustomizationUUID);
163 vnfResourceCustomizations.add(vrc);
164 GenericVnf genericVnf = new GenericVnf();
165 genericVnf.setModelCustomizationId(vnfCustomizationUUID);
167 doReturn(vnfResourceCustomizations).when(catalogDbClient).getVnfResourceCustomizationByModelUuid(modelUuid);
168 doReturn(vrc).when(catalogDbClient).findVnfResourceCustomizationInList(vnfCustomizationUUID,
169 vnfResourceCustomizations);
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 assertFalse(success);
177 assertEquals(1, currentSequence);
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"));
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);
206 BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
207 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
208 flowsToExecute.add(ebb2);
210 BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
211 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
212 flowsToExecute.add(ebb3);
214 execution.setVariable("flowsToExecute", flowsToExecute);
215 execution.setVariable("gCurrentSequence", 3);
216 doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
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"));
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);
237 BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
238 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
239 flowsToExecute.add(ebb2);
241 BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
242 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
243 flowsToExecute.add(ebb3);
245 execution.setVariable("flowsToExecute", flowsToExecute);
246 execution.setVariable("gCurrentSequence", 2);
247 doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
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"));
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);
268 BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateNetworkCollectionBB");
269 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
270 flowsToExecute.add(ebb2);
272 BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("AssignNetworkBB");
273 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
274 flowsToExecute.add(ebb3);
276 BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("CreateNetworkBB");
277 ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
278 flowsToExecute.add(ebb4);
280 execution.setVariable("flowsToExecute", flowsToExecute);
281 execution.setVariable("gCurrentSequence", 3);
282 doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
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"));
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<>();
300 BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
301 ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
302 flowsToExecute.add(ebb1);
304 BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
305 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
306 flowsToExecute.add(ebb2);
308 BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
309 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
310 flowsToExecute.add(ebb3);
312 execution.setVariable("flowsToExecute", flowsToExecute);
313 execution.setVariable("gCurrentSequence", 2);
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());
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);
333 BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
334 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
335 flowsToExecute.add(ebb2);
337 BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
338 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
339 flowsToExecute.add(ebb3);
342 BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("ChangeModelVnfBB");
343 ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
344 flowsToExecute.add(ebb4);
346 BuildingBlock buildingBlock5 = new BuildingBlock().setBpmnFlowName("ChangeModelServiceInstanceBB");
347 ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock5);
348 flowsToExecute.add(ebb5);
350 execution.setVariable("flowsToExecute", flowsToExecute);
351 execution.setVariable("gCurrentSequence", 5);
352 doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
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"));
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<>();
369 BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
370 ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
371 flowsToExecute.add(ebb1);
373 BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
374 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
375 flowsToExecute.add(ebb2);
377 BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
378 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
379 flowsToExecute.add(ebb3);
381 BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("AddFabricConfigurationBB");
382 ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
383 flowsToExecute.add(ebb4);
385 execution.setVariable("flowsToExecute", flowsToExecute);
386 execution.setVariable("gCurrentSequence", 4);
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());
399 public void rollbackExecutionRollbackToCreatedWithFabricTest() {
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<>();
406 BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
407 ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
408 flowsToExecute.add(ebb1);
410 BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
411 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
412 flowsToExecute.add(ebb2);
414 BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
415 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
416 flowsToExecute.add(ebb3);
418 BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("AddFabricConfigurationBB");
419 ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
420 flowsToExecute.add(ebb4);
422 execution.setVariable("flowsToExecute", flowsToExecute);
423 execution.setVariable("gCurrentSequence", 4);
425 workflowActionBBTasks.rollbackExecutionPath(execution);
426 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
427 assertEquals(0, execution.getVariable("gCurrentSequence"));
428 assertEquals(2, ebbs.size());
429 assertEquals("DeleteFabricConfigurationBB", ebbs.get(0).getBuildingBlock().getBpmnFlowName());
430 assertEquals("DeactivateVfModuleBB", ebbs.get(1).getBuildingBlock().getBpmnFlowName());
435 public void rollbackExecutionRollbackToCreatedNoConfigurationWithFabricTest() {
436 execution.setVariable("isRollback", false);
437 execution.setVariable("handlingCode", "RollbackToCreatedNoConfiguration");
438 execution.setVariable("requestAction", EMPTY_STRING);
439 execution.setVariable("resourceName", EMPTY_STRING);
440 List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
442 BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
443 ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
444 flowsToExecute.add(ebb1);
446 BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
447 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
448 flowsToExecute.add(ebb2);
450 BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
451 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
452 flowsToExecute.add(ebb3);
454 BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("AddFabricConfigurationBB");
455 ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
456 flowsToExecute.add(ebb4);
458 execution.setVariable("flowsToExecute", flowsToExecute);
459 execution.setVariable("gCurrentSequence", 4);
461 workflowActionBBTasks.rollbackExecutionPath(execution);
462 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
463 assertEquals(0, execution.getVariable("gCurrentSequence"));
464 assertEquals(1, ebbs.size());
465 assertEquals("DeactivateVfModuleBB", ebbs.get(0).getBuildingBlock().getBpmnFlowName());
469 public void rollbackExecutionRollbackToCreatedTest() {
470 execution.setVariable("isRollback", false);
471 execution.setVariable("handlingCode", "RollbackToCreated");
472 execution.setVariable("requestAction", EMPTY_STRING);
473 execution.setVariable("resourceName", EMPTY_STRING);
474 List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
475 BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
476 ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
477 flowsToExecute.add(ebb1);
479 BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
480 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
481 flowsToExecute.add(ebb2);
483 BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
484 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
485 flowsToExecute.add(ebb3);
487 execution.setVariable("flowsToExecute", flowsToExecute);
488 execution.setVariable("gCurrentSequence", 3);
490 workflowActionBBTasks.rollbackExecutionPath(execution);
491 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
492 assertEquals("DeactivateVfModuleBB", ebbs.get(0).getBuildingBlock().getBpmnFlowName());
493 assertEquals(0, execution.getVariable("gCurrentSequence"));
494 assertEquals(1, ebbs.size());
498 public void rollbackExecutionRollbackInPlaceSoftwareUpdateTest() {
499 execution.setVariable("isRollback", false);
500 execution.setVariable("handlingCode", "Rollback");
501 execution.setVariable("requestAction", EMPTY_STRING);
502 execution.setVariable("resourceName", EMPTY_STRING);
503 List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
504 BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("VNFCheckPserversLockedFlagActivity");
505 ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
506 flowsToExecute.add(ebb1);
508 BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("VNFCheckInMaintFlagActivity");
509 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
510 flowsToExecute.add(ebb2);
512 BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("VNFSetInMaintFlagActivity");
513 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
514 flowsToExecute.add(ebb3);
516 BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("VNFCheckClosedLoopDisabledFlagActivity");
517 ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
518 flowsToExecute.add(ebb4);
520 BuildingBlock buildingBlock5 = new BuildingBlock().setBpmnFlowName("VNFSetClosedLoopDisabledFlagActivity");
521 ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock5);
522 flowsToExecute.add(ebb5);
524 BuildingBlock buildingBlock6 = new BuildingBlock().setBpmnFlowName("VNFLockActivity");
525 ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock6);
526 flowsToExecute.add(ebb6);
528 BuildingBlock buildingBlock7 = new BuildingBlock().setBpmnFlowName("VNFUpgradePreCheckActivity");
529 ExecuteBuildingBlock ebb7 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock7);
530 flowsToExecute.add(ebb7);
532 BuildingBlock buildingBlock8 = new BuildingBlock().setBpmnFlowName("VNFQuiesceTrafficActivity");
533 ExecuteBuildingBlock ebb8 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock8);
534 flowsToExecute.add(ebb8);
536 BuildingBlock buildingBlock9 = new BuildingBlock().setBpmnFlowName("VNFStopActivity");
537 ExecuteBuildingBlock ebb9 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock9);
538 flowsToExecute.add(ebb9);
540 BuildingBlock buildingBlock10 = new BuildingBlock().setBpmnFlowName("VNFSnapShotActivity");
541 ExecuteBuildingBlock ebb10 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock10);
542 flowsToExecute.add(ebb10);
544 execution.setVariable("flowsToExecute", flowsToExecute);
545 execution.setVariable("gCurrentSequence", 10);
547 workflowActionBBTasks.rollbackExecutionPath(execution);
548 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
549 assertEquals("VNFStartActivity", ebbs.get(0).getBuildingBlock().getBpmnFlowName());
550 assertEquals("VNFResumeTrafficActivity", ebbs.get(1).getBuildingBlock().getBpmnFlowName());
551 assertEquals("VNFUnlockActivity", ebbs.get(2).getBuildingBlock().getBpmnFlowName());
552 assertEquals("VNFUnsetClosedLoopDisabledFlagActivity", ebbs.get(3).getBuildingBlock().getBpmnFlowName());
553 assertEquals("VNFUnsetInMaintFlagActivity", ebbs.get(4).getBuildingBlock().getBpmnFlowName());
554 assertEquals(0, execution.getVariable("gCurrentSequence"));
555 assertEquals(5, ebbs.size());
559 public void rollbackExecutionRollbackConfigModifyTest() {
560 execution.setVariable("isRollback", false);
561 execution.setVariable("handlingCode", "Rollback");
562 execution.setVariable("requestAction", EMPTY_STRING);
563 execution.setVariable("resourceName", EMPTY_STRING);
564 List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
565 BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("VNFCheckPserversLockedFlagActivity");
566 ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
567 flowsToExecute.add(ebb1);
569 BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("VNFCheckInMaintFlagActivity");
570 ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
571 flowsToExecute.add(ebb2);
573 BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("VNFSetInMaintFlagActivity");
574 ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
575 flowsToExecute.add(ebb3);
577 BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("VNFCheckClosedLoopDisabledFlagActivity");
578 ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
579 flowsToExecute.add(ebb4);
581 BuildingBlock buildingBlock5 = new BuildingBlock().setBpmnFlowName("VNFSetClosedLoopDisabledFlagActivity");
582 ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock5);
583 flowsToExecute.add(ebb5);
585 BuildingBlock buildingBlock6 = new BuildingBlock().setBpmnFlowName("VNFHealthCheckActivity");
586 ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock6);
587 flowsToExecute.add(ebb6);
589 execution.setVariable("flowsToExecute", flowsToExecute);
590 execution.setVariable("gCurrentSequence", 6);
592 workflowActionBBTasks.rollbackExecutionPath(execution);
593 List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
594 assertEquals("VNFUnsetClosedLoopDisabledFlagActivity", ebbs.get(0).getBuildingBlock().getBpmnFlowName());
595 assertEquals("VNFUnsetInMaintFlagActivity", ebbs.get(1).getBuildingBlock().getBpmnFlowName());
596 assertEquals(0, execution.getVariable("gCurrentSequence"));
597 assertEquals(2, ebbs.size());
601 public void postProcessingExecuteBBActivateVfModuleTest() throws CloneNotSupportedException {
602 BuildingBlock bbActivateVfModule = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
603 ExecuteBuildingBlock ebbActivateVfModule = new ExecuteBuildingBlock().setBuildingBlock(bbActivateVfModule);
605 WorkflowResourceIds resourceIdsActivateVfModule = new WorkflowResourceIds();
606 resourceIdsActivateVfModule.setServiceInstanceId("test-service-inbstance-id");
607 resourceIdsActivateVfModule.setVnfId("test-vnf-id");
608 resourceIdsActivateVfModule.setVfModuleId("test-vf-module-id");
609 resourceIdsActivateVfModule.setConfigurationId("");
611 RequestDetails requestDetails = new RequestDetails();
613 ebbActivateVfModule.setApiVersion("7");
614 ebbActivateVfModule.setaLaCarte(true);
615 ebbActivateVfModule.setRequestAction("createInstance");
616 ebbActivateVfModule.setVnfType("test-vnf-type");
617 ebbActivateVfModule.setRequestId("f6c00ae2-a205-4cbd-b055-02e553efde12");
618 ebbActivateVfModule.setRequestDetails(requestDetails);
619 ebbActivateVfModule.setWorkflowResourceIds(resourceIdsActivateVfModule);
621 ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();
622 configurationResourceKeys.setCvnfcCustomizationUUID("07d64cd2-4427-4156-b11d-d14b96b3e4cb");
623 configurationResourceKeys.setVfModuleCustomizationUUID("50b61075-6ebb-4aab-a9fc-bedad9a2aa76");
624 configurationResourceKeys.setVnfResourceCustomizationUUID("a1d0e36e-34a9-431b-b5ba-4bbb72f63c7c");
625 configurationResourceKeys.setVnfcName("rdm54bvbgw5001vm018pim001");
627 ExecuteBuildingBlock ebbAddFabricConfig =
628 workflowActionBBTasks.getExecuteBBForConfig("AddFabricConfigurationBB", ebbActivateVfModule,
629 "cc7e12f9-967c-4362-8d14-e5b2bf0608a4", configurationResourceKeys);
631 assertEquals("7", ebbAddFabricConfig.getApiVersion());
632 assertTrue(ebbAddFabricConfig.isaLaCarte());
633 assertEquals("createInstance", ebbAddFabricConfig.getRequestAction());
634 assertEquals("test-vnf-type", ebbAddFabricConfig.getVnfType());
635 assertEquals("f6c00ae2-a205-4cbd-b055-02e553efde12", ebbAddFabricConfig.getRequestId());
636 assertEquals(requestDetails, ebbAddFabricConfig.getRequestDetails());
637 assertEquals("cc7e12f9-967c-4362-8d14-e5b2bf0608a4",
638 ebbAddFabricConfig.getWorkflowResourceIds().getConfigurationId());
639 assertEquals("test-service-inbstance-id", ebbAddFabricConfig.getWorkflowResourceIds().getServiceInstanceId());
640 assertEquals("test-vnf-id", ebbAddFabricConfig.getWorkflowResourceIds().getVnfId());
641 assertEquals("test-vf-module-id", ebbAddFabricConfig.getWorkflowResourceIds().getVfModuleId());
643 assertThat(ebbAddFabricConfig.getConfigurationResourceKeys()).isEqualTo(configurationResourceKeys);
644 assertThat(ebbAddFabricConfig.getWorkflowResourceIds())
645 .isNotEqualTo(ebbActivateVfModule.getWorkflowResourceIds());
646 assertThat(ebbAddFabricConfig.getWorkflowResourceIds().getConfigurationId())
647 .isNotEqualTo(ebbActivateVfModule.getWorkflowResourceIds().getConfigurationId());
651 public void checkRetryStatusTest() {
652 String reqId = "reqId123";
653 execution.setVariable("mso-request-id", reqId);
654 doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
655 doReturn("6").when(environment).getProperty("mso.rainyDay.maxRetries");
656 execution.setVariable("handlingCode", "Retry");
657 execution.setVariable("retryCount", 1);
658 execution.setVariable("gCurrentSequence", 1);
659 InfraActiveRequests req = new InfraActiveRequests();
660 doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId(reqId);
661 workflowActionBBTasks.checkRetryStatus(execution);
662 assertEquals(0, execution.getVariable("gCurrentSequence"));
666 public void checkRetryStatusTestExceededMaxRetries() {
667 String reqId = "reqId123";
668 execution.setVariable("mso-request-id", reqId);
669 doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
670 doReturn("6").when(environment).getProperty("mso.rainyDay.maxRetries");
671 execution.setVariable("handlingCode", "Retry");
672 execution.setVariable("retryCount", 6);
673 execution.setVariable("gCurrentSequence", 1);
674 InfraActiveRequests req = new InfraActiveRequests();
675 doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId(reqId);
677 workflowActionBBTasks.checkRetryStatus(execution);
678 } catch (BpmnError e) {
679 WorkflowException exception = (WorkflowException) execution.getVariable("WorkflowException");
680 assertEquals("Exceeded maximum retries. Ending flow with status Abort", exception.getErrorMessage());
685 public void checkRetryStatusNoRetryTest() {
686 String reqId = "reqId123";
687 execution.setVariable("mso-request-id", reqId);
688 execution.setVariable("retryCount", 3);
689 execution.setVariable("handlingCode", "Success");
690 execution.setVariable("gCurrentSequence", 1);
691 InfraActiveRequests req = new InfraActiveRequests();
692 doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId(reqId);
693 workflowActionBBTasks.checkRetryStatus(execution);
694 assertEquals(0, execution.getVariable("retryCount"));
698 public void updateInstanceId() {
699 String reqId = "req123";
700 String instanceId = "123123123";
701 execution.setVariable("mso-request-id", reqId);
702 execution.setVariable("resourceId", instanceId);
703 execution.setVariable("resourceType", WorkflowType.SERVICE);
704 doReturn(reqMock).when(requestsDbClient).getInfraActiveRequestbyRequestId(reqId);
705 doNothing().when(requestsDbClient).updateInfraActiveRequests(isA(InfraActiveRequests.class));
706 workflowActionBBTasks.updateInstanceId(execution);
707 Mockito.verify(reqMock, Mockito.times(1)).setServiceInstanceId(instanceId);
711 public void getConfigurationId() throws Exception {
712 org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
713 vnfc.setModelInvariantId("modelInvariantId");
714 vnfc.setVnfcName("testVnfcName");
715 List<Configuration> configurations = new ArrayList<>();
716 org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
717 configuration.setConfigurationId("configurationId");
718 configuration.setModelCustomizationId("modelCustimizationId");
719 configuration.setConfigurationName("testConfigurationName");
720 configurations.add(configuration);
721 doReturn(configurations.get(0).getConfigurationId()).when(workflowActionBBTasks).getConfigurationId(vnfc);
722 assertEquals(workflowActionBBTasks.getConfigurationId(vnfc), "configurationId");
726 public void setServiceInstanceNameTest() {
727 String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
728 WorkflowType resourceType = WorkflowType.SERVICE;
729 InfraActiveRequests request = new InfraActiveRequests();
730 ServiceInstance service = new ServiceInstance();
731 service.setServiceInstanceName("serviceInstanceName");
732 doReturn(service).when(bbSetupUtils).getAAIServiceInstanceById(resourceId);
734 workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
735 assertEquals("serviceInstanceName", request.getServiceInstanceName());
739 public void setVnfNameTest() {
740 String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
741 WorkflowType resourceType = WorkflowType.VNF;
742 InfraActiveRequests request = new InfraActiveRequests();
743 GenericVnf vnf = new GenericVnf();
744 vnf.setVnfName("vnfName");
745 doReturn(vnf).when(bbSetupUtils).getAAIGenericVnf(resourceId);
747 workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
748 assertEquals("vnfName", request.getVnfName());
752 public void setVfModuleNameTest() {
753 String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
754 WorkflowType resourceType = WorkflowType.VFMODULE;
755 InfraActiveRequests request = new InfraActiveRequests();
756 request.setVnfId("ae5cc3e8-c13c-4d88-aaf6-694ab4977b0e");
757 VfModule vfModule = new VfModule();
758 vfModule.setVfModuleName("vfModuleName");
759 doReturn(vfModule).when(bbSetupUtils).getAAIVfModule("ae5cc3e8-c13c-4d88-aaf6-694ab4977b0e", resourceId);
761 workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
762 assertEquals("vfModuleName", request.getVfModuleName());
766 public void setNetworkNameTest() {
767 String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
768 WorkflowType resourceType = WorkflowType.NETWORK;
769 InfraActiveRequests request = new InfraActiveRequests();
770 L3Network network = new L3Network();
771 network.setNetworkName("networkName");
772 doReturn(network).when(bbSetupUtils).getAAIL3Network(resourceId);
774 workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
775 assertEquals("networkName", request.getNetworkName());
779 public void setConfigurationNameTest() {
780 String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
781 WorkflowType resourceType = WorkflowType.CONFIGURATION;
782 InfraActiveRequests request = new InfraActiveRequests();
783 Configuration configuration = new Configuration();
784 configuration.setConfigurationName("configurationName");
785 doReturn(configuration).when(bbSetupUtils).getAAIConfiguration(resourceId);
787 workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
788 assertEquals("configurationName", request.getConfigurationName());
792 public void setInstanceGroupNameTest() {
793 String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
794 WorkflowType resourceType = WorkflowType.INSTANCE_GROUP;
795 InfraActiveRequests request = new InfraActiveRequests();
796 InstanceGroup instanceGroup = new InstanceGroup();
797 instanceGroup.setInstanceGroupName("instanceGroupName");
798 doReturn(instanceGroup).when(bbSetupUtils).getAAIInstanceGroup(resourceId);
800 workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
801 assertEquals("instanceGroupName", request.getInstanceGroupName());
805 public void setVolumeGroupNameTest() {
806 String resourceId = "40bc4ebd-11df-4610-8055-059f7441ec1c";
807 WorkflowType resourceType = WorkflowType.VOLUMEGROUP;
808 InfraActiveRequests request = new InfraActiveRequests();
809 request.setVnfId("4aa72c90-21eb-4465-8847-997e27af6c3e");
810 VolumeGroup volumeGroup = new VolumeGroup();
811 volumeGroup.setVolumeGroupName("volumeGroupName");
812 Optional<VolumeGroup> returnVolumeGroup = Optional.of(volumeGroup);
814 doReturn(returnVolumeGroup).when(bbSetupUtils).getRelatedVolumeGroupByIdFromVnf(request.getVnfId(), resourceId);
815 workflowActionBBTasks.setInstanceName(resourceId, resourceType, request);
817 assertEquals("volumeGroupName", request.getVolumeGroupName());
820 private void prepareDelegateExecution() {
821 execution.setVariable("mso-request-id", SAMPLE_MSO_REQUEST_ID);
822 execution.setVariable("requestAction", SAMPLE_REQUEST_ACTION);
823 execution.setVariable("gCurrentSequence", SAMPLE_SEQUENCE);
824 execution.setVariable("homing", false);
825 execution.setVariable("calledHoming", false);