Added logic to update the requests DB when a 32/105032/2
authorBoslet, Cory <cory.boslet@att.com>
Thu, 2 Apr 2020 19:17:22 +0000 (15:17 -0400)
committerBenjamin, Max (mb388a) <mb388a@att.com>
Sat, 4 Apr 2020 18:28:18 +0000 (14:28 -0400)
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) <mb388a@att.com>
Change-Id: I3a292f57d2771200ce85a99e845e776e2f3bd600

bpmn/MSOCommonBPMN/pom.xml
bpmn/so-bpmn-infrastructure-common/pom.xml
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidatorTest.java
mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/beans/InfraActiveRequests.java
mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/ResourceType.java

index 5d9c1a3..ec8ad31 100644 (file)
@@ -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>
 
index 1a4e9c6..86df60b 100644 (file)
           </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>
 
index 1cde9fb..e2dd73f 100644 (file)
@@ -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");
+        }
+    }
 }
index ffe4887..b9feeed 100644 (file)
@@ -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());
     }
 }
index 750fa13..49fce76 100644 (file)
@@ -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())
index 4fd28c9..74f58a2 100644 (file)
 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;
+    }
 }