From a6fdce9e1da7b2dd63fdddcc2b30396a91da7aed Mon Sep 17 00:00:00 2001
From: Bernardo Dal Seno <bdalseno@google.com>
Date: Thu, 14 Mar 2013 17:46:57 +0100
Subject: [PATCH] Unit test for cli.CreateIPolicyFromOpts()

Useful for subsequent patches.

Signed-off-by: Bernardo Dal Seno <bdalseno@google.com>
Reviewed-by: Helga Velroyen <helgav@google.com>
---
 test/py/ganeti.cli_unittest.py | 145 ++++++++++++++++++++++++++++++++-
 1 file changed, 144 insertions(+), 1 deletion(-)

diff --git a/test/py/ganeti.cli_unittest.py b/test/py/ganeti.cli_unittest.py
index ce25e7802..4a3072e31 100755
--- a/test/py/ganeti.cli_unittest.py
+++ b/test/py/ganeti.cli_unittest.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 #
 
-# Copyright (C) 2008, 2011 Google Inc.
+# Copyright (C) 2008, 2011, 2012, 2013 Google Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -1122,5 +1122,148 @@ class TestSerializeGenericInfo(unittest.TestCase):
     self._RunTest(dict(data), expected)
 
 
+class TestCreateIPolicyFromOpts(unittest.TestCase):
+  """Test case for cli.CreateIPolicyFromOpts."""
+  def _RecursiveCheckMergedDicts(self, default_pol, diff_pol, merged_pol):
+    self.assertTrue(type(default_pol) is dict)
+    self.assertTrue(type(diff_pol) is dict)
+    self.assertTrue(type(merged_pol) is dict)
+    self.assertEqual(frozenset(default_pol.keys()),
+                     frozenset(merged_pol.keys()))
+    for (key, val) in merged_pol.items():
+      if key in diff_pol:
+        if type(val) is dict:
+          self._RecursiveCheckMergedDicts(default_pol[key], diff_pol[key], val)
+        else:
+          self.assertEqual(val, diff_pol[key])
+      else:
+        self.assertEqual(val, default_pol[key])
+
+  def testClusterPolicy(self):
+    exp_pol0 = {
+      constants.ISPECS_MIN: {},
+      constants.ISPECS_MAX: {},
+      constants.ISPECS_STD: {},
+      }
+    exp_pol1 = {
+      constants.ISPECS_MIN: {
+        constants.ISPEC_CPU_COUNT: 2,
+        constants.ISPEC_DISK_COUNT: 1,
+        },
+      constants.ISPECS_MAX: {
+        constants.ISPEC_MEM_SIZE: 12*1024,
+        constants.ISPEC_DISK_COUNT: 2,
+        },
+      constants.ISPECS_STD: {
+        constants.ISPEC_CPU_COUNT: 2,
+        constants.ISPEC_DISK_COUNT: 2,
+        },
+      constants.IPOLICY_VCPU_RATIO: 3.1,
+      }
+    exp_pol2 = {
+      constants.ISPECS_MIN: {
+        constants.ISPEC_DISK_SIZE: 512,
+        constants.ISPEC_NIC_COUNT: 2,
+        },
+      constants.ISPECS_MAX: {
+        constants.ISPEC_NIC_COUNT: 3,
+        },
+      constants.ISPECS_STD: {
+        constants.ISPEC_CPU_COUNT: 2,
+        constants.ISPEC_NIC_COUNT: 3,
+        },
+      constants.IPOLICY_SPINDLE_RATIO: 1.3,
+      constants.IPOLICY_DTS: ["templates"],
+      }
+    for fillall in [False, True]:
+      pol0 = cli.CreateIPolicyFromOpts(
+        ispecs_mem_size={},
+        ispecs_cpu_count={},
+        ispecs_disk_count={},
+        ispecs_disk_size={},
+        ispecs_nic_count={},
+        ipolicy_disk_templates=None,
+        ipolicy_vcpu_ratio=None,
+        ipolicy_spindle_ratio=None,
+        fill_all=fillall
+        )
+      if fillall:
+        self.assertEqual(pol0, constants.IPOLICY_DEFAULTS)
+      else:
+        self.assertEqual(pol0, exp_pol0)
+      pol1 = cli.CreateIPolicyFromOpts(
+        ispecs_mem_size={"max": "12g"},
+        ispecs_cpu_count={"min": 2, "std": 2},
+        ispecs_disk_count={"min": 1, "max": 2, "std": 2},
+        ispecs_disk_size={},
+        ispecs_nic_count={},
+        ipolicy_disk_templates=None,
+        ipolicy_vcpu_ratio=3.1,
+        ipolicy_spindle_ratio=None,
+        fill_all=fillall
+        )
+      if fillall:
+        self._RecursiveCheckMergedDicts(constants.IPOLICY_DEFAULTS,
+                                        exp_pol1, pol1)
+      else:
+        self.assertEqual(pol1, exp_pol1)
+      pol2 = cli.CreateIPolicyFromOpts(
+        ispecs_mem_size={},
+        ispecs_cpu_count={"std": 2},
+        ispecs_disk_count={},
+        ispecs_disk_size={"min": "0.5g"},
+        ispecs_nic_count={"min": 2, "max": 3, "std": 3},
+        ipolicy_disk_templates=["templates"],
+        ipolicy_vcpu_ratio=None,
+        ipolicy_spindle_ratio=1.3,
+        fill_all=fillall
+        )
+      if fillall:
+        self._RecursiveCheckMergedDicts(constants.IPOLICY_DEFAULTS,
+                                        exp_pol2, pol2)
+      else:
+        self.assertEqual(pol2, exp_pol2)
+
+  def testInvalidPolicies(self):
+    self.assertRaises(errors.TypeEnforcementError, cli.CreateIPolicyFromOpts,
+                      ispecs_mem_size={}, ispecs_cpu_count={},
+                      ispecs_disk_count={}, ispecs_disk_size={"std": 1},
+                      ispecs_nic_count={}, ipolicy_disk_templates=None,
+                      ipolicy_vcpu_ratio=None, ipolicy_spindle_ratio=None,
+                      group_ipolicy=True)
+    self.assertRaises(errors.OpPrereqError, cli.CreateIPolicyFromOpts,
+                      ispecs_mem_size={"wrong": "x"}, ispecs_cpu_count={},
+                      ispecs_disk_count={}, ispecs_disk_size={},
+                      ispecs_nic_count={}, ipolicy_disk_templates=None,
+                      ipolicy_vcpu_ratio=None, ipolicy_spindle_ratio=None)
+    self.assertRaises(errors.TypeEnforcementError, cli.CreateIPolicyFromOpts,
+                      ispecs_mem_size={}, ispecs_cpu_count={"min": "default"},
+                      ispecs_disk_count={}, ispecs_disk_size={},
+                      ispecs_nic_count={}, ipolicy_disk_templates=None,
+                      ipolicy_vcpu_ratio=None, ipolicy_spindle_ratio=None)
+
+  def testAllowedValues(self):
+    allowedv = "blah"
+    exp_pol1 = {
+      constants.ISPECS_MIN: {
+        constants.ISPEC_CPU_COUNT: allowedv,
+        },
+      constants.ISPECS_MAX: {
+        },
+      constants.ISPECS_STD: {
+        },
+      }
+    pol1 = cli.CreateIPolicyFromOpts(ispecs_mem_size={},
+                                     ispecs_cpu_count={"min": allowedv},
+                                     ispecs_disk_count={},
+                                     ispecs_disk_size={},
+                                     ispecs_nic_count={},
+                                     ipolicy_disk_templates=None,
+                                     ipolicy_vcpu_ratio=None,
+                                     ipolicy_spindle_ratio=None,
+                                     allowed_values=[allowedv])
+    self.assertEqual(pol1, exp_pol1)
+
+
 if __name__ == "__main__":
   testutils.GanetiTestProgram()
-- 
GitLab