Merge "Add validation for polling_namespaces option"
This commit is contained in:
commit
7b3712eb50
@ -29,9 +29,8 @@ CONF = cfg.CONF
|
||||
|
||||
class MultiChoicesOpt(cfg.Opt):
|
||||
def __init__(self, name, choices=None, **kwargs):
|
||||
super(MultiChoicesOpt, self).__init__(name,
|
||||
type=DeduplicatedCfgList(),
|
||||
**kwargs)
|
||||
super(MultiChoicesOpt, self).__init__(
|
||||
name, type=DeduplicatedCfgList(choices), **kwargs)
|
||||
self.choices = choices
|
||||
|
||||
def _get_argparse_kwargs(self, group, **kwargs):
|
||||
@ -45,12 +44,20 @@ class MultiChoicesOpt(cfg.Opt):
|
||||
|
||||
|
||||
class DeduplicatedCfgList(cfg.types.List):
|
||||
def __init__(self, choices=None, **kwargs):
|
||||
super(DeduplicatedCfgList, self).__init__(**kwargs)
|
||||
self.choices = choices or []
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
result = super(DeduplicatedCfgList, self).__call__(*args, **kwargs)
|
||||
if len(result) != len(set(result)):
|
||||
result_set = set(result)
|
||||
if len(result) != len(result_set):
|
||||
LOG.warning(_LW("Duplicated values: %s found in CLI options, "
|
||||
"auto de-duplidated"), result)
|
||||
result = list(set(result))
|
||||
"auto de-duplicated"), result)
|
||||
result = list(result_set)
|
||||
if self.choices and not (result_set <= set(self.choices)):
|
||||
raise Exception('Valid values are %s, but found %s'
|
||||
% (self.choices, result))
|
||||
return result
|
||||
|
||||
|
||||
|
@ -231,6 +231,19 @@ class BinApiTestCase(base.BaseTestCase):
|
||||
class BinCeilometerPollingServiceTestCase(base.BaseTestCase):
|
||||
def setUp(self):
|
||||
super(BinCeilometerPollingServiceTestCase, self).setUp()
|
||||
self.tempfile = None
|
||||
self.subp = None
|
||||
|
||||
def tearDown(self):
|
||||
if self.subp:
|
||||
try:
|
||||
self.subp.kill()
|
||||
except OSError:
|
||||
pass
|
||||
os.remove(self.tempfile)
|
||||
super(BinCeilometerPollingServiceTestCase, self).tearDown()
|
||||
|
||||
def test_starting_with_duplication_namespaces(self):
|
||||
content = ("[DEFAULT]\n"
|
||||
"rpc_backend=fake\n"
|
||||
"[database]\n"
|
||||
@ -240,15 +253,6 @@ class BinCeilometerPollingServiceTestCase(base.BaseTestCase):
|
||||
self.tempfile = fileutils.write_to_tempfile(content=content,
|
||||
prefix='ceilometer',
|
||||
suffix='.conf')
|
||||
self.subp = None
|
||||
|
||||
def tearDown(self):
|
||||
super(BinCeilometerPollingServiceTestCase, self).tearDown()
|
||||
if self.subp:
|
||||
self.subp.kill()
|
||||
os.remove(self.tempfile)
|
||||
|
||||
def test_starting_with_duplication_namespaces(self):
|
||||
self.subp = subprocess.Popen(['ceilometer-polling',
|
||||
"--config-file=%s" % self.tempfile,
|
||||
"--polling-namespaces",
|
||||
@ -257,4 +261,23 @@ class BinCeilometerPollingServiceTestCase(base.BaseTestCase):
|
||||
stderr=subprocess.PIPE)
|
||||
out = self.subp.stderr.read(1024)
|
||||
self.assertIn(b'Duplicated values: [\'compute\', \'compute\'] '
|
||||
b'found in CLI options, auto de-duplidated', out)
|
||||
b'found in CLI options, auto de-duplicated', out)
|
||||
|
||||
def test_polling_namespaces_invalid_value_in_config(self):
|
||||
content = ("[DEFAULT]\n"
|
||||
"rpc_backend=fake\n"
|
||||
"polling_namespaces = ['central']\n"
|
||||
"[database]\n"
|
||||
"connection=log://localhost\n")
|
||||
if six.PY3:
|
||||
content = content.encode('utf-8')
|
||||
self.tempfile = fileutils.write_to_tempfile(content=content,
|
||||
prefix='ceilometer',
|
||||
suffix='.conf')
|
||||
self.subp = subprocess.Popen(
|
||||
["ceilometer-polling", "--config-file=%s" % self.tempfile],
|
||||
stderr=subprocess.PIPE)
|
||||
__, err = self.subp.communicate()
|
||||
expected = ("Exception: Valid values are ['compute', 'central', "
|
||||
"'ipmi'], but found [\"['central']\"]")
|
||||
self.assertIn(expected, err)
|
||||
|
Loading…
Reference in New Issue
Block a user