Adding patch from upstream to fix tests with esoteric interface names, thanks to Olivier Gayot <olivier.gayot@canonical.com> (Closes: #1057530).
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
b1099ce148
commit
ab3a2fee52
2 changed files with 71 additions and 0 deletions
1
debian/patches/series
vendored
1
debian/patches/series
vendored
|
@ -1 +1,2 @@
|
|||
upstream/0001-test-dummy-interfaces.patch
|
||||
upstream/0002-skip-esoteric-interfaces.patch
|
||||
|
|
70
debian/patches/upstream/0002-skip-esoteric-interfaces.patch
vendored
Normal file
70
debian/patches/upstream/0002-skip-esoteric-interfaces.patch
vendored
Normal file
|
@ -0,0 +1,70 @@
|
|||
Author: Olivier Gayot <olivier.gayot@canonical.com>
|
||||
Description: Skip mac2iface test for esoteric interfaces
|
||||
mac2iface takes a MAC address as argument and returns the corresponding
|
||||
interface (if any).
|
||||
The mac2iface tests will however invoke mac2iface with invalid MAC addresses
|
||||
when esoteric network interfaces are present on the system. As an example,
|
||||
armhf autopkgtest runners in Ubuntu have gre interfaces configured so the
|
||||
test-suite fails.
|
||||
.
|
||||
We now ensure that the test-suite calls mac2iface with only valid MAC
|
||||
addresses.
|
||||
.
|
||||
Furthermore, sometimes the same MAC address is assigned to more than one
|
||||
interface on the system (this is true for VLAN interfaces for instance). This
|
||||
confuses mac2iface, which returns only the first match. This scenario is
|
||||
possibly more of a nvme-stas bug than a test-suite bug, but for now we will
|
||||
just skip the interfaces that have a duplicate MAC address.
|
||||
.
|
||||
https://github.com/linux-nvme/nvme-stas/pull/411
|
||||
https://github.com/linux-nvme/nvme-stas/commit/2336eab5b4e4e2f9fd28b7efe425f86e6a23ab91
|
||||
|
||||
diff -Naurp nvme-stas.orig/test/test-iputil.py nvme-stas/test/test-iputil.py
|
||||
--- nvme-stas.orig/test/test-iputil.py
|
||||
+++ nvme-stas/test/test-iputil.py
|
||||
@@ -43,11 +43,41 @@ class Test(unittest.TestCase):
|
||||
self.assertEqual('', iputil.get_interface(ifaces, ''))
|
||||
self.assertEqual('', iputil.get_interface(ifaces, None))
|
||||
|
||||
+ @staticmethod
|
||||
+ def _is_ok_for_mac2iface(iface) -> bool:
|
||||
+ ''' mac2iface can only work with interfaces that have a proper MAC
|
||||
+ address. One can use this function to filter out other interfaces
|
||||
+ configured on the system. '''
|
||||
+ if iface['link_type'] != 'ether':
|
||||
+ # Some esoteric interface types (e.g., gre) use the address
|
||||
+ # field to store something that is not a MAC address. Skip
|
||||
+ # them.
|
||||
+ return False
|
||||
+ if 'address' not in iface:
|
||||
+ return False
|
||||
+ if iface['address'] == '00:00:00:00:00:00':
|
||||
+ # All 0's is an invalid MAC address so do not bother.
|
||||
+ # In practice, it often appears as the address of the loopback
|
||||
+ # interface but it can also appear for other things like a gretap
|
||||
+ # or erspan interface.
|
||||
+ return False
|
||||
+ return True
|
||||
+
|
||||
def test_mac2iface(self):
|
||||
- for iface in self.ifaces:
|
||||
- address = iface.get('address', None)
|
||||
- if address:
|
||||
- self.assertEqual(iface['ifname'], iputil.mac2iface(address))
|
||||
+ # We only test the interfaces that have a MAC address, and a valid one.
|
||||
+ candidate_ifaces = [iface for iface in self.ifaces if self._is_ok_for_mac2iface(iface)]
|
||||
+
|
||||
+ for iface in candidate_ifaces:
|
||||
+ if len([x for x in candidate_ifaces if x['address'] == iface['address']]) >= 2:
|
||||
+ # We need to be careful, sometimes we can have the same MAC address
|
||||
+ # on multiple interfaces. This happens with VLAN interfaces for
|
||||
+ # instance. mac2iface will obviously be confused when dealing with
|
||||
+ # those so let's skip the interfaces that have duplicate MAC.
|
||||
+ logging.warning('[%s] is not the only interface with address [%s]',
|
||||
+ iface['ifname'], iface['address'])
|
||||
+ continue
|
||||
+
|
||||
+ self.assertEqual(iface['ifname'], iputil.mac2iface(iface['address']))
|
||||
|
||||
def test_remove_invalid_addresses(self):
|
||||
good_tcp = trid.TID({'transport': 'tcp', 'traddr': '1.1.1.1', 'subsysnqn': '', 'trsvcid': '8009'})
|
Loading…
Add table
Reference in a new issue