Commit 64760879 authored by Bernardo Dal Seno's avatar Bernardo Dal Seno

Unit tests for config.ConfigWriter.VerifyConfig()

The test is aimed mostly at instance policies, which changed recently.
Signed-off-by: default avatarBernardo Dal Seno <bdalseno@google.com>
Reviewed-by: default avatarHelga Velroyen <helgav@google.com>
parent 0b94cda8
#!/usr/bin/python
#
# Copyright (C) 2006, 2007, 2010, 2011, 2012 Google Inc.
# Copyright (C) 2006, 2007, 2010, 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
......@@ -65,7 +65,7 @@ class TestConfigRunner(unittest.TestCase):
pass
def _get_object(self):
"""Returns a instance of ConfigWriter"""
"""Returns an instance of ConfigWriter"""
cfg = config.ConfigWriter(cfg_file=self.cfg_file, offline=True,
_getents=_StubGetEntResolver)
return cfg
......@@ -428,6 +428,115 @@ class TestConfigRunner(unittest.TestCase):
finally:
node2.group = orig_group
def _TestVerifyConfigIPolicy(self, ipolicy, ipowner, cfg, isgroup):
INVALID_KEY = "this_key_cannot_exist"
ipolicy[INVALID_KEY] = None
# A call to cluster.SimpleFillIPolicy causes different kinds of error
# depending on the owner (cluster or group)
if isgroup:
errs = cfg.VerifyConfig()
# FIXME: A bug in FillIPolicy (issue 401) makes this test fail, so we
# invert the assertions for the time being
self.assertFalse(len(errs) >= 1)
errstr = "%s has invalid instance policy" % ipowner
self.assertFalse(_IsErrorInList(errstr, errs))
else:
self.assertRaises(AssertionError, cfg.VerifyConfig)
del ipolicy[INVALID_KEY]
errs = cfg.VerifyConfig()
self.assertFalse(errs)
key = list(constants.IPOLICY_PARAMETERS)[0]
hasoldv = (key in ipolicy)
if hasoldv:
oldv = ipolicy[key]
ipolicy[key] = "blah"
errs = cfg.VerifyConfig()
self.assertTrue(len(errs) >= 1)
self.assertTrue(_IsErrorInList("%s has invalid instance policy" % ipowner,
errs))
if hasoldv:
ipolicy[key] = oldv
else:
del ipolicy[key]
ispeclist = [
(ipolicy[constants.ISPECS_MINMAX][constants.ISPECS_MIN],
"%s/%s" % (constants.ISPECS_MINMAX, constants.ISPECS_MIN)),
(ipolicy[constants.ISPECS_MINMAX][constants.ISPECS_MAX],
"%s/%s" % (constants.ISPECS_MINMAX, constants.ISPECS_MAX)),
(ipolicy[constants.ISPECS_STD], constants.ISPECS_STD),
]
for (ispec, ispecpath) in ispeclist:
ispec[INVALID_KEY] = None
errs = cfg.VerifyConfig()
self.assertTrue(len(errs) >= 1)
self.assertTrue(_IsErrorInList(("%s has invalid ipolicy/%s" %
(ipowner, ispecpath)), errs))
del ispec[INVALID_KEY]
errs = cfg.VerifyConfig()
self.assertFalse(errs)
for par in constants.ISPECS_PARAMETERS:
hasoldv = par in ispec
if hasoldv:
oldv = ispec[par]
ispec[par] = "blah"
errs = cfg.VerifyConfig()
self.assertTrue(len(errs) >= 1)
self.assertTrue(_IsErrorInList(("%s has invalid ipolicy/%s" %
(ipowner, ispecpath)), errs))
if hasoldv:
ispec[par] = oldv
else:
del ispec[par]
errs = cfg.VerifyConfig()
self.assertFalse(errs)
def _TestVerifyConfigGroupIPolicy(self, groupinfo, cfg):
old_ipolicy = groupinfo.ipolicy
ipolicy = cfg.GetClusterInfo().SimpleFillIPolicy({})
groupinfo.ipolicy = ipolicy
# Test partial policies
for key in constants.IPOLICY_ALL_KEYS:
self.assertTrue(key in ipolicy)
oldv = ipolicy[key]
del ipolicy[key]
errs = cfg.VerifyConfig()
self.assertFalse(errs)
ipolicy[key] = oldv
# Test partial minmax specs
minmax = ipolicy[constants.ISPECS_MINMAX]
for ispec_key in minmax.keys():
ispec = minmax[ispec_key]
for par in constants.ISPECS_PARAMETERS:
oldv = ispec[par]
del ispec[par]
errs = cfg.VerifyConfig()
self.assertFalse(errs)
ispec[par] = oldv
groupinfo.ipolicy = old_ipolicy
def _TestVerifyConfigClusterIPolicy(self, ipolicy, cfg):
# Test partial policies
for key in constants.IPOLICY_ALL_KEYS:
self.assertTrue(key in ipolicy)
oldv = ipolicy[key]
del ipolicy[key]
self.assertRaises(AssertionError, cfg.VerifyConfig)
ipolicy[key] = oldv
# Test partial minmax specs
minmax = ipolicy[constants.ISPECS_MINMAX]
for key in constants.ISPECS_MINMAX_KEYS:
self.assertTrue(key in minmax)
oldv = minmax[key]
del minmax[key]
self.assertRaises(AssertionError, cfg.VerifyConfig)
minmax[key] = oldv
errs = cfg.VerifyConfig()
self.assertFalse(errs)
def testVerifyConfig(self):
cfg = self._get_object()
......@@ -445,6 +554,15 @@ class TestConfigRunner(unittest.TestCase):
errs = cfg.VerifyConfig()
self.assertFalse(errs)
cluster = cfg.GetClusterInfo()
nodegroup = cfg.GetNodeGroup(cfg.GetNodeGroupList()[0])
self._TestVerifyConfigIPolicy(cluster.ipolicy, "cluster", cfg, False)
self._TestVerifyConfigClusterIPolicy(cluster.ipolicy, cfg)
self._TestVerifyConfigIPolicy(nodegroup.ipolicy, nodegroup.name, cfg, True)
self._TestVerifyConfigGroupIPolicy(nodegroup, cfg)
nodegroup.ipolicy = cluster.SimpleFillIPolicy(nodegroup.ipolicy)
self._TestVerifyConfigIPolicy(nodegroup.ipolicy, nodegroup.name, cfg, True)
def _IsErrorInList(err_str, err_list):
return any(map(lambda e: err_str in e, err_list))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment