From 6c9da5ab227fa535249e8bb56c7cef01a74c6fb1 Mon Sep 17 00:00:00 2001 From: franciscovila Date: Tue, 18 Apr 2023 15:08:07 +0100 Subject: VFC Property default value enforced forced to comply with restraints Issue-ID: SDC-4477 Signed-off-by: franciscovila Change-Id: Ib9115aae9019e2d36990147dc0ec9f4058352d88 --- .../utils/PropertyValueConstraintValidationUtil.java | 11 +++++++---- .../sdc/be/servlets/ComponentPropertyServlet.java | 10 ++++++++++ .../sdc/be/servlets/ComponentPropertyServletTest.java | 14 ++++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) (limited to 'catalog-be') diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/datamodel/utils/PropertyValueConstraintValidationUtil.java b/catalog-be/src/main/java/org/openecomp/sdc/be/datamodel/utils/PropertyValueConstraintValidationUtil.java index ef7363a1a3..74cf8eb43f 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/datamodel/utils/PropertyValueConstraintValidationUtil.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/datamodel/utils/PropertyValueConstraintValidationUtil.java @@ -96,7 +96,7 @@ public class PropertyValueConstraintValidationUtil { if (propertyDefinition instanceof InputDefinition) { return StringUtils.isNotEmpty(propertyDefinition.getDefaultValue()); } - return StringUtils.isNotEmpty(propertyDefinition.getValue()); + return StringUtils.isNotEmpty(propertyDefinition.getValue() != null ? propertyDefinition.getValue() : propertyDefinition.getDefaultValue()); } private void evaluatePropertyTypeForConstraintValidation(PropertyDefinition propertyDefinition) { @@ -155,7 +155,8 @@ public class PropertyValueConstraintValidationUtil { } } } else if (!isValueAToscaFunction(propertyDefinition) && ToscaType.isPrimitiveType(propertyDefinition.getType()) - && !propertyDefinition.isToscaFunction() && !toscaType.isValidValue(propertyDefinition.getValue())) { + && !propertyDefinition.isToscaFunction() && !toscaType.isValidValue( + propertyDefinition.getValue() != null ? propertyDefinition.getValue() : propertyDefinition.getDefaultValue())) { errorMessages.add(String.format("Unsupported value provided for %s property supported value type is %s.", getCompletePropertyName(propertyDefinition), toscaType.getType())); } @@ -245,7 +246,8 @@ public class PropertyValueConstraintValidationUtil { return StringUtils.isNotEmpty(propertyDefinition.getValue()) && !"null".equals(propertyDefinition.getValue()); } else if (ToscaType.LIST == ToscaType.isValidType(propertyDefinition.getType())) { - Collection list = ConstraintUtil.parseToCollection(propertyDefinition.getValue(), new TypeReference<>() { + Collection list = ConstraintUtil.parseToCollection(null != propertyDefinition.getValue() ? + propertyDefinition.getValue() : propertyDefinition.getDefaultValue(), new TypeReference>() { }); return CollectionUtils.isNotEmpty(list); } else { @@ -323,7 +325,8 @@ public class PropertyValueConstraintValidationUtil { if (propertyDefinition.getSchemaType() == null) { propertyDefinition.setSchema(createStringSchema()); } - Collection list = ConstraintUtil.parseToCollection(propertyDefinition.getValue(), new TypeReference<>() {}); + Collection list = ConstraintUtil.parseToCollection(null != propertyDefinition.getValue() ? + propertyDefinition.getValue() : propertyDefinition.getDefaultValue(), new TypeReference>() {}); final Map map = new HashMap<>(); int index = 0; for (Object obj : list) { diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ComponentPropertyServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ComponentPropertyServlet.java index c58c43db52..c291522ca7 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ComponentPropertyServlet.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ComponentPropertyServlet.java @@ -268,6 +268,16 @@ public class ComponentPropertyServlet extends BeGenericServlet { log.info("Property content is invalid - {}", data); return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT)); } + + //Validate value and Constraint of property and Fetch all data types from cache + Either constraintValidatorResponse = new PropertyValueConstraintValidationUtil() + .validatePropertyConstraints(properties.values(), applicationDataTypeCache, + propertyBusinessLogic.getComponentModelByComponentId(componentId)); + if (constraintValidatorResponse.isRight()) { + log.error("Failed validation value and constraint of property: {}", constraintValidatorResponse.right().value()); + return buildErrorResponse(constraintValidatorResponse.right().value()); + } + Map.Entry entry = properties.entrySet().iterator().next(); PropertyDefinition newPropertyDefinition = entry.getValue(); newPropertyDefinition.setParentUniqueId(componentId); diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/ComponentPropertyServletTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/ComponentPropertyServletTest.java index 05e5eedb1f..00688aaf7a 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/ComponentPropertyServletTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/ComponentPropertyServletTest.java @@ -25,6 +25,8 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; import fj.data.Either; +import java.util.HashMap; +import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; import javax.ws.rs.core.Response; @@ -36,13 +38,18 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.Spy; import org.mockito.junit.jupiter.MockitoExtension; +import org.openecomp.sdc.be.components.impl.DataTypesService; import org.openecomp.sdc.be.components.impl.PropertyBusinessLogic; import org.openecomp.sdc.be.dao.api.ActionStatus; +import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus; import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.impl.WebAppContextWrapper; +import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.PropertyDefinition; +import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache; import org.openecomp.sdc.be.resources.data.EntryData; import org.openecomp.sdc.common.api.Constants; import org.openecomp.sdc.exception.ResponseFormat; @@ -73,10 +80,17 @@ class ComponentPropertyServletTest extends JerseySpringBaseTest { private static final String INVALID_PROPERTY_NAME = "invalid_name_$.&"; private static final String STRING_TYPE = "string"; + ApplicationDataTypeCache applicationDataTypeCache = Mockito.mock(ApplicationDataTypeCache.class); + Map mapreturn = new HashMap<>(); + Either, JanusGraphOperationStatus> allDataTypes; + @BeforeEach public void before() throws Exception { super.setUp(); when(request.getSession()).thenReturn(session); + mapreturn.put("Demo",new DataTypeDefinition()); + allDataTypes = Either.left(mapreturn); + when(applicationDataTypeCache.getAll(null)).thenReturn(allDataTypes); } @AfterEach -- cgit 1.2.3-korg