"scope" conversion only just before pyroute2 method call
In "IpAddrCommand.list" method, the "scope" parameter is a string ("link", "site", "global" or "host"). This method will retrieve all devices with an IP address calling "ip_lib.get_devices_with_ip". Since [1], "ip_lib.get_devices_with_ip" makes the conversion of "scope" string parameter to pyroute2 format (see "pyroute2.netlink.rtnl.rtscopes"). The list command should skip then the previous conversion. Closes-Bug: #1899141 [1]https://review.opendev.org/#/c/747406/ Change-Id: I55a0f4341b328af52ea3bd758a72f633fbe3abcb (cherry picked from commit0705699e60
) (cherry picked from commitf0849bb0d2
) (cherry picked from commitcd0526dce8
)
This commit is contained in:
parent
8654eb2d18
commit
4ef6566b6d
|
@ -551,7 +551,7 @@ class IpAddrCommand(IpDeviceCommandBase):
|
|||
if not common_utils.is_cidr_host(cidr):
|
||||
kwargs['mask'] = common_utils.cidr_mask_length(cidr)
|
||||
if scope:
|
||||
kwargs['scope'] = IP_ADDRESS_SCOPE_NAME[scope]
|
||||
kwargs['scope'] = scope
|
||||
if ip_version:
|
||||
kwargs['family'] = common_utils.get_socket_address_family(
|
||||
ip_version)
|
||||
|
|
|
@ -982,3 +982,34 @@ class IpRouteCommandTestCase(functional_base.BaseSudoTestCase):
|
|||
self.device.route.flush(ip_version, table=table)
|
||||
routes = self.device.route.list_routes(ip_version, table=table)
|
||||
self.assertEqual([], routes)
|
||||
|
||||
|
||||
class IpAddrCommandTestCase(functional_base.BaseSudoTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(IpAddrCommandTestCase, self).setUp()
|
||||
self.namespace = self.useFixture(net_helpers.NamespaceFixture()).name
|
||||
ip_lib.IPWrapper(self.namespace).add_dummy('test_device')
|
||||
self.device = ip_lib.IPDevice('test_device', namespace=self.namespace)
|
||||
self.device.link.set_up()
|
||||
|
||||
def test_list_with_scope(self):
|
||||
scope_ip = [
|
||||
('global', '192.168.100.1/24'),
|
||||
('global', '2001:db8::1/64'),
|
||||
('link', '192.168.101.1/24'),
|
||||
('link', 'fe80::1:1/64'),
|
||||
('site', 'fec0:0:0:f101::1/64'),
|
||||
('host', '192.168.102.1/24')]
|
||||
for scope, _ip in scope_ip:
|
||||
self.device.addr.add(_ip, scope=scope)
|
||||
|
||||
devices = self.device.addr.list()
|
||||
devices_cidr = {device['cidr'] for device in devices}
|
||||
for scope in scope_ip:
|
||||
self.assertIn(scope[1], devices_cidr)
|
||||
|
||||
for scope, _ip in scope_ip:
|
||||
devices_filtered = self.device.addr.list(scope=scope)
|
||||
devices_cidr = {device['cidr'] for device in devices_filtered}
|
||||
self.assertIn(_ip, devices_cidr)
|
||||
|
|
|
@ -790,7 +790,7 @@ class TestIpAddrCommand(TestIPCmdBase):
|
|||
self.addr_cmd.list(scope='link')
|
||||
mock_get_dev_ip.assert_called_once_with('test_ns',
|
||||
name=self.addr_cmd.name,
|
||||
scope=253)
|
||||
scope='link')
|
||||
|
||||
@mock.patch.object(ip_lib, 'get_devices_with_ip')
|
||||
def test_list_to(self, mock_get_dev_ip):
|
||||
|
|
Loading…
Reference in New Issue