package org.openstack.atlas.adapter.itest; import com.zxtm.service.client.PoolLoadBalancingAlgorithm; import com.zxtm.service.client.PoolWeightingsDefinition; import com.zxtm.service.client.VirtualServerBasicInfo; import com.zxtm.service.client.VirtualServerProtocol; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import org.openstack.atlas.adapter.helpers.IpHelper; import org.openstack.atlas.service.domain.entities.LoadBalancer; import org.openstack.atlas.service.domain.entities.LoadBalancerJoinVip; import org.openstack.atlas.service.domain.entities.Node; import org.openstack.atlas.service.domain.entities.VirtualIp; 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.LoadBalancerProtocol.HTTPS; import static org.openstack.atlas.service.domain.entities.NodeCondition.DISABLED; import static org.openstack.atlas.service.domain.entities.NodeCondition.ENABLED; @RunWith(Enclosed.class) public class UpdateProtocolIntegrationTest extends ZeusTestBase { public static class testingProtocolChangeToHTTP { @BeforeClass public static void setupClass() throws InterruptedException { Thread.sleep(SLEEP_TIME_BETWEEN_TESTS); setupIvars(); setupSimpleLoadBalancer(); } @AfterClass public static void tearDownClass() { removeSimpleLoadBalancer(); } @Test public void updateProtocolToHTTP() { try { VirtualServerProtocol[] protocols = getServiceStubs().getVirtualServerBinding().getProtocol(new String[]{loadBalancerName()}); Assert.assertEquals(1, protocols.length); Assert.assertEquals(VirtualServerProtocol.http, protocols[0]); lb.setConnectionLogging(Boolean.TRUE); zxtmAdapter.updateConnectionLogging(config, lb); boolean[] connectionLogging = getServiceStubs().getVirtualServerBinding().getLogEnabled(new String[]{loadBalancerName()}); Assert.assertEquals(1, connectionLogging.length); Assert.assertEquals(true, connectionLogging[0]); lb.setProtocol(HTTPS); zxtmAdapter.updateProtocol(config, lb); connectionLogging = getServiceStubs().getVirtualServerBinding().getLogEnabled(new String[]{loadBalancerName()}); Assert.assertEquals(1, connectionLogging.length); Assert.assertEquals(true, connectionLogging[0]); } catch (Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } } public static class testingProtocolChangeFromHTTP { @BeforeClass public static void setupClass() throws InterruptedException { Thread.sleep(SLEEP_TIME_BETWEEN_TESTS); setupIvarsForHTTPS(); shouldBeValidApiVersion(); createLoadBalancer(); } @AfterClass public static void tearDownClass() { removeSimpleLoadBalancer(); } @Test public void updateProtocolFromHTTP() { try { VirtualServerProtocol[] protocols = getServiceStubs().getVirtualServerBinding().getProtocol(new String[]{loadBalancerName()}); Assert.assertEquals(1, protocols.length); Assert.assertEquals(VirtualServerProtocol.https, protocols[0]); lb.setConnectionLogging(Boolean.TRUE); zxtmAdapter.updateConnectionLogging(config, lb); boolean[] connectionLogging = getServiceStubs().getVirtualServerBinding().getLogEnabled(new String[]{loadBalancerName()}); Assert.assertEquals(1, connectionLogging.length); Assert.assertEquals(true, connectionLogging[0]); lb.setProtocol(HTTP); zxtmAdapter.updateProtocol(config, lb); connectionLogging = getServiceStubs().getVirtualServerBinding().getLogEnabled(new String[]{loadBalancerName()}); Assert.assertEquals(1, connectionLogging.length); Assert.assertEquals(true, connectionLogging[0]); } catch (Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } } private static void createLoadBalancer() { try { zxtmAdapter.createLoadBalancer(config, lb); final VirtualServerBasicInfo[] virtualServerBasicInfos = getServiceStubs().getVirtualServerBinding().getBasicInfo(new String[]{loadBalancerName()}); Assert.assertEquals(1, virtualServerBasicInfos.length); Assert.assertEquals(VirtualServerProtocol.https, virtualServerBasicInfos[0].getProtocol()); Assert.assertEquals(lb.getPort().intValue(), virtualServerBasicInfos[0].getPort()); Assert.assertEquals(poolName(), virtualServerBasicInfos[0].getDefault_pool()); String trafficIpGroupName = trafficIpGroupName(lb.getLoadBalancerJoinVipSet().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(vip1.getIpAddress(), vips[0][0]); 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()); final String[] errorFile = getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{loadBalancerName()}); Assert.assertEquals("Default", errorFile[0]); } catch (Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } protected static void setupIvarsForHTTPS() { Set<LoadBalancerJoinVip> vipList = new HashSet<LoadBalancerJoinVip>(); vip1 = new VirtualIp(); vip1.setId(TEST_VIP_ID); vip1.setIpAddress(findUsableIPv4Vip()); LoadBalancerJoinVip loadBalancerJoinVip = new LoadBalancerJoinVip(); loadBalancerJoinVip.setVirtualIp(vip1); vipList.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("integration_test_lb"); lb.setProtocol(HTTPS); lb.setNodes(nodeList); lb.setLoadBalancerJoinVipSet(vipList); ZeusTestBase.lb = lb; } }