[systemd-devel] [PATCH] test: rework run_qemu

Ronny Chevalier chevalier.ronny at gmail.com
Mon Dec 9 13:13:56 PST 2013


Do we really want to add a compat for several distributions ? Because
why not Archlinux, Ubuntu,... too ?
I used Fedora's path by default because it was in the previous script.

2013/12/8 Shawn Landden <shawn at churchofgit.com>:
> On Sat, Dec 7, 2013 at 3:01 PM, Ronny Chevalier
> <chevalier.ronny at gmail.com> wrote:
>> 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)
>> ---
>>  TODO                            |  1 -
>>  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 +++++++++++++++++++++++++++++++++++------
>>  6 files changed, 78 insertions(+), 31 deletions(-)
>>
>> diff --git a/TODO b/TODO
>> index 9698082..f493dbb 100644
>> --- a/TODO
>> +++ b/TODO
>> @@ -168,7 +168,6 @@ Features:
>>  * test/:
>>    - add 'set -e' to scripts in test/
>>    - 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).
>>
>> diff --git a/test/README.testsuite b/test/README.testsuite
>> index 54d0eaa..2ae85a2 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 aaf63f4..84ccf26 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 86617df..d7e8776 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 6303258..41e02e2 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 a184ed7..87d3a73 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
> test -e /boot/initramfd-${KERNEL_VER}.img
> and
> test -e /boot/initrd.img-${KERNEL_VER}
>
> for compat with Debian
>
> (alternatively Debian also has /vmlinuz and /initrd.img )
>
>> +
>> +    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 ]]
>>  }
>> --
>> 1.8.4.2
>>
>> _______________________________________________
>> systemd-devel mailing list
>> systemd-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/systemd-devel


More information about the systemd-devel mailing list