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.management.v1.LoadBalancers;
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.mgmt.validation.validators.LoadBalancersValidator;
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 LoadBalancersValidatorTest {
public static class whenValidatinReassignHost {
private LoadBalancerValidator lbvalidator;
private LoadBalancersValidator lbsvalidator;
private LoadBalancer loadBalancer;
private LoadBalancers loadBalancers;
private LoadBalancer lb;
private VirtualIp vip;
private Node node;
private Host host;
@Before
public void standUp() {
lbvalidator = new LoadBalancerValidator();
lbsvalidator = new LoadBalancersValidator();
loadBalancer = new LoadBalancer();
loadBalancers = new LoadBalancers();
loadBalancer.setId(23);
loadBalancers.getLoadBalancers().add(loadBalancer);
}
@Test
public void shouldAcceptValidLBForReassignHost() {
LoadBalancer loadbalancer = new LoadBalancer();
host = new Host();
host.setId(23);
loadbalancer.setId(23);
loadbalancer.setHost(host);
loadBalancers.getLoadBalancers().add(loadbalancer);
ValidatorResult result = lbsvalidator.validate(loadBalancers, ReassignHostContext.REASSIGN_HOST);
assertTrue(result.passedValidation());
}
@Test
public void shouldRejectLBAttributesForReassignHost() {
LoadBalancer lb = new LoadBalancer();
lb.setPort(23);
lb.setName("name");
lb.setProtocol("HTTP");
loadBalancers.getLoadBalancers().add(lb);
ValidatorResult result = lbsvalidator.validate(loadBalancers, ReassignHostContext.REASSIGN_HOST);
assertFalse(result.passedValidation());
}
@Test
public void shouldRejectEmptyLbs() {
LoadBalancers lbs = new LoadBalancers();
ValidatorResult result = lbsvalidator.validate(lbs, 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);
loadBalancers.getLoadBalancers().add(lb);
ValidatorResult result = lbsvalidator.validate(loadBalancers, ReassignHostContext.REASSIGN_HOST);
assertFalse(result.passedValidation());
}
// TODO: write more test
}
}