package org.openstack.atlas.adapter.itest;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openstack.atlas.adapter.helpers.ResourceTranslator;
import org.openstack.atlas.service.domain.entities.LoadBalancer;
import org.openstack.atlas.service.domain.entities.LoadBalancerJoinVip6;
import org.openstack.atlas.service.domain.entities.Node;
import org.openstack.atlas.service.domain.entities.VirtualIpv6;
import org.rackspace.stingray.client.StingrayRestClient;
import org.rackspace.stingray.client.exception.StingrayRestClientObjectNotFoundException;
import org.rackspace.stingray.client.pool.Pool;
import org.rackspace.stingray.client.traffic.ip.TrafficIp;
import org.rackspace.stingray.client.virtualserver.VirtualServer;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import static org.openstack.atlas.service.domain.entities.LoadBalancerAlgorithm.ROUND_ROBIN;
import static org.openstack.atlas.service.domain.entities.LoadBalancerProtocol.HTTP;
import static org.openstack.atlas.service.domain.entities.NodeCondition.DISABLED;
import static org.openstack.atlas.service.domain.entities.NodeCondition.ENABLED;
public class Ipv6ITest extends STMTestBase {
protected static VirtualIpv6 vip1;
@BeforeClass
public static void setupClass() throws InterruptedException {
Thread.sleep(SLEEP_TIME_BETWEEN_TESTS);
setupIvars();
}
@AfterClass
public static void tearDownClass() {
stmClient.destroy();
}
public static void removeIpv6LoadBalancer() throws Exception {
try {
stmAdapter.deleteLoadBalancer(config, lb);
} catch (Exception e) {
e.printStackTrace();
Assert.fail();
}
StingrayRestClient client = new StingrayRestClient();
client.getVirtualServer(loadBalancerName());
}
@Test
public void testCreateIpv6LoadBalancer() throws Exception {
createSimpleIpv6LoadBalancer();
}
@Test(expected = StingrayRestClientObjectNotFoundException.class)
public void testRemoveIpv6LoadBalancer() throws Exception {
removeIpv6LoadBalancer();
}
protected static void setupIvars() {
Set<LoadBalancerJoinVip6> ipv6VipSet = new HashSet<LoadBalancerJoinVip6>();
vip1 = new VirtualIpv6();
vip1.setId(TEST_IPV6_VIP_ID);
vip1.setAccountId(TEST_ACCOUNT_ID);
vip1.setCluster(cluster);
vip1.setVipOctets(1);
LoadBalancerJoinVip6 loadBalancerJoinVip = new LoadBalancerJoinVip6();
loadBalancerJoinVip.setVirtualIp(vip1);
ipv6VipSet.add(loadBalancerJoinVip);
Set<Node> nodeList = new HashSet<Node>();
node1 = new Node();
node2 = new Node();
node1.setIpAddress("127.0.0.1");
node2.setIpAddress("127.0.0.2");
node1.setPort(80);
node2.setPort(80);
node1.setCondition(ENABLED);
node2.setCondition(DISABLED);
nodeList.add(node1);
nodeList.add(node2);
LoadBalancer lb = new LoadBalancer();
lb.setId(TEST_LOADBALANCER_ID);
lb.setAccountId(TEST_ACCOUNT_ID);
lb.setPort(80);
lb.setAlgorithm(ROUND_ROBIN);
lb.setName("ipv6_integration_test_lb");
lb.setProtocol(HTTP);
lb.setNodes(nodeList);
lb.setLoadBalancerJoinVip6Set(ipv6VipSet);
Ipv6ITest.lb = lb;
}
protected static void createSimpleIpv6LoadBalancer() {
StingrayRestClient tclient;
ResourceTranslator translator = new ResourceTranslator();
try {
stmAdapter.createLoadBalancer(config, lb);
tclient = new StingrayRestClient();
VirtualServer vs;
Pool pool;
vs = tclient.getVirtualServer(loadBalancerName());
Assert.assertNotNull(vs);
Assert.assertEquals(true, vs.getProperties().getBasic().getEnabled());
Assert.assertEquals(lb.getPort(), vs.getProperties().getBasic().getPort());
Assert.assertEquals(poolName(), vs.getProperties().getBasic().getPool());
Assert.assertEquals("Default", vs.getProperties().getConnection_errors().getError_file());
Assert.assertTrue(vs.getProperties().getBasic().getAdd_x_forwarded_for());
Assert.assertTrue(vs.getProperties().getBasic().getAdd_x_forwarded_proto());
Assert.assertEquals(false, vs.getProperties().getBasic().getListen_on_any());
Assert.assertEquals(false, vs.getProperties().getTcp().getProxy_close());
Assert.assertEquals(vs.getProperties().getBasic().getListen_on_traffic_ips(), translator.genGroupNameSet(lb));
Assert.assertEquals("", vs.getProperties().getBasic().getProtection_class());
Assert.assertEquals("", vs.getProperties().getBasic().getBandwidth_class());
pool = tclient.getPool(loadBalancerName());
Assert.assertNotNull(pool);
Assert.assertEquals(0, pool.getProperties().getBasic().getMonitors().size());
Assert.assertEquals(lb.getAlgorithm().name().toLowerCase(), pool.getProperties().getLoad_balancing().getAlgorithm());
TrafficIp vip;
for (String v : vs.getProperties().getBasic().getListen_on_traffic_ips()) {
vip = tclient.getTrafficIp(v);
Assert.assertNotNull(vip);
Assert.assertEquals(1, vip.getProperties().getBasic().getIpaddresses().size());
Assert.assertEquals(true, vip.getProperties().getBasic().getEnabled());
Assert.assertEquals(new HashSet(Arrays.asList(lb.getLoadBalancerJoinVip6Set().iterator().
next().getVirtualIp().getDerivedIpString())), vip.getProperties().getBasic().getIpaddresses());
Set<String> machines = new HashSet<String>();
machines.add(config.getTrafficManagerName());
machines.addAll(config.getFailoverTrafficManagerNames());
Assert.assertEquals(machines, vip.getProperties().getBasic().getMachines());
Assert.assertEquals(new HashSet(config.getFailoverTrafficManagerNames()), vip.getProperties().getBasic().getSlaves());
}
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
}