summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMark McLoughlin <markmc@redhat.com>2012-05-10 14:25:19 +0100
committerMark McLoughlin <markmc@redhat.com>2012-05-10 14:26:13 +0100
commit51ca0bc2d6b0bd72747bb64801c5aabc5604037a (patch)
treeab3dea6aaceb35d3163bfa7f4f99241a52944c1a /tests
parent5b0b59ed56abcd08b5a3f7fcf1af8639f9ef0a7c (diff)
downloadoslo-51ca0bc2d6b0bd72747bb64801c5aabc5604037a.tar.gz
oslo-51ca0bc2d6b0bd72747bb64801c5aabc5604037a.tar.xz
oslo-51ca0bc2d6b0bd72747bb64801c5aabc5604037a.zip
cfg: allow options to be marked as required
Implements blueprint cfg-required-options Add a 'required' flag to option schemas: StrOpt('foo', required=True) which causes a RequiredOptError exception to be raised if the user fails to supply a value for the option on the CLI or in a config file. Change-Id: Ied7bb25f0c1582c4991d0f212f4871b9358b73fb
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/test_cfg.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/unit/test_cfg.py b/tests/unit/test_cfg.py
index 785a324..f16dfb4 100644
--- a/tests/unit/test_cfg.py
+++ b/tests/unit/test_cfg.py
@@ -52,6 +52,14 @@ class ExceptionsTestCase(unittest.TestCase):
msg = str(DuplicateOptError('foo'))
self.assertEquals(msg, 'duplicate option: foo')
+ def test_required_opt_error(self):
+ msg = str(RequiredOptError('foo'))
+ self.assertEquals(msg, 'value required for option: foo')
+
+ def test_required_opt_error_with_group(self):
+ msg = str(RequiredOptError('foo', OptGroup('bar')))
+ self.assertEquals(msg, 'value required for option: bar.foo')
+
def test_template_substitution_error(self):
msg = str(TemplateSubstitutionError('foobar'))
self.assertEquals(msg, 'template substitution error: foobar')
@@ -863,6 +871,91 @@ class OverridesTestCase(BaseTestCase):
self.assertEquals(self.conf.blaa.foo, 'bar')
+class RequiredOptsTestCase(BaseTestCase):
+
+ def setUp(self):
+ BaseTestCase.setUp(self)
+ self.conf.register_opt(StrOpt('boo', required=False))
+
+ def test_required_opt(self):
+ self.conf.register_opt(StrOpt('foo', required=True))
+
+ paths = self.create_tempfiles([('test',
+ '[DEFAULT]\n'
+ 'foo = bar')])
+
+ self.conf(['--config-file', paths[0]])
+ self.assertTrue(hasattr(self.conf, 'foo'))
+ self.assertEquals(self.conf.foo, 'bar')
+
+ def test_required_cli_opt(self):
+ self.conf.register_cli_opt(StrOpt('foo', required=True))
+
+ self.conf(['--foo', 'bar'])
+
+ self.assertTrue(hasattr(self.conf, 'foo'))
+ self.assertEquals(self.conf.foo, 'bar')
+
+ def test_missing_required_opt(self):
+ self.conf.register_opt(StrOpt('foo', required=True))
+ self.assertRaises(RequiredOptError, self.conf, [])
+
+ def test_missing_required_cli_opt(self):
+ self.conf.register_cli_opt(StrOpt('foo', required=True))
+ self.assertRaises(RequiredOptError, self.conf, [])
+
+ def test_required_group_opt(self):
+ self.conf.register_group(OptGroup('blaa'))
+ self.conf.register_opt(StrOpt('foo', required=True), group='blaa')
+
+ paths = self.create_tempfiles([('test',
+ '[blaa]\n'
+ 'foo = bar')])
+
+ self.conf(['--config-file', paths[0]])
+ self.assertTrue(hasattr(self.conf, 'blaa'))
+ self.assertTrue(hasattr(self.conf.blaa, 'foo'))
+ self.assertEquals(self.conf.blaa.foo, 'bar')
+
+ def test_required_cli_group_opt(self):
+ self.conf.register_group(OptGroup('blaa'))
+ self.conf.register_cli_opt(StrOpt('foo', required=True), group='blaa')
+
+ self.conf(['--blaa-foo', 'bar'])
+
+ self.assertTrue(hasattr(self.conf, 'blaa'))
+ self.assertTrue(hasattr(self.conf.blaa, 'foo'))
+ self.assertEquals(self.conf.blaa.foo, 'bar')
+
+ def test_missing_required_group_opt(self):
+ self.conf.register_group(OptGroup('blaa'))
+ self.conf.register_opt(StrOpt('foo', required=True), group='blaa')
+ self.assertRaises(RequiredOptError, self.conf, [])
+
+ def test_missing_required_cli_group_opt(self):
+ self.conf.register_group(OptGroup('blaa'))
+ self.conf.register_cli_opt(StrOpt('foo', required=True), group='blaa')
+ self.assertRaises(RequiredOptError, self.conf, [])
+
+ def test_required_opt_with_default(self):
+ self.conf.register_cli_opt(StrOpt('foo', required=True))
+ self.conf.set_default('foo', 'bar')
+
+ self.conf([])
+
+ self.assertTrue(hasattr(self.conf, 'foo'))
+ self.assertEquals(self.conf.foo, 'bar')
+
+ def test_required_opt_with_override(self):
+ self.conf.register_cli_opt(StrOpt('foo', required=True))
+ self.conf.set_override('foo', 'bar')
+
+ self.conf([])
+
+ self.assertTrue(hasattr(self.conf, 'foo'))
+ self.assertEquals(self.conf.foo, 'bar')
+
+
class SadPathTestCase(BaseTestCase):
def test_unknown_attr(self):