diff options
6 files changed, 212 insertions, 21 deletions
diff --git a/bpmn/MSOCommonBPMN/pom.xml b/bpmn/MSOCommonBPMN/pom.xml index 5d9c1a3acd..ec8ad3127c 100644 --- a/bpmn/MSOCommonBPMN/pom.xml +++ b/bpmn/MSOCommonBPMN/pom.xml @@ -1,6 +1,5 @@ <?xml version="1.0"?> -<project - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" +<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> @@ -23,7 +22,7 @@ <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> - <configuration> + <configuration> <compilerId>groovy-eclipse-compiler</compilerId> </configuration> diff --git a/bpmn/so-bpmn-infrastructure-common/pom.xml b/bpmn/so-bpmn-infrastructure-common/pom.xml index 1a4e9c6ee8..86df60bb54 100644 --- a/bpmn/so-bpmn-infrastructure-common/pom.xml +++ b/bpmn/so-bpmn-infrastructure-common/pom.xml @@ -32,11 +32,11 @@ </execution> </executions> </plugin> - <plugin> + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> - <configuration> + <configuration> <compilerId>groovy-eclipse-compiler</compilerId> </configuration> 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<ResourceType> 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<InfraActiveRequests> 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<InfraActiveRequests> 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<InfraActiveRequests> 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<InfraActiveRequests> 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<InfraActiveRequests> 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<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class); + Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture()); + + assertEquals(vfModuleNotExistExpectedMessage, argument.getValue().getResourceStatusMessage()); } } diff --git a/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/beans/InfraActiveRequests.java b/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/beans/InfraActiveRequests.java index 750fa13c77..49fce7608b 100644 --- a/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/beans/InfraActiveRequests.java +++ b/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/beans/InfraActiveRequests.java @@ -69,10 +69,10 @@ public class InfraActiveRequests extends InfraRequests { @Override public String toString() { return new ToStringBuilder(this).append("requestId", getRequestId()).append("requestStatus", getRequestStatus()) - .append("statusMessage", getStatusMessage()).append("progress", getProgress()) - .append("startTime", getStartTime()).append("endTime", getEndTime()).append("source", getSource()) - .append("vnfId", getVnfId()).append("vnfName", getVnfName()).append("vnfType", getVnfType()) - .append("pnfName", getPnfName()).append("serviceType", getServiceType()) + .append("statusMessage", getStatusMessage()).append("resourceStatusMessage", getResourceStatusMessage()) + .append("progress", getProgress()).append("startTime", getStartTime()).append("endTime", getEndTime()) + .append("source", getSource()).append("vnfId", getVnfId()).append("vnfName", getVnfName()) + .append("vnfType", getVnfType()).append("pnfName", getPnfName()).append("serviceType", getServiceType()) .append("tenantId", getTenantId()).append("vnfParams", getVnfParams()) .append("vnfOutputs", getVnfOutputs()).append("requestBody", getRequestBody()) .append("responseBody", getResponseBody()).append("lastModifiedBy", getLastModifiedBy()) diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/ResourceType.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/ResourceType.java index 4fd28c910e..74f58a210c 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/ResourceType.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/ResourceType.java @@ -21,24 +21,30 @@ package org.onap.so.db.catalog.beans; public enum ResourceType { - SERVICE("Service"), - VNF("Vnf"), - VOLUME_GROUP("VolumeGroup"), - VF_MODULE("VfModule"), - NETWORK("Network"), - NETWORK_COLLECTION("NetworkCollection"), - CONFIGURATION("Configuration"), - INSTANCE_GROUP("InstanceGroup"), - NO_VALIDATE("NoValidate"); + SERVICE("Service", "SERVICE_INSTANCE_ID"), + VNF("Vnf", "GENERIC_VNF_ID"), + VOLUME_GROUP("VolumeGroup", "VOLUME_GROUP_ID"), + VF_MODULE("VfModule", "VF_MODULE_ID"), + NETWORK("Network", "NETWORK_ID"), + NETWORK_COLLECTION("NetworkCollection", "NETWORK_COLLECTION_ID"), + CONFIGURATION("Configuration", "CONFIGURATION_ID"), + INSTANCE_GROUP("InstanceGroup", "INSTANCE_GROUP_ID"), + NO_VALIDATE("NoValidate", ""); private final String name; + private final String resourceKey; - private ResourceType(String name) { + private ResourceType(String name, String resourceKey) { this.name = name; + this.resourceKey = resourceKey; } @Override public String toString() { return name; } + + public String getResourceKey() { + return resourceKey; + } } |