]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
python: replace avocado tests with pytest
authorJohn Snow <jsnow@redhat.com>
Thu, 26 Feb 2026 21:33:58 +0000 (16:33 -0500)
committerJohn Snow <jsnow@redhat.com>
Mon, 9 Mar 2026 18:04:03 +0000 (14:04 -0400)
Following suit with the rest of this repository, drop avocado and
replace it with the Python standard "pytest" package.

Our ultimate goal is to merge these python tests with the meson test
suite, so the use of 'pytest' here is only a stop-gap solution to get
the GitLab CI 'check-python-tox' passing again following recent Python
packaging ecosystem changes.

Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-ID: <20260226213400.1254014-3-jsnow@redhat.com>
[ran black autoformatter. --js]
Signed-off-by: John Snow <jsnow@redhat.com>
python/Makefile
python/setup.cfg
python/tests/linters.py [new file with mode: 0644]
python/tests/minreqs.txt

index b6c9cd1bce2a57e5df44a7cec7e1f909b6ff9593..42994d39618fa7e63e46e5f0a9c65806128fa5bb 100644 (file)
@@ -105,7 +105,7 @@ develop:
 
 .PHONY: check
 check:
-       @avocado --config avocado.cfg run tests/
+       @pytest -v tests/*.py
 
 .PHONY: check-tox
 check-tox:
@@ -113,7 +113,7 @@ check-tox:
 
 .PHONY: check-coverage
 check-coverage:
-       @coverage run -m avocado --config avocado.cfg run tests/*.py
+       @coverage run -m pytest -v tests/*.py
        @coverage combine
        @coverage html
        @coverage report
index c46a95f8d411926f4b1324db3351f57420877bf2..033445267301da7219ac6db01c489efed1743f34 100644 (file)
@@ -43,6 +43,7 @@ devel =
     mypy >= 1.4.0
     pylint >= 2.17.3
     pylint != 3.2.4; python_version<"3.9"
+    pytest >= 6.0.2
     tox >= 3.18.0
     sphinx >= 3.4.3
 
diff --git a/python/tests/linters.py b/python/tests/linters.py
new file mode 100644 (file)
index 0000000..9696c0b
--- /dev/null
@@ -0,0 +1,114 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import os
+from subprocess import check_call
+import sys
+
+
+class TestLinters:
+
+    def test_flake8_pkg(self):
+        check_call([sys.executable, "-m", "flake8", "qemu/"])
+
+    def test_flake8_scripts(self):
+        check_call([sys.executable, "-m", "flake8", "scripts/"])
+
+    def test_flake8_qapi(self):
+        check_call(
+            [
+                sys.executable,
+                "-m",
+                "flake8",
+                "../scripts/qapi/",
+                "../docs/sphinx/qapidoc.py",
+                "../docs/sphinx/qapi_domain.py",
+            ]
+        )
+
+    def test_isort_pkg(self):
+        check_call([sys.executable, "-m", "isort", "-c", "qemu/"])
+
+    def test_isort_scripts(self):
+        check_call([sys.executable, "-m", "isort", "-c", "scripts/"])
+
+    def test_isort_qapi(self):
+        check_call(
+            [
+                sys.executable,
+                "-m",
+                "isort",
+                "--sp",
+                ".",
+                "-c",
+                "../scripts/qapi/",
+            ]
+        )
+
+    def test_isort_qapi_sphinx(self):
+        # Force isort to recognize 'compat' as a local module and not
+        # third-party
+        check_call(
+            [
+                sys.executable,
+                "-m",
+                "isort",
+                "--sp",
+                ".",
+                "-c",
+                "-p",
+                "compat",
+                "../docs/sphinx/qapi_domain.py",
+                "../docs/sphinx/qapidoc.py",
+            ]
+        )
+
+    def test_mypy_pkg(self):
+        check_call([sys.executable, "-m", "mypy", "-p", "qemu"])
+
+    def test_mypy_scripts(self):
+        check_call([sys.executable, "-m", "mypy", "scripts/"])
+
+    def test_mypy_qapi(self):
+        check_call([sys.executable, "-m", "mypy", "../scripts/qapi"])
+
+    def test_mypy_iotests(self):
+        check_call(
+            [sys.executable, "-m", "linters", "--mypy"],
+            cwd="../tests/qemu-iotests/",
+        )
+
+    # Setuptools v60 introduced the SETUPTOOLS_USE_DISTUTILS=stdlib
+    # workaround; stdlib distutils was fully removed in Python
+    # 3.12+. Once we are on >=3.12+ exclusively, this workaround can be
+    # dropped safely. Until then, it is needed for some versions on
+    # Fedora/Debian distributions which relied upon distro-patched
+    # setuptools present in CPython, but not within setuptools itself.
+
+    def test_pylint_pkg(self):
+        os.environ["SETUPTOOLS_USE_DISTUTILS"] = "stdlib"
+        check_call([sys.executable, "-m", "pylint", "qemu/"])
+
+    def test_pylint_scripts(self):
+        os.environ["SETUPTOOLS_USE_DISTUTILS"] = "stdlib"
+        check_call([sys.executable, "-m", "pylint", "scripts/"])
+
+    def test_pylint_qapi(self):
+        os.environ["SETUPTOOLS_USE_DISTUTILS"] = "stdlib"
+        check_call(
+            [
+                sys.executable,
+                "-m",
+                "pylint",
+                "--rcfile=../scripts/qapi/pylintrc",
+                "../scripts/qapi/",
+                "../docs/sphinx/qapidoc.py",
+                "../docs/sphinx/qapi_domain.py",
+            ]
+        )
+
+    def test_pylint_iotests(self):
+        os.environ["SETUPTOOLS_USE_DISTUTILS"] = "stdlib"
+        check_call(
+            [sys.executable, "-m", "linters", "--pylint"],
+            cwd="../tests/qemu-iotests/",
+        )
index 38b17d17e1471ff9e304049fb5c0f80656dbc1ed..199120270761491f8d3cc810b047dc904ed53d6e 100644 (file)
@@ -32,6 +32,7 @@ fusepy==2.0.4
 
 # Test-runners, utilities, etc.
 avocado-framework==90.0
+pytest==6.0.2
 
 # Linters
 flake8==5.0.4