Eliraz Levi has uploaded a new change for review. Change subject: webadmin: allowing netmask as mask staticIP conf ......................................................................
webadmin: allowing netmask as mask staticIP conf allowing having netmask as mask of static IP configuration field, using maskValidation utill Change-Id: If909eda53a61bda5030c342156a01e53576e77cb Bug-Url: https://bugzilla.redhat.com/1012881 Signed-off-by: Eliraz Levi <el...@redhat.com> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidation.java A frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidationTest.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java 3 files changed, 108 insertions(+), 62 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/45/35145/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidation.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidation.java index 3ee7181..ef31644 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidation.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidation.java @@ -1,80 +1,47 @@ package org.ovirt.engine.ui.uicommonweb.validation; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.Arrays; +import org.ovirt.engine.core.common.validation.MaskValidator; import org.ovirt.engine.ui.uicompat.ConstantsManager; -public class SubnetMaskValidation extends RegexValidation +public class SubnetMaskValidation implements IValidation { - private final static Set<Integer> CORRECT_RANGE = new HashSet<Integer>(); - private final static List<String> reasons = new ArrayList<String>(); - - static { - CORRECT_RANGE.add(128); - CORRECT_RANGE.add(192); - CORRECT_RANGE.add(224); - CORRECT_RANGE.add(240); - CORRECT_RANGE.add(248); - CORRECT_RANGE.add(252); - CORRECT_RANGE.add(254); - CORRECT_RANGE.add(255); - CORRECT_RANGE.add(0); - - reasons.add(ConstantsManager.getInstance().getConstants().subnetMaskIsNotValid()); - } public SubnetMaskValidation() { - setExpression("^" + IpAddressValidation.IP_ADDRESS_REGEX + "$"); //$NON-NLS-1$ $NON-NLS-2$ - setMessage(ConstantsManager.getInstance().getConstants().thisFieldMustContainSubnetInFormatMsg()); + + } + + protected String getSubnetBadFormatMessage() { + return ConstantsManager.getInstance().getConstants().thisFieldMustContainSubnetFormatAsNetmaskOrPrefixMsg(); + + } + + protected String getInvalidNetmaskMessage() { + return ConstantsManager.getInstance().getConstants().inValidNetmask(); } @Override public ValidationResult validate(Object value) { - ValidationResult ipValidation = super.validate(value); - if (!ipValidation.getSuccess()) { - return ipValidation; - } - + // This validation must be applied to a String + assert value == null || value instanceof String; + String mask = (String) value; ValidationResult result = new ValidationResult(); - if (value instanceof String) { - result.setSuccess(validateNetMask((String) value)); - result.setReasons(reasons); + if (!MaskValidator.getInstance().isMaskFormatValid(mask)) { + return failWith(result, getSubnetBadFormatMessage()); + } else if (!MaskValidator.getInstance().isMaskValid(mask)) { + return failWith(result, getInvalidNetmaskMessage()); } return result; + } - private boolean validateNetMask(String mask) { - // values[0] can be 128, 192, 224, 240, 248, 252, 254, 255 - // values[1] can be 128, 192, 224, 240, 248, 252, 254, 255 if values[0] is 255, else values[1] must be 0 - // values[2] can be 128, 192, 224, 240, 248, 252, 254, 255 if values[1] is 255, else values[2] must be 0 - // values[3] can be 128, 192, 224, 240, 248, 252, 254, 255 if values[2] is 255, else values[3] must be 0 - - String[] split = mask.split("\\."); //$NON-NLS-1$ - assert split.length == 4; - int[] values = new int[split.length]; - - for (int i = 0; i < split.length; i++) { - int value; - try { - value = Integer.valueOf(split[i]); - } catch (NumberFormatException e) { - return false; - } - - if (!(CORRECT_RANGE.contains(value))) { - return false; - } - values[i] = value; - } - - if ((values[0] == 0) || (values[0] != 255 && values[1] != 0) || (values[1] != 255 && values[2] != 0) - || (values[2] != 255 && values[3] != 0)) { - return false; - } - return true; + // TODO elevi should i have abstract to share this function? + private ValidationResult failWith(ValidationResult result, String errorMessage) { + result.setSuccess(false); + result.setReasons(Arrays.asList(errorMessage)); + return result; } + } diff --git a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidationTest.java b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidationTest.java new file mode 100644 index 0000000..e928399 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/validation/SubnetMaskValidationTest.java @@ -0,0 +1,76 @@ +package org.ovirt.engine.ui.uicommonweb.validation; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; + +import java.util.Arrays; +import java.util.Collection; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class SubnetMaskValidationTest { + + private SubnetMaskValidation validation; + + private final String mask; + private final boolean isValidMask; + + public SubnetMaskValidationTest(String netmask, boolean result) { + this.mask = netmask; + this.isValidMask = result; + } + + @Before + public void setup() { + SubnetMaskValidation underTest = new SubnetMaskValidation(); + validation = spy(underTest); + doReturn(null).when(validation).getInvalidNetmaskMessage(); + doReturn(null).when(validation).getSubnetBadFormatMessage(); + } + + @Test + public void checkValidMask() + { + assertEquals("Failed to validate mask: " + mask, isValidMask, validation.validate(mask).getSuccess());//$NON-NLS-1$ + } + + @Parameterized.Parameters + public static Collection<Object[]> namesParams() { + return Arrays.asList(new Object[][] { + + // Bad Format prefix format + { null, false }, //$NON-NLS-1$ + { "a.a.a.a", false }, //$NON-NLS-1$ + { "255.255.0", false }, //$NON-NLS-1$ + { "255.255.0.0.0", false }, //$NON-NLS-1$ + { "255.255.0.0.", false }, //$NON-NLS-1$ + + // Prefix not valid + { "255.255.0.1", false }, //$NON-NLS-1$ + { "255.0.255.0", false }, //$NON-NLS-1$ + { "255.0.0.255", false }, //$NON-NLS-1$ + { "224.0.255.0", false }, //$NON-NLS-1$ + + // Valid prefix + { "255.255.0.0", true }, //$NON-NLS-1$ + { "255.255.255.255", true }, //$NON-NLS-1$ + + // 0-32 bad format format + { "31 ", false }, //$NON-NLS-1$ + { "33", false }, //$NON-NLS-1$ + { "31/", false }, //$NON-NLS-1$ + { "31*", false }, //$NON-NLS-1$ + { "//31 ", false }, //$NON-NLS-1$ + + // 0-32 valid + { "31", true }, //$NON-NLS-1$ + + }); + } + +} diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java index 281c61a..acac34c 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java @@ -897,8 +897,11 @@ @DefaultStringValue("This field can be empty or contain an IP address in format xxx.xxx.xxx.xxx") String emptyOrValidIPaddressInFormatMsg(); - @DefaultStringValue("This field must contain a subnet in format xxx.xxx.xxx.xxx") - String thisFieldMustContainSubnetInFormatMsg(); + @DefaultStringValue("This field must contain a subnet in the following format:\n\txxx.xxx.xxx.xxx\n\txx where xx between 0-32") + String thisFieldMustContainSubnetFormatAsNetmaskOrPrefixMsg(); + + @DefaultStringValue("Invalid mask value") + String inValidNetmask(); @DefaultStringValue("This field must contain a CIDR in format xxx.xxx.xxx.xxx/yy, where xxx is between 0 and 255 and yy is between 0 and 32.") String thisFieldMustContainCidrInFormatMsg(); -- To view, visit http://gerrit.ovirt.org/35145 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If909eda53a61bda5030c342156a01e53576e77cb Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Eliraz Levi <el...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches