From: Eugene Nikanorov Date: Wed, 19 Mar 2014 14:00:35 +0000 (+0400) Subject: Fix namespace exist() method X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=14b6611efea4c9658c611e8cfcfb42fc7dd82f55;p=openstack-build%2Fneutron-build.git Fix namespace exist() method Fix namespace exist() method for it shall not be called with a root. Also, don't run it under the namespace so garbage_collect_namespace method can run without rootwrap and not withi a ns. As a result of fixing namespace listing the patch also fixes the regression introduced (bug/1294603) to loadbalancer agent respawning haproxy due to inability to list namespaces properly. Change-Id: I0dc4d01b0c1c04887ec6ad5766ec7c6c96903faa Closes-Bug: #1297594 Closes-Bug: #1294603 --- diff --git a/neutron/agent/linux/ip_lib.py b/neutron/agent/linux/ip_lib.py index 62ba2a7bb..9b7f2c861 100644 --- a/neutron/agent/linux/ip_lib.py +++ b/neutron/agent/linux/ip_lib.py @@ -466,7 +466,7 @@ class IpNetnsCommand(IpCommandBase): check_exit_code=check_exit_code) def exists(self, name): - output = self._run('list', options='o') + output = self._parent._execute('o', 'netns', ['list']) for line in output.split('\n'): if name == line.strip(): diff --git a/neutron/tests/unit/test_linux_ip_lib.py b/neutron/tests/unit/test_linux_ip_lib.py index 74f47ccf6..ea23c8549 100644 --- a/neutron/tests/unit/test_linux_ip_lib.py +++ b/neutron/tests/unit/test_linux_ip_lib.py @@ -713,17 +713,25 @@ class TestIpNetnsCommand(TestIPCmdBase): def test_namespace_exists(self): retval = '\n'.join(NETNS_SAMPLE) - self.parent._run.return_value = retval - self.assertTrue( - self.netns_cmd.exists('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb')) - self._assert_call('o', ('list',)) + # need another instance to avoid mocking + netns_cmd = ip_lib.IpNetnsCommand(ip_lib.SubProcessBase()) + with mock.patch('neutron.agent.linux.utils.execute') as execute: + execute.return_value = retval + self.assertTrue( + netns_cmd.exists('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb')) + execute.assert_called_once_with(['ip', '-o', 'netns', 'list'], + root_helper=None) def test_namespace_doest_not_exist(self): retval = '\n'.join(NETNS_SAMPLE) - self.parent._run.return_value = retval - self.assertFalse( - self.netns_cmd.exists('bbbbbbbb-1111-2222-3333-bbbbbbbbbbbb')) - self._assert_call('o', ('list',)) + # need another instance to avoid mocking + netns_cmd = ip_lib.IpNetnsCommand(ip_lib.SubProcessBase()) + with mock.patch('neutron.agent.linux.utils.execute') as execute: + execute.return_value = retval + self.assertFalse( + netns_cmd.exists('bbbbbbbb-1111-2222-3333-bbbbbbbbbbbb')) + execute.assert_called_once_with(['ip', '-o', 'netns', 'list'], + root_helper=None) def test_execute(self): self.parent.namespace = 'ns'