xemu/tests
Alberto Garcia abd3622cc0 iotests: Test abnormally large size in compressed cluster descriptor
L2 entries for compressed clusters have a field that indicates the
number of sectors used to store the data in the image.

That's however not the size of the compressed data itself, just the
number of sectors where that data is located. The actual data size is
usually not a multiple of the sector size, and therefore cannot be
represented with this field.

The way it works is that QEMU reads all the specified sectors and
starts decompressing the data until there's enough to recover the
original uncompressed cluster. If there are any bytes left that
haven't been decompressed they are simply ignored.

One consequence of this is that even if the size field is larger than
it needs to be QEMU can handle it just fine: it will read more data
from disk but it will ignore the extra bytes.

This test creates an image with two compressed clusters that use 5
sectors (2.5 KB) each, increases the size field to the maximum (8192
sectors, or 4 MB) and verifies that the data can be read without
problems.

This test is important because while the decompressed data takes
exactly one cluster, the maximum value allowed in the compressed size
field is twice the cluster size. So although QEMU won't produce images
with such large values we need to make sure that it can handle them.

Another effect of increasing the size field is that it can make
it include data from the following host cluster(s). In this case
'qemu-img check' will detect that the refcounts are not correct, and
we'll need to rebuild them.

Additionally, this patch also tests that decreasing the size corrupts
the image since the original data can no longer be recovered. In this
case QEMU returns an error when trying to read the compressed data,
but 'qemu-img check' doesn't see anything wrong if the refcounts are
consistent.

One possible task for the future is to make 'qemu-img check' verify
the sizes of the compressed clusters, by trying to decompress the data
and checking that the size stored in the L2 entry is correct.

Signed-off-by: Alberto Garcia <berto@igalia.com>
Message-id: 20180329120745.11154-1-berto@igalia.com
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2018-04-03 17:39:37 +02:00
..
acpi-test-data test/acpi-test-data: add ACPI tables for dimmpxm test 2018-03-20 03:34:52 +02:00
data test-qga: add test for guest-get-osinfo 2017-07-18 05:49:01 -05:00
decode scripts: Add decodetree.py 2018-02-22 15:44:07 -08:00
docker tests: make docker-test-debug@fedora run sanitizers 2018-03-13 01:19:56 +08:00
guest-debug tests/guest-debug: introduce basic gdbstub tests 2015-12-17 13:37:15 +00:00
image-fuzzer tests: Use Python 2.6 "except E as ..." syntax 2016-02-08 17:29:54 +01:00
keys tests: Add a test key pair 2017-09-22 10:46:25 +08:00
libqos tests/libqos: Check for valid dev pointer when looking for PCI devices 2018-03-05 09:03:17 +00:00
migration tests/migration: Add source to PC boot block 2018-02-14 10:26:21 +00:00
multiboot tests/multiboot: Add .gitignore 2018-03-21 15:13:40 +01:00
qapi-schema tests: add oob-test for qapi-schema 2018-03-27 10:17:45 -05:00
qemu-iotests iotests: Test abnormally large size in compressed cluster descriptor 2018-04-03 17:39:37 +02:00
rocker tests: Avoid non-portable 'echo -ARG' 2017-07-11 17:45:00 +02:00
tcg target/xtensa: fix timers test 2018-03-26 14:17:04 -07:00
vm docs: Add docs/devel/testing.rst 2018-02-08 09:23:07 +08:00
vmstate-static-checker-data tests: vmstate static checker: add size mismatch inside substructure 2014-06-23 19:14:52 +02:00
.gitignore sockets: move fd_is_socket() into common sockets code 2018-03-13 18:06:06 +00:00
Makefile.include tests: add oob-test for qapi-schema 2018-03-27 10:17:45 -05:00
ac97-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
acpi-utils.c tests: Move reusable ACPI code into a utility file 2017-03-02 07:14:27 +02:00
acpi-utils.h maint: Fix macros with broken 'do/while(0); ' usage 2018-01-16 14:54:52 +01:00
ahci-test.c ahci-test: fix opts leak of skip tests 2018-03-06 14:01:27 +01:00
atomic_add-bench.c tests: add atomic_add-bench 2016-10-26 08:29:01 -07:00
benchmark-crypto-cipher.c tests: fix incorrect size_t format in benchmark-crypto 2017-09-04 10:45:19 +01:00
benchmark-crypto-hash.c tests: fix incorrect size_t format in benchmark-crypto 2017-09-04 10:45:19 +01:00
benchmark-crypto-hmac.c tests: fix incorrect size_t format in benchmark-crypto 2017-09-04 10:45:19 +01:00
bios-tables-test.c tests/bios-tables-test: add test cases for DIMM proximity 2018-03-20 03:34:52 +02:00
boot-order-test.c libqos: Use explicit QTestState for fw_cfg operations 2018-02-14 11:43:41 +01:00
boot-sector.c tests/boot-sector: Drop dependence on global_qtest 2018-02-14 11:43:41 +01:00
boot-sector.h tests/boot-sector: Drop dependence on global_qtest 2018-02-14 11:43:41 +01:00
boot-serial-test.c tests/boot-serial: Check the 40p machine, too 2018-03-18 18:27:23 +11:00
check-block.sh tests: allow to specify list of formats to test for check-block.sh 2016-09-23 13:36:09 +02:00
check-qdict.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
check-qjson.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
check-qlist.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
check-qlit.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
check-qnull.c qapi/qnull: Add own header 2017-11-17 18:21:30 +01:00
check-qnum.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
check-qobject.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
check-qom-interface.c tests: fix check-qom-interface leaks 2016-09-08 17:57:32 +04:00
check-qom-proplist.c qapi: drop the sentinel in enum array 2017-09-04 13:09:13 +02:00
check-qstring.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
cpu-plug-test.c Include qapi/qmp/qdict.h exactly where needed 2018-02-09 13:52:15 +01:00
crypto-tls-x509-helpers.c crypto: fix test cert generation to not use SHA1 algorithm 2017-09-04 10:45:19 +01:00
crypto-tls-x509-helpers.h clean-up: removed duplicate #includes 2016-10-28 18:17:24 +03:00
device-introspect-test.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
display-vga-test.c qtest: add display-vga-test to ppc64 2017-01-31 10:10:13 +11:00
drive_del-test.c Include qapi/qmp/qdict.h exactly where needed 2018-02-09 13:52:15 +01:00
ds1338-test.c libqos: Use explicit QTestState for i2c operations 2018-02-14 11:43:41 +01:00
e1000-test.c tests: fix e1000-test leak 2017-03-01 11:51:28 +04:00
e1000e-test.c libqos: Use explicit QTestState for fw_cfg operations 2018-02-14 11:43:41 +01:00
eepro100-test.c tests: fix eepro100-test leak 2017-03-01 11:51:05 +04:00
endianness-test.c libqtest: Add qtest_[v]startf() 2017-10-20 13:32:10 +02:00
es1370-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
fdc-test.c fdc-test: Avoid deprecated 'change' command 2017-05-09 09:14:40 +02:00
fw_cfg-test.c libqos: Use explicit QTestState for fw_cfg operations 2018-02-14 11:43:41 +01:00
hd-geo-test.c tests: fix hd-geo-test leaks 2017-03-01 11:51:04 +04:00
i440fx-test.c libqos: Track QTestState with QPCIBus 2018-02-14 11:43:02 +01:00
i82801b11-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
ide-test.c libqos: Use explicit QTestState for fw_cfg operations 2018-02-14 11:43:41 +01:00
intel-hda-test.c coccinelle: Remove unnecessary variables for function return value 2016-06-20 16:38:13 +02:00
io-channel-helpers.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
io-channel-helpers.h io: add QIOChannelSocket class 2015-12-18 12:18:31 +00:00
ioh3420-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
iothread.c aio: introduce aio_co_schedule and aio_co_wake 2017-02-21 11:14:07 +00:00
iothread.h aio: introduce aio_co_schedule and aio_co_wake 2017-02-21 11:14:07 +00:00
ipmi-bt-test.c libqtest: Add qtest_[v]startf() 2017-10-20 13:32:10 +02:00
ipmi-kcs-test.c tests: fix ipmi-kcs-test leak 2017-03-01 11:51:05 +04:00
ipoctal232-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
ivshmem-test.c libqos: Use explicit QTestState for remaining libqos operations 2018-02-14 11:43:41 +01:00
libqtest.c tests: Add parameter to qtest_init_without_qmp_handshake 2018-03-27 10:17:45 -05:00
libqtest.h tests: Add parameter to qtest_init_without_qmp_handshake 2018-03-27 10:17:45 -05:00
m25p80-test.c libqtest: Add qtest_[v]startf() 2017-10-20 13:32:10 +02:00
m48t59-test.c tests/m48t59: Use the m48t59 test on ppc, too 2018-02-14 11:43:42 +01:00
machine-none-test.c tests: add machine 'none' with -cpu test 2018-03-19 14:09:57 -03:00
megasas-test.c libqos: Use explicit QTestState for remaining libqos operations 2018-02-14 11:43:41 +01:00
migration-test.c tests: Silence migration-test 'bad' test 2018-03-09 17:39:25 +00:00
ne2000-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
numa-test.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
nvme-test.c tests: Use null-co:// instead of /dev/null as the dummy image 2017-05-11 11:08:40 +02:00
pcnet-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
pkix_asn1_tab.c qtest: fix make check complaint in crypto module 2016-10-19 10:09:24 +01:00
pnv-xscom-test.c ppc/pnv: fix XSCOM core addressing on POWER9 2018-01-17 09:35:24 +11:00
prom-env-test.c libqtest: Add qtest_[v]startf() 2017-10-20 13:32:10 +02:00
ptimer-test-stubs.c ptimer-test: do not link to libqemustub.a/libqemuutil.a 2017-09-19 16:19:39 +02:00
ptimer-test.c Clean up includes 2018-02-09 05:05:11 +01:00
ptimer-test.h tests: ptimer: Change the copyright comment 2016-10-24 16:26:53 +01:00
pvpanic-test.c Include qapi/qmp/qdict.h exactly where needed 2018-02-09 13:52:15 +01:00
pxe-test.c tests/boot-sector: Drop dependence on global_qtest 2018-02-14 11:43:41 +01:00
q35-test.c libqos: Track QTestState with QPCIBus 2018-02-14 11:43:02 +01:00
qemu-iotests-quick.sh qemu-iotests: Speed up make check-block 2015-01-13 11:47:55 +00:00
qht-bench.c tcg: define CF_PARALLEL and use it for TB hashing along with CF_COUNT_MASK 2017-10-24 13:53:41 -07:00
qmp-test.c tests: qmp-test: add test for new "x-oob" 2018-03-27 10:17:45 -05:00
qom-test.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
rcutorture.c rcutorture: remove synchronize_rcu from readers 2018-03-12 16:12:47 +01:00
rtas-test.c libqos: Use explicit QTestState for remaining libqos operations 2018-02-14 11:43:41 +01:00
rtc-test.c rtc-test: introduce more update tests 2017-08-01 17:27:33 +02:00
rtl8139-test.c libqos: Track QTestState with QPCIBus 2018-02-14 11:43:02 +01:00
sdhci-test.c sdhci-test: fix leaks 2018-03-06 14:01:27 +01:00
socket-helpers.c sockets: strengthen test suite IP protocol availability checks 2018-03-13 18:06:06 +00:00
socket-helpers.h sockets: strengthen test suite IP protocol availability checks 2018-03-13 18:06:06 +00:00
spapr-phb-test.c spapr: Improved placement of PCI host bridges in guest memory map 2016-10-16 12:04:15 +11:00
tco-test.c libqos: Track QTestState with QPCIBus 2018-02-14 11:43:02 +01:00
test-aio-multithread.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
test-aio.c coroutine: add test-aio coroutine queue chaining test case 2018-03-27 13:05:28 +01:00
test-arm-mptimer.c tests: Add tests for the ARM MPTimer 2016-10-24 16:26:54 +01:00
test-base64.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-bdrv-drain.c blockjobs: add block_job_verb permission table 2018-03-19 12:01:24 +01:00
test-bitcnt.c tests: New test-bitcnt 2017-01-10 08:49:59 -08:00
test-bitops.c bitops.h: Implement half-shuffle and half-unshuffle ops 2016-06-17 15:23:51 +01:00
test-block-backend.c block: test blk_aio_flush() with blk->root == NULL 2018-03-02 18:39:07 +01:00
test-blockjob-txn.c block/mirror: change the semantic of 'force' of block-job-cancel 2018-03-19 12:01:39 +01:00
test-blockjob.c tests/test-blockjob: test cancellations 2018-03-19 12:01:24 +01:00
test-bufferiszero.c cutils: Add test for buffer_is_zero 2016-09-13 19:13:32 +02:00
test-char.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
test-clone-visitor.c Eliminate qapi/qmp/types.h 2018-02-09 13:52:15 +01:00
test-coroutine.c lockable: add QemuLockable 2018-02-08 09:22:03 +08:00
test-crypto-afsplit.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
test-crypto-block.c tests: Run the luks tests in test-crypto-block only if encryption is available 2017-11-08 11:03:46 +00:00
test-crypto-cipher.c crypto: add 3des-ede support when using libgcrypt/nettle 2016-12-21 14:26:26 +00:00
test-crypto-hash.c crypto: fix initialization of crypto in tests 2016-10-19 10:23:55 +01:00
test-crypto-hmac.c crypto: add HMAC algorithms testcases 2016-12-22 09:24:59 +00:00
test-crypto-ivgen.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
test-crypto-pbkdf.c crypto: support more hash algorithms for pbkdf 2016-09-19 16:30:45 +01:00
test-crypto-secret.c crypto: remove temp files on completion of secrets test 2016-06-13 12:41:17 +01:00
test-crypto-tlscredsx509.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
test-crypto-tlssession.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
test-crypto-xts.c crypto: rename OUT to out in xts test to avoid clash on MinGW 2016-07-04 10:46:59 +01:00
test-cutils.c cutils: add qemu_strtoi & qemu_strtoui parsers for int/unsigned int types 2018-03-13 18:06:05 +00:00
test-filter-mirror.c libqtest: Add qtest_[v]startf() 2017-10-20 13:32:10 +02:00
test-filter-redirector.c tests/test-filter-redirector: move close() 2018-02-07 14:09:25 +01:00
test-hbitmap.c tests/hbitmap: use ARRAY_SIZE macro 2018-02-10 10:44:30 +03:00
test-hmp.c net: Remove the deprecated 'host_net_add' and 'host_net_remove' HMP commands 2018-03-05 10:30:15 +08:00
test-int128.c int128: Use __int128 if available 2016-10-26 08:29:00 -07:00
test-io-channel-buffer.c tests: Clean up includes 2016-02-16 14:29:27 +00:00
test-io-channel-command.c tests: fix leaks in test-io-channel-command 2017-03-01 00:09:28 +04:00
test-io-channel-file.c io: Fix QIOChannelFile when creating and opening read-write 2018-02-15 16:54:57 +00:00
test-io-channel-socket.c sockets: pull code for testing IP availability out of specific test 2018-03-13 18:06:06 +00:00
test-io-channel-tls.c qio: non-default context for TLS handshake 2018-03-06 10:19:07 +00:00
test-io-task.c qio: non-default context for threaded qtask 2018-03-06 10:19:05 +00:00
test-iov.c tests: Use real size for iov tests 2017-09-05 22:34:40 +02:00
test-keyval.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
test-logging.c test-logging: don't hard-code paths in /tmp 2016-08-19 12:44:11 +01:00
test-mul64.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-netfilter.c Include qapi/qmp/qdict.h exactly where needed 2018-02-09 13:52:15 +01:00
test-opts-visitor.c qapi: Fix QemuOpts visitor regression on unvisited input 2017-03-22 19:24:34 +01:00
test-qapi-util.c Drop superfluous includes of qapi-types.h and test-qapi-types.h 2018-02-09 05:05:11 +01:00
test-qdev-global-props.c test-qdev-global-props: Test global property ordering 2017-07-17 15:41:30 -03:00
test-qdist.c qdist: return "(empty)" instead of NULL when printing an empty dist 2016-08-03 18:44:56 +02:00
test-qemu-opts.c test-qemu-opts: Test qemu_opts_to_qdict_filtered() 2018-03-09 15:17:47 +01:00
test-qga.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
test-qht-par.c clean-includes: run it once more 2016-06-16 18:39:03 +02:00
test-qht.c test-qht: perform lookups under rcu_read_lock 2016-10-06 18:04:13 +02:00
test-qmp-cmds.c tests: add oob-test for qapi-schema 2018-03-27 10:17:45 -05:00
test-qmp-event.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
test-qobject-input-visitor.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
test-qobject-output-visitor.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
test-rcu-list.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-replication.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
test-shift128.c host-utils: Implement unsigned quadword left/right shift and unit tests 2017-01-31 10:10:14 +11:00
test-string-input-visitor.c Eliminate qapi/qmp/types.h 2018-02-09 13:52:15 +01:00
test-string-output-visitor.c tests/qapi: use ARRAY_SIZE macro 2018-02-10 10:45:14 +03:00
test-thread-pool.c test-thread-pool: use generic AioContext infrastructure 2017-02-21 11:14:07 +00:00
test-throttle.c block: convert ThrottleGroup to object with QOM 2017-09-05 18:12:21 +02:00
test-timed-average.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-util-sockets.c sockets: allow SocketAddress 'fd' to reference numeric file descriptors 2018-03-13 18:06:06 +00:00
test-uuid.c util: add is_equal to UUID API 2017-12-20 22:01:24 +08:00
test-visitor-serialization.c tests: Silence false positive warning on generated test name 2018-03-27 10:17:32 -05:00
test-vmstate.c migration: Route more error paths 2017-09-27 11:44:18 +01:00
test-write-threshold.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-x86-cpuid-compat.c qapi: Replace qobject_to_X(o) by qobject_to(X, o) 2018-03-19 14:58:36 -05:00
test-x86-cpuid.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-xbzrle.c migration: Create migration/xbzrle.h 2017-05-18 18:04:54 +02:00
tmp105-test.c libqos: Use explicit QTestState for i2c operations 2018-02-14 11:43:41 +01:00
tpci200-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
tpm-crb-test.c tests: Tests more flags of the CRB interface 2018-03-29 17:41:03 -04:00
tpm-emu.c tests: add test for TPM TIS device 2018-02-21 07:24:50 -05:00
tpm-emu.h tests: Move common TPM test code into tpm-emu.c 2018-02-21 07:24:50 -05:00
tpm-tis-test.c tests: add test for TPM TIS device 2018-02-21 07:24:50 -05:00
usb-hcd-ehci-test.c libqos: Track QTestState with QPCIBus 2018-02-14 11:43:02 +01:00
usb-hcd-ohci-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
usb-hcd-uhci-test.c libqos: Use explicit QTestState for remaining libqos operations 2018-02-14 11:43:41 +01:00
usb-hcd-xhci-test.c tests: Introduce generic device hot-plug/hot-unplug functions 2017-09-15 09:05:18 +02:00
vhost-user-bridge.c tests: Avoid 'do/while(false); ' in vhost-user-bridge 2018-01-16 14:54:52 +01:00
vhost-user-test.c vhost-user-test: add back memfd check 2018-03-26 14:37:13 +02:00
virtio-9p-test.c libqos: Use explicit QTestState for remaining libqos operations 2018-02-14 11:43:41 +01:00
virtio-balloon-test.c tests: Enable the very simple virtio tests on s390x, too 2017-10-20 13:32:10 +02:00
virtio-blk-test.c libqos: Use explicit QTestState for remaining libqos operations 2018-02-14 11:43:41 +01:00
virtio-console-test.c tests: Enable the very simple virtio tests on s390x, too 2017-10-20 13:32:10 +02:00
virtio-net-test.c libqos: Use explicit QTestState for remaining libqos operations 2018-02-14 11:43:41 +01:00
virtio-rng-test.c tests: enable virtio tests on SPAPR 2016-10-28 09:36:58 +11:00
virtio-scsi-test.c scsi: support NDOB (no data-out buffer) for WRITE SAME commands 2018-03-12 16:12:46 +01:00
virtio-serial-test.c tests: Enable the very simple virtio tests on s390x, too 2017-10-20 13:32:10 +02:00
vmgenid-test.c tests/boot-sector: Drop dependence on global_qtest 2018-02-14 11:43:41 +01:00
vmxnet3-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
wdt_ib700-test.c wdt_ib700-test: Drop dependence on global_qtest 2018-02-14 11:43:42 +01:00