package io.dropwizard.validation; import com.google.common.collect.ImmutableList; import org.junit.Before; import org.junit.Test; import javax.validation.Valid; import javax.validation.Validator; import java.util.List; import java.util.Locale; import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assume.assumeThat; public class PortRangeValidatorTest { @SuppressWarnings("PublicField") public static class Example { @PortRange public int port = 8080; @PortRange(min = 10000, max = 15000) public int otherPort = 10001; @Valid List<@PortRange Integer> ports = ImmutableList.of(); } private final Validator validator = BaseValidator.newValidator(); private final Example example = new Example(); @Before public void setUp() throws Exception { assumeThat(Locale.getDefault().getLanguage(), is("en")); } @Test public void acceptsNonPrivilegedPorts() throws Exception { example.port = 2048; assertThat(validator.validate(example)) .isEmpty(); } @Test public void acceptsDynamicPorts() throws Exception { example.port = 0; assertThat(validator.validate(example)) .isEmpty(); } @Test public void rejectsNegativePorts() throws Exception { example.port = -1; assertThat(ConstraintViolations.format(validator.validate(example))) .containsOnly("port must be between 1 and 65535"); } @Test public void allowsForCustomMinimumPorts() throws Exception { example.otherPort = 8080; assertThat(ConstraintViolations.format(validator.validate(example))) .containsOnly("otherPort must be between 10000 and 15000"); } @Test public void allowsForCustomMaximumPorts() throws Exception { example.otherPort = 16000; assertThat(ConstraintViolations.format(validator.validate(example))) .containsOnly("otherPort must be between 10000 and 15000"); } @Test public void rejectsInvalidPortsInList() { example.ports = ImmutableList.of(-1); assertThat(ConstraintViolations.format(validator.validate(example))) .containsOnly("ports[0].<collection element> must be between 1 and 65535"); } }