package org.zstack.test.lb;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.zstack.core.cloudbus.CloudBus;
import org.zstack.core.componentloader.ComponentLoader;
import org.zstack.core.db.DatabaseFacade;
import org.zstack.header.identity.SessionInventory;
import org.zstack.header.vm.VmNicInventory;
import org.zstack.network.service.lb.*;
import org.zstack.network.service.virtualrouter.lb.VirtualRouterLoadBalancerBackend.LbTO;
import org.zstack.network.service.virtualrouter.lb.VirtualRouterLoadBalancerBackend.RefreshLbCmd;
import org.zstack.simulator.appliancevm.ApplianceVmSimulatorConfig;
import org.zstack.simulator.virtualrouter.VirtualRouterSimulatorConfig;
import org.zstack.test.Api;
import org.zstack.test.ApiSenderException;
import org.zstack.test.DBUtil;
import org.zstack.test.WebBeanConstructor;
import org.zstack.test.deployer.Deployer;
import org.zstack.utils.CollectionUtils;
import org.zstack.utils.function.Function;
import org.zstack.utils.gson.JSONObjectUtil;
import static org.zstack.utils.CollectionDSL.*;
/**
* @author frank
* <p>
* 1. create a lb
* 2. add a listener with a nic
* <p>
* confirm the system tags are created as default
* <p>
* 3. remove the listener
* <p>
* confirm the system tags are removed
* <p>
* 4. add the listener again with system tags specified with a nic
* <p>
* confirm the system tags are created as specified
*/
public class TestVirtualRouterLb13 {
Deployer deployer;
Api api;
ComponentLoader loader;
CloudBus bus;
DatabaseFacade dbf;
SessionInventory session;
VirtualRouterSimulatorConfig vconfig;
ApplianceVmSimulatorConfig aconfig;
@Before
public void setUp() throws Exception {
DBUtil.reDeployDB();
WebBeanConstructor con = new WebBeanConstructor();
deployer = new Deployer("deployerXml/lb/TestVirtualRouterLb.xml", con);
deployer.addSpringConfig("VirtualRouter.xml");
deployer.addSpringConfig("VirtualRouterSimulator.xml");
deployer.addSpringConfig("KVMRelated.xml");
deployer.addSpringConfig("vip.xml");
deployer.addSpringConfig("lb.xml");
deployer.build();
api = deployer.getApi();
loader = deployer.getComponentLoader();
vconfig = loader.getComponent(VirtualRouterSimulatorConfig.class);
aconfig = loader.getComponent(ApplianceVmSimulatorConfig.class);
bus = loader.getComponent(CloudBus.class);
dbf = loader.getComponent(DatabaseFacade.class);
session = api.loginAsAdmin();
}
@Test
public void test() throws ApiSenderException {
LoadBalancerInventory lb = deployer.loadBalancers.get("lb");
VmNicInventory nic = deployer.vms.get("TestVm").getVmNics().get(0);
vconfig.refreshLbCmds.clear();
LoadBalancerListenerInventory listener1 = new LoadBalancerListenerInventory();
listener1.setName("test");
listener1.setLoadBalancerPort(100);
listener1.setInstancePort(100);
listener1.setLoadBalancerUuid(lb.getUuid());
listener1.setProtocol("http");
final LoadBalancerListenerInventory l = api.createLoadBalancerListener(listener1, null);
LoadBalancerVO lbvo = dbf.findByUuid(lb.getUuid(), LoadBalancerVO.class);
Assert.assertEquals(2, lbvo.getListeners().size());
LoadBalancerListenerVO listenerVO = CollectionUtils.find(lbvo.getListeners(), new Function<LoadBalancerListenerVO, LoadBalancerListenerVO>() {
@Override
public LoadBalancerListenerVO call(LoadBalancerListenerVO arg) {
return arg.getInstancePort() == l.getInstancePort() ? arg : null;
}
});
Assert.assertNotNull(listenerVO);
api.addVmNicToLoadBalancerListener(l.getUuid(), nic.getUuid());
RefreshLbCmd cmd = vconfig.refreshLbCmds.get(0);
LbTO to = cmd.getLbs().get(0);
final String s1 = LoadBalancerSystemTags.CONNECTION_IDLE_TIMEOUT.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.CONNECTION_IDLE_TIMEOUT_TOKEN);
Long val = Long.valueOf(s1);
Assert.assertEquals(val, LoadBalancerGlobalConfig.CONNECTION_IDLE_TIMEOUT.value(Long.class));
String tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(LoadBalancerSystemTags.CONNECTION_IDLE_TIMEOUT.getTag(l.getUuid())) ? arg : null;
}
});
Assert.assertNotNull(tval);
final String s2 = LoadBalancerSystemTags.HEALTH_INTERVAL.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.HEALTH_INTERVAL_TOKEN);
val = Long.valueOf(s2);
Assert.assertEquals(val, LoadBalancerGlobalConfig.HEALTH_INTERVAL.value(Long.class));
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(LoadBalancerSystemTags.HEALTH_INTERVAL.getTag(l.getUuid())) ? arg : null;
}
});
Assert.assertNotNull(tval);
final String s3 = LoadBalancerSystemTags.HEALTHY_THRESHOLD.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.HEALTHY_THRESHOLD_TOKEN);
val = Long.valueOf(s3);
Assert.assertEquals(val, LoadBalancerGlobalConfig.HEALTHY_THRESHOLD.value(Long.class));
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(LoadBalancerSystemTags.HEALTHY_THRESHOLD.getTag(l.getUuid())) ? arg : null;
}
});
Assert.assertNotNull(tval);
final String s4 = LoadBalancerSystemTags.UNHEALTHY_THRESHOLD.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.UNHEALTHY_THRESHOLD_TOKEN);
val = Long.valueOf(s4);
Assert.assertEquals(val, LoadBalancerGlobalConfig.UNHEALTHY_THRESHOLD.value(Long.class));
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(LoadBalancerSystemTags.UNHEALTHY_THRESHOLD.getTag(l.getUuid())) ? arg : null;
}
});
Assert.assertNotNull(tval);
final String s5 = LoadBalancerSystemTags.HEALTH_TIMEOUT.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.HEALTH_TIMEOUT_TOKEN);
val = Long.valueOf(s5);
Assert.assertEquals(val, LoadBalancerGlobalConfig.HEALTH_TIMEOUT.value(Long.class));
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(LoadBalancerSystemTags.HEALTH_TIMEOUT.getTag(l.getUuid())) ? arg : null;
}
});
Assert.assertNotNull(tval);
final String s6 = LoadBalancerSystemTags.MAX_CONNECTION.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.MAX_CONNECTION_TOKEN);
val = Long.valueOf(s6);
Assert.assertEquals(val, LoadBalancerGlobalConfig.MAX_CONNECTION.value(Long.class));
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(LoadBalancerSystemTags.MAX_CONNECTION.getTag(l.getUuid())) ? arg : null;
}
});
Assert.assertNotNull(tval);
final String s7 = LoadBalancerSystemTags.BALANCER_ALGORITHM.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.BALANCER_ALGORITHM_TOKEN);
Assert.assertEquals(s7, LoadBalancerGlobalConfig.BALANCER_ALGORITHM.value());
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(LoadBalancerSystemTags.BALANCER_ALGORITHM.getTag(l.getUuid())) ? arg : null;
}
});
Assert.assertNotNull(tval);
final String s8 = LoadBalancerSystemTags.HEALTH_TARGET.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.HEALTH_TARGET_TOKEN);
Assert.assertEquals(s8, LoadBalancerGlobalConfig.HEALTH_TARGET.value());
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(LoadBalancerSystemTags.HEALTH_TARGET.getTag(l.getUuid())) ? arg : null;
}
});
Assert.assertNotNull(tval);
api.deleteLoadBalancerListener(l.getUuid(), null);
Assert.assertFalse(LoadBalancerSystemTags.CONNECTION_IDLE_TIMEOUT.hasTag(l.getUuid()));
Assert.assertFalse(LoadBalancerSystemTags.HEALTH_INTERVAL.hasTag(l.getUuid()));
Assert.assertFalse(LoadBalancerSystemTags.HEALTHY_THRESHOLD.hasTag(l.getUuid()));
Assert.assertFalse(LoadBalancerSystemTags.UNHEALTHY_THRESHOLD.hasTag(l.getUuid()));
Assert.assertFalse(LoadBalancerSystemTags.HEALTH_TIMEOUT.hasTag(l.getUuid()));
Assert.assertFalse(LoadBalancerSystemTags.MAX_CONNECTION.hasTag(l.getUuid()));
Assert.assertFalse(LoadBalancerSystemTags.BALANCER_ALGORITHM.hasTag(l.getUuid()));
Assert.assertFalse(LoadBalancerSystemTags.HEALTH_TARGET.hasTag(l.getUuid()));
Long CONNECTION_IDLE_TIMEOUT = Long.valueOf(100);
final String ns1 = LoadBalancerSystemTags.CONNECTION_IDLE_TIMEOUT.instantiateTag(
map(e(LoadBalancerSystemTags.CONNECTION_IDLE_TIMEOUT_TOKEN, CONNECTION_IDLE_TIMEOUT))
);
Long HEALTH_INTERVAL = Long.valueOf(100);
final String ns2 = LoadBalancerSystemTags.HEALTH_INTERVAL.instantiateTag(
map(e(LoadBalancerSystemTags.HEALTH_INTERVAL_TOKEN, HEALTH_INTERVAL))
);
Long HEALTHY_THRESHOLD = Long.valueOf(100);
final String ns3 = LoadBalancerSystemTags.HEALTHY_THRESHOLD.instantiateTag(
map(e(LoadBalancerSystemTags.HEALTHY_THRESHOLD_TOKEN, HEALTHY_THRESHOLD))
);
Long UNHEALTHY_THRESHOLD = Long.valueOf(10);
final String ns4 = LoadBalancerSystemTags.UNHEALTHY_THRESHOLD.instantiateTag(
map(e(LoadBalancerSystemTags.UNHEALTHY_THRESHOLD_TOKEN, UNHEALTHY_THRESHOLD))
);
Long HEALTH_TIMEOUT = Long.valueOf(8);
final String ns5 = LoadBalancerSystemTags.HEALTH_TIMEOUT.instantiateTag(
map(e(LoadBalancerSystemTags.HEALTH_TIMEOUT_TOKEN, HEALTH_TIMEOUT))
);
Long MAX_CONNECTION = Long.valueOf(10000);
final String ns6 = LoadBalancerSystemTags.MAX_CONNECTION.instantiateTag(
map(e(LoadBalancerSystemTags.MAX_CONNECTION_TOKEN, MAX_CONNECTION))
);
String BALANCER_ALGORITHM = "source";
final String ns7 = LoadBalancerSystemTags.BALANCER_ALGORITHM.instantiateTag(
map(e(LoadBalancerSystemTags.BALANCER_ALGORITHM_TOKEN, BALANCER_ALGORITHM))
);
String HEALTH_TARGET = "tcp:5000";
final String ns8 = LoadBalancerSystemTags.HEALTH_TARGET.instantiateTag(
map(e(LoadBalancerSystemTags.HEALTH_TARGET_TOKEN, HEALTH_TARGET))
);
vconfig.refreshLbCmds.clear();
final LoadBalancerListenerInventory l2 = api.createLoadBalancerListener(l, list(ns1, ns2, ns3, ns4, ns5, ns6, ns7, ns8), null);
api.addVmNicToLoadBalancerListener(l2.getUuid(), nic.getUuid());
cmd = vconfig.refreshLbCmds.get(0);
to = CollectionUtils.find(cmd.getLbs(), new Function<LbTO, LbTO>() {
@Override
public LbTO call(LbTO arg) {
return arg.getListenerUuid().equals(l2.getUuid()) ? arg : null;
}
});
String ss1 = LoadBalancerSystemTags.CONNECTION_IDLE_TIMEOUT.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.CONNECTION_IDLE_TIMEOUT_TOKEN);
val = Long.valueOf(ss1);
Assert.assertEquals(CONNECTION_IDLE_TIMEOUT, val);
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(ns1) ? arg : null;
}
});
Assert.assertNotNull(JSONObjectUtil.toJsonString(to), tval);
String ss2 = LoadBalancerSystemTags.HEALTH_INTERVAL.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.HEALTH_INTERVAL_TOKEN);
val = Long.valueOf(ss2);
Assert.assertEquals(HEALTH_INTERVAL, val);
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(ns2) ? arg : null;
}
});
Assert.assertNotNull(tval);
String ss3 = LoadBalancerSystemTags.HEALTHY_THRESHOLD.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.HEALTHY_THRESHOLD_TOKEN);
val = Long.valueOf(ss3);
Assert.assertEquals(HEALTHY_THRESHOLD, val);
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(ns3) ? arg : null;
}
});
Assert.assertNotNull(tval);
String ss4 = LoadBalancerSystemTags.UNHEALTHY_THRESHOLD.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.UNHEALTHY_THRESHOLD_TOKEN);
val = Long.valueOf(ss4);
Assert.assertEquals(UNHEALTHY_THRESHOLD, val);
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(ns4) ? arg : null;
}
});
Assert.assertNotNull(tval);
String ss5 = LoadBalancerSystemTags.HEALTH_TIMEOUT.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.HEALTH_TIMEOUT_TOKEN);
val = Long.valueOf(ss5);
Assert.assertEquals(HEALTH_TIMEOUT, val);
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(ns5) ? arg : null;
}
});
Assert.assertNotNull(tval);
String ss6 = LoadBalancerSystemTags.MAX_CONNECTION.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.MAX_CONNECTION_TOKEN);
val = Long.valueOf(ss6);
Assert.assertEquals(MAX_CONNECTION, val);
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(ns6) ? arg : null;
}
});
Assert.assertNotNull(tval);
String ss7 = LoadBalancerSystemTags.BALANCER_ALGORITHM.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.BALANCER_ALGORITHM_TOKEN);
Assert.assertEquals(BALANCER_ALGORITHM, ss7);
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(ns7) ? arg : null;
}
});
Assert.assertNotNull(tval);
String ss8 = LoadBalancerSystemTags.HEALTH_TARGET.getTokenByResourceUuid(l.getUuid(), LoadBalancerSystemTags.HEALTH_TARGET_TOKEN);
Assert.assertEquals(HEALTH_TARGET, ss8);
tval = CollectionUtils.find(to.getParameters(), new Function<String, String>() {
@Override
public String call(String arg) {
return arg.equals(ns8) ? arg : null;
}
});
Assert.assertNotNull(tval);
}
}