From 3db9a38fdae095122f716189900942e0f2b53f03 Mon Sep 17 00:00:00 2001 From: "Boslet, Cory" Date: Thu, 2 Apr 2020 15:17:22 -0400 Subject: Added logic to update the requests DB when a Added logic to update the requests DB when a Create or Delete BB is silent success and updated enum Updated regrex and add junit test for orch validator and formatted files Formatted pom files that were not formatted correctly. Removed use of ternary operator if statement and moved enum to static final. Updated equals method to include resource status message for mockito verify Removed resourceStatusMessage from equals and used argument capture instead Issue-ID: SO-2782 Signed-off-by: Benjamin, Max (mb388a) Change-Id: I3a292f57d2771200ce85a99e845e776e2f3bd600 --- .../tasks/OrchestrationStatusValidator.java | 52 ++++++++ .../tasks/OrchestrationStatusValidatorTest.java | 138 ++++++++++++++++++++- 2 files changed, 188 insertions(+), 2 deletions(-) (limited to 'bpmn/so-bpmn-tasks/src') diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java index 1cde9fb8f6..e2dd73f9ec 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java @@ -24,6 +24,8 @@ package org.onap.so.bpmn.infrastructure.workflow.tasks; +import java.util.EnumSet; +import java.util.Set; import org.onap.so.bpmn.common.BuildingBlockExecution; import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey; import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB; @@ -34,11 +36,15 @@ import org.onap.so.db.catalog.beans.BuildingBlockDetail; import org.onap.so.db.catalog.beans.OrchestrationStatus; import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective; import org.onap.so.db.catalog.beans.OrchestrationStatusValidationDirective; +import org.onap.so.db.catalog.beans.ResourceType; import org.onap.so.db.catalog.client.CatalogDbClient; +import org.onap.so.db.request.beans.InfraActiveRequests; +import org.onap.so.db.request.client.RequestsDbClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.web.client.HttpClientErrorException; @Component public class OrchestrationStatusValidator { @@ -52,6 +58,14 @@ public class OrchestrationStatusValidator { "Orchestration Status Validation failed. ResourceType=(%s), TargetAction=(%s), OrchestrationStatus=(%s)"; private static final String ORCHESTRATION_STATUS_VALIDATION_RESULT = "orchestrationStatusValidationResult"; private static final String ALACARTE = "aLaCarte"; + private static final String MULTI_STAGE_DESIGN_OFF = "false"; + private static final String MULTI_STAGE_DESIGN_ON = "true"; + private static final String RESOURCE_EXIST_STATUS_MESSAGE = + "The %s was found to already exist, thus no new %s was created in the cloud via this request"; + private static final String RESOURCE_NOT_EXIST_STATUS_MESSAGE = + "The %s was not found, thus no %s was deleted in the cloud via this request"; + private static final Set cloudResources = + EnumSet.of(ResourceType.VF_MODULE, ResourceType.VOLUME_GROUP, ResourceType.NETWORK); @Autowired private ExtractPojosForBB extractPojosForBB; @@ -59,6 +73,8 @@ public class OrchestrationStatusValidator { private ExceptionBuilder exceptionBuilder; @Autowired private CatalogDbClient catalogDbClient; + @Autowired + RequestsDbClient requestDBClient; /** @@ -160,6 +176,13 @@ public class OrchestrationStatusValidator { execution.setVariable(ORCHESTRATION_STATUS_VALIDATION_RESULT, orchestrationStatusStateTransitionDirective.getFlowDirective()); + + if (buildingBlockFlowName.matches("Create(.*)|Delete(.*)") && orchestrationStatusStateTransitionDirective + .getFlowDirective() == OrchestrationStatusValidationDirective.SILENT_SUCCESS) { + + updatedResourceStatus(execution, buildingBlockDetail); + } + } catch (BBObjectNotFoundException ex) { logger.error( "Error occurred for bb object notfound in OrchestrationStatusValidator validateOrchestrationStatus ", @@ -175,4 +198,33 @@ public class OrchestrationStatusValidator { exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e); } } + + private void updatedResourceStatus(BuildingBlockExecution execution, BuildingBlockDetail buildingBlockDetail) { + + if (cloudResources.contains(buildingBlockDetail.getResourceType())) { + String resource = buildingBlockDetail.getResourceType().toString(); + + String resourceId = execution.getLookupMap() + .get(ResourceKey.valueOf(buildingBlockDetail.getResourceType().getResourceKey())); + + String resourceStatusMessage = RESOURCE_NOT_EXIST_STATUS_MESSAGE; + if (execution.getFlowToBeCalled().matches("Create(.*)")) { + resourceStatusMessage = RESOURCE_EXIST_STATUS_MESSAGE; + } + + updateRequestsDb(resourceId, String.format(resourceStatusMessage, resource, resource)); + } + + } + + private void updateRequestsDb(String requestId, String resourceStatusMessage) { + InfraActiveRequests request = new InfraActiveRequests(); + request.setRequestId(requestId); + request.setResourceStatusMessage(resourceStatusMessage); + try { + requestDBClient.patchInfraActiveRequests(request); + } catch (HttpClientErrorException e) { + logger.warn("Unable to update active request resource status"); + } + } } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidatorTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidatorTest.java index ffe48876c4..b9feeedc14 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidatorTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidatorTest.java @@ -34,8 +34,10 @@ import org.camunda.bpm.engine.delegate.BpmnError; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; +import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatchers; import org.mockito.InjectMocks; +import org.mockito.Mockito; import org.onap.so.bpmn.BaseTaskTest; import org.onap.so.bpmn.common.BuildingBlockExecution; import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration; @@ -49,13 +51,19 @@ import org.onap.so.db.catalog.beans.OrchestrationStatus; import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective; import org.onap.so.db.catalog.beans.OrchestrationStatusValidationDirective; import org.onap.so.db.catalog.beans.ResourceType; +import org.onap.so.db.request.beans.InfraActiveRequests; import org.springframework.beans.factory.annotation.Autowired; public class OrchestrationStatusValidatorTest extends BaseTaskTest { - @InjectMocks - protected OrchestrationStatusValidator orchestrationStatusValidator = new OrchestrationStatusValidator(); + private static final String vfModuleExistExpectedMessage = + "The VfModule was found to already exist, thus no new VfModule was created in the cloud via this request"; + + private static final String vfModuleNotExistExpectedMessage = + "The VfModule was not found, thus no VfModule was deleted in the cloud via this request"; + @InjectMocks + protected OrchestrationStatusValidator orchestrationStatusValidator = new OrchestrationStatusValidator(); @Test public void test_validateOrchestrationStatus() throws Exception { @@ -95,6 +103,8 @@ public class OrchestrationStatusValidatorTest extends BaseTaskTest { assertEquals(OrchestrationStatusValidationDirective.CONTINUE, execution.getVariable("orchestrationStatusValidationResult")); + + Mockito.verifyZeroInteractions(requestsDbClient); } @Test @@ -146,6 +156,8 @@ public class OrchestrationStatusValidatorTest extends BaseTaskTest { assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult")); + + Mockito.verifyZeroInteractions(requestsDbClient); } @Ignore @@ -192,6 +204,8 @@ public class OrchestrationStatusValidatorTest extends BaseTaskTest { OrchestrationAction.ASSIGN); orchestrationStatusValidator.validateOrchestrationStatus(execution); + + Mockito.verifyZeroInteractions(requestsDbClient); } @Ignore @@ -224,6 +238,8 @@ public class OrchestrationStatusValidatorTest extends BaseTaskTest { OrchestrationAction.ASSIGN); orchestrationStatusValidator.validateOrchestrationStatus(execution); + + Mockito.verifyZeroInteractions(requestsDbClient); } @Test @@ -293,6 +309,8 @@ public class OrchestrationStatusValidatorTest extends BaseTaskTest { assertEquals(OrchestrationStatusValidationDirective.CONTINUE, execution.getVariable("orchestrationStatusValidationResult")); + + Mockito.verifyZeroInteractions(requestsDbClient); } @@ -337,10 +355,21 @@ public class OrchestrationStatusValidatorTest extends BaseTaskTest { .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE); + InfraActiveRequests request = new InfraActiveRequests(); + request.setRequestId("testVfModuleId1"); + request.setResourceStatusMessage(vfModuleExistExpectedMessage); + + Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request); + orchestrationStatusValidator.validateOrchestrationStatus(execution); assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult")); + + ArgumentCaptor argument = ArgumentCaptor.forClass(InfraActiveRequests.class); + Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture()); + + assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage()); } @Test @@ -385,10 +414,21 @@ public class OrchestrationStatusValidatorTest extends BaseTaskTest { .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE); + InfraActiveRequests request = new InfraActiveRequests(); + request.setRequestId("testVfModuleId1"); + request.setResourceStatusMessage(vfModuleExistExpectedMessage); + + Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request); + orchestrationStatusValidator.validateOrchestrationStatus(execution); assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult")); + + ArgumentCaptor argument = ArgumentCaptor.forClass(InfraActiveRequests.class); + Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture()); + + assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage()); } @Test @@ -433,10 +473,21 @@ public class OrchestrationStatusValidatorTest extends BaseTaskTest { .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.ASSIGNED, OrchestrationAction.CREATE); + InfraActiveRequests request = new InfraActiveRequests(); + request.setRequestId("testVfModuleId1"); + request.setResourceStatusMessage(vfModuleExistExpectedMessage); + + Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request); + orchestrationStatusValidator.validateOrchestrationStatus(execution); assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult")); + + ArgumentCaptor argument = ArgumentCaptor.forClass(InfraActiveRequests.class); + Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture()); + + assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage()); } @Test @@ -481,10 +532,21 @@ public class OrchestrationStatusValidatorTest extends BaseTaskTest { .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.ACTIVATE); + InfraActiveRequests request = new InfraActiveRequests(); + request.setRequestId("testVfModuleId1"); + request.setResourceStatusMessage(vfModuleExistExpectedMessage); + + Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request); + orchestrationStatusValidator.validateOrchestrationStatus(execution); assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult")); + + ArgumentCaptor argument = ArgumentCaptor.forClass(InfraActiveRequests.class); + Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture()); + + assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage()); } @Test @@ -529,10 +591,21 @@ public class OrchestrationStatusValidatorTest extends BaseTaskTest { .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE); + InfraActiveRequests request = new InfraActiveRequests(); + request.setRequestId("testVfModuleId1"); + request.setResourceStatusMessage(vfModuleExistExpectedMessage); + + Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request); + orchestrationStatusValidator.validateOrchestrationStatus(execution); assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult")); + + ArgumentCaptor argument = ArgumentCaptor.forClass(InfraActiveRequests.class); + Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture()); + + assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage()); } @Test @@ -568,5 +641,66 @@ public class OrchestrationStatusValidatorTest extends BaseTaskTest { assertEquals(OrchestrationStatusValidationDirective.CONTINUE, execution.getVariable("orchestrationStatusValidationResult")); + + Mockito.verifyZeroInteractions(requestsDbClient); + } + + @Test + public void test_validateOrchestrationStatusDeleteVfModuleSilentSuccess() throws Exception { + String flowToBeCalled = "DeleteVfModuleBB"; + + execution.setVariable("orchestrationStatusValidationResult", + OrchestrationStatusValidationDirective.SILENT_SUCCESS); + execution.setVariable("aLaCarte", true); + execution.setVariable("flowToBeCalled", flowToBeCalled); + + GenericVnf genericVnf = buildGenericVnf(); + ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf(); + modelInfoGenericVnf.setMultiStageDesign("true"); + setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf); + setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION); + + org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = + new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule(); + vfModule.setVfModuleId("vfModuleId"); + vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION); + when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule); + + BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail(); + buildingBlockDetail.setBuildingBlockName("DeleteVfModuleBB"); + buildingBlockDetail.setId(1); + buildingBlockDetail.setResourceType(ResourceType.VF_MODULE); + buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE); + + doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled); + + OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = + new OrchestrationStatusStateTransitionDirective(); + orchestrationStatusStateTransitionDirective + .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS); + orchestrationStatusStateTransitionDirective.setId(1); + orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION); + orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE); + orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE); + + doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient) + .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, + OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE); + + InfraActiveRequests request = new InfraActiveRequests(); + request.setRequestId("testVfModuleId1"); + request.setResourceStatusMessage(vfModuleNotExistExpectedMessage); + + Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request); + + orchestrationStatusValidator.validateOrchestrationStatus(execution); + + assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, + execution.getVariable("orchestrationStatusValidationResult")); + + ArgumentCaptor argument = ArgumentCaptor.forClass(InfraActiveRequests.class); + Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture()); + + assertEquals(vfModuleNotExistExpectedMessage, argument.getValue().getResourceStatusMessage()); } } -- cgit 1.2.3-korg