package org.openstack.atlas.api.mgmt.validation.validators; import org.openstack.atlas.docs.loadbalancers.api.management.v1.RateLimit; import org.openstack.atlas.docs.loadbalancers.api.management.v1.Ticket; import org.openstack.atlas.api.mgmt.validation.validators.RateLimitValidator; import org.openstack.atlas.api.validation.results.ValidatorResult; import org.junit.Before; import org.junit.Test; import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import java.util.Calendar; import static org.openstack.atlas.api.validation.context.HttpRequestType.POST; 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 RateLimitValidatorTest { public static class WhenValidatingPostRequest { private RateLimitValidator validator; private RateLimit rateLimit; private Ticket ticket; @Before public void standUp() { validator = new RateLimitValidator(); rateLimit = new RateLimit(); ticket = new Ticket(); ticket.setTicketId("1234"); ticket.setComment("My first comment!"); rateLimit.setTicket(ticket); rateLimit.setExpirationTime(Calendar.getInstance()); rateLimit.setMaxRequestsPerSecond(150); } @Test public void shouldAcceptValidRateLimitObject() { ValidatorResult result = validator.validate(rateLimit, POST); assertTrue(result.passedValidation()); } @Test public void shouldRejectWhenMissingTicket() { rateLimit.setTicket(null); ValidatorResult result = validator.validate(rateLimit, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectWhenTicketIsEmpty() { rateLimit.getTicket().setTicketId(""); rateLimit.getTicket().setComment(""); ValidatorResult result = validator.validate(rateLimit, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectWhenMissingExpirationTime() { rateLimit.setExpirationTime(null); ValidatorResult result = validator.validate(rateLimit, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectWhenMissingMaxRequestsPerSecond() { rateLimit.setMaxRequestsPerSecond(null); ValidatorResult result = validator.validate(rateLimit, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectWhenMaxRequestPerSecondIsLessThanZero() { rateLimit.setMaxRequestsPerSecond(-1); ValidatorResult result = validator.validate(rateLimit, POST); assertFalse(result.passedValidation()); } } public static class WhenValidatingPutRequest { private RateLimitValidator validator; private RateLimit rateLimit; @Before public void standUp() { validator = new RateLimitValidator(); rateLimit = new RateLimit(); rateLimit.setExpirationTime(Calendar.getInstance()); rateLimit.setMaxRequestsPerSecond(150); } @Test public void shouldAcceptValidRateLimitObject() { ValidatorResult result = validator.validate(rateLimit, PUT); assertTrue(result.passedValidation()); } @Test public void shouldRejectWhenTicketIsNotNull() { Ticket ticket = new Ticket(); ticket.setTicketId("1234"); ticket.setComment("My first comment!"); rateLimit.setTicket(ticket); ValidatorResult result = validator.validate(rateLimit, PUT); assertFalse(result.passedValidation()); } @Test public void shouldRejectWhenMissingAllAttributes() { ValidatorResult result = validator.validate(new RateLimit(), PUT); assertFalse(result.passedValidation()); } @Test public void shouldRejectWhenMaxRequestPerSecondIsLessThanZero() { rateLimit.setMaxRequestsPerSecond(-1); ValidatorResult result = validator.validate(rateLimit, PUT); assertFalse(result.passedValidation()); } @Test public void shouldAcceptWhenMaxRequestPerSecondIsZero() { rateLimit.setMaxRequestsPerSecond(0); ValidatorResult result = validator.validate(rateLimit, PUT); assertTrue(result.passedValidation()); } } }