package org.openstack.atlas.api.validation.validators;
import org.openstack.atlas.docs.loadbalancers.api.v1.ConnectionThrottle;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import static org.openstack.atlas.api.validation.context.HttpRequestType.PUT;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@RunWith(Enclosed.class)
public class ConnectionThrottleValidatorTest {
public static class WhenValidatingPut {
private ConnectionThrottle connectionLimits;
private ConnectionThrottleValidator validator;
@Before
public void setupValidConnectionLimitsForPut() {
validator = new ConnectionThrottleValidator();
connectionLimits = new ConnectionThrottle();
connectionLimits.setMinConnections(10);
connectionLimits.setMaxConnections(100);
connectionLimits.setMaxConnectionRate(50);
connectionLimits.setRateInterval(60);
}
@Test
public void shouldAcceptValidConnectionLimits() {
assertTrue(validator.validate(connectionLimits, PUT).passedValidation());
}
@Test
public void shouldRejectWhenMissingAllAttributes() {
assertFalse(validator.validate(new ConnectionThrottle(), PUT).passedValidation());
}
@Test
public void shouldAcceptWhenOnlyMinConnectionsIsSet() {
connectionLimits.setMaxConnections(null);
connectionLimits.setMaxConnectionRate(null);
connectionLimits.setRateInterval(null);
assertTrue(validator.validate(connectionLimits, PUT).passedValidation());
}
@Test
public void shouldAcceptWhenOnlyMaxConnectionsIsSet() {
connectionLimits.setMinConnections(null);
connectionLimits.setMaxConnectionRate(null);
connectionLimits.setRateInterval(null);
assertTrue(validator.validate(connectionLimits, PUT).passedValidation());
}
@Test
public void shouldAcceptWhenOnlyMaxConnectionRateIsSet() {
connectionLimits.setMinConnections(null);
connectionLimits.setMaxConnections(null);
connectionLimits.setRateInterval(null);
assertTrue(validator.validate(connectionLimits, PUT).passedValidation());
}
@Test
public void shouldAcceptWhenOnlyRateIntervalIsSet() {
connectionLimits.setMinConnections(null);
connectionLimits.setMaxConnections(null);
connectionLimits.setMaxConnectionRate(null);
assertTrue(validator.validate(connectionLimits, PUT).passedValidation());
}
@Test
public void shouldRejectInvalidMinConnectionsRangeMin() {
connectionLimits.setMinConnections(-1);
assertFalse(validator.validate(connectionLimits, PUT).passedValidation());
}
@Test
public void shouldRejectInvalidMinConnectionsRangeMax() {
connectionLimits.setMinConnections(1001);
assertFalse(validator.validate(connectionLimits, PUT).passedValidation());
}
@Test
public void shouldRejectInvalidMaxConnectionsRangeMin() {
connectionLimits.setMaxConnections(-1);
assertFalse(validator.validate(connectionLimits, PUT).passedValidation());
}
@Test
public void shouldRejectInvalidMaxConnectionsRangeMax() {
connectionLimits.setMaxConnections(100001);
assertFalse(validator.validate(connectionLimits, PUT).passedValidation());
}
@Test
public void shouldRejectInvalidMaxConnectionRateRangeMin() {
connectionLimits.setMaxConnectionRate(-1);
assertFalse(validator.validate(connectionLimits, PUT).passedValidation());
}
@Test
public void shouldRejectInvalidMaxConnectionRateRangeMax() {
connectionLimits.setMaxConnectionRate(100001);
assertFalse(validator.validate(connectionLimits, PUT).passedValidation());
}
@Test
public void shouldRejectInvalidRateIntervalMin() {
connectionLimits.setRateInterval(0);
assertFalse(validator.validate(connectionLimits, PUT).passedValidation());
}
@Test
public void shouldRejectInvalidRateIntervalMax() {
connectionLimits.setRateInterval(3601);
assertFalse(validator.validate(connectionLimits, PUT).passedValidation());
}
}
}