On Tue, 2019-10-15 at 16:27 +0200, Max Reitz wrote: > When using an external data file, there are no refcounts for data > clusters. We thus have to adjust the corruption test in this patch to > not be based around a data cluster allocation, but the L2 table > allocation (L2 tables are still refcounted with external data files). > > Furthermore, we should not print qcow2.py's list of incompatible > features because it differs depending on whether there is an external > data file or not. > > With those two changes, the test will work both with an external data > files (once that options works with the iotests at all). > > Signed-off-by: Max Reitz <mre...@redhat.com> > --- > tests/qemu-iotests/137 | 15 +++++++++++---- > tests/qemu-iotests/137.out | 6 ++---- > 2 files changed, 13 insertions(+), 8 deletions(-) > > diff --git a/tests/qemu-iotests/137 b/tests/qemu-iotests/137 > index 6cf2997577..7ae86892f7 100755 > --- a/tests/qemu-iotests/137 > +++ b/tests/qemu-iotests/137 > @@ -138,14 +138,21 @@ $QEMU_IO \ > "$TEST_IMG" 2>&1 | _filter_qemu_io > > # The dirty bit must not be set > -$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features > +# (Filter the external data file bit) > +if $PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features \ > + | grep -q '\<0\>' > +then > + echo 'ERROR: Dirty bit set' > +else > + echo 'OK: Dirty bit not set' > +fi > > # Similarly we can test whether corruption detection has been enabled: > -# Create L1/L2, overwrite first entry in refcount block, allocate something. > +# Create L1, overwrite refcounts, force allocation of L2 by writing > +# data. > # Disabling the checks should fail, so the corruption must be detected. > _make_test_img 64M > -$QEMU_IO -c "write 0 64k" "$TEST_IMG" | _filter_qemu_io > -poke_file "$TEST_IMG" "$((0x20000))" "\x00\x00" > +poke_file "$TEST_IMG" "$((0x20000))" "\x00\x00\x00\x00\x00\x00\x00\x00" > $QEMU_IO \ > -c "reopen -o overlap-check=none,lazy-refcounts=42" \ > -c "write 64k 64k" \ >
> diff --git a/tests/qemu-iotests/137.out b/tests/qemu-iotests/137.out > index bd4523a853..86377c80cd 100644 > --- a/tests/qemu-iotests/137.out > +++ b/tests/qemu-iotests/137.out > @@ -36,11 +36,9 @@ qemu-io: Unsupported value 'blubb' for qcow2 option > 'overlap-check'. Allowed are > wrote 512/512 bytes at offset 0 > 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > ./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}" > _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" ) > -incompatible_features [] > +OK: Dirty bit not set > Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > -wrote 65536/65536 bytes at offset 0 > -64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > qemu-io: Parameter 'lazy-refcounts' expects 'on' or 'off' > -qcow2: Marking image as corrupt: Preventing invalid write on metadata > (overlaps with qcow2_header); further corruption events will be suppressed > +qcow2: Marking image as corrupt: Preventing invalid allocation of L2 table > at offset 0; further corruption events will be suppressed > write failed: Input/output error > *** done Reviewed-by: Maxim Levitsky <mlevi...@redhat.com> Best regards, Maxim Levitsky