summaryrefslogtreecommitdiffstats
path: root/pkgs/applications/virtualization/qemu
diff options
context:
space:
mode:
authorRobert Scott <code@humanleg.org.uk>2022-02-19 15:25:18 +0000
committerGitHub <noreply@github.com>2022-02-19 15:25:18 +0000
commitb0cb2154744b31a1709067d532008ffd4896a3c1 (patch)
treee5b76338d2848d2b67760d3a9779a4a81c8c90d0 /pkgs/applications/virtualization/qemu
parent1af66969f854dd0377606561fb8e81fc83784b87 (diff)
parent5adc3817a0d658252131b3fe3df08ca134551ebd (diff)
Merge pull request #144946 from risicle/ris-qemu-tests
qemu: enable some basic tests
Diffstat (limited to 'pkgs/applications/virtualization/qemu')
-rw-r--r--pkgs/applications/virtualization/qemu/default.nix42
1 files changed, 40 insertions, 2 deletions
diff --git a/pkgs/applications/virtualization/qemu/default.nix b/pkgs/applications/virtualization/qemu/default.nix
index 2ae0aca5845e..ee923f4e0cd0 100644
--- a/pkgs/applications/virtualization/qemu/default.nix
+++ b/pkgs/applications/virtualization/qemu/default.nix
@@ -2,7 +2,7 @@
, perl, pixman, vde2, alsa-lib, texinfo, flex
, bison, lzo, snappy, libaio, libtasn1, gnutls, nettle, curl, ninja, meson, sigtool
, makeWrapper, runtimeShell
-, attr, libcap, libcap_ng
+, attr, libcap, libcap_ng, socat
, CoreServices, Cocoa, Hypervisor, rez, setfile
, numaSupport ? stdenv.isLinux && !stdenv.isAarch32, numactl
, seccompSupport ? stdenv.isLinux, libseccomp
@@ -31,6 +31,8 @@
++ ["${stdenv.hostPlatform.qemuArch}-softmmu"])
else null)
, nixosTestRunner ? false
+, doCheck ? false
+, qemu # for passthru.tests
}:
stdenv.mkDerivation rec {
@@ -158,7 +160,6 @@ stdenv.mkDerivation rec {
++ lib.optional smbdSupport "--smbd=${samba}/bin/smbd"
++ lib.optional uringSupport "--enable-linux-io-uring";
- doCheck = false; # tries to access /dev
dontWrapGApps = true;
# QEMU attaches entitlements with codesign and strip removes those,
@@ -182,6 +183,40 @@ stdenv.mkDerivation rec {
'';
preBuild = "cd build";
+ # tests can still timeout on slower systems
+ inherit doCheck;
+ checkInputs = [ socat ];
+ preCheck = ''
+ # time limits are a little meagre for a build machine that's
+ # potentially under load.
+ substituteInPlace ../tests/unit/meson.build \
+ --replace 'timeout: slow_tests' 'timeout: 50 * slow_tests'
+ substituteInPlace ../tests/qtest/meson.build \
+ --replace 'timeout: slow_qtests' 'timeout: 50 * slow_qtests'
+ substituteInPlace ../tests/fp/meson.build \
+ --replace 'timeout: 90)' 'timeout: 300)'
+
+ # point tests towards correct binaries
+ substituteInPlace ../tests/unit/test-qga.c \
+ --replace '/bin/echo' "$(type -P echo)"
+ substituteInPlace ../tests/unit/test-io-channel-command.c \
+ --replace '/bin/socat' "$(type -P socat)"
+
+ # combined with a long package name, some temp socket paths
+ # can end up exceeding max socket name len
+ substituteInPlace ../tests/qtest/bios-tables-test.c \
+ --replace 'qemu-test_acpi_%s_tcg_%s' '%s_%s'
+
+ # get-fsinfo attempts to access block devices, disallowed by sandbox
+ sed -i -e '/\/qga\/get-fsinfo/d' -e '/\/qga\/blacklist/d' \
+ ../tests/unit/test-qga.c
+ '' + lib.optionalString stdenv.isDarwin ''
+ # skip test that stalls on darwin, perhaps due to subtle differences
+ # in fifo behaviour
+ substituteInPlace ../tests/unit/meson.build \
+ --replace "'test-io-channel-command'" "#'test-io-channel-command'"
+ '';
+
# Add a ‘qemu-kvm’ wrapper for compatibility/convenience.
postInstall = ''
ln -s $out/bin/qemu-system-${stdenv.hostPlatform.qemuArch} $out/bin/qemu-kvm
@@ -189,6 +224,9 @@ stdenv.mkDerivation rec {
passthru = {
qemu-system-i386 = "bin/qemu-system-i386";
+ tests = {
+ qemu-tests = qemu.override { doCheck = true; };
+ };
};
# Builds in ~3h with 2 cores, and ~20m with a big-parallel builder.