Skip to content

Commit d1deeeb

Browse files
committed
adding format_quantity tests
1 parent 76ffd71 commit d1deeeb

File tree

2 files changed

+73
-1
lines changed

2 files changed

+73
-1
lines changed

kubernetes/e2e_test/test_utils.py

+70-1
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@
1313
# under the License.
1414

1515
import unittest
16+
from decimal import Decimal
1617
from os import path
1718

1819
import yaml
1920

20-
from kubernetes import utils, client
21+
from kubernetes import client, utils
2122
from kubernetes.client.rest import ApiException
2223
from kubernetes.e2e_test import base
24+
from kubernetes.utils import quantity
2325

2426

2527
class TestUtils(unittest.TestCase):
@@ -563,3 +565,70 @@ def test_create_from_list_in_multi_resource_yaml_namespaced(self):
563565
name="mock-pod-1", namespace=self.test_namespace, body={})
564566
app_api.delete_namespaced_deployment(
565567
name="mock", namespace=self.test_namespace, body={})
568+
569+
570+
class TestUtilsUnitTests(unittest.TestCase):
571+
572+
def test_format_quantity(self):
573+
"""Unit test for quantity.format_quantity. Testing the different SI suffixes and
574+
function should return the expected string"""
575+
576+
# == unknown suffixes ==
577+
self.assertRaises(
578+
ValueError, lambda: quantity.format_quantity(Decimal(1_000), "kb")
579+
)
580+
self.assertRaises(
581+
ValueError, lambda: quantity.format_quantity(Decimal(1_000), "ki")
582+
)
583+
self.assertRaises(
584+
ValueError, lambda: quantity.format_quantity(Decimal(1_000), "foo")
585+
)
586+
587+
# == no suffix ==
588+
self.assertEqual(quantity.format_quantity(Decimal(1_000), ""), "1000")
589+
self.assertEqual(quantity.format_quantity(Decimal(1_000), None), "1000")
590+
591+
# == base 1024 ==
592+
self.assertEqual(quantity.format_quantity(Decimal(1024), "Ki"), "1Ki")
593+
self.assertEqual(quantity.format_quantity(Decimal(1024**2), "Mi"), "1Mi")
594+
self.assertEqual(quantity.format_quantity(Decimal(1024**3), "Gi"), "1Gi")
595+
self.assertEqual(quantity.format_quantity(Decimal(1024**4), "Ti"), "1Ti")
596+
self.assertEqual(quantity.format_quantity(Decimal(1024**5), "Pi"), "1Pi")
597+
self.assertEqual(quantity.format_quantity(Decimal(1024**6), "Ei"), "1Ei")
598+
self.assertEqual(quantity.format_quantity(Decimal(1024**2), "Ki"), "1024Ki")
599+
self.assertEqual(quantity.format_quantity(Decimal((1024**3) / 2), "Gi"), "0.5Gi")
600+
# Decimal((1024**3)/3) are 0.3333333333333333148296162562Gi; expecting to
601+
# be quantized to 0.3Gi
602+
self.assertEqual(
603+
quantity.format_quantity(
604+
Decimal(
605+
(1024**3) / 3),
606+
"Gi",
607+
quantize=Decimal(.5)),
608+
"0.3Gi")
609+
610+
# == base 1000 ==
611+
self.assertEqual(quantity.format_quantity(Decimal(0.000_000_001), "n"), "1n")
612+
self.assertEqual(quantity.format_quantity(Decimal(0.000_001), "u"), "1u")
613+
self.assertEqual(quantity.format_quantity(Decimal(0.001), "m"), "1m")
614+
self.assertEqual(quantity.format_quantity(Decimal(1_000), "k"), "1k")
615+
self.assertEqual(quantity.format_quantity(Decimal(1_000_000), "M"), "1M")
616+
self.assertEqual(quantity.format_quantity(Decimal(1_000_000_000), "G"), "1G")
617+
self.assertEqual(
618+
quantity.format_quantity(Decimal(1_000_000_000_000), "T"), "1T"
619+
)
620+
self.assertEqual(
621+
quantity.format_quantity(Decimal(1_000_000_000_000_000), "P"), "1P"
622+
)
623+
self.assertEqual(
624+
quantity.format_quantity(Decimal(1_000_000_000_000_000_000), "E"), "1E"
625+
)
626+
self.assertEqual(quantity.format_quantity(Decimal(1_000_000), "k"), "1000k")
627+
# Decimal(1_000_000/3) are 333.3333333333333139307796955k; expecting to
628+
# be quantized to 333k
629+
self.assertEqual(
630+
quantity.format_quantity(
631+
Decimal(1_000_000 / 3), "k", quantize=Decimal(1000)
632+
),
633+
"333k",
634+
)

kubernetes/utils/quantity.py

+3
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ def format_quantity(quantity_value, suffix, quantize=None) -> str:
120120
ValueError if the SI suffix is not supported.
121121
"""
122122

123+
if not suffix:
124+
return str(quantity_value)
125+
123126
if suffix.endswith("i"):
124127
base = 1024
125128
elif len(suffix) == 1:

0 commit comments

Comments
 (0)