summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrupaNagabhushan <krupa.nagabhushan@est.tech>2023-01-11 18:41:05 +0000
committerVasyl Razinkov <vasyl.razinkov@est.tech>2023-01-16 22:10:54 +0000
commitc29a4519545ff509c038c9a19781ef210b2ee14f (patch)
tree75d1967be32dc167f9d0c5f77ac528539447fa41
parenta8d208b231237fc9f05f83c2b33fa207d58f1480 (diff)
Constraint validation - Policy Properties in a Service
Issue-ID: SDC-4320 Signed-off-by: KrupaNagabhushan <krupa.nagabhushan@est.tech> Change-Id: I5f04b630f89b96d7a662fbab8894961670502f52
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogic.java19
-rw-r--r--catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogicTest.java18
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};
}