From 5dd7d15b602ff861cb3b590e7ff08d01ba53f145 Mon Sep 17 00:00:00 2001
From: Bernardo Dal Seno <bdalseno@google.com>
Date: Mon, 18 Feb 2013 18:02:06 +0100
Subject: [PATCH] Unit tests for cmdlib._GetUpdatedIPolicy()

Not 100% coverage, though.

Signed-off-by: Bernardo Dal Seno <bdalseno@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
---
 test/py/ganeti.cmdlib_unittest.py | 100 ++++++++++++++++++++++++++++++
 1 file changed, 100 insertions(+)

diff --git a/test/py/ganeti.cmdlib_unittest.py b/test/py/ganeti.cmdlib_unittest.py
index bcb574ec5..544d93014 100755
--- a/test/py/ganeti.cmdlib_unittest.py
+++ b/test/py/ganeti.cmdlib_unittest.py
@@ -1714,5 +1714,105 @@ class TestVerifyErrors(unittest.TestCase):
     self.assertTrue(self._ERR1ID in lu.msglist[0])
 
 
+class TestGetUpdatedIPolicy(unittest.TestCase):
+  """Tests for cmdlib._GetUpdatedIPolicy()"""
+  _OLD_CLUSTER_POLICY = {
+    constants.IPOLICY_VCPU_RATIO: 1.5,
+    constants.ISPECS_MIN: {
+      constants.ISPEC_MEM_SIZE: 20,
+      constants.ISPEC_CPU_COUNT: 2,
+      },
+    constants.ISPECS_MAX: {},
+    constants.ISPECS_STD: {},
+    }
+
+  _OLD_GROUP_POLICY = {
+    constants.IPOLICY_SPINDLE_RATIO: 2.5,
+    constants.ISPECS_MIN: {
+      constants.ISPEC_DISK_SIZE: 20,
+      constants.ISPEC_NIC_COUNT: 2,
+      },
+    constants.ISPECS_MAX: {},
+    }
+
+  def _TestSetSpecs(self, old_policy, isgroup):
+    ispec_key = constants.ISPECS_MIN
+    diff_ispec = {
+      constants.ISPEC_MEM_SIZE: 50,
+      constants.ISPEC_DISK_SIZE: 30,
+      }
+    diff_policy = {
+      ispec_key: diff_ispec
+      }
+    new_policy = cmdlib._GetUpdatedIPolicy(old_policy, diff_policy,
+                                           group_policy=isgroup)
+    new_ispec = new_policy[ispec_key]
+    for key in diff_ispec:
+      self.assertTrue(key in new_ispec)
+      self.assertEqual(new_ispec[key], diff_ispec[key])
+    for key in old_policy:
+      if not key in diff_policy:
+        self.assertTrue(key in new_policy)
+        self.assertEqual(new_policy[key], old_policy[key])
+    old_ispec = old_policy[ispec_key]
+    for key in old_ispec:
+      if not key in diff_ispec:
+        self.assertTrue(key in new_ispec)
+        self.assertEqual(new_ispec[key], old_ispec[key])
+
+  def _TestSet(self, old_policy, isgroup):
+    diff_policy = {
+      constants.IPOLICY_VCPU_RATIO: 3,
+      constants.IPOLICY_SPINDLE_RATIO: 1.9,
+      }
+    new_policy = cmdlib._GetUpdatedIPolicy(old_policy, diff_policy,
+                                           group_policy=isgroup)
+    for key in diff_policy:
+      self.assertTrue(key in new_policy)
+      self.assertEqual(new_policy[key], diff_policy[key])
+    for key in old_policy:
+      if not key in diff_policy:
+        self.assertTrue(key in new_policy)
+        self.assertEqual(new_policy[key], old_policy[key])
+
+  def testSet(self):
+    self._TestSet(self._OLD_GROUP_POLICY, True)
+    self._TestSetSpecs(self._OLD_GROUP_POLICY, True)
+    self._TestSet(self._OLD_CLUSTER_POLICY, False)
+    self._TestSetSpecs(self._OLD_CLUSTER_POLICY, False)
+
+  def testUnset(self):
+    old_policy = self._OLD_GROUP_POLICY
+    diff_policy = {
+      constants.IPOLICY_SPINDLE_RATIO: constants.VALUE_DEFAULT,
+      }
+    new_policy = cmdlib._GetUpdatedIPolicy(old_policy, diff_policy,
+                                           group_policy=True)
+    for key in diff_policy:
+      self.assertFalse(key in new_policy)
+    for key in old_policy:
+      if not key in diff_policy:
+        self.assertTrue(key in new_policy)
+        self.assertEqual(new_policy[key], old_policy[key])
+
+  def _TestInvalidKeys(self, old_policy, isgroup):
+    INVALID_DICT = {
+      "this_key_shouldnt_be_allowed": 3,
+      }
+    invalid_policy = INVALID_DICT
+    self.assertRaises(errors.OpPrereqError, cmdlib._GetUpdatedIPolicy,
+                      old_policy, invalid_policy, group_policy=isgroup)
+    for key in constants.IPOLICY_ISPECS:
+      invalid_ispec = {
+        key: INVALID_DICT,
+        }
+      self.assertRaises(errors.TypeEnforcementError, cmdlib._GetUpdatedIPolicy,
+                        old_policy, invalid_ispec, group_policy=isgroup)
+
+  def testInvalidKeys(self):
+    self._TestInvalidKeys(self._OLD_GROUP_POLICY, True)
+    self._TestInvalidKeys(self._OLD_CLUSTER_POLICY, False)
+
+
 if __name__ == "__main__":
   testutils.GanetiTestProgram()
-- 
GitLab