package org.ovirt.engine.core.common.validation;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import org.ovirt.engine.core.common.validation.annotation.Ipv4OrIpv6;
@RunWith(MockitoJUnitRunner.class)
public class Ipv4OrIpv6ConstraintTest {
@Test
public void testIpv4IsValid() {
doTest("1.2.3.4", true);
}
@Test
public void testNullIsValid() {
doTest(null, true);
}
@Test
public void testEmptyStringIsValid() {
doTest("", true);
}
@Test
public void testOtherTextThanIpv4IsInvalid() {
doTest("nonsense", false);
}
@Test
public void testIpv6IsValid() {
doTest("0123:1234:7:8:12CD:0ABC:ABcd:cdef", true);
}
@Test
public void testHexCompressedIsValid() {
doTest("1234::cdef", true);
}
private void doTest(String input, boolean expectedResult) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<TestObject>> validationResult = validator.validate(new TestObject(input));
boolean valid = validationResult.isEmpty();
assertThat(valid, is(expectedResult));
}
public static class TestObject {
@Ipv4OrIpv6
private final String address;
public TestObject(String address) {
this.address = address;
}
public String getAddress() {
return address;
}
}
}