diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index f23d57d84bf..8a0f7a65a12 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -3924,42 +3924,27 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati void validateStaticNatServiceCapablities(Map staticNatServiceCapabilityMap) { if (staticNatServiceCapabilityMap != null && !staticNatServiceCapabilityMap.isEmpty()) { - if (staticNatServiceCapabilityMap.keySet().size() > 2) { - throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " and " - + Capability.AssociatePublicIP.getName() - + " capabilitiy can be sepcified for static nat service"); - } - boolean eipEnabled = false; - boolean eipDisabled = false; boolean associatePublicIP = true; for (Capability capability : staticNatServiceCapabilityMap.keySet()) { - String value = staticNatServiceCapabilityMap.get(capability); + String value = staticNatServiceCapabilityMap.get(capability).toLowerCase(); + if (! (value.contains("true") ^ value.contains("false"))) { + throw new InvalidParameterValueException("Unknown specified value (" + value + ") for " + + capability); + } if (capability == Capability.ElasticIp) { eipEnabled = value.contains("true"); - eipDisabled = value.contains("false"); - if (!eipEnabled && !eipDisabled) { - throw new InvalidParameterValueException("Unknown specified value for " - + Capability.ElasticIp.getName()); - } } else if (capability == Capability.AssociatePublicIP) { - if (value.contains("true")) { - associatePublicIP = true; - } else if (value.contains("false")) { - associatePublicIP = false; - } else { - throw new InvalidParameterValueException("Unknown specified value for " - + Capability.AssociatePublicIP.getName()); - } + associatePublicIP = value.contains("true"); } else { throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " and " + Capability.AssociatePublicIP.getName() + " capabilitiy can be sepcified for static nat service"); } - if (eipDisabled && associatePublicIP) { - throw new InvalidParameterValueException("Capability " + Capability.AssociatePublicIP.getName() - + " can only be set when capability " + Capability.ElasticIp.getName() + " is true"); - } + } + if ((! eipEnabled) && associatePublicIP) { + throw new InvalidParameterValueException("Capability " + Capability.AssociatePublicIP.getName() + + " can only be set when capability " + Capability.ElasticIp.getName() + " is true"); } } } diff --git a/server/test/com/cloud/configuration/ConfigurationManagerTest.java b/server/test/com/cloud/configuration/ConfigurationManagerTest.java index e49d93adb47..908f0d01056 100755 --- a/server/test/com/cloud/configuration/ConfigurationManagerTest.java +++ b/server/test/com/cloud/configuration/ConfigurationManagerTest.java @@ -27,7 +27,9 @@ import static org.mockito.Mockito.when; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; import junit.framework.Assert; @@ -53,7 +55,9 @@ import com.cloud.dc.VlanVO; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.VlanDao; +import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.IpAddressManager; +import com.cloud.network.Network.Capability; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.IPAddressVO; @@ -415,6 +419,70 @@ public class ConfigurationManagerTest { } } + @Test + public void validateEmptyStaticNatServiceCapablitiesTest() { + Map staticNatServiceCapabilityMap = new HashMap(); + + configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap); + } + + @Test + public void validateInvalidStaticNatServiceCapablitiesTest() { + Map staticNatServiceCapabilityMap = new HashMap(); + staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "Frue and Talse"); + + boolean caught = false; + try { + configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap); + } + catch (InvalidParameterValueException e) { + Assert.assertTrue(e.getMessage(),e.getMessage().contains("(frue and talse)")); + caught = true; + } + Assert.assertTrue("should not be accepted",caught); + } + + @Test + public void validateTTStaticNatServiceCapablitiesTest() { + Map staticNatServiceCapabilityMap = new HashMap(); + staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "true and Talse"); + staticNatServiceCapabilityMap.put(Capability.ElasticIp, "True"); + + configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap); + } + @Test + public void validateFTStaticNatServiceCapablitiesTest() { + Map staticNatServiceCapabilityMap = new HashMap(); + staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "false"); + staticNatServiceCapabilityMap.put(Capability.ElasticIp, "True"); + + configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap); + } + @Test + public void validateTFStaticNatServiceCapablitiesTest() { + Map staticNatServiceCapabilityMap = new HashMap(); + staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "true and Talse"); + staticNatServiceCapabilityMap.put(Capability.ElasticIp, "false"); + + boolean caught = false; + try { + configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap); + } + catch (InvalidParameterValueException e) { + Assert.assertTrue(e.getMessage(),e.getMessage().contains("Capability " + Capability.AssociatePublicIP.getName() + + " can only be set when capability " + Capability.ElasticIp.getName() + " is true")); + caught = true; + } + Assert.assertTrue("should not be accepted",caught); + } + @Test + public void validateFFStaticNatServiceCapablitiesTest() { + Map staticNatServiceCapabilityMap = new HashMap(); + staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "false"); + staticNatServiceCapabilityMap.put(Capability.ElasticIp, "False"); + + configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap); + } public class DedicatePublicIpRangeCmdExtn extends DedicatePublicIpRangeCmd { @Override