From: Brian Haley Date: Thu, 9 Apr 2015 21:48:40 +0000 (-0400) Subject: Fix intermittent ipset_manager test failure X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=40a1f410ff45ce129c08da0cd071020c7ea338af;p=openstack-build%2Fneutron-build.git Fix intermittent ipset_manager test failure Change ipset_manager _refresh_set() to make a copy of the list of IPs when creating a set, instead of using a reference, else any change to the set could update the caller's data. Also made the IpsetManagerTestCase classes always pass maxelem and hashsize to the parent class. Change-Id: I45fc716ab0952b80363b0c7dabae29cda05604dc Closes-bug: #1442377 --- diff --git a/neutron/agent/linux/ipset_manager.py b/neutron/agent/linux/ipset_manager.py index 33b6379b5..73482ad42 100644 --- a/neutron/agent/linux/ipset_manager.py +++ b/neutron/agent/linux/ipset_manager.py @@ -11,6 +11,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +import copy + from oslo_config import cfg from neutron.agent.common import config @@ -108,7 +110,7 @@ class IpsetManager(object): self._restore_sets(process_input) self._swap_sets(new_set_name, set_name) self._destroy(new_set_name, True) - self.ipset_sets[set_name] = member_ips + self.ipset_sets[set_name] = copy.copy(member_ips) def _del_member_from_set(self, set_name, member_ip): cmd = ['ipset', 'del', set_name, member_ip] diff --git a/neutron/tests/unit/agent/linux/test_ipset_manager.py b/neutron/tests/unit/agent/linux/test_ipset_manager.py index 19fbb7e20..ff6010b5f 100644 --- a/neutron/tests/unit/agent/linux/test_ipset_manager.py +++ b/neutron/tests/unit/agent/linux/test_ipset_manager.py @@ -27,7 +27,7 @@ FAKE_IPS = ['10.0.0.1', '10.0.0.2', '10.0.0.3', '10.0.0.4', class BaseIpsetManagerTest(base.BaseTestCase): - def setUp(self, maxelem=None, hashsize=None): + def setUp(self, maxelem, hashsize): super(BaseIpsetManagerTest, self).setUp() cfg.CONF.register_opts(a_cfg.IPSET_OPTS, 'AGENT') cfg.CONF.set_override('ipset_maxelem', maxelem, 'AGENT') @@ -105,8 +105,9 @@ class BaseIpsetManagerTest(base.BaseTestCase): class IpsetManagerTestCase(BaseIpsetManagerTest): """Run all tests, but with maxelem/hashsize values not configured """ - def setUp(self): - super(IpsetManagerTestCase, self).setUp() + def setUp(self, maxelem=None, hashsize=None): + super(IpsetManagerTestCase, self).setUp(maxelem=maxelem, + hashsize=hashsize) def test_set_exists(self): self.add_first_ip() @@ -145,4 +146,5 @@ class IpsetManagerTestCaseHashArgs(IpsetManagerTestCase): """Run all the above tests, but with maxelem/hashsize values configured """ def setUp(self): - super(IpsetManagerTestCase, self).setUp(maxelem=131072, hashsize=2048) + super(IpsetManagerTestCaseHashArgs, self).setUp(maxelem=131072, + hashsize=2048)