package org.openstack.atlas.api.mgmt.validation.validators;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.Host;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.LoadBalancer;
import org.openstack.atlas.docs.loadbalancers.api.v1.*;
import org.openstack.atlas.api.mgmt.validation.contexts.ReassignHostContext;
import org.openstack.atlas.api.mgmt.validation.validators.LoadBalancerValidator;
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.docs.loadbalancers.api.v1.NodeCondition.ENABLED;
import static org.openstack.atlas.docs.loadbalancers.api.v1.PersistenceType.HTTP_COOKIE;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@RunWith(Enclosed.class)
public class LoadBalancerValidatorTest {
public static class whenValidatingReassignHost {
private LoadBalancerValidator lbvalidator;
private LoadBalancer loadBalancer;
private LoadBalancer lb;
private VirtualIp vip;
private Node node;
private Host host;
@Before
public void standUp() {
lbvalidator = new LoadBalancerValidator();
loadBalancer = new LoadBalancer();
loadBalancer.getVirtualIps().clear();
host = new Host();
host.setId(23);
loadBalancer.setId(23);
loadBalancer.setHost(host);
}
@Test
public void shouldAcceptValidLBForReassignHost() {
ValidatorResult result = lbvalidator.validate(loadBalancer, ReassignHostContext.REASSIGN_HOST);
assertTrue(result.passedValidation());
}
@Test
public void shouldRejectInvalidLBAttributesForReassignHost() {
LoadBalancer lb = new LoadBalancer();
lb.setPort(23);
lb.setName("name");
lb.setProtocol("HTTP");
ValidatorResult result = lbvalidator.validate(lb, ReassignHostContext.REASSIGN_HOST);
assertFalse(result.passedValidation());
}
@Test
public void shourRejectInvalidHydratedLbForReassignHost() {
lb = new org.openstack.atlas.docs.loadbalancers.api.management.v1.LoadBalancer();
lb.setName("a-new-loadbalancer");
lb.setProtocol("HTTP");
lb.getVirtualIps().add(vip);
node = new Node();
node.setAddress("10.1.1.1");
node.setPort(80);
node.setCondition(ENABLED);
lb.getNodes().add(node);
lb.setAlgorithm("ROUND_ROBIN");
lb.setProtocol("HTTP");
lb.setPort(80);
ConnectionLogging conLog = new ConnectionLogging();
conLog.setEnabled(true);
lb.setConnectionLogging(conLog);
SessionPersistence persistence = new SessionPersistence();
persistence.setPersistenceType(HTTP_COOKIE);
lb.setSessionPersistence(persistence);
ConnectionThrottle throtttle = new ConnectionThrottle();
throtttle.setMinConnections(10);
throtttle.setMaxConnections(100);
throtttle.setMaxConnectionRate(60);
throtttle.setRateInterval(45);
lb.setConnectionThrottle(throtttle);
HealthMonitor monitor = new HealthMonitor();
monitor.setType(HealthMonitorType.CONNECT);
monitor.setDelay(10);
monitor.setTimeout(60);
monitor.setAttemptsBeforeDeactivation(3);
lb.setHealthMonitor(monitor);
AccessList aList = new AccessList();
NetworkItem nItem = new NetworkItem();
nItem.setAddress("10.10.10.10");
nItem.setType(NetworkItemType.ALLOW);
aList.getNetworkItems().add(nItem);
ValidatorResult result = lbvalidator.validate(lb, ReassignHostContext.REASSIGN_HOST);
assertFalse(result.passedValidation());
}
// TODO: add more test when i get a chance......
}
}