Eliraz Levi has uploaded a new change for review.

Change subject: common: adding maskValidator util
......................................................................

common: adding maskValidator util

Change-Id: I04fb0aa2193801688f1bfc5dc7684cabdfa2827d
Bug-Url: https://bugzilla.redhat.com/1012881
Signed-off-by: Eliraz Levi <el...@redhat.com>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ValidationUtils.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/CidrValidator.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/MaskValidator.java
A 
backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/validation/MaskValidatorTest.java
4 files changed, 158 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/44/35144/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ValidationUtils.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ValidationUtils.java
index 0252dc2..ecf0f93 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ValidationUtils.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ValidationUtils.java
@@ -22,16 +22,24 @@
     public static final String ONLY_ASCII_OR_NONE = "[\\p{ASCII}]*";
     public static final String NO_SPECIAL_CHARACTERS_WITH_DOT = 
"[0-9a-zA-Z-_\\.]+";
     public static final String NO_TRIMMING_WHITE_SPACES_PATTERN = 
"^$|\\S.*\\S";
+    // TODO elevi "" return true for this/..
     public static final String IP_PATTERN =
             
"^\\b((25[0-5]|2[0-4]\\d|[01]\\d\\d|\\d?\\d)\\.){3}(25[0-5]|2[0-4]\\d|[01]\\d\\d|\\d?\\d)\\b$|^$";
     public static final String CIDR_FORMAT_PATTERN =
             
"^\\b((25[0-5]|2[0-4]\\d|[01]\\d\\d|\\d?\\d)\\.){3}(25[0-5]|2[0-4]\\d|[01]\\d\\d|\\d?\\d)(?:/(?:3[0-2]|[12]?[0-9]))$";
     public static final String ISO_SUFFIX = ".iso";
     public static final String ISO_SUFFIX_PATTERN = "^$|^.+\\.iso$";
+    public static final String SUBNET_PATTERN_AS_NETMASK = 
"^([3][0-2]|[0-2][0-9]|[0-9])$";
+    public static final String NETMASK_PATTERN =
+            
"(^\\b((25[0-5]|2[0-4]\\d|[01]\\d\\d|\\d?\\d)\\.){3}(25[0-5]|2[0-4]\\d|[01]\\d\\d|\\d?\\d)\\b$)|("
+                    + SUBNET_PATTERN_AS_NETMASK + ")+";
 
-    /** the mask will be replaced with zero-padded number in the generated 
names of the VMs in the pool,
-     * see NameForVmInPoolGeneratorTest PoolNameValidationTest for valid and 
invalid expressions of this pattern */
-    public static final String POOL_NAME_PATTERN = "^[\\p{L}0-9._-]+[" + 
VmPool.MASK_CHARACTER + "]*[\\p{L}0-9._-]*$|^[\\p{L}0-9._-]*[" + 
VmPool.MASK_CHARACTER + "]*[\\p{L}0-9._-]+$";
+    /**
+     * the mask will be replaced with zero-padded number in the generated 
names of the VMs in the pool, see
+     * NameForVmInPoolGeneratorTest PoolNameValidationTest for valid and 
invalid expressions of this pattern
+     */
+    public static final String POOL_NAME_PATTERN = "^[\\p{L}0-9._-]+[" + 
VmPool.MASK_CHARACTER
+            + "]*[\\p{L}0-9._-]*$|^[\\p{L}0-9._-]*[" + VmPool.MASK_CHARACTER + 
"]*[\\p{L}0-9._-]+$";
 
     private static final Validator validator = 
Validation.buildDefaultValidatorFactory().getValidator();
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/CidrValidator.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/CidrValidator.java
index 951e588..18e63ca 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/CidrValidator.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/CidrValidator.java
@@ -45,7 +45,7 @@
         return isNetworkAddress(ipAsInteger, mask);
     }
 
-    private static long covnertIpToInt(String ipAdd) {
+    protected static long covnertIpToInt(String ipAdd) {
         String[] subAdd = ipAdd.split("\\.");
         long output = 0;
         long temp;
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/MaskValidator.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/MaskValidator.java
new file mode 100644
index 0000000..57da54f
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/MaskValidator.java
@@ -0,0 +1,67 @@
+package org.ovirt.engine.core.common.validation;
+
+import org.ovirt.engine.core.common.utils.ValidationUtils;
+
+public class MaskValidator {
+
+    private static MaskValidator validator = new MaskValidator();
+
+    private MaskValidator() {
+
+    }
+
+    public static MaskValidator getInstance() {
+        return validator;
+    }
+
+    /***
+     * Check if mask is in IP format: x.x.x.x or string [0-32] where:
+     * <ul>
+     * <li>x belongs to [0,255]
+     * </ul>
+     * <p>
+     * <b>Note!</b> the function is not validating that mask value is valid, 
please see @see
+     * {@link MaskValidator#isMaskValid(String)}
+     *
+     * @return true if correct IP format or string [0-32], false otherwise.
+     */
+    public boolean isMaskFormatValid(String mask) {
+        return mask != null && mask.matches(ValidationUtils.NETMASK_PATTERN);
+    }
+
+    /***
+     * check if mask is valid
+     *
+     * @param mask
+     *            assume in correct format, please use the following function 
first: @see
+     *            {@link MaskValidator#isMaskFormatValid(String)}
+     * @return true if valid mask ,false otherwise
+     */
+    public boolean isMaskValid(String mask) {
+        if (mask.matches(ValidationUtils.SUBNET_PATTERN_AS_NETMASK)) {
+            return true;
+        }
+
+        long maskAsInt = CidrValidator.covnertIpToInt(mask);
+        long flag = 1;
+        flag <<= 32;
+
+        boolean isFirstZeroFound = false;
+        for (int i = 0; i < 32; i++) {
+            flag >>= 1;
+            if (!isFirstZeroFound && (flag & maskAsInt) == 0) {
+                isFirstZeroFound = true;
+                continue;
+            }
+
+            if ((flag & maskAsInt) != 0 && isFirstZeroFound) {
+                return false;
+            }
+
+        }
+
+        return true;
+
+    }
+
+}
diff --git 
a/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/validation/MaskValidatorTest.java
 
b/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/validation/MaskValidatorTest.java
new file mode 100644
index 0000000..72cc1c4
--- /dev/null
+++ 
b/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/validation/MaskValidatorTest.java
@@ -0,0 +1,79 @@
+package org.ovirt.engine.core.common.validation;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class MaskValidatorTest {
+
+    private final String mask;
+    private final boolean isMaskValidFormat;
+    private final boolean isMaskValid;
+
+    public MaskValidatorTest(String mask, boolean isMaskValidFormat, boolean 
isMaskValid) {
+        this.mask = mask;
+        this.isMaskValidFormat = isMaskValidFormat;
+        this.isMaskValid = isMaskValid;
+    }
+
+    @Test
+    public void checkMaskFormatValidator() {
+        assertEquals("Failed to validate mask's Format: " + mask,
+                isMaskValidFormat,
+                MaskValidator.getInstance().isMaskFormatValid(mask));
+    }
+
+    @Test
+    public void checkMaskValidAddress() {
+
+        if (!isMaskValidFormat) {
+            return;
+        }
+
+        assertEquals("Failed to validate mask value" + mask,
+                isMaskValid,
+                MaskValidator.getInstance().isMaskValid(mask));
+
+    }
+
+    @Parameterized.Parameters
+    public static Collection<Object[]> namesParams() {
+        return Arrays.asList(new Object[][] {
+
+                // Bad Format prefix format
+                { null, false, false }, //$NON-NLS-1$
+                { "a.a.a.a", false, false }, //$NON-NLS-1$
+                { "255.255.0", false, false }, //$NON-NLS-1$
+                { "255.255.0.0.0", false, false }, //$NON-NLS-1$
+                { "255.255.0.0.", false, false }, //$NON-NLS-1$
+
+                // Prefix not valid
+                { "255.255.0.1", true, false }, //$NON-NLS-1$
+                { "255.0.255.0", true, false }, //$NON-NLS-1$
+                { "255.0.0.255", true, false }, //$NON-NLS-1$
+                { "224.0.255.0", true, false }, //$NON-NLS-1$
+
+                // Valid prefix
+                { "255.255.0.0", true, true }, //$NON-NLS-1$
+                { "255.255.255.255", true, true }, //$NON-NLS-1$
+
+                // 0-32 bad format format
+                { "31 ", false, false }, //$NON-NLS-1$
+                { "33", false, false }, //$NON-NLS-1$
+                { "31/", false, false }, //$NON-NLS-1$
+                { "31*", false, false }, //$NON-NLS-1$
+                { "//31 ", false, false }, //$NON-NLS-1$
+
+                // 0-32 valid
+                { "31", true, true }, //$NON-NLS-1$
+
+        });
+    }
+
+}


-- 
To view, visit http://gerrit.ovirt.org/35144
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I04fb0aa2193801688f1bfc5dc7684cabdfa2827d
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

Reply via email to