From c6a77179a4097df355f0f04b8f3260c76b5e515c Mon Sep 17 00:00:00 2001 From: Ronny Chevalier Date: Sun, 8 Dec 2013 00:01:53 +0100 Subject: 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) --- test/README.testsuite | 19 ++++++++++-- test/TEST-01-BASIC/test.sh | 8 ++--- test/TEST-02-CRYPTSETUP/test.sh | 8 ++--- test/TEST-03-JOBS/test.sh | 8 ++--- test/test-functions | 65 +++++++++++++++++++++++++++++++++++------ 5 files changed, 78 insertions(+), 30 deletions(-) (limited to 'test') diff --git a/test/README.testsuite b/test/README.testsuite index 54d0eaac5..2ae85a2ce 100644 --- a/test/README.testsuite +++ b/test/README.testsuite @@ -25,11 +25,24 @@ $ make all $ cd test/TEST-01-BASIC $ sudo make clean setup run +QEMU +==== + If you want to log in the testsuite virtual machine, you can specify -additional kernel command line parameter with $DEBUGFAIL. +additional kernel command line parameter with $KERNEL_APPEND. -$ sudo make DEBUGFAIL="systemd.unit=multi-user.target" clean setup run +$ 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. -$ 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 diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh index aaf63f4f5..84ccf26f2 100755 --- a/test/TEST-01-BASIC/test.sh +++ b/test/TEST-01-BASIC/test.sh @@ -5,9 +5,6 @@ TEST_DESCRIPTION="Basic systemd setup" . $TEST_BASE_DIR/test-functions -# Uncomment this to debug failures -#DEBUGFAIL="systemd.unit=multi-user.target" - check_result_qemu() { ret=1 mkdir -p $TESTDIR/root @@ -23,11 +20,10 @@ check_result_qemu() { } test_run() { - if check_qemu ; then - run_qemu + if run_qemu; then check_result_qemu || return 1 else - dwarn "can't run qemu-kvm, skipping" + dwarn "can't run QEMU, skipping" fi if check_nspawn; then run_nspawn diff --git a/test/TEST-02-CRYPTSETUP/test.sh b/test/TEST-02-CRYPTSETUP/test.sh index fcde5c0b4..b2432546d 100755 --- a/test/TEST-02-CRYPTSETUP/test.sh +++ b/test/TEST-02-CRYPTSETUP/test.sh @@ -5,9 +5,6 @@ TEST_DESCRIPTION="cryptsetup systemd setup" . $TEST_BASE_DIR/test-functions -# Uncomment this to debug failures -#DEBUGFAIL="systemd.unit=multi-user.target" - check_result_qemu() { ret=1 mkdir -p $TESTDIR/root @@ -28,11 +25,10 @@ check_result_qemu() { test_run() { - if check_qemu ; then - run_qemu + if run_qemu; then check_result_qemu || return 1 else - dwarn "can't run qemu-kvm, skipping" + dwarn "can't run QEMU, skipping" fi return 0 } diff --git a/test/TEST-03-JOBS/test.sh b/test/TEST-03-JOBS/test.sh index 630325867..41e02e2c8 100755 --- a/test/TEST-03-JOBS/test.sh +++ b/test/TEST-03-JOBS/test.sh @@ -5,9 +5,6 @@ TEST_DESCRIPTION="Job-related tests" . $TEST_BASE_DIR/test-functions -# Uncomment this to debug failures -#DEBUGFAIL="systemd.unit=multi-user.target" - check_result_qemu() { ret=1 mkdir -p $TESTDIR/root @@ -23,11 +20,10 @@ check_result_qemu() { } test_run() { - if check_qemu ; then - run_qemu + if run_qemu; then check_result_qemu || return 1 else - dwarn "can't run qemu-kvm, skipping" + dwarn "can't run QEMU, skipping" fi if check_nspawn; then run_nspawn diff --git a/test/test-functions b/test/test-functions index a184ed7e3..87d3a73e7 100644 --- a/test/test-functions +++ b/test/test-functions @@ -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" 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() { - qemu-kvm \ - -hda $TESTDIR/rootdisk.img \ - -m 512M -nographic \ - -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 + [ "$KERNEL_BIN" ] || KERNEL_BIN=/boot/vmlinuz-$KERNEL_VER + [ "$INITRD" ] || INITRD=/boot/initramfs-${KERNEL_VER}.img + [ "$QEMU_SMP" ] || QEMU_SMP=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() { @@ -1043,10 +1094,6 @@ inst_libdir_file() { fi } -check_qemu() { - command -v qemu-kvm &>/dev/null && [[ -c /dev/kvm ]] -} - check_nspawn() { [[ -d /sys/fs/cgroup/systemd ]] } -- cgit v1.2.3