Commit 70a5ff6b authored by Max Reitz's avatar Max Reitz Committed by Stefan Hajnoczi
Browse files

iotests: Add test for external image truncation



It should not be happening, but it is possible to truncate an image
outside of qemu while qemu is running (or any of the qemu tools using
the block layer. raw_co_get_block_status() should not break then.

While touching this test, replace the existing "truncate" invocation by
"$QEMU_IMG convert -f raw".

Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
Reviewed-by: default avatarKevin Wolf <kwolf@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Message-id: 1414148280-17949-4-git-send-email-mreitz@redhat.com
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent d7f62751
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -34,9 +34,10 @@ _cleanup()
}
trap "_cleanup; exit \$status" 0 1 2 3 15

# get standard environment, filters and checks
# get standard environment, filters and qemu instance handling
. ./common.rc
. ./common.filter
. ./common.qemu

_supported_fmt qcow2
_supported_proto file
@@ -53,11 +54,27 @@ _make_test_img $IMG_SIZE
$QEMU_IO -c 'write 0 64k' "$TEST_IMG" | _filter_qemu_io
# Remove data cluster from image (first cluster: image header, second: reftable,
# third: refblock, fourth: L1 table, fifth: L2 table)
truncate -s $((5 * 64 * 1024)) "$TEST_IMG"
$QEMU_IMG resize -f raw "$TEST_IMG" $((5 * 64 * 1024))

$QEMU_IO -c map "$TEST_IMG"
$QEMU_IMG map "$TEST_IMG"

echo
echo '=== Testing map on an image file truncated outside of qemu ==='
echo

# Same as above, only now we concurrently truncate and map the image
_make_test_img $IMG_SIZE
$QEMU_IO -c 'write 0 64k' "$TEST_IMG" | _filter_qemu_io

qemu_comm_method=monitor _launch_qemu -drive if=none,file="$TEST_IMG",id=drv0

$QEMU_IMG resize -f raw "$TEST_IMG" $((5 * 64 * 1024))

_send_qemu_cmd $QEMU_HANDLE 'qemu-io drv0 map' 'allocated' \
    | sed -e 's/^(qemu).*qemu-io drv0 map...$/(qemu) qemu-io drv0 map/'
_send_qemu_cmd $QEMU_HANDLE 'quit' ''

# success, all done
echo '*** done'
rm -f $seq.full
+11 −0
Original line number Diff line number Diff line
@@ -5,6 +5,17 @@ QA output created by 102
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=65536
wrote 65536/65536 bytes at offset 0
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Image resized.
[                       0]      128/     128 sectors     allocated at offset 0 bytes (1)
Offset          Length          Mapped to       File

=== Testing map on an image file truncated outside of qemu ===

Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=65536
wrote 65536/65536 bytes at offset 0
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Image resized.
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) qemu-io drv0 map
[                       0]      128/     128 sectors     allocated at offset 0 bytes (1)
*** done