tests: also use lsmod to check whether modules are available (#10634)

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.
This commit is contained in:
Evgeny Vereshchagin 2018-11-05 06:47:38 +03:00 committed by Yu Watanabe
parent aaa501859f
commit 201bf07f7c
1 changed files with 4 additions and 1 deletions

View File

@ -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):