From d1deeebf7ebdd93661255f6bf583d1c42846b5e5 Mon Sep 17 00:00:00 2001 From: Rene Kschamer <26967205+rkschamer@users.noreply.github.com> Date: Fri, 5 Apr 2024 14:14:00 +0200 Subject: [PATCH] adding format_quantity tests --- kubernetes/e2e_test/test_utils.py | 71 ++++++++++++++++++++++++++++++- kubernetes/utils/quantity.py | 3 ++ 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/kubernetes/e2e_test/test_utils.py b/kubernetes/e2e_test/test_utils.py index cc80e6f20..a669438ee 100644 --- a/kubernetes/e2e_test/test_utils.py +++ b/kubernetes/e2e_test/test_utils.py @@ -13,13 +13,15 @@ # under the License. import unittest +from decimal import Decimal from os import path import yaml -from kubernetes import utils, client +from kubernetes import client, utils from kubernetes.client.rest import ApiException from kubernetes.e2e_test import base +from kubernetes.utils import quantity class TestUtils(unittest.TestCase): @@ -563,3 +565,70 @@ def test_create_from_list_in_multi_resource_yaml_namespaced(self): name="mock-pod-1", namespace=self.test_namespace, body={}) app_api.delete_namespaced_deployment( name="mock", namespace=self.test_namespace, body={}) + + +class TestUtilsUnitTests(unittest.TestCase): + + def test_format_quantity(self): + """Unit test for quantity.format_quantity. Testing the different SI suffixes and + function should return the expected string""" + + # == unknown suffixes == + self.assertRaises( + ValueError, lambda: quantity.format_quantity(Decimal(1_000), "kb") + ) + self.assertRaises( + ValueError, lambda: quantity.format_quantity(Decimal(1_000), "ki") + ) + self.assertRaises( + ValueError, lambda: quantity.format_quantity(Decimal(1_000), "foo") + ) + + # == no suffix == + self.assertEqual(quantity.format_quantity(Decimal(1_000), ""), "1000") + self.assertEqual(quantity.format_quantity(Decimal(1_000), None), "1000") + + # == base 1024 == + self.assertEqual(quantity.format_quantity(Decimal(1024), "Ki"), "1Ki") + self.assertEqual(quantity.format_quantity(Decimal(1024**2), "Mi"), "1Mi") + self.assertEqual(quantity.format_quantity(Decimal(1024**3), "Gi"), "1Gi") + self.assertEqual(quantity.format_quantity(Decimal(1024**4), "Ti"), "1Ti") + self.assertEqual(quantity.format_quantity(Decimal(1024**5), "Pi"), "1Pi") + self.assertEqual(quantity.format_quantity(Decimal(1024**6), "Ei"), "1Ei") + self.assertEqual(quantity.format_quantity(Decimal(1024**2), "Ki"), "1024Ki") + self.assertEqual(quantity.format_quantity(Decimal((1024**3) / 2), "Gi"), "0.5Gi") + # Decimal((1024**3)/3) are 0.3333333333333333148296162562Gi; expecting to + # be quantized to 0.3Gi + self.assertEqual( + quantity.format_quantity( + Decimal( + (1024**3) / 3), + "Gi", + quantize=Decimal(.5)), + "0.3Gi") + + # == base 1000 == + self.assertEqual(quantity.format_quantity(Decimal(0.000_000_001), "n"), "1n") + self.assertEqual(quantity.format_quantity(Decimal(0.000_001), "u"), "1u") + self.assertEqual(quantity.format_quantity(Decimal(0.001), "m"), "1m") + self.assertEqual(quantity.format_quantity(Decimal(1_000), "k"), "1k") + self.assertEqual(quantity.format_quantity(Decimal(1_000_000), "M"), "1M") + self.assertEqual(quantity.format_quantity(Decimal(1_000_000_000), "G"), "1G") + self.assertEqual( + quantity.format_quantity(Decimal(1_000_000_000_000), "T"), "1T" + ) + self.assertEqual( + quantity.format_quantity(Decimal(1_000_000_000_000_000), "P"), "1P" + ) + self.assertEqual( + quantity.format_quantity(Decimal(1_000_000_000_000_000_000), "E"), "1E" + ) + self.assertEqual(quantity.format_quantity(Decimal(1_000_000), "k"), "1000k") + # Decimal(1_000_000/3) are 333.3333333333333139307796955k; expecting to + # be quantized to 333k + self.assertEqual( + quantity.format_quantity( + Decimal(1_000_000 / 3), "k", quantize=Decimal(1000) + ), + "333k", + ) diff --git a/kubernetes/utils/quantity.py b/kubernetes/utils/quantity.py index e6042a4fa..484f34719 100644 --- a/kubernetes/utils/quantity.py +++ b/kubernetes/utils/quantity.py @@ -120,6 +120,9 @@ def format_quantity(quantity_value, suffix, quantize=None) -> str: ValueError if the SI suffix is not supported. """ + if not suffix: + return str(quantity_value) + if suffix.endswith("i"): base = 1024 elif len(suffix) == 1: