diff options
| author | Mark McLoughlin <markmc@redhat.com> | 2012-05-10 14:25:19 +0100 |
|---|---|---|
| committer | Mark McLoughlin <markmc@redhat.com> | 2012-05-10 14:26:13 +0100 |
| commit | 51ca0bc2d6b0bd72747bb64801c5aabc5604037a (patch) | |
| tree | ab3dea6aaceb35d3163bfa7f4f99241a52944c1a /tests | |
| parent | 5b0b59ed56abcd08b5a3f7fcf1af8639f9ef0a7c (diff) | |
| download | oslo-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.py | 93 |
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): |
