]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Remove from BridgeDevice homemade execute in namespace
authorCedric Brandily <zzelle@gmail.com>
Fri, 8 May 2015 22:52:29 +0000 (00:52 +0200)
committerCedric Brandily <zzelle@gmail.com>
Sat, 9 May 2015 12:18:27 +0000 (14:18 +0200)
Currently BridgeDevice[1] defines homemade execute with namespace
support but could use IPWrapper. This change replaces homemade
implementation with IPWrapper use to respect DRY principle.

[1] neutron.agent.linux.bridge_lib

Change-Id: I12d4d40432e57ce8b6960276c41321c1efd98705

neutron/agent/linux/bridge_lib.py
neutron/tests/unit/agent/linux/test_bridge_lib.py

index 5db2e5b5bc0dea0f1a431415c6981a1c82665fa4..2bbc9f2cefaea6c32935f2d1746f04ad27fde4b6 100644 (file)
 #    under the License.
 
 from neutron.agent.linux import ip_lib
-from neutron.agent.linux import utils
 
 
 class BridgeDevice(ip_lib.IPDevice):
-    def _brctl(self, cmd, log_fail_as_error=True):
+    def _brctl(self, cmd):
         cmd = ['brctl'] + cmd
-        if self.namespace:
-            cmd = ['ip', 'netns', 'exec', self.namespace] + cmd
-        return utils.execute(cmd, run_as_root=True,
-                             log_fail_as_error=log_fail_as_error)
+        ip_wrapper = ip_lib.IPWrapper(self.namespace)
+        return ip_wrapper.netns.execute(cmd, run_as_root=True)
 
     @classmethod
     def addbr(cls, name, namespace=None):
index c85539b1cb33559610db020b82d4f551e9280cc8..768c276b2983c23b422bc3f1afce03298a8c7ce2 100644 (file)
@@ -18,7 +18,6 @@
 import mock
 
 from neutron.agent.linux import bridge_lib
-from neutron.agent.linux import utils
 from neutron.tests import base
 
 
@@ -30,30 +29,28 @@ class BridgeLibTest(base.BaseTestCase):
 
     def setUp(self):
         super(BridgeLibTest, self).setUp()
-        self.execute = mock.patch.object(
-            utils, "execute", spec=utils.execute).start()
-
-    def _verify_bridge_mock(self, cmd, namespace=None):
-        if namespace is not None:
-            cmd = ['ip', 'netns', 'exec', namespace] + cmd
-        self.execute.assert_called_once_with(cmd, run_as_root=True,
-                                             log_fail_as_error=True)
+        ip_wrapper = mock.patch('neutron.agent.linux.ip_lib.IPWrapper').start()
+        self.execute = ip_wrapper.return_value.netns.execute
+
+    def _verify_bridge_mock(self, cmd):
+        self.execute.assert_called_once_with(cmd, run_as_root=True)
         self.execute.reset_mock()
 
     def _test_br(self, namespace=None):
         br = bridge_lib.BridgeDevice.addbr(self._BR_NAME, namespace)
-        self._verify_bridge_mock(['brctl', 'addbr', self._BR_NAME], namespace)
+        self.assertEqual(namespace, br.namespace)
+        self._verify_bridge_mock(['brctl', 'addbr', self._BR_NAME])
 
         br.addif(self._IF_NAME)
         self._verify_bridge_mock(
-            ['brctl', 'addif', self._BR_NAME, self._IF_NAME], namespace)
+            ['brctl', 'addif', self._BR_NAME, self._IF_NAME])
 
         br.delif(self._IF_NAME)
         self._verify_bridge_mock(
-            ['brctl', 'delif', self._BR_NAME, self._IF_NAME], namespace)
+            ['brctl', 'delif', self._BR_NAME, self._IF_NAME])
 
         br.delbr()
-        self._verify_bridge_mock(['brctl', 'delbr', self._BR_NAME], namespace)
+        self._verify_bridge_mock(['brctl', 'delbr', self._BR_NAME])
 
     def test_addbr_with_namespace(self):
         self._test_br(self._NAMESPACE)