qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Alex Bennée" <alex.bennee@linaro.org>,
	"Akihiko Odaki" <akihiko.odaki@daynix.com>,
	"Cleber Rosa" <crosa@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
	"Beraldo Leal" <bleal@redhat.com>
Subject: [RFC PATCH] tests/avocado: re-factor igb test to avoid timeouts
Date: Tue, 21 Mar 2023 18:17:41 +0000	[thread overview]
Message-ID: <20230321181741.3748845-1-alex.bennee@linaro.org> (raw)

The core of the test was utilising "ethtool -t eth1 offline" to run
through a test sequence. For reasons unknown the test hangs under some
configurations of the build on centos8-stream. Fundamentally running
the old fedora-31 cloud-init is just too much for something that is
directed at testing one device. So we:

  - replace fedora with a custom kernel + buildroot rootfs
  - rename the test from IGB to NetDevEthtool
  - re-factor the common code, add (currently skipped) tests for other
     devices which support ethtool
  - remove the KVM limitation as its fast enough to run in KVM or TCG

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Akihiko Odaki <akihiko.odaki@daynix.com>
---
 tests/avocado/igb.py            | 38 --------------
 tests/avocado/netdev-ethtool.py | 93 +++++++++++++++++++++++++++++++++
 2 files changed, 93 insertions(+), 38 deletions(-)
 delete mode 100644 tests/avocado/igb.py
 create mode 100644 tests/avocado/netdev-ethtool.py

diff --git a/tests/avocado/igb.py b/tests/avocado/igb.py
deleted file mode 100644
index abf5dfa07f..0000000000
--- a/tests/avocado/igb.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ethtool tests for igb registers, interrupts, etc
-
-from avocado_qemu import LinuxTest
-
-class IGB(LinuxTest):
-    """
-    :avocado: tags=accel:kvm
-    :avocado: tags=arch:x86_64
-    :avocado: tags=distro:fedora
-    :avocado: tags=distro_version:31
-    :avocado: tags=machine:q35
-    """
-
-    timeout = 180
-
-    def test(self):
-        self.require_accelerator('kvm')
-        kernel_url = self.distro.pxeboot_url + 'vmlinuz'
-        kernel_hash = '5b6f6876e1b5bda314f93893271da0d5777b1f3c'
-        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
-        initrd_url = self.distro.pxeboot_url + 'initrd.img'
-        initrd_hash = 'dd0340a1b39bd28f88532babd4581c67649ec5b1'
-        initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
-
-        # Ideally we want to test MSI as well, but it is blocked by a bug
-        # fixed with:
-        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=28e96556baca7056d11d9fb3cdd0aba4483e00d8
-        kernel_params = self.distro.default_kernel_params + ' pci=nomsi'
-
-        self.vm.add_args('-kernel', kernel_path,
-                         '-initrd', initrd_path,
-                         '-append', kernel_params,
-                         '-accel', 'kvm',
-                         '-device', 'igb')
-        self.launch_and_wait()
-        self.ssh_command('dnf -y install ethtool')
-        self.ssh_command('ethtool -t eth1 offline')
diff --git a/tests/avocado/netdev-ethtool.py b/tests/avocado/netdev-ethtool.py
new file mode 100644
index 0000000000..da0a22d51c
--- /dev/null
+++ b/tests/avocado/netdev-ethtool.py
@@ -0,0 +1,93 @@
+# 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
+
+import time
+
+from avocado import skip
+
+from avocado_qemu import QemuSystemTest
+from avocado_qemu import exec_command, exec_command_and_wait_for_pattern
+from avocado_qemu import wait_for_console_pattern
+
+class NetDevEthtool(QemuSystemTest):
+    """
+    :avocado: tags=arch:x86_64
+    :avocado: tags=machine:q35
+    """
+
+    KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 root=/dev/sda console=ttyS0 '
+    # Runs in about 20s under KVM, 26s under TCG, 37s under GCOV
+    timeout = 45
+
+    def common_test_code(self, netdev, extra_args=None):
+        base_url = ('https://fileserver.linaro.org/s/'
+                    'kE4nCFLdQcoBF9t/download?'
+                    'path=%2Figb-net-test&files=' )
+
+        # This custom kernel has drivers for all the supported network
+        # devices we can emulate in QEMU
+        kernel_url = base_url + 'bzImage'
+        kernel_hash = '784daede6dab993597f36efbf01f69f184c55152'
+        kernel_path = self.fetch_asset(name="bzImage",
+                                       locations=(kernel_url), asset_hash=kernel_hash)
+
+        rootfs_url = base_url + 'rootfs.ext4'
+        rootfs_hash = '7d28c1bf429de3b441a63756a51f163442ea574b'
+        rootfs_path = self.fetch_asset(name="rootfs.ext4",
+                                       locations=(rootfs_url),
+                                       asset_hash=rootfs_hash)
+
+        kernel_params = self.KERNEL_COMMON_COMMAND_LINE
+        if extra_args:
+            kernel_params += extra_args
+
+        self.vm.add_args('-kernel', kernel_path,
+                         '-append', kernel_params,
+                         '-blockdev',
+                         f"driver=raw,file.driver=file,file.filename={rootfs_path},node-name=hd0",
+                         '-device', 'driver=ide-hd,bus=ide.0,unit=0,drive=hd0',
+                         '-device', netdev)
+
+        self.vm.set_console(console_index=0)
+        self.vm.launch()
+
+        wait_for_console_pattern(self, "Welcome to Buildroot", vm=None)
+        time.sleep(0.2)
+        exec_command(self, 'root')
+        time.sleep(0.2)
+        exec_command_and_wait_for_pattern(self,
+                                          "ethtool -t eth1 offline",
+                                          "The test result is PASS",
+                                          "The test result is FAIL")
+        time.sleep(0.2)
+        exec_command_and_wait_for_pattern(self, 'halt', "reboot: System halted")
+
+    # Skip testing for MSI for now. Allegedly it was fixed by:
+    #   28e96556ba (igb: Allocate MSI-X vector when testing)
+    # but I'm seeing oops in the kernel
+    @skip("Kernel bug with MSI enabled")
+    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")
-- 
2.39.2



             reply	other threads:[~2023-03-21 18:18 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-21 18:17 Alex Bennée [this message]
2023-03-21 21:49 ` [RFC PATCH] tests/avocado: re-factor igb test to avoid timeouts Philippe Mathieu-Daudé
2023-03-22  5:32 ` Akihiko Odaki
2023-03-22 10:04   ` Alex Bennée
2023-03-22 11:02     ` Akihiko Odaki
2023-03-22 11:22       ` Alex Bennée
2023-03-22 11:40         ` Akihiko Odaki
2023-03-22 14:56           ` Alex Bennée

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230321181741.3748845-1-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=akihiko.odaki@daynix.com \
    --cc=bleal@redhat.com \
    --cc=crosa@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=wainersm@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).