package org.openstack.atlas.adapter.itest;
import com.zxtm.service.client.ObjectDoesNotExist;
import com.zxtm.service.client.VirtualServerBasicInfo;
import com.zxtm.service.client.VirtualServerLocationDefaultRewriteMode;
import com.zxtm.service.client.VirtualServerRule;
import org.apache.axis.types.UnsignedInt;
import org.junit.*;
import org.openstack.atlas.adapter.exceptions.InsufficientRequestException;
import org.openstack.atlas.adapter.exceptions.ZxtmRollBackException;
import org.openstack.atlas.adapter.helpers.ZxtmNameBuilder;
import org.openstack.atlas.adapter.zxtm.ZxtmAdapterImpl;
import org.openstack.atlas.service.domain.entities.*;
import org.openstack.atlas.service.domain.pojos.ZeusSslTermination;
import org.openstack.atlas.util.ca.zeus.ZeusCrtFile;
import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Set;
import static org.openstack.atlas.service.domain.entities.AccessListType.ALLOW;
import static org.openstack.atlas.service.domain.entities.AccessListType.DENY;
public class SslTerminationIntegrationTest extends ZeusTestBase {
//TODO: robustoize it...
@Before
public void setupClass() throws InterruptedException {
Thread.sleep(SLEEP_TIME_BETWEEN_TESTS);
setupIvars();
setupSimpleLoadBalancer();
}
@After
public void tearDownClass() {
removeSimpleLoadBalancer();
}
@Test
public void testSSlTerminationOperations() {
setSslTermination();
updateSslTermination();
deleteSslTermination();
}
@Test
public void testSSlTerminationOperationsWhenUpdatingLBAttributes() throws ZxtmRollBackException, InsufficientRequestException, RemoteException {
setSslTermination();
updateLoadBalancerAttributes();
}
@Test
public void testWhenAddingAccessListWith() throws ZxtmRollBackException, InsufficientRequestException, RemoteException {
verifyAccessListWithOutSsl();
verifyDeleteAccessList();
setSslTermination();
verifyAccessListWithSsl();
}
@Test
public void testErrorPageWhenCreatingSslTermination() throws ZxtmRollBackException, InsufficientRequestException, RemoteException {
verifyDeleteErrorPage();
verifyErrorPage();
}
@Test
public void testConnectionThrottleWhenCreatingSslTermination() throws ZxtmRollBackException, InsufficientRequestException, RemoteException {
verifyConnectionThrottle();
}
@Test
public void shouldPassIfCertificateIsRemovedWithSecureVSStillThere() throws ZxtmRollBackException, InsufficientRequestException, RemoteException {
setSslTermination();
updateSslTermination();
deleteCertificate();
}
@Test
public void verifyHostHeaderRewriteIsNever() throws ZxtmRollBackException, InsufficientRequestException, RemoteException {
verifyHostHeaderRewrite();
}
private void verifyHostHeaderRewrite() {
String sVs = null;
try {
sVs = ZxtmNameBuilder.genSslVSName(lb.getId(), lb.getAccountId());
} catch (InsufficientRequestException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
try {
SslTermination sslTermination = new SslTermination();
sslTermination.setSecureTrafficOnly(false);
sslTermination.setEnabled(true);
sslTermination.setSecurePort(443);
sslTermination.setCertificate(testCert);
sslTermination.setPrivatekey(testKey);
ZeusCrtFile zeusCrtFile = new ZeusCrtFile();
zeusCrtFile.setPublic_cert(testCert);
zeusCrtFile.setPrivate_key(testKey);
ZeusSslTermination zeusSslTermination = new ZeusSslTermination();
zeusSslTermination.setCertIntermediateCert(testCert);
zeusSslTermination.setSslTermination(sslTermination);
lb.setSslTermination(zeusSslTermination.getSslTermination());
zxtmAdapter.updateSslTermination(config, lb, zeusSslTermination);
//Check to see if VS was created
String[] virtualServers = getServiceStubs().getVirtualServerBinding().getVirtualServerNames();
boolean doesExist = false;
for (String vsName : virtualServers) {
if (vsName.equals(sVs)) {
doesExist = true;
break;
}
}
Assert.assertTrue(doesExist);
String[] certificate = getServiceStubs().getVirtualServerBinding().getSSLCertificate(new String[]{sVs});
Assert.assertEquals(sVs, certificate[0]);
final VirtualServerBasicInfo[] serverBasicInfos = getServiceStubs().getVirtualServerBinding().getBasicInfo(new String[]{sVs});
Assert.assertEquals(sslTermination.getSecurePort(), serverBasicInfos[0].getPort());
Assert.assertEquals(true, lb.getProtocol().toString().equalsIgnoreCase(serverBasicInfos[0].getProtocol().toString()));
Assert.assertEquals(ZxtmNameBuilder.genVSName(lb), serverBasicInfos[0].getDefault_pool());
boolean[] vsEnabled = getServiceStubs().getVirtualServerBinding().getEnabled(new String[]{ZxtmNameBuilder.genVSName(lb)});
Assert.assertEquals(true, vsEnabled[0]);
boolean[] vsNonSecureEnabled = getServiceStubs().getVirtualServerBinding().getSSLDecrypt(new String[]{sVs});
Assert.assertEquals(sslTermination.isEnabled(), vsNonSecureEnabled[0]);
String[] vsSecureInfo = getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getRawCertificate(new String[]{sVs});
Assert.assertEquals(sslTermination.getCertificate(), vsSecureInfo[0]);
VirtualServerLocationDefaultRewriteMode[] vsRewrite = getServiceStubs().getVirtualServerBinding().getLocationDefaultRewriteMode(new String[]{sVs});
Assert.assertEquals(VirtualServerLocationDefaultRewriteMode.never, vsRewrite[0]);
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
removeSimpleLoadBalancer();
}
}
private void updateSslTermination() {
String sVs = null;
try {
sVs = ZxtmNameBuilder.genSslVSName(lb.getId(), lb.getAccountId());
} catch (InsufficientRequestException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
try {
SslTermination sslTermination = new SslTermination();
sslTermination.setSecureTrafficOnly(true);
sslTermination.setEnabled(false);
sslTermination.setSecurePort(500);
sslTermination.setCertificate(testCert);
sslTermination.setPrivatekey(testKey);
ZeusCrtFile zeusCertFile = new ZeusCrtFile();
zeusCertFile.setPublic_cert(testCert);
zeusCertFile.setPrivate_key(testKey);
ZeusSslTermination zeusSslTermination = new ZeusSslTermination();
zeusSslTermination.setCertIntermediateCert(testCert);
zeusSslTermination.setSslTermination(sslTermination);
lb.setSslTermination(zeusSslTermination.getSslTermination());
zxtmAdapter.updateSslTermination(config, lb, zeusSslTermination);
//Check to see if VS is still here
String[] virtualServers = getServiceStubs().getVirtualServerBinding().getVirtualServerNames();
boolean doesExist = false;
for (String vsName : virtualServers) {
if (vsName.equals(sVs)) {
doesExist = true;
break;
}
}
Assert.assertTrue(doesExist);
String[] certificate = getServiceStubs().getVirtualServerBinding().getSSLCertificate(new String[]{sVs});
Assert.assertEquals(sVs, certificate[0]);
final VirtualServerBasicInfo[] serverBasicInfos = getServiceStubs().getVirtualServerBinding().getBasicInfo(new String[]{sVs});
Assert.assertEquals(sslTermination.getSecurePort(), serverBasicInfos[0].getPort());
Assert.assertEquals(true, lb.getProtocol().toString().equalsIgnoreCase(serverBasicInfos[0].getProtocol().toString()));
Assert.assertEquals(ZxtmNameBuilder.genVSName(lb), serverBasicInfos[0].getDefault_pool());
boolean[] vsEnabled = getServiceStubs().getVirtualServerBinding().getEnabled(new String[]{ZxtmNameBuilder.genVSName(lb)});
Assert.assertEquals(false, vsEnabled[0]);
boolean[] vsNonSecureEnabled = getServiceStubs().getVirtualServerBinding().getSSLDecrypt(new String[]{sVs});
Assert.assertEquals(sslTermination.isEnabled(), vsNonSecureEnabled[0]);
String[] vsSecureInfo = getServiceStubs().getZxtmCatalogSSLCertificatesBinding().getRawCertificate(new String[]{sVs});
Assert.assertEquals(sslTermination.getCertificate(), vsSecureInfo[0]);
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
removeSimpleLoadBalancer();
}
}
private void deleteSslTermination() {
String sVs = null;
try {
sVs = ZxtmNameBuilder.genSslVSName(lb.getId(), lb.getAccountId());
} catch (InsufficientRequestException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
try {
zxtmAdapter.removeSslTermination(config, lb);
//Check to see if VS is gone
String[] virtualServers = getServiceStubs().getVirtualServerBinding().getVirtualServerNames();
boolean doesExist = false;
for (String vsName : virtualServers) {
if (vsName.equals(sVs)) {
doesExist = true;
break;
}
}
Assert.assertFalse(doesExist);
//Check to see if original VS is still here
String[] virtualServers2 = getServiceStubs().getVirtualServerBinding().getVirtualServerNames();
boolean doesExist1 = false;
for (String vsName : virtualServers2) {
if (vsName.equals(ZxtmNameBuilder.genVSName(lb))) {
doesExist1 = true;
break;
}
}
Assert.assertTrue(doesExist1);
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
removeSimpleLoadBalancer();
}
}
private void updateLoadBalancerAttributes() throws ZxtmRollBackException, InsufficientRequestException, RemoteException {
//port
try {
zxtmAdapter.updatePort(config, lb.getId(), lb.getAccountId(), 8080);
final VirtualServerBasicInfo[] virtualServerBasicInfos = getServiceStubs().getVirtualServerBinding().getBasicInfo(new String[]{loadBalancerName()});
Assert.assertEquals(1, virtualServerBasicInfos.length);
Assert.assertEquals(8080, virtualServerBasicInfos[0].getPort());
//Ports are seperate for vs's
final VirtualServerBasicInfo[] virtualServerBasicInfos2 = getServiceStubs().getVirtualServerBinding().getBasicInfo(new String[]{secureLoadBalancerName()});
Assert.assertEquals(1, virtualServerBasicInfos2.length);
Assert.assertEquals(443, virtualServerBasicInfos2[0].getPort());
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
removeSimpleLoadBalancer();
}
//logging
try {
lb.setConnectionLogging(Boolean.TRUE);
zxtmAdapter.updateConnectionLogging(config, lb);
Assert.assertEquals(true, getServiceStubs().getVirtualServerBinding().getLogEnabled(new String[]{secureLoadBalancerName()})[0]);
Assert.assertEquals(true, getServiceStubs().getVirtualServerBinding().getLogEnabled(new String[]{loadBalancerName()})[0]);
lb.setConnectionLogging(Boolean.FALSE);
zxtmAdapter.updateConnectionLogging(config, lb);
Assert.assertEquals(false, getServiceStubs().getVirtualServerBinding().getLogEnabled(new String[]{secureLoadBalancerName()})[0]);
Assert.assertEquals(false, getServiceStubs().getVirtualServerBinding().getLogEnabled(new String[]{loadBalancerName()})[0]);
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
private void verifyErrorPage() throws ZxtmRollBackException, InsufficientRequestException, RemoteException {
//setCustom Error file for lb with ssl termination
try {
String errorContent = "<html><body>ErrorFileContents</body></html>";
zxtmAdapter.setErrorFile(config, lb, errorContent);
Assert.assertEquals(loadBalancerName() + "_error.html", getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{loadBalancerName()})[0]);
//no ssl yet
try {
Assert.assertEquals("", getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{secureLoadBalancerName()})[0]);
} catch (ObjectDoesNotExist odne) {
Assert.assertTrue("ssl not present", odne.getErrmsg().contains(secureLoadBalancerName()));
}
UserPages userPages = new UserPages();
userPages.setErrorpage(errorContent);
lb.setUserPages(userPages);
setSslTermination();
Assert.assertEquals(loadBalancerName() + "_error.html", getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{loadBalancerName()})[0]);
Assert.assertEquals(secureLoadBalancerName() + "_error.html", getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{secureLoadBalancerName()})[0]);
Assert.assertEquals(errorContent, new String(getServiceStubs().getZxtmConfExtraBinding().downloadFile(errorFileName())));
//remove error page
zxtmAdapter.removeAndSetDefaultErrorFile(config, lb);
Assert.assertEquals("Default", getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{loadBalancerName()})[0]);
Assert.assertEquals("Default", getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{secureLoadBalancerName()})[0]);
//set error file with ssl already there
zxtmAdapter.setErrorFile(config, lb, errorContent);
Assert.assertEquals(loadBalancerName() + "_error.html", getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{loadBalancerName()})[0]);
Assert.assertEquals(secureLoadBalancerName() + "_error.html", getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{secureLoadBalancerName()})[0]);
Assert.assertEquals(errorContent, new String(getServiceStubs().getZxtmConfExtraBinding().downloadFile(errorFileName())));
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
removeSimpleLoadBalancer();
}
}
private void verifyDeleteErrorPage() throws ZxtmRollBackException, InsufficientRequestException, RemoteException {
//setCustom Error file for lb with ssl termination
try {
String errorContent = "<html><body>ErrorFileContents</body></html>";
zxtmAdapter.deleteErrorFile(config, lb);
Assert.assertEquals("Default", getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{loadBalancerName()})[0]);
//no ssl yet
try {
Assert.assertEquals("Default", getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{secureLoadBalancerName()})[0]);
} catch (ObjectDoesNotExist odne) {
Assert.assertTrue("ssl not present", odne.getErrmsg().contains(secureLoadBalancerName()));
}
//remove error page
zxtmAdapter.removeAndSetDefaultErrorFile(config, lb);
Assert.assertEquals("Default", getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{loadBalancerName()})[0]);
try {
Assert.assertEquals("Default", getServiceStubs().getVirtualServerBinding().getErrorFile(new String[]{secureLoadBalancerName()})[0]);
} catch (ObjectDoesNotExist odne) {
Assert.assertTrue("ssl not present", odne.getErrmsg().contains(secureLoadBalancerName()));
}
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
private void verifyConnectionThrottle() throws ZxtmRollBackException, InsufficientRequestException, RemoteException {
String[] vsName = new String[]{lb.getAccountId() + "_" + lb.getId()};
String[] vsSslName = new String[]{lb.getAccountId() + "_" + lb.getId() + "_S"};
try {
ConnectionLimit throttle = new ConnectionLimit();
throttle.setMaxConnections(20);
throttle.setMaxConnectionRate(10);
throttle.setMinConnections(40);
throttle.setRateInterval(44);
lb.setConnectionLimit(throttle);
zxtmAdapter.updateConnectionThrottle(config, lb);
Assert.assertEquals(new UnsignedInt(20), getServiceStubs().getProtectionBinding().getMax1Connections(vsName)[0]);
Assert.assertEquals(new UnsignedInt(0), getServiceStubs().getProtectionBinding().getMaxConnectionRate(vsName)[0]);
Assert.assertEquals(new UnsignedInt(0), getServiceStubs().getProtectionBinding().getMinConnections(vsName)[0]);
Assert.assertEquals(new UnsignedInt(1), getServiceStubs().getProtectionBinding().getRateTimer(vsName)[0]);
setSslTermination();
String[] protection = getServiceStubs().getVirtualServerBinding().getProtection(vsName);
String[] protectionSsl = getServiceStubs().getVirtualServerBinding().getProtection(vsSslName);
Assert.assertEquals(vsName[0], protection[0]);
Assert.assertEquals(vsName[0], protectionSsl[0]);
zxtmAdapter.deleteConnectionThrottle(config, lb);
Assert.assertEquals(new UnsignedInt(0), getServiceStubs().getProtectionBinding().getMaxConnectionRate(vsName)[0]);
Assert.assertEquals(new UnsignedInt(0), getServiceStubs().getProtectionBinding().getMax1Connections(vsName)[0]);
Assert.assertEquals(new UnsignedInt(0), getServiceStubs().getProtectionBinding().getMinConnections(vsName)[0]);
Assert.assertEquals(new UnsignedInt(1), getServiceStubs().getProtectionBinding().getRateTimer(vsName)[0]);
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
removeSimpleLoadBalancer();
}
}
private void setRateLimit() {
try {
final Integer maxRequestsPerSecond = 1000;
RateLimit rateLimit = new RateLimit();
rateLimit.setExpirationTime(Calendar.getInstance());
rateLimit.setMaxRequestsPerSecond(maxRequestsPerSecond);
zxtmAdapter.setRateLimit(config, lb, rateLimit);
String[] rateNames = getServiceStubs().getZxtmRateCatalogService().getRateNames();
boolean doesExist = false;
for (String rateName : rateNames) {
if (rateName.equals(rateLimitName())) {
doesExist = true;
break;
}
}
Assert.assertTrue(doesExist);
final UnsignedInt[] ratePerSecondList = getServiceStubs().getZxtmRateCatalogService().getMaxRatePerSecond(new String[]{rateLimitName()});
Assert.assertEquals(new UnsignedInt(maxRequestsPerSecond), ratePerSecondList[0]);
final VirtualServerRule[][] virtualServerRules = getServiceStubs().getVirtualServerBinding().getRules(new String[]{loadBalancerName()});
Assert.assertEquals(1, virtualServerRules.length);
Assert.assertEquals(3, virtualServerRules[0].length);
for (VirtualServerRule rule : virtualServerRules[0]) {
if (!(rule.equals(ZxtmAdapterImpl.ruleRateLimitHttp)) && !(rule.equals(ZxtmAdapterImpl.ruleXForwardedProto)) && !(rule.equals(ZxtmAdapterImpl.ruleXForwardedFor))) {
Assert.fail("None of the rules matched, test failed!...");
}
}
// Assert.assertEquals(ZxtmAdapterImpl.ruleRateLimitHttp, virtualServerRules[0][1]);
final VirtualServerRule[][] virtualServerRules1 = getServiceStubs().getVirtualServerBinding().getRules(new String[]{secureLoadBalancerName()});
Assert.assertEquals(1, virtualServerRules1.length);
Assert.assertEquals(3, virtualServerRules1[0].length);
for (VirtualServerRule rule : virtualServerRules[0]) {
if (!rule.equals(ZxtmAdapterImpl.ruleRateLimitHttp) && !rule.equals(ZxtmAdapterImpl.ruleXForwardedProto) && !rule.equals(ZxtmAdapterImpl.ruleXForwardedFor)) {
Assert.fail("None of the rules matched, test failed!...");
}
}
// Assert.assertEquals(ZxtmAdapterImpl.ruleXForwardedProto, virtualServerRules1[0][1]);
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
removeSimpleLoadBalancer();
}
}
private void verifyAccessListWithSsl() {
try {
Set<AccessList> networkItems = new HashSet<AccessList>();
AccessList item1 = new AccessList();
AccessList item2 = new AccessList();
item1.setIpAddress("0.0.0.0/0");
item2.setIpAddress("127.0.0.1");
item1.setType(DENY);
item2.setType(ALLOW);
networkItems.add(item1);
networkItems.add(item2);
lb.setAccessLists(networkItems);
zxtmAdapter.updateAccessList(config, lb);
final String[][] bannedAddresses = getServiceStubs().getProtectionBinding().getBannedAddresses(new String[]{protectionClassName()});
Assert.assertEquals(1, bannedAddresses.length);
Assert.assertEquals(1, bannedAddresses[0].length);
Assert.assertEquals(item1.getIpAddress(), bannedAddresses[0][0]);
final String[][] allowedAddresses = getServiceStubs().getProtectionBinding().getAllowedAddresses(new String[]{protectionClassName()});
Assert.assertEquals(1, allowedAddresses.length);
Assert.assertEquals(1, allowedAddresses[0].length);
Assert.assertEquals(item2.getIpAddress(), allowedAddresses[0][0]);
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
removeSimpleLoadBalancer();
}
}
private void verifyDeleteAccessList() {
try {
Set<AccessList> networkItems = new HashSet<AccessList>();
AccessList item1 = new AccessList();
AccessList item2 = new AccessList();
item1.setIpAddress("0.0.0.0/0");
item2.setIpAddress("127.0.0.1");
item1.setType(DENY);
item2.setType(ALLOW);
networkItems.add(item1);
networkItems.add(item2);
lb.setAccessLists(networkItems);
zxtmAdapter.deleteAccessList(config, lb.getId(), lb.getAccountId());
final String[][] bannedAddresses = getServiceStubs().getProtectionBinding().getBannedAddresses(new String[]{protectionClassName()});
Assert.assertEquals(1, bannedAddresses.length);
Assert.assertEquals(0, bannedAddresses[0].length);
final String[][] allowedAddresses = getServiceStubs().getProtectionBinding().getAllowedAddresses(new String[]{protectionClassName()});
Assert.assertEquals(1, allowedAddresses.length);
Assert.assertEquals(0, allowedAddresses[0].length);
} catch (ObjectDoesNotExist odne) {
Assert.assertTrue("ssl access list does not exist, expected, ignoring error", odne.getErrmsg().contains(lb.getAccountId() + "_" + lb.getId()));
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
private void verifyAccessListWithOutSsl() {
try {
Set<AccessList> networkItems = new HashSet<AccessList>();
AccessList item1 = new AccessList();
AccessList item2 = new AccessList();
item1.setIpAddress("0.0.0.0/0");
item2.setIpAddress("127.0.0.1");
item1.setType(DENY);
item2.setType(ALLOW);
networkItems.add(item1);
networkItems.add(item2);
lb.setAccessLists(networkItems);
zxtmAdapter.updateAccessList(config, lb);
final String[][] bannedAddresses = getServiceStubs().getProtectionBinding().getBannedAddresses(new String[]{protectionClassName()});
Assert.assertEquals(1, bannedAddresses.length);
Assert.assertEquals(1, bannedAddresses[0].length);
Assert.assertEquals(item1.getIpAddress(), bannedAddresses[0][0]);
final String[][] allowedAddresses = getServiceStubs().getProtectionBinding().getAllowedAddresses(new String[]{protectionClassName()});
Assert.assertEquals(1, allowedAddresses.length);
Assert.assertEquals(1, allowedAddresses[0].length);
Assert.assertEquals(item2.getIpAddress(), allowedAddresses[0][0]);
} catch (ObjectDoesNotExist odne) {
Assert.assertTrue("ssl does not exist, expected, ignoring error...", odne.getErrmsg().contains(lb.getAccountId() + "_" + lb.getId()));
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
removeSimpleLoadBalancer();
}
}
private void setRateLimitBeforeSsl() throws RemoteException, InsufficientRequestException {
try {
final Integer maxRequestsPerSecond = 1000;
RateLimit rateLimit = new RateLimit();
rateLimit.setExpirationTime(Calendar.getInstance());
rateLimit.setMaxRequestsPerSecond(maxRequestsPerSecond);
zxtmAdapter.setRateLimit(config, lb, rateLimit);
String[] rateNames = getServiceStubs().getZxtmRateCatalogService().getRateNames();
boolean doesExist = false;
for (String rateName : rateNames) {
if (rateName.equals(rateLimitName())) {
doesExist = true;
break;
}
}
Assert.assertTrue(doesExist);
final UnsignedInt[] ratePerSecondList = getServiceStubs().getZxtmRateCatalogService().getMaxRatePerSecond(new String[]{rateLimitName()});
Assert.assertEquals(new UnsignedInt(maxRequestsPerSecond), ratePerSecondList[0]);
final VirtualServerRule[][] virtualServerRules = getServiceStubs().getVirtualServerBinding().getRules(new String[]{loadBalancerName()});
Assert.assertEquals(1, virtualServerRules.length);
Assert.assertEquals(3, virtualServerRules[0].length);
for (VirtualServerRule rule : virtualServerRules[0]) {
if (!(rule.equals(ZxtmAdapterImpl.ruleRateLimitHttp)) && !(rule.equals(ZxtmAdapterImpl.ruleXForwardedProto)) && !(rule.equals(ZxtmAdapterImpl.ruleXForwardedFor))) {
Assert.fail("None of the rules matched, test failed!...");
}
}
// Assert.assertEquals(ZxtmAdapterImpl.ruleRateLimitHttp, virtualServerRules[0][1]);
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
removeSimpleLoadBalancer();
}
try {
final VirtualServerRule[][] virtualServerRules1 = getServiceStubs().getVirtualServerBinding().getRules(new String[]{secureLoadBalancerName()});
Assert.assertEquals(1, virtualServerRules1.length);
Assert.assertEquals(2, virtualServerRules1[0].length);
Assert.assertEquals(ZxtmAdapterImpl.ruleRateLimitHttp, virtualServerRules1[0][1]);
} catch (ObjectDoesNotExist odne) {
Assert.assertTrue("Ssl not present", odne.getErrmsg().contains(secureLoadBalancerName()));
}
}
private void deleteRateLimit() {
try {
zxtmAdapter.deleteRateLimit(config, lb);
String[] rateNames = getServiceStubs().getZxtmRateCatalogService().getRateNames();
boolean doesExist = false;
for (String rateName : rateNames) {
if (rateName.equals(rateLimitName())) {
doesExist = true;
break;
}
}
Assert.assertFalse(doesExist);
boolean doesExist2 = false;
for (String rateName : rateNames) {
if (rateName.equals(secureLoadBalancerName())) { //the rate limit name...
doesExist2 = true;
break;
}
}
Assert.assertFalse(doesExist2);
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
removeSimpleLoadBalancer();
}
}
private void deleteCertificate() {
try {
getServiceStubs().getVirtualServerBinding().setSSLCertificate(new String[]{secureLoadBalancerName()}, new String[]{""});
getServiceStubs().getZxtmCatalogSSLCertificatesBinding().deleteCertificate(new String[]{secureLoadBalancerName()});
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
removeSimpleLoadBalancer();
}
}
}