From 90da88cce51bccd320e89141ed7384d2e7ccca9d Mon Sep 17 00:00:00 2001 From: Giampaolo Lauria Date: Fri, 20 Jul 2012 16:41:45 -0400 Subject: Modifies _is_opt_registered fcn to check for duplicate opts This change fixes bug 999307 Currently, the check for duplicate options is done by checking whether they are the same object. The proposed fix is to check whether all the object fields have the same value. Change-Id: I2b72d630a0c8821df1d81e25d316d8d9195be492 --- openstack/common/cfg.py | 5 ++++- tests/unit/test_cfg.py | 8 ++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/openstack/common/cfg.py b/openstack/common/cfg.py index 109bc28..728ecdc 100644 --- a/openstack/common/cfg.py +++ b/openstack/common/cfg.py @@ -464,7 +464,7 @@ def _is_opt_registered(opts, opt): :raises: DuplicateOptError if a naming conflict is detected """ if opt.dest in opts: - if opts[opt.dest]['opt'] is not opt: + if opts[opt.dest]['opt'] != opt: raise DuplicateOptError(opt.name) return True else: @@ -527,6 +527,9 @@ class Opt(object): else: self.deprecated_name = None + def __ne__(self, another): + return vars(self) != vars(another) + def _get_from_config_parser(self, cparser, section): """Retrieves the option value from a MultiConfigParser object. diff --git a/tests/unit/test_cfg.py b/tests/unit/test_cfg.py index c72c18e..d6286d3 100644 --- a/tests/unit/test_cfg.py +++ b/tests/unit/test_cfg.py @@ -1220,18 +1220,14 @@ class SadPathTestCase(BaseTestCase): def test_ok_duplicate(self): opt = StrOpt('foo') self.conf.register_cli_opt(opt) - self.conf.register_cli_opt(opt) + opt2 = StrOpt('foo') + self.conf.register_cli_opt(opt2) self.conf([]) self.assertTrue(hasattr(self.conf, 'foo')) self.assertEquals(self.conf.foo, None) - def test_error_duplicate(self): - self.conf.register_cli_opt(StrOpt('foo')) - self.assertRaises(DuplicateOptError, - self.conf.register_cli_opt, StrOpt('foo')) - def test_error_duplicate_with_different_dest(self): self.conf.register_cli_opt(StrOpt('foo', dest='f')) self.conf.register_cli_opt(StrOpt('foo')) -- cgit