diff options
Diffstat (limited to 'bpmn')
11 files changed, 168 insertions, 15 deletions
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/validation/FlowValidator.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/validation/FlowValidator.java index a2e6804a7f..c457a349c2 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/validation/FlowValidator.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/validation/FlowValidator.java @@ -28,10 +28,10 @@ import org.onap.so.bpmn.common.BuildingBlockExecution; public interface FlowValidator { /** - * Names of items to be validated + * Should this validator run for given bb * @return */ - public Set<String> forItems(); + public boolean shouldRunFor(String bbName); /** * Determines whether or not the workflow should be executed diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/validation/FlowValidatorRunner.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/validation/FlowValidatorRunner.java index 9e6ea53a47..636c8e32cf 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/validation/FlowValidatorRunner.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/validation/FlowValidatorRunner.java @@ -122,7 +122,7 @@ public abstract class FlowValidatorRunner<S extends FlowValidator, E extends Flo protected List<FlowValidator> filterValidators(List<? extends FlowValidator> validators, String bbName) { return validators.stream() .filter(item -> { - return item.forItems().contains(bbName); + return item.shouldRunFor(bbName); }) .sorted(Comparator.comparing(item -> { Priority p = Optional.ofNullable(item.getClass().getAnnotation(Priority.class)).orElse(new Priority() { diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/bbobjects/CloudRegion.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/bbobjects/CloudRegion.java index f39253e6aa..df1eeae1b6 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/bbobjects/CloudRegion.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/bbobjects/CloudRegion.java @@ -45,6 +45,8 @@ public class CloudRegion implements Serializable, ShallowCopy<CloudRegion> { private String complex; @JsonProperty("cloud-region-version") private String cloudRegionVersion; + @JsonProperty("orchestration-disabled") + private Boolean orchestrationDisabled; public String getLcpCloudRegionId() { return lcpCloudRegionId; @@ -88,6 +90,12 @@ public class CloudRegion implements Serializable, ShallowCopy<CloudRegion> { public void setComplex(String complex) { this.complex = complex; } + public Boolean getOrchestrationDisabled() { + return orchestrationDisabled; + } + public void setOrchestrationDisabled(Boolean orchestrationDisabled) { + this.orchestrationDisabled = orchestrationDisabled; + } @Override public boolean equals(final Object other) { if (!(other instanceof CloudRegion)) { diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorFour.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorFour.java index fbd709b058..af45a129e2 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorFour.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorFour.java @@ -31,8 +31,8 @@ import org.springframework.stereotype.Component; public class MyPreValidatorFour implements PreBuildingBlockValidator { @Override - public Set<String> forItems() { - return Collections.singleton("test2"); + public boolean shouldRunFor(String bbName) { + return Collections.singleton("test2").contains(bbName); } @Override diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorOne.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorOne.java index f642f915b7..d1d50e2a89 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorOne.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorOne.java @@ -31,9 +31,9 @@ import org.springframework.stereotype.Component; public class MyPreValidatorOne implements PreBuildingBlockValidator { @Override - public Set<String> forItems() { + public boolean shouldRunFor(String bbName) { - return Collections.singleton("test"); + return Collections.singleton("test").contains(bbName); } @Override diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorThree.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorThree.java index 780fb43c2a..363020de71 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorThree.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorThree.java @@ -31,8 +31,8 @@ import org.springframework.stereotype.Component; public class MyPreValidatorThree implements PreBuildingBlockValidator { @Override - public Set<String> forItems() { - return Collections.singleton("test2"); + public boolean shouldRunFor(String bbName) { + return Collections.singleton("test2").contains(bbName); } @Override diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorTwo.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorTwo.java index c8ff6ef848..4d78f4e458 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorTwo.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/MyPreValidatorTwo.java @@ -34,8 +34,8 @@ import org.springframework.stereotype.Component; public class MyPreValidatorTwo implements PreBuildingBlockValidator { @Override - public Set<String> forItems() { - return Collections.singleton("test"); + public boolean shouldRunFor(String bbName) { + return Collections.singleton("test").contains(bbName); } @Override diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/WorkflowPreValidatorOne.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/WorkflowPreValidatorOne.java index bfe3ec06a3..891496fa2b 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/WorkflowPreValidatorOne.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/WorkflowPreValidatorOne.java @@ -31,9 +31,9 @@ import org.springframework.stereotype.Component; public class WorkflowPreValidatorOne implements PreWorkflowValidator { @Override - public Set<String> forItems() { + public boolean shouldRunFor(String bbName) { - return Collections.singleton("test"); + return Collections.singleton("test").contains(bbName); } @Override diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/WorkflowPreValidatorTwo.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/WorkflowPreValidatorTwo.java index ddf5f22f00..80b55df8f5 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/WorkflowPreValidatorTwo.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/validation/WorkflowPreValidatorTwo.java @@ -34,8 +34,8 @@ import org.springframework.stereotype.Component; public class WorkflowPreValidatorTwo implements PreWorkflowValidator { @Override - public Set<String> forItems() { - return Collections.singleton("test"); + public boolean shouldRunFor(String bbName) { + return Collections.singleton("test").contains(bbName); } @Override diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/validations/CloudRegionOrchestrationValidator.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/validations/CloudRegionOrchestrationValidator.java new file mode 100644 index 0000000000..7a433c06a6 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/validations/CloudRegionOrchestrationValidator.java @@ -0,0 +1,48 @@ +package org.onap.so.bpmn.infrastructure.validations; + +import java.util.Optional; +import java.util.regex.Pattern; + +import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.common.validation.PreBuildingBlockValidator; +import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion; +import org.onap.so.client.exception.ExceptionBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class CloudRegionOrchestrationValidator implements PreBuildingBlockValidator { + + private static Logger logger = LoggerFactory.getLogger(CloudRegionOrchestrationValidator.class); + private final Pattern pattern = Pattern.compile("(?:Activate|Assign|Create|Deactivate|Delete|Unassign|Update)(?:Network|Vnf|VfModule|VolumeGroup|FabricConfiguration)BB"); + + @Autowired + private ExceptionBuilder exceptionBuilder; + + @Override + public boolean shouldRunFor(String bbName) { + return pattern.matcher(bbName).find(); + } + + @Override + public Optional<String> validate(BuildingBlockExecution execution) { + String msg = null; + try { + CloudRegion cloudRegion = execution.getGeneralBuildingBlock().getCloudRegion(); + if (Boolean.TRUE.equals(cloudRegion.getOrchestrationDisabled())) { + msg = String.format("Error: The request has failed due to orchestration currently disabled for the target cloud region %s for cloud owner %s", + cloudRegion.getLcpCloudRegionId(), cloudRegion.getCloudOwner()); + logger.error(msg); + return Optional.ofNullable(msg); + } + } + catch(Exception e) { + logger.error("failed to validate", e); + exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e); + } + return Optional.empty(); + } + +} diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/validations/CloudRegionOrchestrationValidatorTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/validations/CloudRegionOrchestrationValidatorTest.java new file mode 100644 index 0000000000..f6988fdcd4 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/validations/CloudRegionOrchestrationValidatorTest.java @@ -0,0 +1,97 @@ +package org.onap.so.bpmn.infrastructure.validations; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import java.util.Optional; +import java.util.Set; + +import org.junit.Before; +import org.junit.Test; +import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion; +import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock; + +public class CloudRegionOrchestrationValidatorTest { + + private BuildingBlockExecution mockExecution; + private CloudRegion cloudRegion; + + @Before + public void setUp() { + cloudRegion = new CloudRegion(); + cloudRegion.setCloudOwner("CloudOwner"); + cloudRegion.setLcpCloudRegionId("my-region-id"); + GeneralBuildingBlock gbb = new GeneralBuildingBlock(); + gbb.setCloudRegion(cloudRegion); + mockExecution = mock(BuildingBlockExecution.class); + doReturn(gbb).when(mockExecution).getGeneralBuildingBlock(); + } + + @Test + public void validateDisabledTest() { + cloudRegion.setOrchestrationDisabled(true); + CloudRegionOrchestrationValidator validation = new CloudRegionOrchestrationValidator(); + Optional<String> result = validation.validate(mockExecution); + assertEquals("Error: The request has failed due to orchestration currently disabled for the target cloud region my-region-id for cloud owner CloudOwner", + result.get()); + } + + @Test + public void validateNotDisabledTest() { + cloudRegion.setOrchestrationDisabled(false); + CloudRegionOrchestrationValidator validation = new CloudRegionOrchestrationValidator(); + Optional<String> result = validation.validate(mockExecution); + assertFalse(result.isPresent()); + } + + @Test + public void validateDisabledIsNullTest() { + CloudRegionOrchestrationValidator validation = new CloudRegionOrchestrationValidator(); + Optional<String> result = validation.validate(mockExecution); + assertFalse(result.isPresent()); + } + + @Test + public void shouldRunForTest() { + CloudRegionOrchestrationValidator validator = new CloudRegionOrchestrationValidator(); + assertTrue(validator.shouldRunFor("ActivateNetworkBB")); + assertTrue(validator.shouldRunFor("AssignNetworkBB")); + assertTrue(validator.shouldRunFor("CreateNetworkBB")); + assertTrue(validator.shouldRunFor("DeactivateNetworkBB")); + assertTrue(validator.shouldRunFor("DeleteNetworkBB")); + assertTrue(validator.shouldRunFor("UnassignNetworkBB")); + assertTrue(validator.shouldRunFor("UpdateNetworkBB")); + + assertTrue(validator.shouldRunFor("ActivateVnfBB")); + assertTrue(validator.shouldRunFor("AssignVnfBB")); + assertTrue(validator.shouldRunFor("UnassignVnfBB")); + assertTrue(validator.shouldRunFor("DeactivateVnfBB")); + + assertTrue(validator.shouldRunFor("ActivateVfModuleBB")); + assertTrue(validator.shouldRunFor("AssignVfModuleBB")); + assertTrue(validator.shouldRunFor("CreateVfModuleBB")); + assertTrue(validator.shouldRunFor("DeactivateVfModuleBB")); + assertTrue(validator.shouldRunFor("DeleteVfModuleBB")); + assertTrue(validator.shouldRunFor("UnassignVfModuleBB")); + + assertTrue(validator.shouldRunFor("ActivateVolumeGroupBB")); + assertTrue(validator.shouldRunFor("AssignVolumeGroupBB")); + assertTrue(validator.shouldRunFor("CreateVolumeGroupBB")); + assertTrue(validator.shouldRunFor("DeactivateVolumeGroupBB")); + assertTrue(validator.shouldRunFor("DeleteVolumeGroupBB")); + assertTrue(validator.shouldRunFor("UnassignVolumeGroupBB")); + + assertTrue(validator.shouldRunFor("ActivateFabricConfigurationBB")); + assertTrue(validator.shouldRunFor("AssignFabricConfigurationBB")); + assertTrue(validator.shouldRunFor("UnassignFabricConfigurationBB")); + assertTrue(validator.shouldRunFor("DeactivateFabricConfigurationBB")); + + assertFalse(validator.shouldRunFor("AssignServiceInstanceBB")); + assertFalse(validator.shouldRunFor("AAICheckVnfInMaintBB")); + assertFalse(validator.shouldRunFor("ChangeModelVfModuleBB")); + assertFalse(validator.shouldRunFor("CreateNetworkCollectionBB")); + } +} |