diff options
author | KrupaNagabhushan <krupa.nagabhushan@est.tech> | 2023-01-11 18:41:05 +0000 |
---|---|---|
committer | Vasyl Razinkov <vasyl.razinkov@est.tech> | 2023-01-16 22:10:54 +0000 |
commit | c29a4519545ff509c038c9a19781ef210b2ee14f (patch) | |
tree | 75d1967be32dc167f9d0c5f77ac528539447fa41 | |
parent | a8d208b231237fc9f05f83c2b33fa207d58f1480 (diff) |
Constraint validation - Policy Properties in a Service
Issue-ID: SDC-4320
Signed-off-by: KrupaNagabhushan <krupa.nagabhushan@est.tech>
Change-Id: I5f04b630f89b96d7a662fbab8894961670502f52
2 files changed, 37 insertions, 0 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogic.java index 3d971663b1..113f8ba4dc 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogic.java @@ -41,11 +41,13 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException; +import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException; import org.openecomp.sdc.be.components.impl.exceptions.ComponentException; import org.openecomp.sdc.be.components.property.PropertyDeclarationOrchestrator; import org.openecomp.sdc.be.components.validation.PolicyUtils; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus; +import org.openecomp.sdc.be.datamodel.utils.PropertyValueConstraintValidationUtil; import org.openecomp.sdc.be.datatypes.elements.GetPolicyValueDataDefinition; import org.openecomp.sdc.be.datatypes.elements.GroupDataDefinition; import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType; @@ -60,6 +62,7 @@ import org.openecomp.sdc.be.model.ComponentInstanceProperty; import org.openecomp.sdc.be.model.ComponentParametersView; import org.openecomp.sdc.be.model.PolicyDefinition; import org.openecomp.sdc.be.model.PolicyTypeDefinition; +import org.openecomp.sdc.be.model.PropertyDefinition; import org.openecomp.sdc.be.model.Resource; import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ArtifactsOperations; import org.openecomp.sdc.be.model.jsonjanusgraph.operations.InterfaceOperation; @@ -690,10 +693,26 @@ public class PolicyBusinessLogic extends BaseBusinessLogic { final PropertyDataDefinition currentProperty = oldProperties.get(newProperty.getName()); currentProperty.setValue(newPropertyValueEither); currentProperty.setToscaFunction(newProperty.getToscaFunction()); + validatePropertyValueWithConstraints(currentProperty, policyOwnerComponent); } return policy; } + private void validatePropertyValueWithConstraints(final PropertyDataDefinition property, final Component component) { + PropertyDefinition propertyDefinition = new PropertyDefinition(property); + if (!propertyDefinition.isToscaFunction()) { + List<PropertyDefinition> propertyDefinitionList = new ArrayList<>(); + propertyDefinitionList.add(propertyDefinition); + PropertyValueConstraintValidationUtil propertyValueConstraintValidationUtil = new PropertyValueConstraintValidationUtil(); + Either<Boolean, ResponseFormat> isPropertyContraintsValid = propertyValueConstraintValidationUtil + .validatePropertyConstraints(propertyDefinitionList, applicationDataTypeCache, + component.getModel()); + if (isPropertyContraintsValid.isRight()) { + throw new ByResponseFormatComponentException(isPropertyContraintsValid.right().value()); + } + } + } + private <T extends PropertyDataDefinition> String updatePropertyValue(final Component policyOwnerComponent, final T property) { Either<Object, Boolean> isValid = propertyOperation .validateAndUpdatePropertyValue(policyOwnerComponent, property, diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogicTest.java index f54a70d3d7..d0a91e312a 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogicTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogicTest.java @@ -69,6 +69,7 @@ import org.openecomp.sdc.be.model.ComponentInstInputsMap; import org.openecomp.sdc.be.model.ComponentInstance; import org.openecomp.sdc.be.model.ComponentInstancePropInput; import org.openecomp.sdc.be.model.ComponentParametersView; +import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.GroupDefinition; import org.openecomp.sdc.be.model.LifecycleStateEnum; import org.openecomp.sdc.be.model.PolicyDefinition; @@ -234,6 +235,10 @@ class PolicyBusinessLogicTest { policy.setProperties(Arrays.asList(properties)); policies.put(POLICY_NAME, policy); + Map<String, DataTypeDefinition> types = new HashMap<>(); + DataTypeDefinition dataTypeDef = new DataTypeDefinition(); + types.put("string", dataTypeDef); + List<ComponentInstance> instanceList = new ArrayList<>(); ComponentInstance componentInstance = new ComponentInstance(); componentInstance.setUniqueId(UNIQUE_ID_EXSISTS); @@ -251,6 +256,7 @@ class PolicyBusinessLogicTest { Either.left(policy)); when(propertyOperation.validateAndUpdatePropertyValue(eq(newResource), eq(properties[0]), anyMap())).thenReturn(Either.left(prop1)); when(propertyOperation.validateAndUpdatePropertyValue(eq(newResource), eq(properties[1]), anyMap())).thenReturn(Either.left(prop2)); + when(applicationDataTypeCache.getAll(any())).thenReturn(Either.left(types)); Map<String, PolicyDefinition> createdPolicy = businessLogic.createPolicies(newResource, policies); @@ -276,6 +282,10 @@ class PolicyBusinessLogicTest { policy.setProperties(Arrays.asList(properties)); policies.put(POLICY_NAME, policy); + Map<String, DataTypeDefinition> types = new HashMap<>(); + DataTypeDefinition dataTypeDef = new DataTypeDefinition(); + types.put("string", dataTypeDef); + List<ComponentInstance> instanceList = new ArrayList<>(); ComponentInstance componentInstance = new ComponentInstance(); componentInstance.setUniqueId(UNIQUE_ID_EXSISTS); @@ -293,6 +303,7 @@ class PolicyBusinessLogicTest { Either.left(policy)); when(propertyOperation.validateAndUpdatePropertyValue(eq(newService), eq(properties[0]), anyMap())).thenReturn(Either.left(prop1)); when(propertyOperation.validateAndUpdatePropertyValue(eq(newService), eq(properties[1]), anyMap())).thenReturn(Either.left(prop2)); + when(applicationDataTypeCache.getAll(any())).thenReturn(Either.left(types)); Map<String, PolicyDefinition> createdPolicy = businessLogic.createPolicies(newService, policies); @@ -408,12 +419,17 @@ class PolicyBusinessLogicTest { String prop1 = "Name"; String prop2 = "Type"; + Map<String, DataTypeDefinition> types = new HashMap<>(); + DataTypeDefinition dataTypeDef = new DataTypeDefinition(); + types.put("string", dataTypeDef); + when(toscaOperationFacade.updatePolicyOfComponent(eq(COMPONENT_ID), any(PolicyDefinition.class), any(PromoteVersionEnum.class))).thenReturn( policySuccessEither); stubUnlockAndCommit(); PropertyDataDefinition[] properties = getProperties(prop1, prop2); when(propertyOperation.validateAndUpdatePropertyValue(any(Resource.class), eq(properties[0]), anyMap())).thenReturn(Either.left(prop1)); when(propertyOperation.validateAndUpdatePropertyValue(any(Resource.class), eq(properties[1]), anyMap())).thenReturn(Either.left(prop2)); + when(applicationDataTypeCache.getAll(any())).thenReturn(Either.left(types)); policy.setProperties(Arrays.asList(properties)); List<PropertyDataDefinition> updatedProperties = businessLogic.updatePolicyProperties(ComponentTypeEnum.RESOURCE, COMPONENT_ID, POLICY_ID, properties, USER_ID, true); @@ -554,9 +570,11 @@ class PolicyBusinessLogicTest { PropertyDataDefinition property1 = new PropertyDataDefinition(); property1.setName(prop1); property1.setValue(prop1); + property1.setType("string"); PropertyDataDefinition property2 = new PropertyDataDefinition(); property2.setName(prop2); property2.setValue(prop2); + property2.setType("string"); return new PropertyDataDefinition[]{property1, property2}; } |