1
0
Fork 0

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:
Daniel Baumann 2025-02-16 12:56:36 +01:00
parent b1099ce148
commit ab3a2fee52
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
2 changed files with 71 additions and 0 deletions

View file

@ -1 +1,2 @@
upstream/0001-test-dummy-interfaces.patch
upstream/0002-skip-esoteric-interfaces.patch

View 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'})