virt-aa-helper-test 13.3 KB
Newer Older
J
Jamie Strandboge 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
#!/bin/sh
set -e

test_hostdev="no"
if [ "$1" = "test_hostdev" ]; then
    test_hostdev="yes"
    shift
fi

output="/dev/null"
use_valgrind=""
ld_library_path="../src/.libs/"
if [ ! -z "$1" ] && [ "$1" = "-d" ]; then
    output="/dev/stdout"
    shift
fi

exe="../src/virt-aa-helper"
if [ ! -z "$1" ]; then
    if [ "$1" = "-v" ]; then
        use_valgrind="yes"
        shift
    fi
    if [ -n "$1" ]; then
        exe="$1"
        shift
    fi
fi

if [ ! -x "$exe" ]; then
    echo "Could not find '$exe'"
    exit 1
fi

echo "testing `basename $exe`" >$output
if [ "$use_valgrind" = "yes" ]; then
    exe="valgrind --error-exitcode=2 --track-origins=yes $exe"
fi

extra_args="--dryrun"
errors=0

tmpdir=`mktemp -d`
trap "rm -rf $tmpdir" EXIT HUP INT QUIT TERM

template_xml="$tmpdir/template.xml"
test_xml="$tmpdir/test.xml"

uuid="00000000-0000-0000-0000-0123456789ab"
disk1="$tmpdir/1.img"
disk2="$tmpdir/2.img"
relative_disk1="$tmpdir/./../`basename $tmpdir`//./1.img"
nonexistent="$tmpdir/nonexistant.img"
bad_disk="/etc/passwd"
valid_uuid="libvirt-$uuid"
nonexistent_uuid="libvirt-00000000-0000-0000-0000-000000000001"

cat > "$template_xml" <<EOM
<domain type='kvm'>
  <name>virt-aa-helper-test</name>
  <uuid>###UUID###</uuid>
  <memory>524288</memory>
  <currentMemory>524288</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
79
      <driver name='qemu' type='raw'/>
J
Jamie Strandboge 已提交
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
      <source file='###DISK###'/>
      <target dev='hda' bus='ide'/>
    </disk>
    <interface type='network'>
      <mac address='52:54:00:50:4b:26'/>
      <source network='default'/>
      <model type='virtio'/>
    </interface>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'/>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
    </video>
  </devices>
</domain>
EOM

touch "$disk1" "$disk2"

testme() {
    expected="$1"
    outstr="$2"
    args="$3"
    input=""

    if [ -n "$4" ]; then
        input="$4"
        if [ ! -e "$input" ]; then
            echo "FAIL: could not find $input" >$output
            echo "FAIL: could not find $input"
            echo " '$extra_args $args': "
            errors=$(($errors + 1))
        fi
    fi

116 117
    printf %s "  $outstr: " >$output
    printf %s " '$extra_args $args" >$output
J
Jamie Strandboge 已提交
118
    if [ -n "$input" ]; then
119
        printf %s " < $input" >$output
J
Jamie Strandboge 已提交
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
    fi
    echo "': " >$output
    set +e
    if [ -n "$input" ]; then
        LD_LIBRARY_PATH="$ld_library_path" $exe $extra_args $args < $input >$output 2>&1
    else
        LD_LIBRARY_PATH="$ld_library_path" $exe $extra_args $args >$output 2>&1
    fi
    rc="$?"
    set -e
    if [ "$rc" = "$expected" ]; then
        echo "pass" >$output
    else
        echo "FAIL: exited with '$rc'" >$output
        echo "FAIL: exited with '$rc'"
135
        printf %s "  $outstr: "
J
Jamie Strandboge 已提交
136 137 138 139 140 141 142 143 144 145 146
        echo " '$extra_args $args': "
        errors=$(($errors + 1))
        #exit $rc
    fi
}

# Expected failures
echo "Expected failures:" >$output
testme "1" "invalid arg" "-z"
testme "1" "invalid case" "-A"
testme "1" "not enough args" "-c"
147
testme "1" "not enough args" "-p"
J
Jamie Strandboge 已提交
148

J
Jamie Strandboge 已提交
149
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
150 151 152 153 154 155 156 157 158 159 160
testme "1" "no -u with -c" "-c" "$test_xml"
testme "1" "bad uuid (bad digit)" "-c -u libvirt-00000000-0000-0000-0000-00000000000g" "$test_xml"
testme "1" "bad uuid (too long)" "-c -u ${valid_uuid}abcdef" "$test_xml"
testme "1" "bad uuid (too short)" "-c -u libvirt-00000000-0000-0000-0000-0123456789a" "$test_xml"
testme "1" "non-matching uuid" "-c -u libvirt-00000000-0000-0000-0000-00000000000a" "$test_xml"
testme "1" "missing uuid" "-c -u" "$test_xml"
testme "1" "no -u with -R" "-R"
testme "1" "non-existent uuid" "-R -u $nonexistent_uuid"
testme "1" "no -u with -r" "-r"
testme "1" "old '-n' option" "-c -n foo -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
161
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$bad_disk,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
162 163
testme "1" "bad disk" "-c -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
164
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$bad_disk,g" -e "s,</devices>,<disk type='file' device='disk'><driver name='qemu' type='raw'/><source file='$disk2'/><target dev='hda' bus='ide'/></disk></devices>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
165 166
testme "1" "bad disk2" "-c -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
167
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</devices>,<devices>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
168 169
testme "1" "malformed xml" "-c -u $valid_uuid" "$test_xml"

170 171 172 173
initrd=`ls -1 /boot/initrd* | head -1`
if [ -z "$initrd" ]; then
    echo "Skipping /boot/initrd* tests. Could not find /boot/initrd*"
else
J
Jamie Strandboge 已提交
174
    sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$initrd,g" "$template_xml" > "$test_xml"
175 176 177
    testme "1" "disk in /boot without probing" "-p 0 -r -u $valid_uuid" "$test_xml"
    testme "1" "disk in /boot with probing" "-p 1 -r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
178
    sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,/boot/initrd,g" "$template_xml" > "$test_xml"
179 180
    testme "1" "-r with invalid -f with probing" "-p 1 -r -u $valid_uuid -f $bad_disk" "$test_xml"
    testme "1" "-r with invalid -f without probing" "-p 0 -r -u $valid_uuid -f $bad_disk" "$test_xml"
181 182
    testme "1" "-r with invalid -F with probing" "-p 1 -r -u $valid_uuid -F $bad_disk" "$test_xml"
    testme "1" "-r with invalid -F without probing" "-p 0 -r -u $valid_uuid -F $bad_disk" "$test_xml"
183
fi
J
Jamie Strandboge 已提交
184

J
Jamie Strandboge 已提交
185
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1</disk>,g" "$template_xml" > "$test_xml"
186 187
testme "1" "-c with malformed xml" "-c -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
188
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,<type arch='x86_64' machine='pc'>hvm</type>,,g" "$template_xml" > "$test_xml"
189 190
testme "1" "-c with no os.type" "-c -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
191
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,<type arch='x86_64' machine='pc'>hvm</type>,<type>hvm</type>,g" "$template_xml" > "$test_xml"
192 193
testme "1" "-c with no architecture" "-c -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
194
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,hvm</type>,hvm_invalid</type>,g" "$template_xml" > "$test_xml"
195 196
testme "1" "-c with invalid hvm" "-c -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
197 198

echo "Expected pass:" >$output
J
Jamie Strandboge 已提交
199
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" "$template_xml" > "$test_xml"
200 201
testme "0" "create (x86_64)" "-c -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
202
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,arch='x86_64',arch='i686',g" "$template_xml" > "$test_xml"
203 204
testme "0" "create (i686)" "-c -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
205
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,arch='x86_64',arch='ppc',g" "$template_xml" > "$test_xml"
206
testme "0" "create (ppc)" "-c -u $valid_uuid" "$test_xml"
J
Jamie Strandboge 已提交
207

J
Jamie Strandboge 已提交
208
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</disk>,</disk><disk type='file' device='disk'><driver name='qemu' type='raw'/><source file='$disk2'/><target dev='hdb' bus='ide'/></disk>,g" "$template_xml" > "$test_xml"
209
testme "0" "create multiple disks" "-c -u $valid_uuid" "$test_xml"
J
Jamie Strandboge 已提交
210

J
Jamie Strandboge 已提交
211
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###',${disk1}'/><readonly,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
212 213 214
testme "0" "create (readonly)" "-c -u $valid_uuid" "$test_xml"

if [ "$test_hostdev" = "yes" ]; then
J
Jamie Strandboge 已提交
215
    sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</disk>,</disk><hostdev mode='subsystem' type='usb'><source><address bus='002' device='004'/></source></hostdev>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
216 217
    testme "0" "create hostdev (USB)" "-c -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
218
    sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</disk>,</disk><hostdev mode='subsystem' type='pci'><source><address bus='0x00' slot='0x19' function='0x0'/></source></hostdev>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
219 220 221
    testme "0" "create hostdev (PCI)" "-c -u $valid_uuid" "$test_xml"
fi

J
Jamie Strandboge 已提交
222
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$nonexistent,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
223 224
testme "0" "create (non-existent disk)" "-c -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
225
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$relative_disk1,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
226 227
testme "0" "create (relative path)" "-c -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
228
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk2,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
229 230
testme "0" "replace" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
231
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$nonexistent,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
232 233
testme "0" "replace (non-existent disk)" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
234
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
235 236
testme "0" "replace (adding disk)" "-r -u $valid_uuid -f $disk2" "$test_xml"

J
Jamie Strandboge 已提交
237
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
238 239
testme "0" "replace (adding non-existent disk)" "-r -u $valid_uuid -f $nonexistent" "$test_xml"

J
Jamie Strandboge 已提交
240
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" "$template_xml" > "$test_xml"
241 242
testme "0" "replace (appending disk)" "-r -u $valid_uuid -F $disk2" "$test_xml"

J
Jamie Strandboge 已提交
243
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" "$template_xml" > "$test_xml"
244 245
testme "0" "replace (appending non-existent disk)" "-r -u $valid_uuid -F $nonexistent" "$test_xml"

J
Jamie Strandboge 已提交
246
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</devices>,<disk type='block' device='cdrom'><target dev='hdc' bus='ide'/><readonly/></disk></devices>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
247 248
testme "0" "disk (empty cdrom)" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
249
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</devices>,<serial type='file'><source path='$tmpdir/serial.log'/><target port='0'/></serial></devices>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
250 251
testme "0" "serial" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
252
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</devices>,<serial type='pty'><target port='0'/></serial></devices>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
253 254
testme "0" "serial (pty)" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
255
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</devices>,<serial type='dev'><source path='/dev/ttyS0'/><target port='0'/></serial></devices>,g" "$template_xml" > "$test_xml"
256 257
testme "0" "serial (dev)" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
258
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</devices>,<console type='file'><source path='$tmpdir/console.log'/><target port='0'/></console></devices>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
259 260 261
touch "$tmpdir/console.log"
testme "0" "console" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
262
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</devices>,<console type='pty'><target port='0'/></console></devices>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
263 264
testme "0" "console (pty)" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
265
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</devices>,<parallel type='pty'><source path='/dev/pts/0'/><target port='0'/></parallel></devices>,g" "$template_xml" > "$test_xml"
266 267
testme "0" "parallel (pty)" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
268
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</devices>,<channel type='unix'><source mode='bind' path='$tmpdir/guestfwd'/><target type='guestfwd' address='10.0.2.1' port='4600'/></channel></devices>,g" "$template_xml" > "$test_xml"
269 270 271
touch "$tmpdir/guestfwd"
testme "0" "channel (unix)" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
272
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</devices>,<channel type='pty'><target type='virtio'/></channel></devices>,g" "$template_xml" > "$test_xml"
273 274
testme "0" "channel (pty)" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
275
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</os>,<kernel>$tmpdir/kernel</kernel></os>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
276 277 278
touch "$tmpdir/kernel"
testme "0" "kernel" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
279
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</os>,<initrd>$tmpdir/initrd</initrd></os>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
280 281 282
touch "$tmpdir/initrd"
testme "0" "initrd" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
283
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</os>,<kernel>/boot/kernel</kernel></os>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
284 285
testme "0" "kernel in /boot" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
286
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</os>,<initrd>/boot/initrd</initrd></os>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
287 288
testme "0" "initrd in /boot" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
289
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</os>,<kernel>/vmlinuz</kernel></os>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
290 291
testme "0" "kernel is /vmlinuz" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
292
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</os>,<initrd>/initrd/ramdisk</initrd></os>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
293 294
testme "0" "initrd is /initrd/ramdisk" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
295
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,</os>,<initrd>/initrd.img</initrd></os>,g" "$template_xml" > "$test_xml"
J
Jamie Strandboge 已提交
296 297
testme "0" "initrd is /initrd.img" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
298
sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,<graphics*,<graphics type='sdl' display=':0.0' xauth='/home/myself/.Xauthority'/>,g" "$template_xml" > "$test_xml"
299 300
testme "0" "sdl Xauthority" "-r -u $valid_uuid" "$test_xml"

J
Jamie Strandboge 已提交
301 302 303 304 305 306 307 308
testme "0" "help" "-h"

echo "" >$output
if [ "$errors" != "0" ]; then
    echo "FAIL: $errors error(s)" >$output
    exit 1
fi
echo PASS >$output