package org.openstack.atlas.api.validation.validators; import org.openstack.atlas.docs.loadbalancers.api.v1.Node; import org.openstack.atlas.docs.loadbalancers.api.v1.NodeCondition; import org.openstack.atlas.docs.loadbalancers.api.v1.NodeStatus; 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 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 NodeValidatorTest { public static class WhenValidatingPost { private Node node; private NodeValidator validator; @Before public void standUp() { validator = new NodeValidator(); node = new Node(); node.setAddress("1.0.5.5"); node.setPort(80); node.setCondition(NodeCondition.ENABLED); node.setWeight(1); } @Test public void shouldAcceptValidNode() { assertTrue(validator.validate(node, POST).passedValidation()); } @Test public void shouldRejectCidrIpAddress() { node.setAddress("10.1.1.1/32"); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectNullIp() { node.setAddress(null); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectInvalidIPv4Address() { Node node1 = new Node(); node1.setAddress("0.0.0.0"); ValidatorResult result = validator.validate(node1, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectInvalidIPv6Address() { //Will now be validated against domain node verification, characters are expected now... node.setAddress("2001:0db8:85a3:0000:0000:8a2e:0370:7334:::"); ValidatorResult result = validator.validate(node, POST); assertTrue(result.passedValidation()); } @Test public void shouldAcceptValidIPv6Address() { node.setAddress("2001:0db8:85a3:0000:0000:8a2e:0370:7334"); ValidatorResult result = validator.validate(node, POST); assertTrue(result.passedValidation()); } @Test public void shouldRejectIpv4CidrAddress() { //Will now be validated against domain node verification, characters are expected now... ValidatorResult result = validator.validate(node, POST); assertTrue(result.passedValidation()); } @Test public void shouldRejectIpv6CidrAddress() { //Will now be validated against domain node verification, characters are expected now... node.setAddress("ffff:ffff:ffff:ffff::/64"); ValidatorResult result = validator.validate(node, POST); assertTrue(result.passedValidation()); } @Test public void shouldRejectInvalidIp() { node.setAddress("0.0.0.0.0"); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldReject127LoopBackIps() { node.setAddress("127.64.0.0"); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectAll255s() { node.setAddress("255.255.255.255"); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectSubnetIp() { node.setAddress("0.0.0.0"); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectNullPort() { node.setPort(null); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectInvalidPort() { node.setPort(0); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectNullCondition() { node.setCondition(null); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectZeroWeight() { node.setWeight(0); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectWeightJustAboveCeiling() { node.setWeight(101); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectNegativeWeight() { node.setWeight(-1); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectWhenIdIsSet() { node.setId(1); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } @Test public void shouldRejectWhenStatusIsSet() { node.setStatus(NodeStatus.OFFLINE); ValidatorResult result = validator.validate(node, POST); assertFalse(result.passedValidation()); } } public static class whenValidatingPut { private Node node; private NodeValidator validator; @Before public void setUp() { validator = new NodeValidator(); node = new Node(); node.setCondition(NodeCondition.ENABLED); node.setWeight(1); } @Test public void shouldAcceptValidNode() { ValidatorResult result = validator.validate(node, PUT); assertTrue(result.passedValidation()); } @Test public void shouldAcceptWhenOnlyConditionIsSet() { node.setWeight(null); ValidatorResult result = validator.validate(node, PUT); assertTrue(result.passedValidation()); } @Test public void shouldAcceptWhenOnlyWeightIsSet() { node.setCondition(null); ValidatorResult result = validator.validate(node, PUT); assertTrue(result.passedValidation()); } @Test public void shouldRejectWhenMissingAttributes() { ValidatorResult result = validator.validate(new Node(), PUT); assertFalse(result.passedValidation()); } @Test public void shouldRejectIpAddress() { node.setAddress("10.10.10.100"); ValidatorResult result = validator.validate(node, PUT); assertFalse(result.passedValidation()); } @Test public void shouldRejectPort() { node.setPort(80); ValidatorResult result = validator.validate(node, PUT); assertFalse(result.passedValidation()); } @Test public void shouldRejectZeroForWeight() { node.setWeight(0); ValidatorResult result = validator.validate(node, PUT); assertFalse(result.passedValidation()); } @Test public void shouldRejectWeightJustAboveCeiling() { node.setWeight(101); ValidatorResult result = validator.validate(node, PUT); assertFalse(result.passedValidation()); } @Test public void shouldRejectNegativeWeight() { node.setWeight(-1); ValidatorResult result = validator.validate(node, PUT); assertFalse(result.passedValidation()); } @Test public void shouldRejectWhenIdIsSet() { node.setId(1); ValidatorResult result = validator.validate(node, PUT); assertFalse(result.passedValidation()); } @Test public void shouldRejectWhenStatusIsSet() { node.setStatus(NodeStatus.OFFLINE); ValidatorResult result = validator.validate(node, PUT); assertFalse(result.passedValidation()); } } }