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.Test;
import org.alien4cloud.tosca.model.definitions.PropertyConstraint;
import alien4cloud.tosca.normative.ToscaType;
import org.alien4cloud.tosca.model.definitions.PropertyDefinition;
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 com.google.common.collect.Lists;
public class ToscaPropertyConstraintValidatorTest {
private Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
private PropertyDefinition createDefinitions(String propertyType, PropertyConstraint constraint) {
PropertyDefinition propertyDefinition = new PropertyDefinition();
propertyDefinition.setType(propertyType);
propertyDefinition.setConstraints(Lists.newArrayList(constraint));
return propertyDefinition;
}
private PropertyDefinition createEqualDefinition(String propertyType, String value) {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual(value);
return createDefinitions(propertyType, constraint);
}
private PropertyDefinition createGreaterOrEqualDefinition(String propertyType, Comparable<?> value) {
GreaterOrEqualConstraint constraint = new GreaterOrEqualConstraint();
constraint.setGreaterOrEqual(String.valueOf(value));
return createDefinitions(propertyType, constraint);
}
private PropertyDefinition createGreaterThanDefinition(String propertyType, Comparable<?> value) {
GreaterThanConstraint constraint = new GreaterThanConstraint();
constraint.setGreaterThan(String.valueOf(value));
return createDefinitions(propertyType, constraint);
}
@SuppressWarnings("rawtypes")
private PropertyDefinition createInRangeDefinition(String propertyType, Comparable minValue, Comparable maxValue) {
InRangeConstraint constraint = new InRangeConstraint();
constraint.setInRange(Lists.newArrayList(String.valueOf(minValue), String.valueOf(maxValue)));
return createDefinitions(propertyType, constraint);
}
private PropertyDefinition createLenghtDefinition(String propertyType, int value) {
LengthConstraint constraint = new LengthConstraint();
constraint.setLength(value);
return createDefinitions(propertyType, constraint);
}
private PropertyDefinition createLessOrEqualDefinition(String propertyType, Comparable<?> value) {
LessOrEqualConstraint constraint = new LessOrEqualConstraint();
constraint.setLessOrEqual(String.valueOf(value));
return createDefinitions(propertyType, constraint);
}
private PropertyDefinition createLessDefinition(String propertyType, Comparable<?> value) {
LessThanConstraint constraint = new LessThanConstraint();
constraint.setLessThan(String.valueOf(value));
return createDefinitions(propertyType, constraint);
}
private PropertyDefinition createMaxLenghtDefinition(String propertyType, int value) {
MaxLengthConstraint constraint = new MaxLengthConstraint();
constraint.setMaxLength(value);
return createDefinitions(propertyType, constraint);
}
private PropertyDefinition createMinLenghtDefinition(String propertyType, int value) {
MinLengthConstraint constraint = new MinLengthConstraint();
constraint.setMinLength(value);
return createDefinitions(propertyType, constraint);
}
private PropertyDefinition createPatternDefinition(String propertyType, String value) {
PatternConstraint constraint = new PatternConstraint();
constraint.setPattern(value);
return createDefinitions(propertyType, constraint);
}
private PropertyDefinition createValidValuesDefinition(String propertyType, List<String> value) {
ValidValuesConstraint constraint = new ValidValuesConstraint();
constraint.setValidValues(value);
return createDefinitions(propertyType, constraint);
}
@Test
public void validStringEqualConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createEqualDefinition(ToscaType.STRING.toString(), "value"),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void validIntegerEqualConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createEqualDefinition(ToscaType.INTEGER.toString(), "42"),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidIntegerEqualConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createEqualDefinition(ToscaType.INTEGER.toString(), "not an integer"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validFloatEqualConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createEqualDefinition(ToscaType.FLOAT.toString(), "42.456"),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidFloatEqualConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createEqualDefinition(ToscaType.FLOAT.toString(), "not a float"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void invalidStringGreaterOrEqualConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterOrEqualDefinition(ToscaType.STRING.toString(), "value"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validIntegerGreaterOrEqualConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterOrEqualDefinition(ToscaType.INTEGER.toString(), 42),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidIntegerGreaterOrEqualConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(
createGreaterOrEqualDefinition(ToscaType.INTEGER.toString(), "not an integer"), ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validFloatGreaterOrEqualConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterOrEqualDefinition(ToscaType.FLOAT.toString(), 42.456f),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidFloatGreaterOrEqualConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterOrEqualDefinition(ToscaType.FLOAT.toString(), "not a float"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void invalidStringGreaterThanConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterThanDefinition(ToscaType.STRING.toString(), "value"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validIntegerGreaterThanConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterThanDefinition(ToscaType.INTEGER.toString(), 42),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidIntegerGreaterThanConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(
createGreaterThanDefinition(ToscaType.INTEGER.toString(), "not an integer"), ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validFloatGreaterThanConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterThanDefinition(ToscaType.FLOAT.toString(), 42.456f),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidFloatGreaterThanConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createGreaterThanDefinition(ToscaType.FLOAT.toString(), "not a float"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void invalidStringInRangeConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createInRangeDefinition(ToscaType.STRING.toString(), "one", "two"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validIntegerInRangeConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createInRangeDefinition(ToscaType.INTEGER.toString(), 42, 65),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidIntegerInRangeConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createInRangeDefinition(ToscaType.INTEGER.toString(), 42.456f, 65.343f),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validFloatInRangeConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createInRangeDefinition(ToscaType.FLOAT.toString(), 42.456f, 65.343f),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidFloatInRangeConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(
createInRangeDefinition(ToscaType.FLOAT.toString(), 42.456f, "not a float"), ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validStringLengthConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createLenghtDefinition(ToscaType.STRING.toString(), 2),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidIntegerLengthConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createLenghtDefinition(ToscaType.INTEGER.toString(), 2),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void invalidStringLessOrEqualConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createLessOrEqualDefinition(ToscaType.STRING.toString(), "value"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validIntegerLessOrEqualConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createLessOrEqualDefinition(ToscaType.INTEGER.toString(), 42),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidIntegerLessOrEqualConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(
createLessOrEqualDefinition(ToscaType.INTEGER.toString(), "not an integer"), ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validFloatLessOrEqualConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createLessOrEqualDefinition(ToscaType.FLOAT.toString(), 42.456f),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidFloatLessOrEqualConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createLessOrEqualDefinition(ToscaType.FLOAT.toString(), "not a float"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void invalidStringLessThanConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createLessDefinition(ToscaType.STRING.toString(), "value"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validIntegerLessThanConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createLessDefinition(ToscaType.INTEGER.toString(), 42),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidIntegerLessThanConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createLessDefinition(ToscaType.INTEGER.toString(), "not an integer"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validFloatLessThanConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createLessDefinition(ToscaType.FLOAT.toString(), 42.456f),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidFloatLessThanConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createLessDefinition(ToscaType.FLOAT.toString(), "not a float"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validStringMaxLengthConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createMaxLenghtDefinition(ToscaType.STRING.toString(), 2),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidIntegerMaxLengthConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createMaxLenghtDefinition(ToscaType.INTEGER.toString(), 2),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validStringMinLengthConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createMinLenghtDefinition(ToscaType.STRING.toString(), 2),
ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidIntegerMinLengthConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createMinLenghtDefinition(ToscaType.INTEGER.toString(), 2),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validStringPatternConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(
createPatternDefinition(ToscaType.STRING.toString(), "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]"), ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidIntegerPatternConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(createPatternDefinition(ToscaType.INTEGER.toString(), "2"),
ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validStringValidValuesConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(
createValidValuesDefinition(ToscaType.STRING.toString(), Lists.newArrayList("value", "othervalue")), ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void validIntegerValidValuesConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(
createValidValuesDefinition(ToscaType.INTEGER.toString(), Lists.newArrayList("42", "56")), ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidIntegerValidValuesConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(
createValidValuesDefinition(ToscaType.INTEGER.toString(), Lists.newArrayList("42", "not an integer")), ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
@Test
public void validFloatValidValuesConstraintShouldNotCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(
createValidValuesDefinition(ToscaType.FLOAT.toString(), Lists.newArrayList("42.345", "56.652")), ToscaSequence.class);
Assert.assertEquals(0, violations.size());
}
@Test
public void invalidFloatValidValuesConstraintShouldCreateViolations() {
Set<ConstraintViolation<PropertyDefinition>> violations = validator.validate(
createValidValuesDefinition(ToscaType.FLOAT.toString(), Lists.newArrayList("42.345", "not a float")), ToscaSequence.class);
Assert.assertEquals(2, violations.size());
}
}