1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#!/usr/bin/env python3
#
# ethtool tests for emulated network devices
#
# This test leverages ethtool's --test sequence to validate network
# device behaviour.
#
# SPDX-License-Identifier: GPL-2.0-or-later
from unittest import skip
from qemu_test import QemuSystemTest, Asset
from qemu_test import wait_for_console_pattern
class NetDevEthtool(QemuSystemTest):
# Runs in about 17s under KVM, 19s under TCG, 25s under GCOV
timeout = 45
# Fetch assets from the netdev-ethtool subdir of my shared test
# images directory on fileserver.linaro.org.
ASSET_BASEURL = ('https://fileserver.linaro.org/s/kE4nCFLdQcoBF9t/'
'download?path=%2Fnetdev-ethtool&files=')
ASSET_BZIMAGE = Asset(
ASSET_BASEURL + "bzImage",
"ed62ee06ea620b1035747f3f66a5e9fc5d3096b29f75562ada888b04cd1c4baf")
ASSET_ROOTFS = Asset(
ASSET_BASEURL + "rootfs.squashfs",
"8f0207e3c4d40832ae73c1a927e42ca30ccb1e71f047acb6ddb161ba422934e6")
def common_test_code(self, netdev, extra_args=None):
self.set_machine('q35')
# This custom kernel has drivers for all the supported network
# devices we can emulate in QEMU
kernel = self.ASSET_BZIMAGE.fetch()
rootfs = self.ASSET_ROOTFS.fetch()
append = 'printk.time=0 console=ttyS0 '
append += 'root=/dev/sr0 rootfstype=squashfs '
# any additional kernel tweaks for the test
if extra_args:
append += extra_args
# finally invoke ethtool directly
append += ' init=/usr/sbin/ethtool -- -t eth1 offline'
# add the rootfs via a readonly cdrom image
drive = f"file={rootfs},if=ide,index=0,media=cdrom"
self.vm.add_args('-kernel', kernel,
'-append', append,
'-drive', drive,
'-device', netdev)
self.vm.set_console(console_index=0)
self.vm.launch()
wait_for_console_pattern(self,
"The test result is PASS",
"The test result is FAIL",
vm=None)
# no need to gracefully shutdown, just finish
self.vm.kill()
def test_igb(self):
self.common_test_code("igb")
def test_igb_nomsi(self):
self.common_test_code("igb", "pci=nomsi")
# It seems the other popular cards we model in QEMU currently fail
# the pattern test with:
#
# pattern test failed (reg 0x00178): got 0x00000000 expected 0x00005A5A
#
# So for now we skip them.
@skip("Incomplete reg 0x00178 support")
def test_e1000(self):
self.common_test_code("e1000")
@skip("Incomplete reg 0x00178 support")
def test_i82550(self):
self.common_test_code("i82550")
if __name__ == '__main__':
QemuSystemTest.main()
|