]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: Implement TEST_PREFER_QEMU and use it in one of the mkosi jobs
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 5 Dec 2024 13:01:08 +0000 (14:01 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Fri, 20 Dec 2024 19:43:57 +0000 (19:43 +0000)
We want to make sure the integration tests that don't require qemu
can run successfully both in an nspawn container and in a qemu VM.
So let's add one more knob TEST_PREFER_QEMU=1 to run jobs that normally
require nspawn in qemu instead.

Running these tests in qemu is also possible by not running as root but
that's very implicit so we add an explicit knob instead to make it explicit
that we want to run these in qemu instead of nspawn.

(cherry picked from commit e022e73e3fede1a8d7800a6ca87291ca4075681b)

.github/workflows/mkosi.yml
test/README.testsuite
test/integration-test-wrapper.py

index 0da8ccaf04ae580c05c0b2e7824258929fae70bb..433a467ddc5343ebb7536dd69e026ce8e64e03a6 100644 (file)
@@ -60,48 +60,56 @@ jobs:
             llvm: 0
             cflags: "-O2 -D_FORTIFY_SOURCE=3"
             relabel: no
+            qemu: 1
           - distro: debian
             release: testing
             sanitizers: ""
             llvm: 0
             cflags: "-Og"
             relabel: no
+            qemu: 0
           - distro: ubuntu
             release: noble
             sanitizers: ""
             llvm: 0
             cflags: "-Og"
             relabel: no
+            qemu: 0
           - distro: fedora
             release: "41"
             sanitizers: ""
             llvm: 0
             cflags: "-Og"
             relabel: yes
+            qemu: 0
           - distro: fedora
             release: rawhide
             sanitizers: address,undefined
             llvm: 1
             cflags: "-Og"
             relabel: yes
+            qemu: 0
           - distro: opensuse
             release: tumbleweed
             sanitizers: ""
             llvm: 0
             cflags: "-Og"
             relabel: no
+            qemu: 0
           - distro: centos
             release: "9"
             sanitizers: ""
             llvm: 0
             cflags: "-Og"
             relabel: yes
+            qemu: 0
           - distro: centos
             release: "10"
             sanitizers: ""
             llvm: 0
             cflags: "-Og"
             relabel: yes
+            qemu: 0
 
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
@@ -210,7 +218,7 @@ jobs:
         run: sudo meson compile -C build mkosi
 
       - name: Run integration tests
-        run: sudo --preserve-env meson test -C build --no-rebuild --suite integration-tests --print-errorlogs --no-stdsplit --num-processes "$(($(nproc) - 1))"
+        run: sudo --preserve-env env TEST_PREFER_QEMU=${{ matrix.qemu }} meson test -C build --no-rebuild --suite integration-tests --print-errorlogs --no-stdsplit --num-processes "$(($(nproc) - 1))"
 
       - name: Archive failed test journals
         uses: actions/upload-artifact@v4
index c020847a16482eee96d9dbb564367b01c225650b..719b9066dc7a8250124157a43fd73c6f2a330917 100644 (file)
@@ -199,6 +199,8 @@ $ sudo NO_BUILD=1 test/run-integration-tests
 `TEST_PREFER_NSPAWN=1`:  Run all tests that do not require qemu under
 systemd-nspawn.
 
+`TEST_PREFER_QEMU=1`:  Run all tests under qemu.
+
 `TEST_NO_KVM=1`: Disable qemu KVM auto-detection (may be necessary when you're
 trying to run the *vanilla* qemu and have both qemu and qemu-kvm installed)
 
index 737bbd42724a34895e692cd4c788d68681c822e4..b417b86441f04a4d6e6d50f99c6fa27bf57bf60a 100755 (executable)
@@ -177,7 +177,7 @@ def main() -> None:
         ),
         '--credential', f"journal.storage={'persistent' if sys.stderr.isatty() else args.storage}",
         *(['--runtime-build-sources=no'] if not sys.stderr.isatty() else []),
-        'qemu' if args.vm or os.getuid() != 0 else 'boot',
+        'qemu' if args.vm or os.getuid() != 0 or os.getenv('TEST_PREFER_QEMU', '0') == '1' else 'boot',
     ]  # fmt: skip
 
     result = subprocess.run(cmd)