package org.openstack.atlas.adapter.itest;
import com.zxtm.service.client.Certificate;
import com.zxtm.service.client.CatalogMonitorType;
import com.zxtm.service.client.VirtualServerBasicInfo;
import com.zxtm.service.client.VirtualServerProtocol;
import com.zxtm.service.client.VirtualServerRule;
import com.zxtm.service.client.VirtualServerRuleRunFlag;
import com.zxtm.service.client.VirtualServerSSLSite;
import org.apache.axis.types.UnsignedInt;
import java.rmi.RemoteException;
import java.util.Arrays;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openstack.atlas.adapter.exceptions.InsufficientRequestException;
import org.openstack.atlas.adapter.exceptions.RollBackException;
import org.openstack.atlas.adapter.zxtm.ZxtmAdapterImpl;
import org.openstack.atlas.adapter.zxtm.ZxtmConversionUtils;
import org.openstack.atlas.service.domain.entities.*;
import org.openstack.atlas.service.domain.pojos.ZeusSslTermination;
import org.junit.experimental.runners.Enclosed;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@RunWith(Enclosed.class)
public class SyncIntegrationTest extends ZeusTestBase {
public static class SyncBasicLoadBalancer {
String[] lbName;
String epContent = "test";
String epName;
final UnsignedInt MAX_CONN = new UnsignedInt(23);
@BeforeClass
public static void setupClass() throws InterruptedException {
Thread.sleep(SLEEP_TIME_BETWEEN_TESTS);
setupIvars();
setupSimpleLoadBalancer();
}
@Before
public void setUp() throws Exception {
lbName = new String[]{loadBalancerName()};
epName = String.format("%s_error.html", loadBalancerName());
setupIvars();
}
@AfterClass
public static void tearDownClass() {
removeSimpleLoadBalancer();
}
@Test
public void testSyncPort() {
try {
getServiceStubs().getVirtualServerBinding().setPort(lbName, new UnsignedInt[]{new UnsignedInt(12321)});
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertEquals(getServiceStubs().getVirtualServerBinding().getPort(lbName)[0], new UnsignedInt(lb.getPort()));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncProtocol() {
try {
lb.setProtocol(LoadBalancerProtocol.HTTPS);
lb.setPort(443);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertEquals(getServiceStubs().getVirtualServerBinding().getProtocol(lbName)[0], VirtualServerProtocol.https);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncRuleForHTTP() {
try {
lb.setProtocol(LoadBalancerProtocol.HTTPS);
lb.setPort(443);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertEquals(getServiceStubs().getVirtualServerBinding().getProtocol(lbName)[0], VirtualServerProtocol.https);
lb.setProtocol(LoadBalancerProtocol.HTTP);
lb.setPort(80);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertEquals(getServiceStubs().getVirtualServerBinding().getProtocol(lbName)[0], VirtualServerProtocol.http);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getRules(lbName).length > 0);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncNodes() {
try {
int check = 0;
String[][] nodes = new String [1][1];
nodes[0][0] = "10.0.0.1:80";
getServiceStubs().getPoolBinding().setNodes(lbName, nodes);
Assert.assertTrue(getServiceStubs().getPoolBinding().getNodes(lbName)[0].length != lb.getNodes().size());
zxtmAdapter.updateLoadBalancer(config, lb);
check += getServiceStubs().getPoolBinding().getNodes(lbName)[0].length;
check += getServiceStubs().getPoolBinding().getDisabledNodes(lbName)[0].length;
Assert.assertEquals(check, lb.getNodes().size());
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncConnectionLimit() {
try {
ConnectionLimit limit = new ConnectionLimit();
limit.setMaxConnections(MAX_CONN.intValue());
lb.setConnectionLimit(limit);
zxtmAdapter.updateConnectionThrottle(config, lb);
Assert.assertTrue(getServiceStubs().getProtectionBinding().getMax1Connections(lbName)[0].equals(MAX_CONN));
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbName)).contains(lbName[0]));
getServiceStubs().getProtectionBinding().setMax1Connections(lbName, new UnsignedInt[]{new UnsignedInt(0)});
Assert.assertTrue(!getServiceStubs().getProtectionBinding().getMax1Connections(lbName)[0].equals(MAX_CONN));
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getProtectionBinding().getMax1Connections(lbName)[0].equals(MAX_CONN));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncAccessList() {
try {
String[][] addresses = new String[1][1];
addresses[0] = new String[]{"10.0.0.1"};
// This check is necessary to see if the protection class exists (due to previous tests)
if (!Arrays.asList(getServiceStubs().getProtectionBinding().getProtectionNames()).contains(lbName[0])) {
getServiceStubs().getProtectionBinding().addProtection(lbName);
}
getServiceStubs().getProtectionBinding().setAllowedAddresses(lbName, addresses);
getServiceStubs().getVirtualServerBinding().setProtection(lbName, lbName);
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbName)).contains(lbName[0]));
Assert.assertTrue(getServiceStubs().getProtectionBinding().getAllowedAddresses(lbName)[0].length > 0);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getProtectionBinding().getAllowedAddresses(lbName)[0].length == 0);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncContentCaching() {
try {
VirtualServerRule[][] rules = new VirtualServerRule[][]{{
new VirtualServerRule(ZxtmAdapterImpl.CONTENT_CACHING, true, VirtualServerRuleRunFlag.run_every)}};
getServiceStubs().getVirtualServerBinding().addRules(lbName, rules);
getServiceStubs().getVirtualServerBinding().setWebcacheEnabled(lbName, new boolean[]{true});
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getWebcacheEnabled(lbName)[0]);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getWebcacheEnabled(lbName)[0]);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncHalfClosed() {
try {
getServiceStubs().getVirtualServerBinding().setProxyClose(lbName, new boolean[]{true});
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getProxyClose(lbName)[0]);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getProxyClose(lbName)[0]);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncAlgorithm() {
try {
LoadBalancerAlgorithm algorithm = LoadBalancerAlgorithm.ROUND_ROBIN;
if (lb.getAlgorithm().equals(algorithm)) {
algorithm = LoadBalancerAlgorithm.RANDOM;
}
zxtmAdapter.setLoadBalancingAlgorithm(config, lb.getId(), lb.getAccountId(), algorithm);
Assert.assertEquals(getServiceStubs().getPoolBinding().getLoadBalancingAlgorithm(lbName)[0], ZxtmConversionUtils.mapAlgorithm(algorithm));
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertEquals(getServiceStubs().getPoolBinding().getLoadBalancingAlgorithm(lbName)[0], ZxtmConversionUtils.mapAlgorithm(lb.getAlgorithm()));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncHealthMonitor() {
try {
String[][] monitors = new String[1][1];
monitors[0] = lbName;
getServiceStubs().getMonitorBinding().addMonitors(lbName);
getServiceStubs().getMonitorBinding().setDelay(lbName, new UnsignedInt[]{new UnsignedInt(5)});
getServiceStubs().getMonitorBinding().setTimeout(lbName, new UnsignedInt[]{new UnsignedInt(10)});
getServiceStubs().getMonitorBinding().setFailures(lbName, new UnsignedInt[]{new UnsignedInt(3)});
getServiceStubs().getMonitorBinding().setType(lbName, new CatalogMonitorType[]{CatalogMonitorType.connect});
getServiceStubs().getPoolBinding().addMonitors(lbName, monitors);
Assert.assertTrue(Arrays.asList(getServiceStubs().getPoolBinding().getMonitors(lbName)[0]).contains(lbName[0]));
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!Arrays.asList(getServiceStubs().getMonitorBinding().getCustomMonitorNames()).contains(lbName[0]));
Assert.assertTrue(getServiceStubs().getPoolBinding().getMonitors(lbName)[0].length == 0);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncConnectionLogging() {
try {
lb.setConnectionLogging(true);
zxtmAdapter.updateConnectionLogging(config, lb);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getLogEnabled(lbName)[0]);
lb.setConnectionLogging(false);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getLogEnabled(lbName)[0]);
} catch (Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncErrorPage() {
try {
UserPages pages = new UserPages();
pages.setErrorpage(epContent);
pages.setLoadbalancer(lb);
lb.setUserPages(pages);
zxtmAdapter.setErrorFile(config, lb, epContent);
Assert.assertTrue(Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames()).contains(epName));
getServiceStubs().getVirtualServerBinding().setErrorFile(lbName, new String[]{"Default"});
getServiceStubs().getZxtmConfExtraBinding().deleteFile(new String[]{epName});
Assert.assertTrue(!Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames()).contains(epName));
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getErrorFile(lbName)[0].equals(epName));
Assert.assertTrue(Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames()).contains(epName));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
}
public static class SyncWithSSLMixMode {
ZeusSslTermination zterm;
String[] lbName;
String[] lbsName;
String epContent = "test";
String epName;
String epsName;
final UnsignedInt MAX_CONN = new UnsignedInt(23);
@BeforeClass
public static void setupClass() throws InterruptedException {
Thread.sleep(SLEEP_TIME_BETWEEN_TESTS);
setupIvars();
setupSimpleLoadBalancer();
}
@Before
public void setUp() throws Exception {
lbName = new String[]{loadBalancerName()};
lbsName = new String[]{secureLoadBalancerName()};
epName = String.format("%s_error.html", loadBalancerName());
epsName = String.format("%s_error.html", secureLoadBalancerName());
setupIvars();
}
@AfterClass
public static void tearDownClass() {
removeSimpleLoadBalancer();
}
@Test
public void testSyncConnectionLimitWithSSLEnabled() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
ConnectionLimit limit = new ConnectionLimit();
limit.setMaxConnections(MAX_CONN.intValue());
lb.setConnectionLimit(limit);
zxtmAdapter.updateConnectionThrottle(config, lb);
Assert.assertTrue(getServiceStubs().getProtectionBinding().getMax1Connections(lbName)[0].equals(MAX_CONN));
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbName)).contains(lbName[0]));
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbsName)).contains(lbName[0]));
getServiceStubs().getProtectionBinding().setMax1Connections(lbName, new UnsignedInt[]{new UnsignedInt(0)});
Assert.assertTrue(!getServiceStubs().getProtectionBinding().getMax1Connections(lbName)[0].equals(MAX_CONN));
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getProtectionBinding().getMax1Connections(lbName)[0].equals(MAX_CONN));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncContentCachingWithSSLEnabled() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
VirtualServerRule[][] rules = new VirtualServerRule[][]{{
new VirtualServerRule(ZxtmAdapterImpl.CONTENT_CACHING, true, VirtualServerRuleRunFlag.run_every)}};
getServiceStubs().getVirtualServerBinding().addRules(lbName, rules);
getServiceStubs().getVirtualServerBinding().addRules(lbsName, rules);
getServiceStubs().getVirtualServerBinding().setWebcacheEnabled(lbName, new boolean[]{true});
getServiceStubs().getVirtualServerBinding().setWebcacheEnabled(lbsName, new boolean[]{true});
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getWebcacheEnabled(lbName)[0]);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getWebcacheEnabled(lbsName)[0]);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getWebcacheEnabled(lbName)[0]);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getWebcacheEnabled(lbsName)[0]);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncHalfClosedWithSSLEnabled() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
getServiceStubs().getVirtualServerBinding().setProxyClose(lbName, new boolean[]{true});
getServiceStubs().getVirtualServerBinding().setProxyClose(lbsName, new boolean[]{true});
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getProxyClose(lbName)[0]);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getProxyClose(lbsName)[0]);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getProxyClose(lbName)[0]);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getProxyClose(lbsName)[0]);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncConnectionLoggingWithSSLEnabled() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
lb.setConnectionLogging(true);
zxtmAdapter.updateConnectionLogging(config, lb);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getLogEnabled(lbName)[0]);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getLogEnabled(lbsName)[0]);
lb.setConnectionLogging(false);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getLogEnabled(lbName)[0]);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getLogEnabled(lbsName)[0]);
} catch (Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncAccessListWithSSLEnabled() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
String[][] addresses = new String[1][1];
addresses[0] = new String[]{"10.0.0.1"};
// This check is necessary to see if the protection class exists (due to previous tests)
if (!Arrays.asList(getServiceStubs().getProtectionBinding().getProtectionNames()).contains(lbName[0])) {
getServiceStubs().getProtectionBinding().addProtection(lbName);
}
getServiceStubs().getProtectionBinding().setAllowedAddresses(lbName, addresses);
getServiceStubs().getVirtualServerBinding().setProtection(lbName, lbName);
getServiceStubs().getVirtualServerBinding().setProtection(lbsName, lbName);
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbName)).contains(lbName[0]));
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbsName)).contains(lbName[0]));
Assert.assertTrue(getServiceStubs().getProtectionBinding().getAllowedAddresses(lbName)[0].length > 0);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getProtectionBinding().getAllowedAddresses(lbName)[0].length == 0);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncErrorPageWithSSLEnabled() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
UserPages pages = new UserPages();
pages.setErrorpage(epContent);
pages.setLoadbalancer(lb);
lb.setUserPages(pages);
zxtmAdapter.setErrorFile(config, lb, epContent);
List names = Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames());
Assert.assertTrue(names.contains(epName));
Assert.assertTrue(names.contains(epsName));
getServiceStubs().getVirtualServerBinding().setErrorFile(lbName, new String[]{"Default"});
getServiceStubs().getVirtualServerBinding().setErrorFile(lbsName, new String[]{"Default"});
getServiceStubs().getZxtmConfExtraBinding().deleteFile(new String[]{epName});
getServiceStubs().getZxtmConfExtraBinding().deleteFile(new String[]{epsName});
Assert.assertTrue(!Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames()).contains(epName));
Assert.assertTrue(!Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames()).contains(epsName));
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getErrorFile(lbName)[0].equals(epName));
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getErrorFile(lbsName)[0].equals(epsName));
names = Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames());
Assert.assertTrue(names.contains(epName));
Assert.assertTrue(names.contains(epsName));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncSslTerminationDeleteCert() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
getServiceStubs().getVirtualServerBinding().setSSLDecrypt(lbsName, new boolean[]{false});
getServiceStubs().getZxtmCatalogSSLCertificatesBinding().deleteCertificate(lbsName);
certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(!certFileNames.contains(secureLoadBalancerName()));
zxtmAdapter.updateLoadBalancer(config, lb);
certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getSSLDecrypt(lbsName)[0]);
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncSslTermModifySecureVirtualServer() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
getServiceStubs().getVirtualServerBinding().setSSLDecrypt(lbsName, new boolean[]{false});
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getSSLDecrypt(lbsName)[0]);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getSSLDecrypt(lbsName)[0]);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
private void addSslTermination() {
zterm = new ZeusSslTermination();
zterm.setCertIntermediateCert(testCert);
SslTermination termination = new SslTermination();
termination.setCertificate(testCert);
termination.setPrivatekey(testKey);
termination.setEnabled(true);
termination.setSecurePort(443);
termination.setSecureTrafficOnly(false);
termination.setLoadbalancer(lb);
zterm.setSslTermination(termination);
lb.setSslTermination(termination);
}
}
public static class SyncWithSSLOnly {
ZeusSslTermination zterm;
String[] lbName;
String[] lbsName;
String epContent = "test";
String epName;
String epsName;
final UnsignedInt MAX_CONN = new UnsignedInt(23);
@BeforeClass
public static void setupClass() throws InterruptedException {
Thread.sleep(SLEEP_TIME_BETWEEN_TESTS);
setupIvars();
setupSimpleLoadBalancer();
}
@Before
public void setUp() throws Exception {
lbName = new String[]{loadBalancerName()};
lbsName = new String[]{secureLoadBalancerName()};
epName = String.format("%s_error.html", lbName[0]);
epsName = String.format("%s_error.html", lbsName[0]);
setupIvars();
}
@AfterClass
public static void tearDownClass() {
removeSimpleLoadBalancer();
}
@Test
public void testSyncConnectionLimitWithSSLEnabled() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
ConnectionLimit limit = new ConnectionLimit();
limit.setMaxConnections(MAX_CONN.intValue());
lb.setConnectionLimit(limit);
zxtmAdapter.updateConnectionThrottle(config, lb);
Assert.assertTrue(getServiceStubs().getProtectionBinding().getMax1Connections(lbName)[0].equals(MAX_CONN));
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbName)).contains(lbName[0]));
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbsName)).contains(lbName[0]));
getServiceStubs().getProtectionBinding().setMax1Connections(lbName, new UnsignedInt[]{new UnsignedInt(0)});
Assert.assertTrue(!getServiceStubs().getProtectionBinding().getMax1Connections(lbName)[0].equals(MAX_CONN));
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getProtectionBinding().getMax1Connections(lbName)[0].equals(MAX_CONN));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncContentCachingWithSSLEnabled() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
VirtualServerRule[][] rules = new VirtualServerRule[][]{{
new VirtualServerRule(ZxtmAdapterImpl.CONTENT_CACHING, true, VirtualServerRuleRunFlag.run_every)}};
getServiceStubs().getVirtualServerBinding().addRules(lbName, rules);
getServiceStubs().getVirtualServerBinding().addRules(lbsName, rules);
getServiceStubs().getVirtualServerBinding().setWebcacheEnabled(lbName, new boolean[]{true});
getServiceStubs().getVirtualServerBinding().setWebcacheEnabled(lbsName, new boolean[]{true});
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getWebcacheEnabled(lbName)[0]);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getWebcacheEnabled(lbsName)[0]);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getWebcacheEnabled(lbName)[0]);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getWebcacheEnabled(lbsName)[0]);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncHalfClosedWithSSLEnabled() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
getServiceStubs().getVirtualServerBinding().setProxyClose(lbName, new boolean[]{true});
getServiceStubs().getVirtualServerBinding().setProxyClose(lbsName, new boolean[]{true});
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getProxyClose(lbName)[0]);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getProxyClose(lbsName)[0]);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getProxyClose(lbName)[0]);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getProxyClose(lbsName)[0]);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncConnectionLoggingWithSSLEnabled() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
lb.setConnectionLogging(true);
zxtmAdapter.updateConnectionLogging(config, lb);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getLogEnabled(lbName)[0]);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getLogEnabled(lbsName)[0]);
lb.setConnectionLogging(false);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getLogEnabled(lbName)[0]);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getLogEnabled(lbsName)[0]);
} catch (Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncAccessListWithSSLEnabled() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
String[][] addresses = new String[1][1];
addresses[0] = new String[]{"10.0.0.1"};
// This check is necessary to see if the protection class exists (due to previous tests)
if (!Arrays.asList(getServiceStubs().getProtectionBinding().getProtectionNames()).contains(lbName[0])) {
getServiceStubs().getProtectionBinding().addProtection(lbName);
}
getServiceStubs().getProtectionBinding().setAllowedAddresses(lbName, addresses);
getServiceStubs().getVirtualServerBinding().setProtection(lbName, lbName);
getServiceStubs().getVirtualServerBinding().setProtection(lbsName, lbName);
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbName)).contains(lbName[0]));
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbsName)).contains(lbName[0]));
Assert.assertTrue(getServiceStubs().getProtectionBinding().getAllowedAddresses(lbName)[0].length > 0);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getProtectionBinding().getAllowedAddresses(lbName)[0].length == 0);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncErrorPageWithSSLEnabled() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
UserPages pages = new UserPages();
pages.setErrorpage(epContent);
pages.setLoadbalancer(lb);
lb.setUserPages(pages);
zxtmAdapter.setErrorFile(config, lb, epContent);
List names = Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames());
Assert.assertTrue(names.contains(epName));
Assert.assertTrue(names.contains(epsName));
getServiceStubs().getVirtualServerBinding().setErrorFile(lbName, new String[]{"Default"});
getServiceStubs().getVirtualServerBinding().setErrorFile(lbsName, new String[]{"Default"});
getServiceStubs().getZxtmConfExtraBinding().deleteFile(new String[]{epName});
getServiceStubs().getZxtmConfExtraBinding().deleteFile(new String[]{epsName});
Assert.assertTrue(!Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames()).contains(epName));
Assert.assertTrue(!Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames()).contains(epsName));
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getErrorFile(lbName)[0].equals(epName));
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getErrorFile(lbsName)[0].equals(epsName));
names = Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames());
Assert.assertTrue(names.contains(epName));
Assert.assertTrue(names.contains(epsName));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncSslTerminationDeleteCert() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
getServiceStubs().getVirtualServerBinding().setSSLDecrypt(lbsName, new boolean[]{false});
getServiceStubs().getZxtmCatalogSSLCertificatesBinding().deleteCertificate(lbsName);
certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(!certFileNames.contains(secureLoadBalancerName()));
zxtmAdapter.updateLoadBalancer(config, lb);
certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getSSLDecrypt(lbsName)[0]);
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncSslTermModifySecureVirtualServer() {
try {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
List certFileNames = Arrays.asList(getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateNames());
Assert.assertTrue(certFileNames.contains(secureLoadBalancerName()));
getServiceStubs().getVirtualServerBinding().setSSLDecrypt(lbsName, new boolean[]{false});
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getSSLDecrypt(lbsName)[0]);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getSSLDecrypt(lbsName)[0]);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
private void addSslTermination() {
zterm = new ZeusSslTermination();
zterm.setCertIntermediateCert(testCert);
SslTermination termination = new SslTermination();
termination.setCertificate(testCert);
termination.setPrivatekey(testKey);
termination.setEnabled(true);
termination.setSecurePort(443);
termination.setSecureTrafficOnly(true);
termination.setLoadbalancer(lb);
zterm.setSslTermination(termination);
lb.setSslTermination(termination);
}
@Test
public void testSyncCertificateMappings() throws RollBackException, InsufficientRequestException, RemoteException {
addSslTermination();
zxtmAdapter.updateSslTermination(config, lb, zterm);
CertificateMapping certMapping = new CertificateMapping();
certMapping.setId(1234);
certMapping.setPrivateKey(testKey);
certMapping.setCertificate(testCert);
certMapping.setHostName("sync.host-name.com");
Set<CertificateMapping> certMappings = new HashSet<CertificateMapping>();
certMappings.add(certMapping);
lb.setCertificateMappings(certMappings);
zxtmAdapter.updateLoadBalancer(config, lb);
final Certificate[] certificateInfo = getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getCertificateInfo(new String[]{certificateName(certMapping.getId())});
Assert.assertEquals(1, certificateInfo.length);
final VirtualServerSSLSite[][] sslSites = getServiceStubs().getVirtualServerBinding().getSSLSites(new String[]{secureLoadBalancerName()});
Assert.assertEquals(1, sslSites.length);
Assert.assertEquals(1, sslSites[0].length);
Assert.assertEquals(certificateName(certMapping.getId()), sslSites[0][0].getCertificate());
Assert.assertEquals(certMapping.getHostName(), sslSites[0][0].getDest_address());
}
}
public static class SyncWithHTTPSRedirect {
String[] lbName;
String[] lbrName;
String epContent = "test";
String epName;
String eprName;
final UnsignedInt MAX_CONN = new UnsignedInt(23);
@BeforeClass
public static void setupClass() throws InterruptedException {
Thread.sleep(SLEEP_TIME_BETWEEN_TESTS);
setupIvars(LoadBalancerProtocol.HTTPS, 443);
setupSimpleLoadBalancer();
}
@Before
public void setUp() throws Exception {
lbName = new String[]{loadBalancerName()};
lbrName = new String[]{redirectLoadBalancerName()};
epName = String.format("%s_error.html", lbName[0]);
eprName = String.format("%s_error.html", lbrName[0]);
}
@AfterClass
public static void tearDownClass() {
removeSimpleLoadBalancer();
}
@Test
public void testSyncExtraHttpsRedirect() {
try {
getServiceStubs().getVirtualServerBinding().addVirtualServer(lbrName,
new VirtualServerBasicInfo[]{new VirtualServerBasicInfo(443, VirtualServerProtocol.https, lbName[0])});
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!Arrays.asList(getServiceStubs().getVirtualServerBinding().getVirtualServerNames()).contains(lbrName[0]));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncConnectionLimitWithRedirectEnabled() {
try {
addHttpsRedirect();
ConnectionLimit limit = new ConnectionLimit();
limit.setMaxConnections(MAX_CONN.intValue());
lb.setConnectionLimit(limit);
zxtmAdapter.updateConnectionThrottle(config, lb);
Assert.assertTrue(getServiceStubs().getProtectionBinding().getMax1Connections(lbName)[0].equals(MAX_CONN));
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbName)).contains(lbName[0]));
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbrName)).contains(lbName[0]));
getServiceStubs().getProtectionBinding().setMax1Connections(lbName, new UnsignedInt[]{new UnsignedInt(0)});
Assert.assertTrue(!getServiceStubs().getProtectionBinding().getMax1Connections(lbName)[0].equals(MAX_CONN));
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getProtectionBinding().getMax1Connections(lbName)[0].equals(MAX_CONN));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncHalfClosedWithRedirectEnabled() {
try {
addHttpsRedirect();
getServiceStubs().getVirtualServerBinding().setProxyClose(lbName, new boolean[]{true});
getServiceStubs().getVirtualServerBinding().setProxyClose(lbrName, new boolean[]{true});
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getProxyClose(lbName)[0]);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getProxyClose(lbrName)[0]);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getProxyClose(lbName)[0]);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getProxyClose(lbrName)[0]);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncConnectionLoggingWithRedirectEnabled() {
try {
addHttpsRedirect();
lb.setConnectionLogging(true);
zxtmAdapter.updateConnectionLogging(config, lb);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getLogEnabled(lbName)[0]);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getLogEnabled(lbrName)[0]);
lb.setConnectionLogging(false);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getLogEnabled(lbName)[0]);
Assert.assertTrue(!getServiceStubs().getVirtualServerBinding().getLogEnabled(lbrName)[0]);
} catch (Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncAccessListWithRedirectEnabled() {
try {
addHttpsRedirect();
String[][] addresses = new String[1][1];
addresses[0] = new String[]{"10.0.0.1"};
// This check is necessary to see if the protection class exists (due to previous tests)
if (!Arrays.asList(getServiceStubs().getProtectionBinding().getProtectionNames()).contains(lbName[0])) {
getServiceStubs().getProtectionBinding().addProtection(lbName);
}
getServiceStubs().getProtectionBinding().setAllowedAddresses(lbName, addresses);
getServiceStubs().getVirtualServerBinding().setProtection(lbName, lbName);
getServiceStubs().getVirtualServerBinding().setProtection(lbrName, lbName);
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbName)).contains(lbName[0]));
Assert.assertTrue(Arrays.asList(getServiceStubs().getVirtualServerBinding().getProtection(lbrName)).contains(lbName[0]));
Assert.assertTrue(getServiceStubs().getProtectionBinding().getAllowedAddresses(lbName)[0].length > 0);
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getProtectionBinding().getAllowedAddresses(lbName)[0].length == 0);
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testSyncErrorPageWithRedirectEnabled() {
try {
addHttpsRedirect();
UserPages pages = new UserPages();
pages.setErrorpage(epContent);
pages.setLoadbalancer(lb);
lb.setUserPages(pages);
zxtmAdapter.setErrorFile(config, lb, epContent);
List names = Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames());
Assert.assertTrue(names.contains(epName));
Assert.assertTrue(names.contains(eprName));
getServiceStubs().getVirtualServerBinding().setErrorFile(lbName, new String[]{"Default"});
getServiceStubs().getVirtualServerBinding().setErrorFile(lbrName, new String[]{"Default"});
getServiceStubs().getZxtmConfExtraBinding().deleteFile(new String[]{epName});
getServiceStubs().getZxtmConfExtraBinding().deleteFile(new String[]{eprName});
Assert.assertTrue(!Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames()).contains(epName));
Assert.assertTrue(!Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames()).contains(eprName));
zxtmAdapter.updateLoadBalancer(config, lb);
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getErrorFile(lbName)[0].equals(epName));
Assert.assertTrue(getServiceStubs().getVirtualServerBinding().getErrorFile(lbrName)[0].equals(eprName));
names = Arrays.asList(getServiceStubs().getZxtmConfExtraBinding().getFileNames());
Assert.assertTrue(names.contains(epName));
Assert.assertTrue(names.contains(eprName));
} catch(Exception e) {
Assert.fail(e.getMessage());
}
}
private void addHttpsRedirect() throws InsufficientRequestException, RemoteException, RollBackException {
lb.setHttpsRedirect(true);
zxtmAdapter.updateLoadBalancer(config, lb);
}
}
}