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():
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)
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):
'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],
'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"