package org.openstack.atlas.api.validation.validators; import org.openstack.atlas.docs.loadbalancers.api.v1.IpVersion; import org.openstack.atlas.docs.loadbalancers.api.v1.VipType; import org.openstack.atlas.docs.loadbalancers.api.v1.VirtualIp; 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.POST; import static org.openstack.atlas.api.validation.context.VirtualIpContext.POST_IPV6; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @RunWith(Enclosed.class) public class VirtualIpValidatorTest { public static class WhenValidatingHttpPostContext { private VirtualIp vip; private VirtualIpValidator validator; @Before public void setup() { validator = new VirtualIpValidator(); vip = new VirtualIp(); } @Test public void shouldRejectIfAllAttributesAreNull() { assertFalse(validator.validate(vip, POST).passedValidation()); } @Test public void shouldRejectVipAddress() { vip.setAddress("10.10.10.10"); assertFalse(validator.validate(vip, POST).passedValidation()); } @Test public void shouldAcceptIdOnly() { vip.setId(1234); assertTrue(validator.validate(vip, POST).passedValidation()); } @Test public void shouldAcceptTypeOnly() { vip.setType(VipType.PUBLIC); assertTrue(validator.validate(vip, POST).passedValidation()); } @Test public void shouldAcceptTypeAndIpVersion() { vip.setType(VipType.PUBLIC); vip.setIpVersion(IpVersion.IPV4); assertTrue(validator.validate(vip, POST).passedValidation()); } @Test public void shouldRejectIdWithTypeAndIpVersion() { vip.setId(1234); vip.setType(VipType.PUBLIC); vip.setIpVersion(IpVersion.IPV4); assertFalse(validator.validate(vip, POST).passedValidation()); } @Test public void shouldRejectIdWithType() { vip.setId(1234); vip.setType(VipType.PUBLIC); assertFalse(validator.validate(vip, POST).passedValidation()); } @Test public void shouldRejectIdWithIpVersion() { vip.setId(1234); vip.setIpVersion(IpVersion.IPV4); assertFalse(validator.validate(vip, POST).passedValidation()); } } public static class WhenValidatingPostIpv6Context { private VirtualIp vip; private VirtualIpValidator validator; @Before public void setup() { validator = new VirtualIpValidator(); vip = new VirtualIp(); } @Test public void shouldRejectIfAllAttributesAreNull() { assertFalse(validator.validate(vip, POST_IPV6).passedValidation()); } @Test public void shouldRejectVipAddress() { vip.setAddress("10.10.10.10"); assertFalse(validator.validate(vip, POST_IPV6).passedValidation()); } @Test public void shouldNotAcceptIdOnly() { vip.setId(1234); assertFalse(validator.validate(vip, POST_IPV6).passedValidation()); } @Test public void shouldRejectTypeOnly() { vip.setType(VipType.PUBLIC); assertFalse(validator.validate(vip, POST_IPV6).passedValidation()); } @Test public void shouldAcceptPublicTypeAndIpv6Version() { vip.setType(VipType.PUBLIC); vip.setIpVersion(IpVersion.IPV6); assertTrue(validator.validate(vip, POST_IPV6).passedValidation()); } @Test public void shouldRejectServicenetTypeAndIpv4Version() { vip.setType(VipType.SERVICENET); vip.setIpVersion(IpVersion.IPV4); assertFalse(validator.validate(vip, POST_IPV6).passedValidation()); } @Test public void shouldRejectPublicTypeAndIpv4Version() { vip.setType(VipType.PUBLIC); vip.setIpVersion(IpVersion.IPV4); assertFalse(validator.validate(vip, POST_IPV6).passedValidation()); } @Test public void shouldRejectServicenetTypeAndIpv6Version() { vip.setType(VipType.SERVICENET); vip.setIpVersion(IpVersion.IPV6); assertFalse(validator.validate(vip, POST_IPV6).passedValidation()); } @Test public void shouldRejectIdWithAllTypesAndAllIpVersions() { vip.setId(1234); for (VipType vipType : VipType.values()) { for (IpVersion ipVersion : IpVersion.values()) { vip.setType(vipType); vip.setIpVersion(ipVersion); assertFalse(validator.validate(vip, POST_IPV6).passedValidation()); } } } @Test public void shouldRejectIdWithAllTypes() { vip.setId(1234); for (VipType vipType : VipType.values()) { vip.setType(vipType); assertFalse(validator.validate(vip, POST_IPV6).passedValidation()); } } } }