diff --git a/test/py/ganeti.cmdlib_unittest.py b/test/py/ganeti.cmdlib_unittest.py
index bcb574ec5f296209cdc99a7b4725b417f49fa0e2..544d930147e015e46d4bc04f8e1fb56ce8ce2c96 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()