|
13 | 13 | # under the License.
|
14 | 14 |
|
15 | 15 | import unittest
|
| 16 | +from decimal import Decimal |
16 | 17 | from os import path
|
17 | 18 |
|
18 | 19 | import yaml
|
19 | 20 |
|
20 |
| -from kubernetes import utils, client |
| 21 | +from kubernetes import client, utils |
21 | 22 | from kubernetes.client.rest import ApiException
|
22 | 23 | from kubernetes.e2e_test import base
|
| 24 | +from kubernetes.utils import quantity |
23 | 25 |
|
24 | 26 |
|
25 | 27 | class TestUtils(unittest.TestCase):
|
@@ -605,3 +607,113 @@ def test_create_from_list_in_multi_resource_yaml_namespaced(self):
|
605 | 607 | name="mock-pod-1", namespace=self.test_namespace, body={})
|
606 | 608 | app_api.delete_namespaced_deployment(
|
607 | 609 | name="mock", namespace=self.test_namespace, body={})
|
| 610 | + |
| 611 | + |
| 612 | +class TestUtilsUnitTests(unittest.TestCase): |
| 613 | + |
| 614 | + def test_parse_quantity(self): |
| 615 | + # == trivial returns == |
| 616 | + self.assertEqual(quantity.parse_quantity(Decimal(1)), Decimal(1)) |
| 617 | + self.assertEqual(quantity.parse_quantity(float(1)), Decimal(1)) |
| 618 | + self.assertEqual(quantity.parse_quantity(1), Decimal(1)) |
| 619 | + |
| 620 | + # == exceptions == |
| 621 | + self.assertRaises( |
| 622 | + ValueError, lambda: quantity.parse_quantity("1000kb") |
| 623 | + ) |
| 624 | + self.assertRaises( |
| 625 | + ValueError, lambda: quantity.parse_quantity("1000ki") |
| 626 | + ) |
| 627 | + self.assertRaises(ValueError, lambda: quantity.parse_quantity("1000foo")) |
| 628 | + self.assertRaises(ValueError, lambda: quantity.parse_quantity("foo")) |
| 629 | + |
| 630 | + # == no suffix == |
| 631 | + self.assertEqual(quantity.parse_quantity("1000"), Decimal(1000)) |
| 632 | + |
| 633 | + # == base 1024 == |
| 634 | + self.assertEqual(quantity.parse_quantity("1Ki"), Decimal(1024)) |
| 635 | + self.assertEqual(quantity.parse_quantity("1Mi"), Decimal(1024**2)) |
| 636 | + self.assertEqual(quantity.parse_quantity("1Gi"), Decimal(1024**3)) |
| 637 | + self.assertEqual(quantity.parse_quantity("1Ti"), Decimal(1024**4)) |
| 638 | + self.assertEqual(quantity.parse_quantity("1Pi"), Decimal(1024**5)) |
| 639 | + self.assertEqual(quantity.parse_quantity("1Ei"), Decimal(1024**6)) |
| 640 | + self.assertEqual(quantity.parse_quantity("1024Ki"), Decimal(1024**2)) |
| 641 | + self.assertEqual(quantity.parse_quantity("0.5Ki"), Decimal(512)) |
| 642 | + |
| 643 | + # == base 1000 == |
| 644 | + self.assertAlmostEqual(quantity.parse_quantity("1n"), Decimal(0.000_000_001)) |
| 645 | + self.assertAlmostEqual(quantity.parse_quantity("1u"), Decimal(0.000_001)) |
| 646 | + self.assertAlmostEqual(quantity.parse_quantity("1m"), Decimal(0.001)) |
| 647 | + self.assertEqual(quantity.parse_quantity("1k"), Decimal(1_000)) |
| 648 | + self.assertEqual(quantity.parse_quantity("1M"), Decimal(1_000_000)) |
| 649 | + self.assertEqual(quantity.parse_quantity("1G"), Decimal(1_000_000_000)) |
| 650 | + self.assertEqual(quantity.parse_quantity("1T"), Decimal(1_000_000_000_000)) |
| 651 | + self.assertEqual(quantity.parse_quantity("1P"), Decimal(1_000_000_000_000_000)) |
| 652 | + self.assertEqual( |
| 653 | + quantity.parse_quantity("1E"), Decimal(1_000_000_000_000_000_000)) |
| 654 | + self.assertEqual(quantity.parse_quantity("1000k"), Decimal(1_000_000)) |
| 655 | + self.assertEqual(quantity.parse_quantity("500k"), Decimal(500_000)) |
| 656 | + |
| 657 | + def test_format_quantity(self): |
| 658 | + """Unit test for quantity.format_quantity. Testing the different SI suffixes and |
| 659 | + function should return the expected string""" |
| 660 | + |
| 661 | + # == unknown suffixes == |
| 662 | + self.assertRaises( |
| 663 | + ValueError, lambda: quantity.format_quantity(Decimal(1_000), "kb") |
| 664 | + ) |
| 665 | + self.assertRaises( |
| 666 | + ValueError, lambda: quantity.format_quantity(Decimal(1_000), "ki") |
| 667 | + ) |
| 668 | + self.assertRaises( |
| 669 | + ValueError, lambda: quantity.format_quantity(Decimal(1_000), "foo") |
| 670 | + ) |
| 671 | + |
| 672 | + # == no suffix == |
| 673 | + self.assertEqual(quantity.format_quantity(Decimal(1_000), ""), "1000") |
| 674 | + self.assertEqual(quantity.format_quantity(Decimal(1_000), None), "1000") |
| 675 | + |
| 676 | + # == base 1024 == |
| 677 | + self.assertEqual(quantity.format_quantity(Decimal(1024), "Ki"), "1Ki") |
| 678 | + self.assertEqual(quantity.format_quantity(Decimal(1024**2), "Mi"), "1Mi") |
| 679 | + self.assertEqual(quantity.format_quantity(Decimal(1024**3), "Gi"), "1Gi") |
| 680 | + self.assertEqual(quantity.format_quantity(Decimal(1024**4), "Ti"), "1Ti") |
| 681 | + self.assertEqual(quantity.format_quantity(Decimal(1024**5), "Pi"), "1Pi") |
| 682 | + self.assertEqual(quantity.format_quantity(Decimal(1024**6), "Ei"), "1Ei") |
| 683 | + self.assertEqual(quantity.format_quantity(Decimal(1024**2), "Ki"), "1024Ki") |
| 684 | + self.assertEqual(quantity.format_quantity(Decimal((1024**3) / 2), "Gi"), "0.5Gi") |
| 685 | + # Decimal((1024**3)/3) are 0.3333333333333333148296162562Gi; expecting to |
| 686 | + # be quantized to 0.3Gi |
| 687 | + self.assertEqual( |
| 688 | + quantity.format_quantity( |
| 689 | + Decimal( |
| 690 | + (1024**3) / 3), |
| 691 | + "Gi", |
| 692 | + quantize=Decimal(.5)), |
| 693 | + "0.3Gi") |
| 694 | + |
| 695 | + # == base 1000 == |
| 696 | + self.assertEqual(quantity.format_quantity(Decimal(0.000_000_001), "n"), "1n") |
| 697 | + self.assertEqual(quantity.format_quantity(Decimal(0.000_001), "u"), "1u") |
| 698 | + self.assertEqual(quantity.format_quantity(Decimal(0.001), "m"), "1m") |
| 699 | + self.assertEqual(quantity.format_quantity(Decimal(1_000), "k"), "1k") |
| 700 | + self.assertEqual(quantity.format_quantity(Decimal(1_000_000), "M"), "1M") |
| 701 | + self.assertEqual(quantity.format_quantity(Decimal(1_000_000_000), "G"), "1G") |
| 702 | + self.assertEqual( |
| 703 | + quantity.format_quantity(Decimal(1_000_000_000_000), "T"), "1T" |
| 704 | + ) |
| 705 | + self.assertEqual( |
| 706 | + quantity.format_quantity(Decimal(1_000_000_000_000_000), "P"), "1P" |
| 707 | + ) |
| 708 | + self.assertEqual( |
| 709 | + quantity.format_quantity(Decimal(1_000_000_000_000_000_000), "E"), "1E" |
| 710 | + ) |
| 711 | + self.assertEqual(quantity.format_quantity(Decimal(1_000_000), "k"), "1000k") |
| 712 | + # Decimal(1_000_000/3) are 333.3333333333333139307796955k; expecting to |
| 713 | + # be quantized to 333k |
| 714 | + self.assertEqual( |
| 715 | + quantity.format_quantity( |
| 716 | + Decimal(1_000_000 / 3), "k", quantize=Decimal(1000) |
| 717 | + ), |
| 718 | + "333k", |
| 719 | + ) |
0 commit comments