diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/AbstractConfigItemFacade.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/AbstractConfigItemFacade.java index bebc18b9c86..94e7af32d39 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/AbstractConfigItemFacade.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/AbstractConfigItemFacade.java @@ -30,6 +30,7 @@ import com.cloud.agent.api.routing.DeleteIpAliasCommand; import com.cloud.agent.api.routing.DhcpEntryCommand; import com.cloud.agent.api.routing.DnsMasqConfigCommand; import com.cloud.agent.api.routing.IpAssocCommand; +import com.cloud.agent.api.routing.IpAssocVpcCommand; import com.cloud.agent.api.routing.LoadBalancerConfigCommand; import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand; @@ -85,6 +86,7 @@ public abstract class AbstractConfigItemFacade { flyweight.put(SetNetworkACLCommand.class, new SetNetworkAclConfigItem()); flyweight.put(SetSourceNatCommand.class, new SetSourceNatConfigItem()); flyweight.put(IpAssocCommand.class, new IpAssociationConfigItem()); + flyweight.put(IpAssocVpcCommand.class, new IpAssociationConfigItem()); } protected String destinationFile; diff --git a/core/test/com/cloud/agent/resource/virtualnetwork/ConfigHelperTest.java b/core/test/com/cloud/agent/resource/virtualnetwork/ConfigHelperTest.java index 3f6c86e457e..40075e73adb 100644 --- a/core/test/com/cloud/agent/resource/virtualnetwork/ConfigHelperTest.java +++ b/core/test/com/cloud/agent/resource/virtualnetwork/ConfigHelperTest.java @@ -29,14 +29,26 @@ import java.util.UUID; import org.junit.Test; +import com.cloud.agent.api.routing.DeleteIpAliasCommand; +import com.cloud.agent.api.routing.DnsMasqConfigCommand; +import com.cloud.agent.api.routing.IpAliasTO; +import com.cloud.agent.api.routing.IpAssocVpcCommand; import com.cloud.agent.api.routing.LoadBalancerConfigCommand; import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.api.routing.SetPortForwardingRulesVpcCommand; +import com.cloud.agent.api.to.DhcpTO; +import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.LoadBalancerTO; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.PortForwardingRuleTO; +import com.cloud.agent.resource.virtualnetwork.model.DhcpConfig; +import com.cloud.agent.resource.virtualnetwork.model.DhcpConfigEntry; import com.cloud.agent.resource.virtualnetwork.model.ForwardingRule; import com.cloud.agent.resource.virtualnetwork.model.ForwardingRules; +import com.cloud.agent.resource.virtualnetwork.model.IpAddress; +import com.cloud.agent.resource.virtualnetwork.model.IpAddressAlias; +import com.cloud.agent.resource.virtualnetwork.model.IpAliases; +import com.cloud.agent.resource.virtualnetwork.model.IpAssociation; import com.cloud.agent.resource.virtualnetwork.model.LoadBalancerRule; import com.cloud.agent.resource.virtualnetwork.model.LoadBalancerRules; import com.cloud.network.lb.LoadBalancingRule.LbDestination; @@ -108,6 +120,93 @@ public class ConfigHelperTest { assertTrue(scriptConfig instanceof ScriptConfigItem); } + @Test + public void testIpAssocVpc() { + + final IpAssocVpcCommand command = generateIpAssocVpcCommand(); + + final List config = ConfigHelper.generateCommandCfg(command); + assertTrue(config.size() > 0); + + final ConfigItem fileConfig = config.get(0); + assertNotNull(fileConfig); + assertTrue(fileConfig instanceof FileConfigItem); + + final String fileContents = ((FileConfigItem)fileConfig).getFileContents(); + assertNotNull(fileContents); + + final IpAssociation jsonClass = gson.fromJson(fileContents, IpAssociation.class); + assertNotNull(jsonClass); + assertEquals(jsonClass.getType(), "ips"); + + final IpAddress [] ips = jsonClass.getIpAddress(); + assertNotNull(ips); + assertTrue(ips.length == 3); + assertEquals(ips[0].getPublicIp(), "64.1.1.10"); + + final ConfigItem scriptConfig = config.get(1); + assertNotNull(scriptConfig); + assertTrue(scriptConfig instanceof ScriptConfigItem); + } + + @Test + public void testDnsMasqConfig() { + + final DnsMasqConfigCommand command = generateDnsMasqConfigCommand(); + + final List config = ConfigHelper.generateCommandCfg(command); + assertTrue(config.size() > 0); + + final ConfigItem fileConfig = config.get(0); + assertNotNull(fileConfig); + assertTrue(fileConfig instanceof FileConfigItem); + + final String fileContents = ((FileConfigItem)fileConfig).getFileContents(); + assertNotNull(fileContents); + + final DhcpConfig jsonClass = gson.fromJson(fileContents, DhcpConfig.class); + assertNotNull(jsonClass); + assertEquals(jsonClass.getType(), "dhcpconfig"); + + final List entries = jsonClass.getEntries(); + assertNotNull(entries); + assertTrue(entries.size() == 2); + assertEquals(entries.get(0).getRouterIpAddress(), "10.1.20.2"); + + final ConfigItem scriptConfig = config.get(1); + assertNotNull(scriptConfig); + assertTrue(scriptConfig instanceof ScriptConfigItem); + } + + @Test + public void testDeleteIpAlias() { + + final DeleteIpAliasCommand command = generateDeleteIpAliasCommand(); + + final List config = ConfigHelper.generateCommandCfg(command); + assertTrue(config.size() > 0); + + final ConfigItem fileConfig = config.get(0); + assertNotNull(fileConfig); + assertTrue(fileConfig instanceof FileConfigItem); + + final String fileContents = ((FileConfigItem)fileConfig).getFileContents(); + assertNotNull(fileContents); + + final IpAliases jsonClass = gson.fromJson(fileContents, IpAliases.class); + assertNotNull(jsonClass); + assertEquals(jsonClass.getType(), "ipaliases"); + + final List aliases = jsonClass.getAliases(); + assertNotNull(aliases); + assertTrue(aliases.size() == 6); + assertEquals(aliases.get(0).getIpAddress(), "169.254.3.10"); + + final ConfigItem scriptConfig = config.get(1); + assertNotNull(scriptConfig); + assertTrue(scriptConfig instanceof ScriptConfigItem); + } + protected LoadBalancerConfigCommand generateLoadBalancerConfigCommand() { final List lbs = new ArrayList<>(); final List dests = new ArrayList<>(); @@ -137,4 +236,39 @@ public class ConfigHelperTest { return cmd; } + + protected DnsMasqConfigCommand generateDnsMasqConfigCommand() { + final List dhcps = new ArrayList<>(); + dhcps.add(new DhcpTO("10.1.20.2", "10.1.20.1", "255.255.255.0", "10.1.20.5")); + dhcps.add(new DhcpTO("10.1.21.2", "10.1.21.1", "255.255.255.0", "10.1.21.5")); + + final DnsMasqConfigCommand cmd = new DnsMasqConfigCommand(dhcps); + cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, ROUTERNAME); + return cmd; + } + + protected DeleteIpAliasCommand generateDeleteIpAliasCommand() { + final List aliases = new ArrayList<>(); + aliases.add(new IpAliasTO("169.254.3.10", "255.255.255.0", "1")); + aliases.add(new IpAliasTO("169.254.3.11", "255.255.255.0", "2")); + aliases.add(new IpAliasTO("169.254.3.12", "255.255.255.0", "3")); + + final DeleteIpAliasCommand cmd = new DeleteIpAliasCommand("169.254.10.1", aliases, aliases); + cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, ROUTERNAME); + return cmd; + } + + protected IpAssocVpcCommand generateIpAssocVpcCommand() { + final List ips = new ArrayList(); + ips.add(new IpAddressTO(1, "64.1.1.10", true, true, true, "vlan://64", "64.1.1.1", "255.255.255.0", "01:23:45:67:89:AB", 1000, false)); + ips.add(new IpAddressTO(2, "64.1.1.11", false, false, true, "vlan://64", "64.1.1.1", "255.255.255.0", "01:23:45:67:89:AB", 1000, false)); + ips.add(new IpAddressTO(3, "65.1.1.11", true, false, false, "vlan://65", "65.1.1.1", "255.255.255.0", "11:23:45:67:89:AB", 1000, false)); + + final IpAddressTO[] ipArray = ips.toArray(new IpAddressTO[ips.size()]); + final IpAssocVpcCommand cmd = new IpAssocVpcCommand(ipArray); + cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, ROUTERNAME); + assertEquals(6, cmd.getAnswersCount()); // AnswersCount is clearly wrong as it doesn't know enough to tell + + return cmd; + } } \ No newline at end of file