package alien4cloud.tosca.container.validation; import java.util.List; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; import org.alien4cloud.tosca.model.definitions.PropertyConstraint; import org.alien4cloud.tosca.model.definitions.PropertyDefinition; import org.alien4cloud.tosca.model.definitions.ScalarPropertyValue; import org.alien4cloud.tosca.model.definitions.constraints.EqualConstraint; import org.alien4cloud.tosca.model.definitions.constraints.GreaterOrEqualConstraint; import org.alien4cloud.tosca.model.definitions.constraints.GreaterThanConstraint; import org.alien4cloud.tosca.model.definitions.constraints.InRangeConstraint; import org.alien4cloud.tosca.model.definitions.constraints.LengthConstraint; import org.alien4cloud.tosca.model.definitions.constraints.LessOrEqualConstraint; import org.alien4cloud.tosca.model.definitions.constraints.LessThanConstraint; import org.alien4cloud.tosca.model.definitions.constraints.MaxLengthConstraint; import org.alien4cloud.tosca.model.definitions.constraints.MinLengthConstraint; import org.alien4cloud.tosca.model.definitions.constraints.PatternConstraint; import org.alien4cloud.tosca.model.definitions.constraints.ValidValuesConstraint; import alien4cloud.tosca.normative.ToscaType; import com.google.common.collect.Lists; @Ignore public class ToscaPropertyDefaultValueConstraintsValidatorTest { private Validator validator = Validation.buildDefaultValidatorFactory().getValidator();; private PropertyDefinition createDefinitions(String propertyType, PropertyConstraint constraint, String defaultValue) { PropertyDefinition propertyDefinition = new PropertyDefinition(); propertyDefinition.setType(propertyType); propertyDefinition.setDefault(new ScalarPropertyValue(defaultValue)); propertyDefinition.setConstraints(Lists.newArrayList(constraint)); return propertyDefinition; } private PropertyDefinition createEqualDefinition(String propertyType, String constraintValue, String defaultValue) { EqualConstraint constraint = new EqualConstraint(); constraint.setEqual(constraintValue); return createDefinitions(propertyType, constraint, defaultValue); } private PropertyDefinition createGreaterOrEqualDefinition(String propertyType, Comparable<?> constraintValue, String defaultValue) { GreaterOrEqualConstraint constraint = new GreaterOrEqualConstraint(); constraint.setGreaterOrEqual(String.valueOf(constraintValue)); return createDefinitions(propertyType, constraint, defaultValue); } private PropertyDefinition createGreaterThanDefinition(String propertyType, Comparable<?> constraintValue, String defaultValue) { GreaterThanConstraint constraint = new GreaterThanConstraint(); constraint.setGreaterThan(String.valueOf(constraintValue)); return createDefinitions(propertyType, constraint, defaultValue); } private PropertyDefinition createInRangeDefinition(String propertyType, Comparable minConstraintValue, Comparable maxConstraintValue, String defaultValue) { InRangeConstraint constraint = new InRangeConstraint(); constraint.setInRange(Lists.newArrayList(String.valueOf(minConstraintValue), String.valueOf(maxConstraintValue))); return createDefinitions(propertyType, constraint, defaultValue); } private PropertyDefinition createLenghtDefinition(String propertyType, int constraintValue, String defaultValue) { LengthConstraint constraint = new LengthConstraint(); constraint.setLength(constraintValue); return createDefinitions(propertyType, constraint, defaultValue); } private PropertyDefinition createLessOrEqualDefinition(String propertyType, Comparable<?> constraintValue, String defaultValue) { LessOrEqualConstraint constraint = new LessOrEqualConstraint(); constraint.setLessOrEqual(String.valueOf(constraintValue)); return createDefinitions(propertyType, constraint, defaultValue); } private PropertyDefinition createLessDefinition(String propertyType, Comparable<?> constraintValue, String defaultValue) { LessThanConstraint constraint = new LessThanConstraint(); constraint.setLessThan(String.valueOf(constraintValue)); return createDefinitions(propertyType, constraint, defaultValue); } private PropertyDefinition createMaxLenghtDefinition(String propertyType, int constraintValue, String defaultValue) { MaxLengthConstraint constraint = new MaxLengthConstraint(); constraint.setMaxLength(constraintValue); return createDefinitions(propertyType, constraint, defaultValue); } private PropertyDefinition createMinLenghtDefinition(String propertyType, int constraintValue, String defaultValue) { MinLengthConstraint constraint = new MinLengthConstraint(); constraint.setMinLength(constraintValue); return createDefinitions(propertyType, constraint, defaultValue); } private PropertyDefinition createPatternDefinition(String propertyType, String constraintValue, String defaultValue) { PatternConstraint constraint = new PatternConstraint(); constraint.setPattern(constraintValue); return createDefinitions(propertyType, constraint, defaultValue); } private PropertyDefinition createValidValuesDefinition(String propertyType, List<String> constraintValue, String defaultValue) { ValidValuesConstraint constraint = new ValidValuesConstraint(); constraint.setValidValues(constraintValue); return createDefinitions(propertyType, constraint, defaultValue); } // Equals tests @Test public void validStringEqualsShouldNotCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate( createEqualDefinition(ToscaType.STRING.toString(), "constrainted value", "constrainted value"), ToscaSequence.class); Assert.assertEquals(0, violations.size()); } @Test public void invalidStringEqualsShouldCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate( createEqualDefinition(ToscaType.STRING.toString(), "constrainted value", "not matching value"), ToscaSequence.class); Assert.assertEquals(1, violations.size()); } @Test public void validIntegerEqualsShouldNotCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createEqualDefinition(ToscaType.INTEGER.toString(), "10", "10"), ToscaSequence.class); Assert.assertEquals(0, violations.size()); } @Test public void invalidIntegerEqualsShouldCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createEqualDefinition(ToscaType.INTEGER.toString(), "10", "40"), ToscaSequence.class); Assert.assertEquals(1, violations.size()); } @Test public void validFloatEqualsShouldNotCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createEqualDefinition(ToscaType.FLOAT.toString(), "10.56", "10.56"), ToscaSequence.class); Assert.assertEquals(0, violations.size()); } @Test public void invalidFloatEqualsShouldCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createEqualDefinition(ToscaType.FLOAT.toString(), "10.56", "40.56"), ToscaSequence.class); Assert.assertEquals(1, violations.size()); } @Test public void validBooleanEqualsShouldNotCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createEqualDefinition(ToscaType.BOOLEAN.toString(), "true", "true"), ToscaSequence.class); Assert.assertEquals(0, violations.size()); } @Test public void invalidBooleanEqualsShouldCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createEqualDefinition(ToscaType.BOOLEAN.toString(), "true", "false"), ToscaSequence.class); Assert.assertEquals(1, violations.size()); } // Greater Or Equal @Test public void validIntegerGreaterOrEqualShouldNotCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterOrEqualDefinition(ToscaType.INTEGER.toString(), 10l, "10"), ToscaSequence.class); Assert.assertEquals(0, violations.size()); violations = validator.validate(createGreaterOrEqualDefinition(ToscaType.INTEGER.toString(), 10l, "20"), ToscaSequence.class); Assert.assertEquals(0, violations.size()); } @Test public void invalidIntegerGreaterOrEqualShouldCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterOrEqualDefinition(ToscaType.INTEGER.toString(), 10l, "5"), ToscaSequence.class); Assert.assertEquals(1, violations.size()); } @Test public void validFloatGreaterOrEqualShouldNotCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate( createGreaterOrEqualDefinition(ToscaType.FLOAT.toString(), 10.56d, "10.56"), ToscaSequence.class); Assert.assertEquals(0, violations.size()); violations = validator.validate(createGreaterOrEqualDefinition(ToscaType.FLOAT.toString(), 10.56d, "20.56"), ToscaSequence.class); Assert.assertEquals(0, violations.size()); } @Test public void invalidFloatGreaterOrEqualShouldCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate( createGreaterOrEqualDefinition(ToscaType.FLOAT.toString(), 10.56d, "5.56"), ToscaSequence.class); Assert.assertEquals(1, violations.size()); } // Greater Than @Test public void validIntegerGreaterThanShouldNotCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterThanDefinition(ToscaType.INTEGER.toString(), 10l, "20"), ToscaSequence.class); Assert.assertEquals(0, violations.size()); } @Test public void invalidIntegerGreaterThanShouldCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterThanDefinition(ToscaType.INTEGER.toString(), 10l, "5"), ToscaSequence.class); Assert.assertEquals(1, violations.size()); violations = validator.validate(createGreaterThanDefinition(ToscaType.INTEGER.toString(), 10l, "10"), ToscaSequence.class); Assert.assertEquals(1, violations.size()); } @Test public void validFloatGreaterThanShouldNotCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterThanDefinition(ToscaType.FLOAT.toString(), 10.56d, "20.56"), ToscaSequence.class); Assert.assertEquals(0, violations.size()); } @Test public void invalidFloatGreaterThanShouldCreateViolations() { Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterThanDefinition(ToscaType.FLOAT.toString(), 10.56d, "5.56"), ToscaSequence.class); Assert.assertEquals(1, violations.size()); violations = validator.validate(createGreaterThanDefinition(ToscaType.FLOAT.toString(), 10.56d, "10.56"), ToscaSequence.class); Assert.assertEquals(1, violations.size()); } }