Skip to content

Commit 6f970c6

Browse files
author
Daan Hoogland
committed
static nat capabilities parsing cleanup and testing
1 parent b9c13d0 commit 6f970c6

2 files changed

Lines changed: 78 additions & 25 deletions

File tree

server/src/com/cloud/configuration/ConfigurationManagerImpl.java

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3924,42 +3924,27 @@ void validateSourceNatServiceCapablities(Map<Capability, String> sourceNatServic
39243924

39253925
void validateStaticNatServiceCapablities(Map<Capability, String> staticNatServiceCapabilityMap) {
39263926
if (staticNatServiceCapabilityMap != null && !staticNatServiceCapabilityMap.isEmpty()) {
3927-
if (staticNatServiceCapabilityMap.keySet().size() > 2) {
3928-
throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " and "
3929-
+ Capability.AssociatePublicIP.getName()
3930-
+ " capabilitiy can be sepcified for static nat service");
3931-
}
3932-
39333927
boolean eipEnabled = false;
3934-
boolean eipDisabled = false;
39353928
boolean associatePublicIP = true;
39363929
for (Capability capability : staticNatServiceCapabilityMap.keySet()) {
3937-
String value = staticNatServiceCapabilityMap.get(capability);
3930+
String value = staticNatServiceCapabilityMap.get(capability).toLowerCase();
3931+
if (! (value.contains("true") ^ value.contains("false"))) {
3932+
throw new InvalidParameterValueException("Unknown specified value (" + value + ") for "
3933+
+ capability);
3934+
}
39383935
if (capability == Capability.ElasticIp) {
39393936
eipEnabled = value.contains("true");
3940-
eipDisabled = value.contains("false");
3941-
if (!eipEnabled && !eipDisabled) {
3942-
throw new InvalidParameterValueException("Unknown specified value for "
3943-
+ Capability.ElasticIp.getName());
3944-
}
39453937
} else if (capability == Capability.AssociatePublicIP) {
3946-
if (value.contains("true")) {
3947-
associatePublicIP = true;
3948-
} else if (value.contains("false")) {
3949-
associatePublicIP = false;
3950-
} else {
3951-
throw new InvalidParameterValueException("Unknown specified value for "
3952-
+ Capability.AssociatePublicIP.getName());
3953-
}
3938+
associatePublicIP = value.contains("true");
39543939
} else {
39553940
throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " and "
39563941
+ Capability.AssociatePublicIP.getName()
39573942
+ " capabilitiy can be sepcified for static nat service");
39583943
}
3959-
if (eipDisabled && associatePublicIP) {
3960-
throw new InvalidParameterValueException("Capability " + Capability.AssociatePublicIP.getName()
3961-
+ " can only be set when capability " + Capability.ElasticIp.getName() + " is true");
3962-
}
3944+
}
3945+
if ((! eipEnabled) && associatePublicIP) {
3946+
throw new InvalidParameterValueException("Capability " + Capability.AssociatePublicIP.getName()
3947+
+ " can only be set when capability " + Capability.ElasticIp.getName() + " is true");
39633948
}
39643949
}
39653950
}

server/test/com/cloud/configuration/ConfigurationManagerTest.java

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727

2828
import java.lang.reflect.Field;
2929
import java.util.ArrayList;
30+
import java.util.HashMap;
3031
import java.util.List;
32+
import java.util.Map;
3133
import java.util.UUID;
3234

3335
import junit.framework.Assert;
@@ -53,7 +55,9 @@
5355
import com.cloud.dc.dao.AccountVlanMapDao;
5456
import com.cloud.dc.dao.DataCenterDao;
5557
import com.cloud.dc.dao.VlanDao;
58+
import com.cloud.exception.InvalidParameterValueException;
5659
import com.cloud.network.IpAddressManager;
60+
import com.cloud.network.Network.Capability;
5761
import com.cloud.network.dao.FirewallRulesDao;
5862
import com.cloud.network.dao.IPAddressDao;
5963
import com.cloud.network.dao.IPAddressVO;
@@ -415,6 +419,70 @@ void runReleaseNonDedicatedPublicIpRange() throws Exception {
415419
}
416420
}
417421

422+
@Test
423+
public void validateEmptyStaticNatServiceCapablitiesTest() {
424+
Map<Capability, String> staticNatServiceCapabilityMap = new HashMap<Capability, String>();
425+
426+
configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap);
427+
}
428+
429+
@Test
430+
public void validateInvalidStaticNatServiceCapablitiesTest() {
431+
Map<Capability, String> staticNatServiceCapabilityMap = new HashMap<Capability, String>();
432+
staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "Frue and Talse");
433+
434+
boolean caught = false;
435+
try {
436+
configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap);
437+
}
438+
catch (InvalidParameterValueException e) {
439+
Assert.assertTrue(e.getMessage(),e.getMessage().contains("(frue and talse)"));
440+
caught = true;
441+
}
442+
Assert.assertTrue("should not be accepted",caught);
443+
}
444+
445+
@Test
446+
public void validateTTStaticNatServiceCapablitiesTest() {
447+
Map<Capability, String> staticNatServiceCapabilityMap = new HashMap<Capability, String>();
448+
staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "true and Talse");
449+
staticNatServiceCapabilityMap.put(Capability.ElasticIp, "True");
450+
451+
configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap);
452+
}
453+
@Test
454+
public void validateFTStaticNatServiceCapablitiesTest() {
455+
Map<Capability, String> staticNatServiceCapabilityMap = new HashMap<Capability, String>();
456+
staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "false");
457+
staticNatServiceCapabilityMap.put(Capability.ElasticIp, "True");
458+
459+
configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap);
460+
}
461+
@Test
462+
public void validateTFStaticNatServiceCapablitiesTest() {
463+
Map<Capability, String> staticNatServiceCapabilityMap = new HashMap<Capability, String>();
464+
staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "true and Talse");
465+
staticNatServiceCapabilityMap.put(Capability.ElasticIp, "false");
466+
467+
boolean caught = false;
468+
try {
469+
configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap);
470+
}
471+
catch (InvalidParameterValueException e) {
472+
Assert.assertTrue(e.getMessage(),e.getMessage().contains("Capability " + Capability.AssociatePublicIP.getName()
473+
+ " can only be set when capability " + Capability.ElasticIp.getName() + " is true"));
474+
caught = true;
475+
}
476+
Assert.assertTrue("should not be accepted",caught);
477+
}
478+
@Test
479+
public void validateFFStaticNatServiceCapablitiesTest() {
480+
Map<Capability, String> staticNatServiceCapabilityMap = new HashMap<Capability, String>();
481+
staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "false");
482+
staticNatServiceCapabilityMap.put(Capability.ElasticIp, "False");
483+
484+
configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap);
485+
}
418486

419487
public class DedicatePublicIpRangeCmdExtn extends DedicatePublicIpRangeCmd {
420488
@Override

0 commit comments

Comments
 (0)