private static final String COMPLETED = "completed";
private static final String HANDLINGCODE = "handlingCode";
private static final String ROLLBACKTOCREATED = "RollbackToCreated";
+ private static final String REPLACEINSTANCE = "replaceInstance";
+ private static final String VFMODULE = "VfModule";
protected String maxRetries = "mso.rainyDay.maxRetries";
private static final Logger logger = LoggerFactory.getLogger(WorkflowActionBBTasks.class);
* working on.
*/
public void rollbackExecutionPath(DelegateExecution execution) {
+ final String action = (String) execution.getVariable(G_ACTION);
+ final String resourceName = (String) execution.getVariable("resourceName");
if (!(boolean) execution.getVariable("isRollback")) {
List<ExecuteBuildingBlock> flowsToExecute =
(List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
+
+ List<ExecuteBuildingBlock> flowsToExecuteChangeBBs = new ArrayList();
+ for (int i = 0; i < flowsToExecute.size(); i++) {
+ if (flowsToExecute.get(i).getBuildingBlock().getBpmnFlowName().startsWith("Change")) {
+ flowsToExecuteChangeBBs.add(flowsToExecute.get(i));
+ }
+ }
+
List<ExecuteBuildingBlock> rollbackFlows = new ArrayList();
int currentSequence = (int) execution.getVariable(G_CURRENT_SEQUENCE);
int listSize = flowsToExecute.size();
+
for (int i = listSize - 1; i >= 0; i--) {
if (i > currentSequence - 1) {
flowsToExecute.remove(i);
}
}
+ List<ExecuteBuildingBlock> rollbackFlowsFilteredNonChangeBBs = new ArrayList();
+ if (action.equals(REPLACEINSTANCE) && resourceName.equals(VFMODULE)) {
+ for (int i = 0; i < rollbackFlowsFiltered.size(); i++) {
+ if (!rollbackFlowsFiltered.get(i).getBuildingBlock().getBpmnFlowName().startsWith("Change")) {
+ rollbackFlowsFilteredNonChangeBBs.add(rollbackFlowsFiltered.get(i));
+ }
+ }
+ rollbackFlowsFiltered.clear();
+ rollbackFlowsFiltered.addAll(flowsToExecuteChangeBBs);
+ rollbackFlowsFiltered.addAll(rollbackFlowsFilteredNonChangeBBs);
+ }
+
workflowActionBBFailure.updateRequestErrorStatusMessage(execution);
if (rollbackFlows.isEmpty())
execution.setVariable("isRollbackNeeded", false);
private static final String SAMPLE_MSO_REQUEST_ID = "00f704ca-c5e5-4f95-a72c-6889db7b0688";
private static final String SAMPLE_REQUEST_ACTION = "Delete-Network-Collection";
private static final int SAMPLE_SEQUENCE = 0;
+ private static final String EMPTY_STRING = "";
@Mock
protected WorkflowAction workflowAction;
public void rollbackExecutionPathTest() {
execution.setVariable("handlingCode", "Rollback");
execution.setVariable("isRollback", false);
+ execution.setVariable("requestAction", EMPTY_STRING);
+ execution.setVariable("resourceName", EMPTY_STRING);
List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
public void rollbackExecutionPathUnfinishedFlowTest() {
execution.setVariable("handlingCode", "Rollback");
execution.setVariable("isRollback", false);
+ execution.setVariable("requestAction", EMPTY_STRING);
+ execution.setVariable("resourceName", EMPTY_STRING);
List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
public void rollbackExecutionTest() {
execution.setVariable("handlingCode", "Rollback");
execution.setVariable("isRollback", false);
+ execution.setVariable("requestAction", EMPTY_STRING);
+ execution.setVariable("resourceName", EMPTY_STRING);
List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignServiceInstanceBB");
ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
public void rollbackExecutionRollbackToAssignedTest() {
execution.setVariable("isRollback", false);
execution.setVariable("handlingCode", "RollbackToAssigned");
+ execution.setVariable("requestAction", EMPTY_STRING);
+ execution.setVariable("resourceName", EMPTY_STRING);
List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
assertEquals(1, ebbs.size());
}
+ @Test
+ public void rollbackExecutionPathChangeBBForReplaceVFModuleTest() {
+ execution.setVariable("handlingCode", "Rollback");
+ execution.setVariable("isRollback", false);
+ execution.setVariable("requestAction", "replaceInstance");
+ execution.setVariable("resourceName", "VfModule");
+ List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+ BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
+ ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
+ flowsToExecute.add(ebb1);
+
+ BuildingBlock buildingBlock2 = new BuildingBlock().setBpmnFlowName("CreateVfModuleBB");
+ ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock2);
+ flowsToExecute.add(ebb2);
+
+ BuildingBlock buildingBlock3 = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
+ ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock3);
+ flowsToExecute.add(ebb3);
+
+
+ BuildingBlock buildingBlock4 = new BuildingBlock().setBpmnFlowName("ChangeModelVnfBB");
+ ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock4);
+ flowsToExecute.add(ebb4);
+
+ BuildingBlock buildingBlock5 = new BuildingBlock().setBpmnFlowName("ChangeModelServiceInstanceBB");
+ ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock5);
+ flowsToExecute.add(ebb5);
+
+ execution.setVariable("flowsToExecute", flowsToExecute);
+ execution.setVariable("gCurrentSequence", 5);
+ doNothing().when(workflowActionBBFailure).updateRequestErrorStatusMessage(isA(DelegateExecution.class));
+
+ workflowActionBBTasks.rollbackExecutionPath(execution);
+ List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
+ assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(), "ChangeModelVnfBB");
+ assertEquals(ebbs.get(1).getBuildingBlock().getBpmnFlowName(), "ChangeModelServiceInstanceBB");
+ assertEquals(0, execution.getVariable("gCurrentSequence"));
+ }
+
@Test
public void rollbackExecutionRollbackToAssignedWithFabricTest() {
execution.setVariable("isRollback", false);
execution.setVariable("handlingCode", "RollbackToAssigned");
+ execution.setVariable("requestAction", EMPTY_STRING);
+ execution.setVariable("resourceName", EMPTY_STRING);
List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
public void rollbackExecutionRollbackToCreatedTest() {
execution.setVariable("isRollback", false);
execution.setVariable("handlingCode", "RollbackToCreated");
+ execution.setVariable("requestAction", EMPTY_STRING);
+ execution.setVariable("resourceName", EMPTY_STRING);
List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("AssignVfModuleBB");
ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
public void rollbackExecutionRollbackInPlaceSoftwareUpdateTest() {
execution.setVariable("isRollback", false);
execution.setVariable("handlingCode", "Rollback");
+ execution.setVariable("requestAction", EMPTY_STRING);
+ execution.setVariable("resourceName", EMPTY_STRING);
List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("VNFCheckPserversLockedFlagActivity");
ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
public void rollbackExecutionRollbackConfigModifyTest() {
execution.setVariable("isRollback", false);
execution.setVariable("handlingCode", "Rollback");
+ execution.setVariable("requestAction", EMPTY_STRING);
+ execution.setVariable("resourceName", EMPTY_STRING);
List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
BuildingBlock buildingBlock1 = new BuildingBlock().setBpmnFlowName("VNFCheckPserversLockedFlagActivity");
ExecuteBuildingBlock ebb1 = new ExecuteBuildingBlock().setBuildingBlock(buildingBlock1);
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
+ <dependency>
+ <groupId>org.springframework.retry</groupId>
+ <artifactId>spring-retry</artifactId>
+ </dependency>
<dependency>
<groupId>net.jodah</groupId>
<artifactId>failsafe</artifactId>
@Override
public Optional<String> validate(Map<String, String> instanceIdMap, ServiceInstancesRequest request,
- Map<String, String> queryParams) {
+ Map<String, String> queryParams, Actions action) {
if (aaiDataRetrieval.isNetworkRelatedToModules(instanceIdMap.get("networkInstanceId"))) {
return Optional.of("Cannot delete network it is still related to existing vf-modules");
} else {
public Optional<String> validate(Map<String, String> instanceIdMap, ServiceInstancesRequest request,
- Map<String, String> queryParams);
+ Map<String, String> queryParams, Actions action);
}
filterListeners(validators, (item -> item.shouldRunFor(requestURI, request, action)));
List<Pair<String, Optional<String>>> results = new ArrayList<>();
- filtered.forEach(item -> results
- .add(new Pair<>(item.getClass().getName(), item.validate(instanceIdMap, request, queryParams))));
+ filtered.forEach(item -> results.add(
+ new Pair<>(item.getClass().getName(), item.validate(instanceIdMap, request, queryParams, action))));
return results.stream().filter(item -> item.getValue1().isPresent()).collect(Collectors.toList());
}
@Override
public Optional<String> validate(Map<String, String> instanceIdMap, ServiceInstancesRequest request,
- Map<String, String> queryParams) {
+ Map<String, String> queryParams, Actions action) {
if (aaiDataRetrieval.isServiceRelatedToGenericVnf(instanceIdMap.get("serviceInstanceId"))) {
return Optional.of("Cannot delete service it is still related to existing vf-modules");
} else if (aaiDataRetrieval.isServiceRelatedToNetworks(instanceIdMap.get("serviceInstanceId"))) {
@Override
public Optional<String> validate(Map<String, String> instanceIdMap, ServiceInstancesRequest request,
- Map<String, String> queryParams) {
+ Map<String, String> queryParams, Actions action) {
final Optional<String> volumeGroupIds =
aaiDataRetrieval.getVolumeGroupIdsByVnfId(instanceIdMap.get("vnfInstanceId"));
final Optional<String> vfModuleIds = aaiDataRetrieval.getVfModuleIdsByVnfId(instanceIdMap.get("vnfInstanceId"));
@Override
public Optional<String> validate(Map<String, String> instanceIdMap, ServiceInstancesRequest request,
- Map<String, String> queryParams) {
+ Map<String, String> queryParams, Actions action) {
if (aaiDataRetrieval.isVolumeGroupRelatedToVFModule(instanceIdMap.get("volumeGroupInstanceId"))) {
return Optional.of("Cannot delete volume group it is related to existing vf-modules");
} else {
public void validateSuccessTest() {
instanceIdMap.put("networkInstanceId", "1");
when(aaiDataRetrieval.isNetworkRelatedToModules("1")).thenReturn(false);
- Optional<String> result = networkValidator.validate(instanceIdMap, null, null);
+ Optional<String> result = networkValidator.validate(instanceIdMap, null, null, null);
assertEquals(false, result.isPresent());
}
public void validateFailureTest() {
instanceIdMap.put("networkInstanceId", "1");
when(aaiDataRetrieval.isNetworkRelatedToModules("1")).thenReturn(true);
- Optional<String> result = networkValidator.validate(instanceIdMap, null, null);
+ Optional<String> result = networkValidator.validate(instanceIdMap, null, null, null);
assertEquals(true, result.isPresent());
}
when(aaiDataRetrieval.isServiceRelatedToGenericVnf("1")).thenReturn(false);
when(aaiDataRetrieval.isServiceRelatedToNetworks("1")).thenReturn(false);
when(aaiDataRetrieval.isServiceRelatedToConfiguration("1")).thenReturn(false);
- Optional<String> result = serviceValidator.validate(instanceIdMap, null, null);
+ Optional<String> result = serviceValidator.validate(instanceIdMap, null, null, null);
assertEquals(false, result.isPresent());
}
public void validateFailureVnfTest() {
instanceIdMap.put("serviceInstanceId", "1");
when(aaiDataRetrieval.isServiceRelatedToGenericVnf("1")).thenReturn(true);
- Optional<String> result = serviceValidator.validate(instanceIdMap, null, null);
+ Optional<String> result = serviceValidator.validate(instanceIdMap, null, null, null);
assertEquals(true, result.isPresent());
}
instanceIdMap.put("serviceInstanceId", "1");
when(aaiDataRetrieval.isServiceRelatedToGenericVnf("1")).thenReturn(false);
when(aaiDataRetrieval.isServiceRelatedToNetworks("1")).thenReturn(true);
- Optional<String> result = serviceValidator.validate(instanceIdMap, null, null);
+ Optional<String> result = serviceValidator.validate(instanceIdMap, null, null, null);
assertEquals(true, result.isPresent());
}
when(aaiDataRetrieval.isServiceRelatedToGenericVnf("1")).thenReturn(false);
when(aaiDataRetrieval.isServiceRelatedToNetworks("1")).thenReturn(false);
when(aaiDataRetrieval.isServiceRelatedToConfiguration("1")).thenReturn(true);
- Optional<String> result = serviceValidator.validate(instanceIdMap, null, null);
+ Optional<String> result = serviceValidator.validate(instanceIdMap, null, null, null);
assertEquals(true, result.isPresent());
}
public void validateFailureVfModuleVnfTest() {
instanceIdMap.put("vnfInstanceId", "1");
doReturn(Optional.of("test")).when(aaiDataRetrieval).getVfModuleIdsByVnfId("1");
- Optional<String> result = vnfValidator.validate(instanceIdMap, null, null);
+ Optional<String> result = vnfValidator.validate(instanceIdMap, null, null, null);
assertEquals(true, result.isPresent());
}
public void validateSuccessVfModuleVnfTest() {
instanceIdMap.put("vnfInstanceId", "1");
doReturn(Optional.empty()).when(aaiDataRetrieval).getVfModuleIdsByVnfId("1");
- Optional<String> result = vnfValidator.validate(instanceIdMap, null, null);
+ Optional<String> result = vnfValidator.validate(instanceIdMap, null, null, null);
assertEquals(false, result.isPresent());
}
public void validateFailureVolumeGroupVnfTest() {
instanceIdMap.put("vnfInstanceId", "1");
doReturn(Optional.of("test")).when(aaiDataRetrieval).getVolumeGroupIdsByVnfId("1");
- Optional<String> result = vnfValidator.validate(instanceIdMap, null, null);
+ Optional<String> result = vnfValidator.validate(instanceIdMap, null, null, null);
assertEquals(true, result.isPresent());
}
public void validateSuccessVolumeGroupVnfTest() {
instanceIdMap.put("vnfInstanceId", "1");
doReturn(Optional.empty()).when(aaiDataRetrieval).getVolumeGroupIdsByVnfId("1");
- Optional<String> result = vnfValidator.validate(instanceIdMap, null, null);
+ Optional<String> result = vnfValidator.validate(instanceIdMap, null, null, null);
assertEquals(false, result.isPresent());
}
}
public void validateSuccessTest() {
instanceIdMap.put("volumeGroupInstanceId", "1");
when(aaiDataRetrieval.isVolumeGroupRelatedToVFModule("1")).thenReturn(false);
- Optional<String> result = volumeGroupDeleteValidator.validate(instanceIdMap, null, null);
+ Optional<String> result = volumeGroupDeleteValidator.validate(instanceIdMap, null, null, null);
assertEquals(false, result.isPresent());
}
public void validateFailureVnfTest() {
instanceIdMap.put("volumeGroupInstanceId", "1");
when(aaiDataRetrieval.isVolumeGroupRelatedToVFModule("1")).thenReturn(true);
- Optional<String> result = volumeGroupDeleteValidator.validate(instanceIdMap, null, null);
+ Optional<String> result = volumeGroupDeleteValidator.validate(instanceIdMap, null, null, null);
assertEquals(true, result.isPresent());
}