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
