Alex Bennée | 9f95111 | 2023-03-21 18:05:30 +0000 | [diff] [blame] | 1 | # ethtool tests for emulated network devices |
| 2 | # |
| 3 | # This test leverages ethtool's --test sequence to validate network |
| 4 | # device behaviour. |
| 5 | # |
| 6 | # SPDX-License-Identifier: GPL-2.0-or-late |
| 7 | |
| 8 | from avocado import skip |
| 9 | from avocado_qemu import QemuSystemTest |
Alex Bennée | 9f95111 | 2023-03-21 18:05:30 +0000 | [diff] [blame] | 10 | from avocado_qemu import wait_for_console_pattern |
| 11 | |
| 12 | class NetDevEthtool(QemuSystemTest): |
| 13 | """ |
| 14 | :avocado: tags=arch:x86_64 |
| 15 | :avocado: tags=machine:q35 |
| 16 | """ |
| 17 | |
| 18 | # Runs in about 17s under KVM, 19s under TCG, 25s under GCOV |
| 19 | timeout = 45 |
| 20 | |
| 21 | # Fetch assets from the netdev-ethtool subdir of my shared test |
| 22 | # images directory on fileserver.linaro.org. |
| 23 | def get_asset(self, name, sha1): |
| 24 | base_url = ('https://fileserver.linaro.org/s/' |
| 25 | 'kE4nCFLdQcoBF9t/download?' |
| 26 | 'path=%2Fnetdev-ethtool&files=' ) |
| 27 | url = base_url + name |
| 28 | # use explicit name rather than failing to neatly parse the |
| 29 | # URL into a unique one |
| 30 | return self.fetch_asset(name=name, locations=(url), asset_hash=sha1) |
| 31 | |
Akihiko Odaki | 1531fb4 | 2023-05-23 11:43:03 +0900 | [diff] [blame] | 32 | def common_test_code(self, netdev, extra_args=None): |
Alex Bennée | 9f95111 | 2023-03-21 18:05:30 +0000 | [diff] [blame] | 33 | |
| 34 | # This custom kernel has drivers for all the supported network |
| 35 | # devices we can emulate in QEMU |
| 36 | kernel = self.get_asset("bzImage", |
| 37 | "33469d7802732d5815226166581442395cb289e2") |
| 38 | |
| 39 | rootfs = self.get_asset("rootfs.squashfs", |
| 40 | "9793cea7021414ae844bda51f558bd6565b50cdc") |
| 41 | |
| 42 | append = 'printk.time=0 console=ttyS0 ' |
| 43 | append += 'root=/dev/sr0 rootfstype=squashfs ' |
| 44 | |
| 45 | # any additional kernel tweaks for the test |
| 46 | if extra_args: |
| 47 | append += extra_args |
| 48 | |
| 49 | # finally invoke ethtool directly |
| 50 | append += ' init=/usr/sbin/ethtool -- -t eth1 offline' |
| 51 | |
| 52 | # add the rootfs via a readonly cdrom image |
| 53 | drive = f"file={rootfs},if=ide,index=0,media=cdrom" |
| 54 | |
| 55 | self.vm.add_args('-kernel', kernel, |
| 56 | '-append', append, |
| 57 | '-drive', drive, |
| 58 | '-device', netdev) |
| 59 | |
Alex Bennée | 9f95111 | 2023-03-21 18:05:30 +0000 | [diff] [blame] | 60 | self.vm.set_console(console_index=0) |
| 61 | self.vm.launch() |
| 62 | |
| 63 | wait_for_console_pattern(self, |
| 64 | "The test result is PASS", |
| 65 | "The test result is FAIL", |
| 66 | vm=None) |
| 67 | # no need to gracefully shutdown, just finish |
| 68 | self.vm.kill() |
| 69 | |
Alex Bennée | 9f95111 | 2023-03-21 18:05:30 +0000 | [diff] [blame] | 70 | def test_igb(self): |
| 71 | """ |
| 72 | :avocado: tags=device:igb |
| 73 | """ |
| 74 | self.common_test_code("igb") |
| 75 | |
| 76 | def test_igb_nomsi(self): |
| 77 | """ |
| 78 | :avocado: tags=device:igb |
| 79 | """ |
| 80 | self.common_test_code("igb", "pci=nomsi") |
| 81 | |
Alex Bennée | 9f95111 | 2023-03-21 18:05:30 +0000 | [diff] [blame] | 82 | # It seems the other popular cards we model in QEMU currently fail |
| 83 | # the pattern test with: |
| 84 | # |
| 85 | # pattern test failed (reg 0x00178): got 0x00000000 expected 0x00005A5A |
| 86 | # |
| 87 | # So for now we skip them. |
| 88 | |
| 89 | @skip("Incomplete reg 0x00178 support") |
| 90 | def test_e1000(self): |
| 91 | """ |
| 92 | :avocado: tags=device:e1000 |
| 93 | """ |
| 94 | self.common_test_code("e1000") |
| 95 | |
| 96 | @skip("Incomplete reg 0x00178 support") |
| 97 | def test_i82550(self): |
| 98 | """ |
| 99 | :avocado: tags=device:i82550 |
| 100 | """ |
| 101 | self.common_test_code("i82550") |