Moti Asayag has uploaded a new change for review.

Change subject: tools: Add validation to MAC Address range
......................................................................

tools: Add validation to MAC Address range

The patch adds a validation to the configured value of
the MAC Address pool range by the engine-config tool.

Change-Id: I821290d8d48ed164a5c653367d59774bd97bf67e
Bug-Url: https://bugzilla.redhat.com/947474
Signed-off-by: Moti Asayag <[email protected]>
---
A 
backend/manager/tools/src/main/java/org/ovirt/engine/core/config/entity/helper/MacAddressPoolRangesValueHelper.java
A 
backend/manager/tools/src/test/java/org/ovirt/engine/core/config/entity/helper/MacAddressPoolRangesValueHelperTest.java
M packaging/etc/engine-config/engine-config.properties
3 files changed, 105 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/61/19261/1

diff --git 
a/backend/manager/tools/src/main/java/org/ovirt/engine/core/config/entity/helper/MacAddressPoolRangesValueHelper.java
 
b/backend/manager/tools/src/main/java/org/ovirt/engine/core/config/entity/helper/MacAddressPoolRangesValueHelper.java
new file mode 100644
index 0000000..8d09b7e
--- /dev/null
+++ 
b/backend/manager/tools/src/main/java/org/ovirt/engine/core/config/entity/helper/MacAddressPoolRangesValueHelper.java
@@ -0,0 +1,52 @@
+package org.ovirt.engine.core.config.entity.helper;
+
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang.StringUtils;
+import org.ovirt.engine.core.common.businessentities.network.VmNic;
+import org.ovirt.engine.core.config.entity.ConfigKey;
+
+/**
+ * The class verifies the provided MAC address ranges to set the values of MAC 
addresses pool is defined properly. The
+ * expected format is:
+ * <ul>
+ * AA:AA:AA:AA:AA:AA-BB:BB:BB:BB:BB:BB,CC:CC:CC:CC:CC:CC-DD:DD:DD:DD:DD:DD,...
+ * </ul>
+ *
+ */
+public class MacAddressPoolRangesValueHelper extends StringValueHelper {
+
+    private static Pattern MAC_ADDRESS_PATTERN = 
Pattern.compile(VmNic.VALID_MAC_ADDRESS_FORMAT);
+
+    @Override
+    public ValidationResult validate(ConfigKey key, String value) {
+
+        if (StringUtils.isBlank(value)) {
+            return new ValidationResult(false, "The MAC address range cannot 
be empty.");
+        }
+
+        String[] ranges = value.split("[,]", -1);
+        for (String range : ranges) {
+            String[] rangeParts = range.split("[-]", -1);
+            if (rangeParts.length == 2) {
+                String rangeStart = rangeParts[0].toLowerCase();
+                String rangeEnd = rangeParts[1].toLowerCase();
+                if (!validateRangePart(rangeStart) || 
!validateRangePart(rangeEnd)
+                        || rangeStart.compareTo(rangeEnd) > 0) {
+                    return new ValidationResult(false, "The entered range is 
invalid. "
+                            + StringUtils.join(rangeParts, '-')
+                            + " should be in a format of 
AA:AA:AA:AA:AA:AA-BB:BB:BB:BB:BB:BB,...");
+                }
+            } else {
+                return new ValidationResult(false, "The entered value is in 
imporper format. " + value
+                        + " should be in a format of 
AA:AA:AA:AA:AA:AA-BB:BB:BB:BB:BB:BB,...");
+            }
+        }
+
+        return new ValidationResult(true);
+    }
+
+    private boolean validateRangePart(String rangePart) {
+        return MAC_ADDRESS_PATTERN.matcher(rangePart).matches();
+    }
+}
diff --git 
a/backend/manager/tools/src/test/java/org/ovirt/engine/core/config/entity/helper/MacAddressPoolRangesValueHelperTest.java
 
b/backend/manager/tools/src/test/java/org/ovirt/engine/core/config/entity/helper/MacAddressPoolRangesValueHelperTest.java
new file mode 100644
index 0000000..8d50dbb
--- /dev/null
+++ 
b/backend/manager/tools/src/test/java/org/ovirt/engine/core/config/entity/helper/MacAddressPoolRangesValueHelperTest.java
@@ -0,0 +1,51 @@
+package org.ovirt.engine.core.config.entity.helper;
+
+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 MacAddressPoolRangesValueHelperTest {
+
+    private MacAddressPoolRangesValueHelper validator;
+    private String ranges;
+    private boolean expectedResult;
+
+    public MacAddressPoolRangesValueHelperTest(String ranges, Boolean 
expectedResult) {
+        this.ranges = ranges;
+        this.expectedResult = expectedResult;
+        validator = new MacAddressPoolRangesValueHelper();
+    }
+
+    @Test
+    public void validateRanges() {
+        assertEquals(expectedResult, validator.validate(null, ranges).isOk());
+    }
+
+    @Parameterized.Parameters
+    public static Collection<Object[]> ipAddressParams() {
+        return Arrays.asList(new Object[][] {
+                { "AA:AA:AA:AA:AA:AA-BB:BB:BB:BB:BB:BB", true },
+                { "AA:AA:AA:AA:AA:AA-bb:bb:bb:bb:bb:bb", true },
+                { "aa:aa:aa:aa:aa:aa-BB:BB:BB:BB:BB:BB", true },
+                { 
"AA:AA:AA:AA:AA:AA-BB:BB:BB:BB:BB:BB,AA:AA:AA:AA:AA:AA-BB:BB:BB:BB:BB:BB", true 
},
+                { 
"AA:AA:AA:AA:AA:AA-BB:BB:BB:BB:BB:BB,CC:CC:CC:CC:CC:CC-DD:DD:DD:DD:DD:DD", true 
},
+                { 
"CC:CC:CC:CC:CC:CC-DD:DD:DD:DD:DD:DD,AA:AA:AA:AA:AA:AA-BB:BB:BB:BB:BB:BB", true 
},
+                { "BB:BB:BB:BB:BB:BB-AA:AA:AA:AA:AA:AA", false },
+                { "BB:BB:BB:BB:BB:BB-aa:aa:aa:aa:aa:aa", false },
+                { "bb:bb:bb:bb:bb:bb-AA:AA:AA:AA:AA:AA", false },
+                { "AA:AA:AA:AA:AA:AA,BB:BB:BB:BB:BB:BB", false },
+                { "AA:AA:AA:AA:AA,BB:BB:BB:BB:BB:BB", false },
+                { "AA-AA-AA-AA-AA-AA-BB-BB-BB-BB-BB-BB", false },
+                { 
"AA:AA:AA:AA:AA:AA-BB:BB:BB:BB:BB:BB,XA:AA:AA:AA:AA:AA-BB:BB:BB:BB:BB:BB", 
false },
+                { null, false },
+                { "", false },
+                { " ", false },
+        });
+    }
+}
diff --git a/packaging/etc/engine-config/engine-config.properties 
b/packaging/etc/engine-config/engine-config.properties
index 4f9074f..9fb2088 100644
--- a/packaging/etc/engine-config/engine-config.properties
+++ b/packaging/etc/engine-config/engine-config.properties
@@ -56,7 +56,8 @@
 LowUtilizationForEvenlyDistribute.type=Integer
 LowUtilizationForPowerSave.description="Low Utilization Limit For Power Save 
selection algorithm"
 LowUtilizationForPowerSave.type=Integer
-MacPoolRanges.description="MAC Addresses Pool Ranges"
+MacPoolRanges.description="MAC Addresses Pool Ranges (e.g. 
AA:AA:AA:AA:AA:AA-BB:BB:BB:BB:BB:BB,...")"
+MacPoolRanges.type=MacAddressPoolRanges
 MaxMacsCountInPool.description="Maximum MAC Addresses count in Pool"
 MaxMacsCountInPool.type=Integer
 MaxNumberOfHostsInStoragePool.description="Max number of hosts in Storage Pool"


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I821290d8d48ed164a5c653367d59774bd97bf67e
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Moti Asayag <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to