package org.zstack.test.virtualrouter;
import junit.framework.Assert;
import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.zstack.core.db.DatabaseFacade;
import org.zstack.core.db.SimpleQuery;
import org.zstack.core.db.SimpleQuery.Op;
import org.zstack.header.vm.VmNicVO;
import org.zstack.header.vm.VmNicVO_;
import org.zstack.network.service.vip.VipInventory;
import org.zstack.network.service.virtualrouter.VirtualRouterCommands.VipTO;
import org.zstack.network.service.virtualrouter.vip.VirtualRouterVipVO;
import org.zstack.utils.Utils;
import org.zstack.utils.gson.JSONObjectUtil;
import org.zstack.utils.logging.CLogger;
import java.util.List;
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE)
public class VipTestValidator {
private static final CLogger logger = Utils.getLogger(VipTestValidator.class);
@Autowired
private DatabaseFacade dbf;
public static boolean compareWithoutCheckOwnerEthernetMac(VipTO to, VipInventory inv) {
return (to.getGateway().equals(inv.getGateway()) && to.getIp().equals(inv.getIp()) && to.getNetmask().equals(inv.getNetmask()));
}
public static void validateWithoutCheckOwnerEthernetMac(List<VipTO> actual, VipInventory expected) {
for (VipTO to : actual) {
if (compareWithoutCheckOwnerEthernetMac(to, expected)) {
return;
}
}
StringBuilder sb = new StringBuilder();
sb.append("\n========================== Can't find VIP =====================");
sb.append(String.format("\nexpected: \n%s", JSONObjectUtil.toJsonString(expected)));
sb.append(String.format("\nactual: \n%s", JSONObjectUtil.toJsonString(actual)));
sb.append("\n===============================================================");
logger.warn(sb.toString());
Assert.fail();
}
public boolean compare(VipTO to, VipInventory inv) {
VirtualRouterVipVO vipvo = dbf.findByUuid(inv.getUuid(), VirtualRouterVipVO.class);
assert vipvo != null;
SimpleQuery<VmNicVO> q = dbf.createQuery(VmNicVO.class);
q.select(VmNicVO_.mac);
q.add(VmNicVO_.vmInstanceUuid, Op.EQ, vipvo.getVirtualRouterVmUuid());
q.add(VmNicVO_.l3NetworkUuid, Op.EQ, inv.getL3NetworkUuid());
String mac = q.findValue();
assert mac != null;
return (to.getGateway().equals(inv.getGateway()) && to.getIp().equals(inv.getIp()) && to.getNetmask().equals(inv.getNetmask()) && mac.equals(to.getOwnerEthernetMac()));
}
public void validate(List<VipTO> actual, VipInventory expected) {
for (VipTO to : actual) {
if (compare(to, expected)) {
return;
}
}
StringBuilder sb = new StringBuilder();
sb.append("\n========================== Can't find VIP =====================");
sb.append(String.format("\nexpected: \n%s", JSONObjectUtil.toJsonString(expected)));
sb.append(String.format("\nactual: \n%s", JSONObjectUtil.toJsonString(actual)));
sb.append("\n===============================================================");
logger.warn(sb.toString());
Assert.fail();
}
}