Browse Source

iotests/244: Add test cases for keep_data_file

Add various test cases around keep_data_file to the existing data_file
test suite 244.

Signed-off-by: Hanna Czenczek <hreitz@redhat.com>
Message-ID: <20250530084448.192369-5-hreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
[kwolf: Added prealloc=full to the test]
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
master
Hanna Czenczek 10 months ago
committed by Kevin Wolf
parent
commit
a844ad5da2
  1. 71
      tests/qemu-iotests/244
  2. 61
      tests/qemu-iotests/244.out

71
tests/qemu-iotests/244

@ -384,6 +384,77 @@ $QEMU_IMG compare --image-opts \
"driver=raw,file.filename=$TEST_IMG.data" \ "driver=raw,file.filename=$TEST_IMG.data" \
"file.filename=$TEST_IMG,backing.file.filename=$TEST_IMG.base" "file.filename=$TEST_IMG,backing.file.filename=$TEST_IMG.base"
echo
echo '=== keep_data_file tests ==='
echo
echo '--- Creating test data file ---'
# Easiest way to create the raw data file without having to create and
# access it manually
_make_test_img -o "data_file=$TEST_IMG.data,data_file_raw=on" 1M
# Values chosen by a fair random.org evaluation
$QEMU_IO -c 'write -P 3 0 512k' -c 'write -P 96 512k 512k' "$TEST_IMG" |
_filter_qemu_io
echo
echo '--- Testing stand-alone option ---'
# Cannot work, needs data file
_make_test_img -o "keep_data_file=on" 1M
# Invalid option value
_make_test_img -o "keep_data_file=true" 1M
# Should be the same as omitting
_make_test_img -o "keep_data_file=off" 1M
# No preallocation is OK when also specifying data_file_raw; otherwise, none of
# the data file will be mapped, i.e. its contents will stay hidden, so
# requesting its contents to be kept (but hidden) doesn't make much sense.
#
# Metadata preallocation is OK: It will not overwrite the data file's contents,
# but ensure the contents are mapped and visible.
#
# Any data preallocation (like falloc) is not OK, as this would overwrite the
# data file's contents despite keep_data_file requesting they should not be
# overwritten.
#
# Note that all of these cases use the data file created above: This verifies
# that when passing keep_data_file=on, the data file is always kept as-is (and
# e.g. not deleted on error).
for prealloc in off metadata falloc full; do
# Without metadata preallocation, the data_file_raw flag is required so that
# the data file's contents are visible.
for data_file_raw in off on; do
echo
echo "--- Testing prealloc=$prealloc data_file_raw=$data_file_raw ---"
# Remove previously existing qcow2 (metadata) file
_cleanup_test_img
opts="data_file=$TEST_IMG.data,keep_data_file=on"
opts+=",preallocation=$prealloc"
opts+=",data_file_raw=$data_file_raw"
_make_test_img -o "$opts" 1M
if [ -f "$TEST_IMG" ]; then
$QEMU_IO -c 'read -P 3 0 512k' -c 'read -P 96 512k 512k' "$TEST_IMG" |
_filter_qemu_io
fi
done
done
echo
echo '--- Testing non-existent data file ---'
# Maybe a matter of taste whether this should fail or create the file, but
# failing is simpler (= will always skip create) and seems safer (users may
# expect the file to exist, and the error will warn them when it does not).
_make_test_img \
-o "data_file=$TEST_IMG.doesnotexist,keep_data_file=on,data_file_raw=on" \
1M
# success, all done # success, all done
echo "*** done" echo "*** done"
rm -f $seq.full rm -f $seq.full

61
tests/qemu-iotests/244.out

@ -197,4 +197,65 @@ wrote 1048576/1048576 bytes at offset 0
Comparing qcow2 image and raw data file: Comparing qcow2 image and raw data file:
Images are identical. Images are identical.
=== keep_data_file tests ===
--- Creating test data file ---
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 data_file=TEST_DIR/t.IMGFMT.data data_file_raw=on
wrote 524288/524288 bytes at offset 0
512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 524288/524288 bytes at offset 524288
512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
--- Testing stand-alone option ---
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 keep_data_file=on
qemu-img: TEST_DIR/t.IMGFMT: Must not use 'keep_data_file=on' without 'data_file'
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 keep_data_file=true
qemu-img: TEST_DIR/t.IMGFMT: Invalid value 'true' for 'keep_data_file': Must be 'on' or 'off'
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 keep_data_file=off
--- Testing prealloc=off data_file_raw=off ---
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 data_file=TEST_DIR/t.IMGFMT.data data_file_raw=off keep_data_file=on preallocation=off
qemu-img: TEST_DIR/t.IMGFMT: 'keep_data_file=on' requires 'preallocation=metadata' or 'data_file_raw=on', or the file contents will not be visible
--- Testing prealloc=off data_file_raw=on ---
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 data_file=TEST_DIR/t.IMGFMT.data data_file_raw=on keep_data_file=on preallocation=off
read 524288/524288 bytes at offset 0
512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 524288/524288 bytes at offset 524288
512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
--- Testing prealloc=metadata data_file_raw=off ---
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 data_file=TEST_DIR/t.IMGFMT.data data_file_raw=off keep_data_file=on preallocation=metadata
read 524288/524288 bytes at offset 0
512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 524288/524288 bytes at offset 524288
512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
--- Testing prealloc=metadata data_file_raw=on ---
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 data_file=TEST_DIR/t.IMGFMT.data data_file_raw=on keep_data_file=on preallocation=metadata
read 524288/524288 bytes at offset 0
512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 524288/524288 bytes at offset 524288
512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
--- Testing prealloc=falloc data_file_raw=off ---
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 data_file=TEST_DIR/t.IMGFMT.data data_file_raw=off keep_data_file=on preallocation=falloc
qemu-img: TEST_DIR/t.IMGFMT: Preallocating more than only metadata would overwrite the external data file's content and is therefore incompatible with 'keep_data_file=on'
--- Testing prealloc=falloc data_file_raw=on ---
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 data_file=TEST_DIR/t.IMGFMT.data data_file_raw=on keep_data_file=on preallocation=falloc
qemu-img: TEST_DIR/t.IMGFMT: Preallocating more than only metadata would overwrite the external data file's content and is therefore incompatible with 'keep_data_file=on'
--- Testing prealloc=full data_file_raw=off ---
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 data_file=TEST_DIR/t.IMGFMT.data data_file_raw=off keep_data_file=on preallocation=full
qemu-img: TEST_DIR/t.IMGFMT: Preallocating more than only metadata would overwrite the external data file's content and is therefore incompatible with 'keep_data_file=on'
--- Testing prealloc=full data_file_raw=on ---
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 data_file=TEST_DIR/t.IMGFMT.data data_file_raw=on keep_data_file=on preallocation=full
qemu-img: TEST_DIR/t.IMGFMT: Preallocating more than only metadata would overwrite the external data file's content and is therefore incompatible with 'keep_data_file=on'
--- Testing non-existent data file ---
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 data_file=TEST_DIR/t.IMGFMT.doesnotexist data_file_raw=on keep_data_file=on
qemu-img: TEST_DIR/t.IMGFMT: Could not open 'TEST_DIR/t.IMGFMT.doesnotexist': No such file or directory
*** done *** done

Loading…
Cancel
Save