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
This commit is contained in:
Brian Haley 2015-04-09 17:48:40 -04:00
parent 3d205937de
commit 40a1f410ff
2 changed files with 9 additions and 5 deletions

View File

@ -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]

View File

@ -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)