package org.zstack.test.securitygroup; import junit.framework.Assert; import org.zstack.core.db.Q; import org.zstack.header.vm.VmNicInventory; import org.zstack.header.vm.VmNicVO; import org.zstack.header.vm.VmNicVO_; import org.zstack.network.securitygroup.RuleTO; import org.zstack.network.securitygroup.SecurityGroupRuleInventory; import org.zstack.network.securitygroup.SecurityGroupRuleTO; import org.zstack.utils.Utils; import org.zstack.utils.gson.JSONObjectUtil; import org.zstack.utils.logging.CLogger; import java.util.ArrayList; import java.util.List; public class SecurityGroupTestValidator { private static CLogger logger = Utils.getLogger(SecurityGroupTestValidator.class); public static void validate(SecurityGroupRuleTO actual, List<SecurityGroupRuleInventory> expected) { List<String> rules = new ArrayList<String>(); StringBuilder sb = new StringBuilder("\n*************************** security group validator ******************************"); sb.append(String.format("\nexpected rules:\n%s", JSONObjectUtil.toJsonString(expected))); sb.append(String.format("\nactual rules:\n%s", JSONObjectUtil.toJsonString(actual))); sb.append("\n*************************************************************************"); logger.debug(sb.toString()); for (RuleTO r : actual.getRules()) { rules.add(r.toString()); } Assert.assertEquals(expected.size(), rules.size()); for (SecurityGroupRuleInventory r : expected) { Assert.assertTrue(rules.contains(r.toString())); } } public static void validateInternalIpIn(SecurityGroupRuleTO actual, String internalIp, List<SecurityGroupRuleInventory> expected) { List<String> rules = new ArrayList<String>(); StringBuilder sb = new StringBuilder("\n*************************** security group validator ******************************"); sb.append(String.format("\nexpected rules:\n%s", JSONObjectUtil.toJsonString(expected))); sb.append(String.format("\nactual rules:\n%s", JSONObjectUtil.toJsonString(actual))); sb.append(String.format("\ninclusive internal ip: %s", internalIp)); sb.append("\n*************************************************************************"); logger.debug(sb.toString()); for (RuleTO r : actual.getRules()) { rules.add(r.toString()); Assert.assertTrue(r.getAllowedInternalIpRange().contains(internalIp)); } Assert.assertEquals(expected.size(), rules.size()); for (SecurityGroupRuleInventory r : expected) { Assert.assertTrue(rules.contains(r.toString())); } } public static void validateInternalIpNotIn(SecurityGroupRuleTO actual, String internalIp, List<SecurityGroupRuleInventory> expected) { List<String> rules = new ArrayList<String>(); StringBuilder sb = new StringBuilder("\n*************************** security group validator ******************************"); sb.append(String.format("\nexpected rules:\n%s", JSONObjectUtil.toJsonString(expected))); sb.append(String.format("\nactual rules:\n%s", JSONObjectUtil.toJsonString(actual))); sb.append(String.format("\nexclusive internal ip: %s", internalIp)); sb.append("\n*************************************************************************"); logger.debug(sb.toString()); for (RuleTO r : actual.getRules()) { rules.add(r.toString()); Assert.assertFalse(r.getAllowedInternalIpRange().contains(internalIp)); } Assert.assertEquals(expected.size(), rules.size()); for (SecurityGroupRuleInventory r : expected) { Assert.assertTrue(rules.contains(r.toString())); } } public static VmNicInventory getVmNicOnSpecificL3Network(List<VmNicInventory> nics, String l3Uuid) { for (VmNicInventory nic : nics) { if (nic.getL3NetworkUuid().equals(l3Uuid)) { VmNicVO vo = Q.New(VmNicVO.class).eq(VmNicVO_.uuid, nic.getUuid()).find(); // this will add internalName return VmNicInventory.valueOf(vo); } } return null; } }