package org.openstack.atlas.adapter.itest;
import com.zxtm.service.client.*;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openstack.atlas.adapter.helpers.IpHelper;
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.openstack.atlas.util.ip.IPv6;
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;
/*
* IMPORTANT! PLEASE READ!
* Order matters when running this test so please be careful.
*/
public class Ipv6IntegrationTest extends ZeusTestBase {
protected static VirtualIpv6 vip1;
@BeforeClass
public static void setupClass() throws InterruptedException {
Thread.sleep(SLEEP_TIME_BETWEEN_TESTS);
setupIvars();
}
protected static void setupIvars() {
Set<LoadBalancerJoinVip6> ipv6VipList = 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);
ipv6VipList.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(ipv6VipList);
Ipv6IntegrationTest.lb = lb;
}
@Test
public void createAndRemoveIpv6LoadBalancer() {
removeIpv6LoadBalancer();
createSimpleIpv6LoadBalancer();
removeIpv6LoadBalancer();
}
protected static void createSimpleIpv6LoadBalancer() {
try {
zxtmAdapter.createLoadBalancer(config, lb);
final VirtualServerBasicInfo[] virtualServerBasicInfos = getServiceStubs().getVirtualServerBinding().getBasicInfo(new String[]{loadBalancerName()});
Assert.assertEquals(1, virtualServerBasicInfos.length);
Assert.assertEquals(VirtualServerProtocol.http, virtualServerBasicInfos[0].getProtocol());
Assert.assertEquals(lb.getPort().intValue(), virtualServerBasicInfos[0].getPort());
Assert.assertEquals(poolName(), virtualServerBasicInfos[0].getDefault_pool());
String trafficIpGroupName = trafficIpGroupName(lb.getLoadBalancerJoinVip6Set().iterator().next().getVirtualIp());
final String[][] trafficManagers = getServiceStubs().getTrafficIpGroupBinding().getTrafficManager(new String[]{trafficIpGroupName});
Assert.assertEquals(1, trafficManagers.length);
Assert.assertEquals(2, trafficManagers[0].length);
final String[][] vips = getServiceStubs().getTrafficIpGroupBinding().getIPAddresses(new String[]{trafficIpGroupName});
Assert.assertEquals(1, vips.length);
Assert.assertEquals(1, vips[0].length);
Assert.assertEquals(new IPv6(vip1.getDerivedIpString()).expand(), new IPv6(vips[0][0]).expand());
final String[][] enabledNodes = getServiceStubs().getPoolBinding().getNodes(new String[]{poolName()});
Assert.assertEquals(1, enabledNodes.length);
Assert.assertEquals(1, enabledNodes[0].length);
Assert.assertEquals(IpHelper.createZeusIpString(node1.getIpAddress(), node1.getPort()), enabledNodes[0][0]);
final String[][] disabledNodes = getServiceStubs().getPoolBinding().getDisabledNodes(new String[]{poolName()});
Assert.assertEquals(1, disabledNodes.length);
Assert.assertEquals(1, disabledNodes[0].length);
Assert.assertEquals(IpHelper.createZeusIpString(node2.getIpAddress(), node2.getPort()), disabledNodes[0][0]);
final String[][] drainingNodes = getServiceStubs().getPoolBinding().getDrainingNodes(new String[]{poolName()});
Assert.assertEquals(1, drainingNodes.length);
Assert.assertEquals(0, drainingNodes[0].length);
final PoolWeightingsDefinition[][] enabledNodeWeights = getServiceStubs().getPoolBinding().getNodesWeightings(new String[]{poolName()}, enabledNodes);
Assert.assertEquals(1, enabledNodeWeights.length);
Assert.assertEquals(1, enabledNodeWeights[0].length);
Assert.assertEquals(1, enabledNodeWeights[0][0].getWeighting());
final PoolWeightingsDefinition[][] disabledNodeWeights = getServiceStubs().getPoolBinding().getNodesWeightings(new String[]{poolName()}, disabledNodes);
Assert.assertEquals(1, disabledNodeWeights.length);
Assert.assertEquals(1, disabledNodeWeights[0].length);
Assert.assertEquals(1, disabledNodeWeights[0][0].getWeighting());
final PoolWeightingsDefinition[][] drainingNodeWeights = getServiceStubs().getPoolBinding().getNodesWeightings(new String[]{poolName()}, drainingNodes);
Assert.assertEquals(1, drainingNodeWeights.length);
Assert.assertEquals(0, drainingNodeWeights[0].length);
final PoolLoadBalancingAlgorithm[] algorithms = getServiceStubs().getPoolBinding().getLoadBalancingAlgorithm(new String[]{poolName()});
Assert.assertEquals(1, algorithms.length);
Assert.assertEquals(PoolLoadBalancingAlgorithm.roundrobin.toString(), algorithms[0].getValue());
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
protected static void removeIpv6LoadBalancer() {
try {
zxtmAdapter.deleteLoadBalancer(config, lb);
} catch (Exception e) {
if (e instanceof ObjectDoesNotExist) {
} else {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
try {
getServiceStubs().getVirtualServerBinding().getBasicInfo(new String[]{loadBalancerName()});
Assert.fail("Virtual Server should have been deleted!");
} catch (Exception e) {
if (e instanceof ObjectDoesNotExist) {
} else {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
try {
getServiceStubs().getPoolBinding().getNodes(new String[]{poolName()});
Assert.fail("Node Pool should have been deleted!");
} catch (Exception e) {
if (e instanceof ObjectDoesNotExist) {
} else {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
try {
String trafficIpGroupName = trafficIpGroupName(lb.getLoadBalancerJoinVip6Set().iterator().next().getVirtualIp());
getServiceStubs().getTrafficIpGroupBinding().getIPAddresses(new String[]{trafficIpGroupName});
Assert.fail("Traffic Ip Group should have been deleted!");
} catch (Exception e) {
if (e instanceof ObjectDoesNotExist) {
} else {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
}
}