]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Turn device not found errors in to exceptions
authorCarl Baldwin <carl.baldwin@hp.com>
Mon, 31 Aug 2015 21:33:53 +0000 (21:33 +0000)
committerCarl Baldwin <carl.baldwin@hpe.com>
Thu, 24 Sep 2015 17:59:35 +0000 (17:59 +0000)
Change-Id: If697c4c4c09d32abd410ac1fce4d8a6a0d337da1
Partially-implements:  blueprint address-scopes

neutron/agent/linux/ip_lib.py
neutron/tests/unit/agent/linux/test_ip_lib.py

index 551341a181444f988955018f9d24f3e19517ea4c..0a27d4a15fa6ed75eb708c634bb095b825a1042c 100644 (file)
@@ -583,20 +583,22 @@ class IpRouteCommand(IpDeviceCommandBase):
         args += self._table_args(table)
         self._as_root([ip_version], tuple(args))
 
+    def _run_as_root_detect_device_not_found(self, *args, **kwargs):
+        try:
+            return self._as_root(*args, **kwargs)
+        except RuntimeError as rte:
+            with excutils.save_and_reraise_exception() as ctx:
+                if "Cannot find device" in str(rte):
+                    ctx.reraise = False
+                    raise exceptions.DeviceNotFoundError(device_name=self.name)
+
     def delete_gateway(self, gateway, table=None):
         ip_version = get_ip_version(gateway)
         args = ['del', 'default',
                 'via', gateway]
         args += self._dev_args()
         args += self._table_args(table)
-        try:
-            self._as_root([ip_version], tuple(args))
-        except RuntimeError as rte:
-            with (excutils.save_and_reraise_exception()) as ctx:
-                if "Cannot find device" in str(rte):
-                    ctx.reraise = False
-                    raise exceptions.DeviceNotFoundError(
-                        device_name=self.name)
+        self._run_as_root_detect_device_not_found([ip_version], tuple(args))
 
     def _parse_routes(self, ip_version, output, **kwargs):
         for line in output.splitlines():
@@ -729,7 +731,7 @@ class IpRouteCommand(IpDeviceCommandBase):
         args += self._table_args(table)
         for k, v in kwargs.items():
             args += [k, v]
-        self._as_root([ip_version], tuple(args))
+        self._run_as_root_detect_device_not_found([ip_version], tuple(args))
 
     def delete_route(self, cidr, via=None, table=None, **kwargs):
         ip_version = get_ip_version(cidr)
@@ -740,7 +742,7 @@ class IpRouteCommand(IpDeviceCommandBase):
         args += self._table_args(table)
         for k, v in kwargs.items():
             args += [k, v]
-        self._as_root([ip_version], tuple(args))
+        self._run_as_root_detect_device_not_found([ip_version], tuple(args))
 
 
 class IPRoute(SubProcessBase):
index 2de408d7686029aa1cd95ed965d21ab1f77888f9..af205002da3851e94d3e0ed7687ae61ca445e85e 100644 (file)
@@ -965,6 +965,12 @@ class TestIpRouteCommand(TestIPCmdBase):
                            'dev', self.parent.name,
                            'scope', 'link'))
 
+    def test_add_route_no_device(self):
+        self.parent._as_root.side_effect = RuntimeError("Cannot find device")
+        self.assertRaises(exceptions.DeviceNotFoundError,
+                          self.route_cmd.add_route,
+                          self.cidr, self.ip, self.table)
+
     def test_delete_route(self):
         self.route_cmd.delete_route(self.cidr, self.ip, self.table)
         self._assert_sudo([self.ip_version],
@@ -987,6 +993,12 @@ class TestIpRouteCommand(TestIPCmdBase):
                            'dev', self.parent.name,
                            'scope', 'link'))
 
+    def test_delete_route_no_device(self):
+        self.parent._as_root.side_effect = RuntimeError("Cannot find device")
+        self.assertRaises(exceptions.DeviceNotFoundError,
+                          self.route_cmd.delete_route,
+                          self.cidr, self.ip, self.table)
+
     def test_list_routes(self):
         self.parent._run.return_value = (
             "default via 172.124.4.1 dev eth0 metric 100\n"