smoke.yarn 2.87 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# Smoke test vmdb2-built images

This yarn file builds a basic image, and runs it under Qemu. The image
is configured to have a serial console enabled, and the scenario below
will log in as root (no password), and command the virtual machine to
power off. If this works, the image is at least minimally functional,
so the "smoke test" passes.

More elaborate testing can be added, but smoke testing is enough for
now.

To run this yarn file, you need to run it as root (since it needs to
build an image as root), and you need to run on an amd64 system (and
thus build an amd64 image). Additionally, you need to add the folloing
option to yarn:

17
    EXAMPLE
18 19 20 21 22 23 24 25
    --env ROOTFS_TARBALL=/path/to/rootfs/tarball

This means vmdb2 will use the given tarball when creating an image,
and if the tarball doesn't exist yet, it will create it. This makes
testing multiple time much faster.

    SCENARIO smoke test image
    WHEN user runs vmdb smoke-pc.vmdb --output smoke-pc.img
Lars Wirzenius's avatar
Lars Wirzenius committed
26 27 28 29
    THEN user can BIOS boot smoke-pc.img and power it off from root shell

    WHEN user runs vmdb smoke-uefi.vmdb --output smoke-uefi.img
    THEN user can UEFI boot smoke-uefi.img and power it off from root shell
30 31 32 33

    IMPLEMENTS WHEN user runs vmdb (\S+) --output (\S+)
    "$SRCDIR/vmdb2" --no-default-config "$SRCDIR/$MATCH_1" \
        --output "$DATADIR/$MATCH_2" \
34 35
        --log "$DATADIR/vmdb.log" \
        --verbose \
36 37
        --rootfs-tarball "$ROOTFS_TARBALL"

Lars Wirzenius's avatar
Lars Wirzenius committed
38
    IMPLEMENTS THEN user can BIOS boot (\S+) and power it off from root shell
39 40 41 42 43 44 45
    cd "$DATADIR"
    img="$MATCH_1"
    cat << EOF > run.sh
    qemu-system-x86_64 -drive file="$img",format=raw -m 1024 -nographic
    EOF
    chmod a+rx run.sh
    cat << EOF > expect.txt
46
    set timeout 300
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    proc abort {} {
        puts "ERROR ERROR\n"
        exit 1
    }
    spawn ./run.sh
    expect "login: "
    send "root\n"
    expect "# "
    send "poweroff\r"
    set timeout 5
    expect {
        "reboot: Power down" {puts poweroffing\n}
        eof abort
        timeout abort
    }
    expect eof
    EOF
    expect -d expect.txt > expect.out
Lars Wirzenius's avatar
Lars Wirzenius committed
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98

    IMPLEMENTS THEN user can UEFI boot (\S+) and power it off from root shell
    cd "$DATADIR"
    img="$MATCH_1"
    cat << EOF > run.sh
    cp /usr/share/OVMF/OVMF_VARS.fd .
    qemu-system-x86_64 \
      -m 1024 \
      -drive if=pflash,format=raw,unit=0,file=/usr/share/ovmf/OVMF.fd,readonly=on \
      -drive if=pflash,format=raw,unit=1,file=OVMF_VARS.fd \
      -drive format=raw,file="$img" \
      -nographic
    EOF
    chmod a+rx run.sh
    cat << EOF > expect.txt
    set timeout 300
    proc abort {} {
        puts "ERROR ERROR\n"
        exit 1
    }
    spawn ./run.sh
    expect "login: "
    send "root\n"
    expect "# "
    send "poweroff\r"
    set timeout 5
    expect {
        "reboot: Power down" {puts poweroffing\n}
        eof abort
        timeout abort
    }
    expect eof
    EOF
    expect -d expect.txt > expect.out