From d049eee8f47e3913123762b6cd4f493e8ff0d18d Mon Sep 17 00:00:00 2001 From: fdesi Date: Sat, 2 Jul 2022 00:06:15 +0200 Subject: [PATCH] fix in config flags features * fix name clashing * fix regex * fix test case Change-Id: I2dbc4432a4be2b23dd39e66680abbe33da5ae5af --- charms_openstack/adapters.py | 17 +++++++------- unit_tests/test_charms_openstack_adapters.py | 24 ++++++++------------ 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/charms_openstack/adapters.py b/charms_openstack/adapters.py index 88ea2c4..4accc12 100644 --- a/charms_openstack/adapters.py +++ b/charms_openstack/adapters.py @@ -86,22 +86,23 @@ def config_property(f): @config_property -def config_flags(cls): - """Decorator to add a custom configuration property with +def user_config_flags(cls): + """adding custom configuration property with config-flags to add extra options. :param cls: Configuration Adapter class :type cls: charms_openstack.adapters.DefaultConfigurationAdapter """ cf_config = {} - config = hookenv.config - if config and 'config-flags' in config: - # match 0 or multiple time any pair of character a=b divide by a coma + config = hookenv.config('config-flags') + if config: + # match 0 or multiple time any pair of character a=b divide by a comma # zero or one spaces are allows between tokens - parsing_regex = r"^(?:\s{0,1}[^=]\s{0,1}=\s{0,1}[^,]\s{0,1}(?:,|$))*$" - if re.match(parsing_regex, config['config-flags']): + parsing_regex = r"^(?:\s{0,1}[^=\s]+\s{0,1}=\s{0,1}"\ + r"[^,\s]+\s{0,1}(?:,|$))*$" + if re.match(parsing_regex, config): cf_config = dict(map(lambda x: [s.strip() for s in x.split('=')], - config['config-flags'] + config .split(','))) else: raise RuntimeError("config-flags string error: {}".format(config)) diff --git a/unit_tests/test_charms_openstack_adapters.py b/unit_tests/test_charms_openstack_adapters.py index 2d468cf..4a52bdf 100644 --- a/unit_tests/test_charms_openstack_adapters.py +++ b/unit_tests/test_charms_openstack_adapters.py @@ -58,9 +58,9 @@ class TestCustomProperties(unittest.TestCase): cls_mock = mock.MagicMock() with mock.patch.object(adapters.hookenv, 'config', - new=cfg): + new=lambda x: cfg[x]): - conf = adapters.config_flags(cls_mock) + conf = adapters.user_config_flags(cls_mock) self.assertEqual(conf['a'], 'b') self.assertEqual(conf['c'], 'd') self.assertEqual(conf['e'], 'f') @@ -72,10 +72,10 @@ class TestCustomProperties(unittest.TestCase): cls_mock = mock.MagicMock() with mock.patch.object(adapters.hookenv, 'config', - new=cfg): + new=lambda x: cfg[x]): with self.assertRaises(RuntimeError): - adapters.config_flags(cls_mock) + adapters.user_config_flags(cls_mock) def test_user_config_flags_parsing_error_2(self): cfg = { @@ -84,31 +84,27 @@ class TestCustomProperties(unittest.TestCase): cls_mock = mock.MagicMock() with mock.patch.object(adapters.hookenv, 'config', - new=cfg): + new=lambda x: cfg[x]): with self.assertRaises(RuntimeError): - adapters.config_flags(cls_mock) + adapters.user_config_flags(cls_mock) def test_user_config_flags_missing(self): - cfg = { - 'other-flags': 1 - } cls_mock = mock.MagicMock() with mock.patch.object(adapters.hookenv, 'config', - new=cfg): + new=lambda x: {}): - conf = adapters.config_flags(cls_mock) + conf = adapters.user_config_flags(cls_mock) self.assertEqual(conf, {}) def test_user_config_none(self): - cfg = None cls_mock = mock.MagicMock() with mock.patch.object(adapters.hookenv, 'config', - new=cfg): + new=lambda x: None): - conf = adapters.config_flags(cls_mock) + conf = adapters.user_config_flags(cls_mock) self.assertEqual(conf, {})