From c29a4519545ff509c038c9a19781ef210b2ee14f Mon Sep 17 00:00:00 2001 From: KrupaNagabhushan Date: Wed, 11 Jan 2023 18:41:05 +0000 Subject: Constraint validation - Policy Properties in a Service Issue-ID: SDC-4320 Signed-off-by: KrupaNagabhushan Change-Id: I5f04b630f89b96d7a662fbab8894961670502f52 --- .../sdc/be/components/impl/PolicyBusinessLogic.java | 19 +++++++++++++++++++ .../be/components/impl/PolicyBusinessLogicTest.java | 18 ++++++++++++++++++ 2 files changed, 37 insertions(+) (limited to 'catalog-be/src') 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 propertyDefinitionList = new ArrayList<>(); + propertyDefinitionList.add(propertyDefinition); + PropertyValueConstraintValidationUtil propertyValueConstraintValidationUtil = new PropertyValueConstraintValidationUtil(); + Either isPropertyContraintsValid = propertyValueConstraintValidationUtil + .validatePropertyConstraints(propertyDefinitionList, applicationDataTypeCache, + component.getModel()); + if (isPropertyContraintsValid.isRight()) { + throw new ByResponseFormatComponentException(isPropertyContraintsValid.right().value()); + } + } + } + private String updatePropertyValue(final Component policyOwnerComponent, final T property) { Either 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 types = new HashMap<>(); + DataTypeDefinition dataTypeDef = new DataTypeDefinition(); + types.put("string", dataTypeDef); + List 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 createdPolicy = businessLogic.createPolicies(newResource, policies); @@ -276,6 +282,10 @@ class PolicyBusinessLogicTest { policy.setProperties(Arrays.asList(properties)); policies.put(POLICY_NAME, policy); + Map types = new HashMap<>(); + DataTypeDefinition dataTypeDef = new DataTypeDefinition(); + types.put("string", dataTypeDef); + List 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 createdPolicy = businessLogic.createPolicies(newService, policies); @@ -408,12 +419,17 @@ class PolicyBusinessLogicTest { String prop1 = "Name"; String prop2 = "Type"; + Map 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 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}; } -- cgit 1.2.3-korg