]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tests: also use lsmod to check whether modules are available (#10634)
authorEvgeny Vereshchagin <evvers@ya.ru>
Mon, 5 Nov 2018 03:47:38 +0000 (06:47 +0300)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 5 Nov 2018 03:47:38 +0000 (12:47 +0900)
It's not entirely impossible to screw something up playing with
kernel modules on a Saturday evening :-) This PR fixes a scenario
where a module has been loaded into the kernel but the module itself
has been removed from the disk.

```
$ lsmod | grep wireg
wireguard             225280  0
ip6_udp_tunnel         16384  1 wireguard
udp_tunnel             16384  1 wireguard

$ modprobe wireguard
modprobe: FATAL: Module wireguard not found in directory /lib/modules/4.18.16-200.fc28.x86_64

$ sudo ./systemd-networkd-tests.py NetworkdNetDevTests.test_wireguard
...
modprobe: FATAL: Module wireguard not found in directory /lib/modules/4.18.16-200.fc28.x86_64
test_wireguard (__main__.NetworkdNetDevTests) ... unexpected success

----------------------------------------------------------------------
Ran 1 test in 5.152s

FAILED (unexpected successes=1)
```

This is a follow-up to https://github.com/systemd/systemd/pull/10625.

test/test-network/systemd-networkd-tests.py

index 16dadd1501cbdb64aa7d383ca66a67198f39277f..b418d15e8c685fbb016dd16cbd9820204924f289 100755 (executable)
@@ -7,6 +7,7 @@ import sys
 import unittest
 import subprocess
 import time
+import re
 import shutil
 import signal
 import socket
@@ -23,7 +24,9 @@ dnsmasq_pid_file='/var/run/networkd-ci/test-test-dnsmasq.pid'
 dnsmasq_log_file='/var/run/networkd-ci/test-dnsmasq-log-file'
 
 def is_module_available(module_name):
-    return not subprocess.call(["modprobe", module_name])
+    lsmod_output = subprocess.check_output('lsmod', universal_newlines=True)
+    module_re = re.compile(r'^{0}\b'.format(re.escape(module_name)), re.MULTILINE)
+    return module_re.search(lsmod_output) or not subprocess.call(["modprobe", module_name])
 
 def expectedFailureIfModuleIsNotAvailable(module_name):
     def f(func):