diff --git a/kubernetes/e2e_test/test_utils.py b/kubernetes/e2e_test/test_utils.py index 702ddee8cc..ff9ebb35da 100644 --- a/kubernetes/e2e_test/test_utils.py +++ b/kubernetes/e2e_test/test_utils.py @@ -688,6 +688,11 @@ def test_parse_quantity(self): self.assertRaises( ValueError, lambda: quantity.parse_quantity("1000ki") ) + # "m", "n" and "u" are base 1000 only; there is no mi, ni or ui + for invalid in ("1mi", "1ni", "1ui"): + self.assertRaises( + ValueError, lambda: quantity.parse_quantity(invalid) + ) self.assertRaises(ValueError, lambda: quantity.parse_quantity("1000foo")) self.assertRaises(ValueError, lambda: quantity.parse_quantity("foo")) self.assertRaises( @@ -732,6 +737,10 @@ def test_format_quantity(self): self.assertRaises( ValueError, lambda: quantity.format_quantity(Decimal(1_000), "ki") ) + for invalid in ("mi", "ni", "ui"): + self.assertRaises( + ValueError, lambda: quantity.format_quantity(Decimal(1_000), invalid) + ) self.assertRaises( ValueError, lambda: quantity.format_quantity(Decimal(1_000), "foo") ) diff --git a/kubernetes/utils/quantity.py b/kubernetes/utils/quantity.py index f01befa65d..009f6b486e 100644 --- a/kubernetes/utils/quantity.py +++ b/kubernetes/utils/quantity.py @@ -26,6 +26,9 @@ "E": 6, } +# Only these prefixes exist in base 1024 (Ki, Mi, Gi, Ti, Pi, Ei). +_BINARY_PREFIXES = "KMGTPE" + def parse_quantity(quantity): """ @@ -74,8 +77,8 @@ def parse_quantity(quantity): else: raise ValueError("{} has unknown suffix".format(quantity)) - # handle SI inconsistency - if suffix == "ki": + # handle SI inconsistency: "ki", "mi", "ni" and "ui" are not valid binary suffixes + if base == 1024 and suffix[0] not in _BINARY_PREFIXES: raise ValueError("{} has unknown suffix".format(quantity)) if suffix[0] not in _EXPONENTS: @@ -133,7 +136,7 @@ def format_quantity(quantity_value, suffix, quantize=None) -> str: else: raise ValueError(f"{quantity_value} has unknown suffix") - if suffix == "ki": + if base == 1024 and suffix[0] not in _BINARY_PREFIXES: raise ValueError(f"{quantity_value} has unknown suffix") if suffix[0] not in _EXPONENTS: