mirror of
https://github.com/qemu/qemu.git
synced 2024-11-26 04:13:39 +08:00
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: Max Reitz <mreitz@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-id: 1414148280-17949-4-git-send-email-mreitz@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
d7f62751a1
commit
70a5ff6bdd
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user