|
13 | 13 | # under the License.
|
14 | 14 |
|
15 | 15 | importunittest
|
| 16 | +fromdecimalimportDecimal |
16 | 17 | fromosimportpath
|
17 | 18 |
|
18 | 19 | importyaml
|
19 | 20 |
|
20 |
| -fromkubernetesimportutils,client |
| 21 | +fromkubernetesimportclient,utils |
21 | 22 | fromkubernetes.client.restimportApiException
|
22 | 23 | fromkubernetes.e2e_testimportbase
|
| 24 | +fromkubernetes.utilsimportquantity |
23 | 25 |
|
24 | 26 |
|
25 | 27 | classTestUtils(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 | +classTestUtilsUnitTests(unittest.TestCase): |
| 613 | + |
| 614 | +deftest_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 | +deftest_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 | + ) |