test: rework run_qemu

It tries to find a suitable QEMU binary and will use KVM if present.
We can now configure QEMU from outside with 4 variables :
  - $QEMU_BIN : path to QEMU's binary
  - $KERNEL_APPEND : arguments appended to kernel cmdline
  - $KERNEL_BIN : path to a kernel
    Default /boot/vmlinuz-$KERNEL_VER
  - $INITRD : path to an initramfs
    Default /boot/initramfs-${KERNEL_VER}.img
  - $QEMU_SMP : number of CPU simulated by QEMU.
    Default 1

(from Alexander Graf's script: http://www.spinics.net/lists/kvm/msg72389.html)
This commit is contained in:
Ronny Chevalier 2013-12-08 00:01:53 +01:00 committed by Zbigniew Jędrzejewski-Szmek
parent 1a6dc6534e
commit c6a77179a4
6 changed files with 79 additions and 32 deletions

1
TODO
View file

@ -165,7 +165,6 @@ Features:
* test/: * test/:
- add 'set -e' to scripts in test/ - add 'set -e' to scripts in test/
- make stuff in test/ work with separate output dir - make stuff in test/ work with separate output dir
- qemu wrapper script: http://www.spinics.net/lists/kvm/msg72389.html
* systemctl delete x.snapshot leaves no trace in logs (at least at default level). * systemctl delete x.snapshot leaves no trace in logs (at least at default level).

View file

@ -25,11 +25,24 @@ $ make all
$ cd test/TEST-01-BASIC $ cd test/TEST-01-BASIC
$ sudo make clean setup run $ sudo make clean setup run
If you want to log in the testsuite virtual machine, you can specify QEMU
additional kernel command line parameter with $DEBUGFAIL. ====
$ sudo make DEBUGFAIL="systemd.unit=multi-user.target" clean setup run If you want to log in the testsuite virtual machine, you can specify
additional kernel command line parameter with $KERNEL_APPEND.
$ sudo make KERNEL_APPEND="systemd.unit=multi-user.target" clean setup run
you can even skip the "clean" and "setup" if you want to run the machine again. you can even skip the "clean" and "setup" if you want to run the machine again.
$ sudo make DEBUGFAIL="systemd.unit=multi-user.target" run $ sudo make KERNEL_APPEND="systemd.unit=multi-user.target" run
You can specify a different kernel and initramfs with $KERNEL_BIN and $INITRD.
(Fedora's default kernel path and initramfs are used by default)
$ sudo make KERNEL_BIN=/boot/vmlinuz-foo INITRD=/boot/initramfs-bar clean check
A script will try to find your QEMU binary. If you want to specify a different
one you can use $QEMU_BIN.
$ sudo make QEMU_BIN=/path/to/qemu/qemu-kvm clean check

View file

@ -5,9 +5,6 @@ TEST_DESCRIPTION="Basic systemd setup"
. $TEST_BASE_DIR/test-functions . $TEST_BASE_DIR/test-functions
# Uncomment this to debug failures
#DEBUGFAIL="systemd.unit=multi-user.target"
check_result_qemu() { check_result_qemu() {
ret=1 ret=1
mkdir -p $TESTDIR/root mkdir -p $TESTDIR/root
@ -23,11 +20,10 @@ check_result_qemu() {
} }
test_run() { test_run() {
if check_qemu ; then if run_qemu; then
run_qemu
check_result_qemu || return 1 check_result_qemu || return 1
else else
dwarn "can't run qemu-kvm, skipping" dwarn "can't run QEMU, skipping"
fi fi
if check_nspawn; then if check_nspawn; then
run_nspawn run_nspawn

View file

@ -5,9 +5,6 @@ TEST_DESCRIPTION="cryptsetup systemd setup"
. $TEST_BASE_DIR/test-functions . $TEST_BASE_DIR/test-functions
# Uncomment this to debug failures
#DEBUGFAIL="systemd.unit=multi-user.target"
check_result_qemu() { check_result_qemu() {
ret=1 ret=1
mkdir -p $TESTDIR/root mkdir -p $TESTDIR/root
@ -28,11 +25,10 @@ check_result_qemu() {
test_run() { test_run() {
if check_qemu ; then if run_qemu; then
run_qemu
check_result_qemu || return 1 check_result_qemu || return 1
else else
dwarn "can't run qemu-kvm, skipping" dwarn "can't run QEMU, skipping"
fi fi
return 0 return 0
} }

View file

@ -5,9 +5,6 @@ TEST_DESCRIPTION="Job-related tests"
. $TEST_BASE_DIR/test-functions . $TEST_BASE_DIR/test-functions
# Uncomment this to debug failures
#DEBUGFAIL="systemd.unit=multi-user.target"
check_result_qemu() { check_result_qemu() {
ret=1 ret=1
mkdir -p $TESTDIR/root mkdir -p $TESTDIR/root
@ -23,11 +20,10 @@ check_result_qemu() {
} }
test_run() { test_run() {
if check_qemu ; then if run_qemu; then
run_qemu
check_result_qemu || return 1 check_result_qemu || return 1
else else
dwarn "can't run qemu-kvm, skipping" dwarn "can't run QEMU, skipping"
fi fi
if check_nspawn; then if check_nspawn; then
run_nspawn run_nspawn

View file

@ -10,12 +10,63 @@ KERNEL_MODS="/lib/modules/$KERNEL_VER/"
BASICTOOLS="sh bash setsid loadkeys setfont login sushell sulogin gzip sleep echo mount umount cryptsetup date dmsetup modprobe" BASICTOOLS="sh bash setsid loadkeys setfont login sushell sulogin gzip sleep echo mount umount cryptsetup date dmsetup modprobe"
DEBUGTOOLS="df free ls stty cat ps ln ip route dmesg dhclient mkdir cp ping dhclient strace less grep id tty touch du sort" DEBUGTOOLS="df free ls stty cat ps ln ip route dmesg dhclient mkdir cp ping dhclient strace less grep id tty touch du sort"
function find_qemu_bin() {
# SUSE and Red Hat call the binary qemu-kvm
# Debian and Gentoo call it kvm
[ "$QEMU_BIN" ] || QEMU_BIN=$(which -a kvm qemu-kvm 2>/dev/null | grep '^/' -m1)
[ "$ARCH" ] || ARCH=$(uname -m)
case $ARCH in
x86_64)
# QEMU's own build system calls it qemu-system-x86_64
[ "$QEMU_BIN" ] || QEMU_BIN=$(which -a qemu-system-x86_64 2>/dev/null | grep '^/' -m1)
;;
i*86)
# new i386 version of QEMU
[ "$QEMU_BIN" ] || QEMU_BIN=$(which -a qemu-system-i386 2>/dev/null | grep '^/' -m1)
# i386 version of QEMU
[ "$QEMU_BIN" ] || QEMU_BIN=$(which -a qemu 2>/dev/null | grep '^/' -m1)
;;
esac
if [ ! -e "$QEMU_BIN" ]; then
echo "Could not find a suitable QEMU binary" >&2
return 1
fi
}
run_qemu() { run_qemu() {
qemu-kvm \ [ "$KERNEL_BIN" ] || KERNEL_BIN=/boot/vmlinuz-$KERNEL_VER
-hda $TESTDIR/rootdisk.img \ [ "$INITRD" ] || INITRD=/boot/initramfs-${KERNEL_VER}.img
-m 512M -nographic \ [ "$QEMU_SMP" ] || QEMU_SMP=1
-net none -kernel /boot/vmlinuz-$KERNEL_VER \
-append "root=/dev/sda1 systemd.log_level=debug raid=noautodetect loglevel=2 init=/usr/lib/systemd/systemd ro console=ttyS0,115200n81 selinux=0 $DEBUGFAIL" || return 1 find_qemu_bin || return 1
KERNEL_APPEND="root=/dev/sda1 \
systemd.log_level=debug \
raid=noautodetect \
loglevel=2 \
init=/usr/lib/systemd/systemd \
ro \
console=ttyS0 \
selinux=0 \
$KERNEL_APPEND \
"
QEMU_OPTIONS="-machine accel=kvm:tcg \
-smp $QEMU_SMP \
-net none \
-m 512M \
-nographic \
-kernel $KERNEL_BIN \
"
if [ "$INITRD" ]; then
QEMU_OPTIONS="$QEMU_OPTIONS -initrd $INITRD"
fi
$QEMU_BIN $QEMU_OPTIONS -append "$KERNEL_APPEND" $TESTDIR/rootdisk.img || return 1
} }
run_nspawn() { run_nspawn() {
@ -1043,10 +1094,6 @@ inst_libdir_file() {
fi fi
} }
check_qemu() {
command -v qemu-kvm &>/dev/null && [[ -c /dev/kvm ]]
}
check_nspawn() { check_nspawn() {
[[ -d /sys/fs/cgroup/systemd ]] [[ -d /sys/fs/cgroup/systemd ]]
} }