diff options
author | Peter Maydell | 2014-10-06 11:59:55 +0200 |
---|---|---|
committer | Peter Maydell | 2014-10-06 11:59:56 +0200 |
commit | 507ef2f9fab3e67ac6fefda4e20db7fc5f2bc186 (patch) | |
tree | 71c2dc7fcfeb4f0b0dfba1287e191998b1375c79 /tests | |
parent | Merge remote-tracking branch 'remotes/kraxel/tags/pull-input-20141002-1' into... (diff) | |
parent | blockdev-test: Test device_del after drive_del (diff) | |
download | qemu-507ef2f9fab3e67ac6fefda4e20db7fc5f2bc186.tar.gz qemu-507ef2f9fab3e67ac6fefda4e20db7fc5f2bc186.tar.xz qemu-507ef2f9fab3e67ac6fefda4e20db7fc5f2bc186.zip |
Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging
# gpg: Signature made Sat 04 Oct 2014 21:24:46 BST using RSA key ID 81AB73C8
# gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>"
# gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>"
* remotes/stefanha/tags/block-pull-request: (23 commits)
blockdev-test: Test device_del after drive_del
blockdev-test: Factor out some common code into helpers
blockdev-test: Simplify by using g_assert_cmpstr()
blockdev-test: Clean up bogus drive_add argument
blockdev-test: Use single rather than double quotes in QMP
drive_del-test: Merge of qdev-monitor-test, blockdev-test
iotests: qemu-img info output for corrupt image
qapi: Add corrupt field to ImageInfoSpecificQCow2
iotests: Use _img_info
util: Emancipate id_wellformed() from QemuOpts
q35/ahci: Pick up -cdrom and -hda options
qtest/bios-tables: Correct Q35 command line
ide: Update ide_drive_get to be HBA agnostic
pc/vl: Add units-per-default-bus property
blockdev: Allow overriding if_max_dev property
blockdev: Orphaned drive search
qemu-iotests: Fix supported cache modes for 052
make check-block: Use default cache modes
Modify qemu_opt_rename to realize renaming all items in opts
vmdk: Fix integer overflow in offset calculation
...
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile | 5 | ||||
-rw-r--r-- | tests/bios-tables-test.c | 10 | ||||
-rw-r--r-- | tests/blockdev-test.c | 59 | ||||
-rw-r--r-- | tests/drive_del-test.c | 137 | ||||
-rw-r--r-- | tests/qdev-monitor-test.c | 77 | ||||
-rwxr-xr-x | tests/qemu-iotests-quick.sh | 2 | ||||
-rwxr-xr-x | tests/qemu-iotests/052 | 5 | ||||
-rwxr-xr-x | tests/qemu-iotests/060 | 3 | ||||
-rw-r--r-- | tests/qemu-iotests/060.out | 9 | ||||
-rwxr-xr-x | tests/qemu-iotests/065 | 12 | ||||
-rw-r--r-- | tests/qemu-iotests/067.out | 10 | ||||
-rwxr-xr-x | tests/qemu-iotests/070 | 2 | ||||
-rw-r--r-- | tests/qemu-iotests/070.out | 5 | ||||
-rwxr-xr-x | tests/qemu-iotests/082 | 12 | ||||
-rw-r--r-- | tests/qemu-iotests/082.out | 62 | ||||
-rw-r--r-- | tests/qemu-iotests/089.out | 2 | ||||
-rwxr-xr-x | tests/qemu-iotests/095 | 4 | ||||
-rw-r--r-- | tests/qemu-iotests/095.out | 16 | ||||
-rwxr-xr-x | tests/qemu-iotests/105 | 70 | ||||
-rw-r--r-- | tests/qemu-iotests/105.out | 21 | ||||
-rw-r--r-- | tests/qemu-iotests/group | 1 |
21 files changed, 297 insertions, 227 deletions
diff --git a/tests/Makefile b/tests/Makefile index 834279cd0d..ffa8312eb5 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -140,8 +140,7 @@ check-qtest-i386-y += tests/bios-tables-test$(EXESUF) check-qtest-i386-y += tests/rtc-test$(EXESUF) check-qtest-i386-y += tests/i440fx-test$(EXESUF) check-qtest-i386-y += tests/fw_cfg-test$(EXESUF) -check-qtest-i386-y += tests/blockdev-test$(EXESUF) -check-qtest-i386-y += tests/qdev-monitor-test$(EXESUF) +check-qtest-i386-y += tests/drive_del-test$(EXESUF) check-qtest-i386-y += tests/wdt_ib700-test$(EXESUF) gcov-files-i386-y += hw/watchdog/watchdog.c hw/watchdog/wdt_ib700.c check-qtest-i386-y += $(check-qtest-pci-y) @@ -335,7 +334,7 @@ tests/tpci200-test$(EXESUF): tests/tpci200-test.o tests/display-vga-test$(EXESUF): tests/display-vga-test.o tests/ipoctal232-test$(EXESUF): tests/ipoctal232-test.o tests/qom-test$(EXESUF): tests/qom-test.o -tests/blockdev-test$(EXESUF): tests/blockdev-test.o $(libqos-pc-obj-y) +tests/drive_del-test$(EXESUF): tests/drive_del-test.o $(libqos-pc-obj-y) tests/qdev-monitor-test$(EXESUF): tests/qdev-monitor-test.o $(libqos-pc-obj-y) tests/nvme-test$(EXESUF): tests/nvme-test.o tests/pvpanic-test$(EXESUF): tests/pvpanic-test.o diff --git a/tests/bios-tables-test.c b/tests/bios-tables-test.c index 602932b888..9e4d20592b 100644 --- a/tests/bios-tables-test.c +++ b/tests/bios-tables-test.c @@ -714,14 +714,12 @@ static void test_acpi_one(const char *params, test_data *data) uint8_t signature_high; uint16_t signature; int i; - const char *device = ""; - if (!g_strcmp0(data->machine, MACHINE_Q35)) { - device = ",id=hd -device ide-hd,drive=hd"; - } + args = g_strdup_printf("-net none -display none %s " + "-drive id=hd0,if=none,file=%s " + "-device ide-hd,drive=hd0 ", + params ? params : "", disk); - args = g_strdup_printf("-net none -display none %s -drive file=%s%s,", - params ? params : "", disk, device); qtest_start(args); /* Wait at most 1 minute */ diff --git a/tests/blockdev-test.c b/tests/blockdev-test.c deleted file mode 100644 index c940e00690..0000000000 --- a/tests/blockdev-test.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * blockdev.c test cases - * - * Copyright (C) 2013 Red Hat Inc. - * - * Authors: - * Stefan Hajnoczi <stefanha@redhat.com> - * - * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. - * See the COPYING.LIB file in the top-level directory. - */ - -#include <glib.h> -#include <string.h> -#include "libqtest.h" - -static void test_drive_add_empty(void) -{ - QDict *response; - const char *response_return; - - /* Start with an empty drive */ - qtest_start("-drive if=none,id=drive0"); - - /* Delete the drive */ - response = qmp("{\"execute\": \"human-monitor-command\"," - " \"arguments\": {" - " \"command-line\": \"drive_del drive0\"" - "}}"); - g_assert(response); - response_return = qdict_get_try_str(response, "return"); - g_assert(response_return); - g_assert(strcmp(response_return, "") == 0); - QDECREF(response); - - /* Ensure re-adding the drive works - there should be no duplicate ID error - * because the old drive must be gone. - */ - response = qmp("{\"execute\": \"human-monitor-command\"," - " \"arguments\": {" - " \"command-line\": \"drive_add 0 if=none,id=drive0\"" - "}}"); - g_assert(response); - response_return = qdict_get_try_str(response, "return"); - g_assert(response_return); - g_assert(strcmp(response_return, "OK\r\n") == 0); - QDECREF(response); - - qtest_end(); -} - -int main(int argc, char **argv) -{ - g_test_init(&argc, &argv, NULL); - - qtest_add_func("/qmp/drive_add_empty", test_drive_add_empty); - - return g_test_run(); -} diff --git a/tests/drive_del-test.c b/tests/drive_del-test.c new file mode 100644 index 0000000000..53fa969260 --- /dev/null +++ b/tests/drive_del-test.c @@ -0,0 +1,137 @@ +/* + * blockdev.c test cases + * + * Copyright (C) 2013-2014 Red Hat Inc. + * + * Authors: + * Stefan Hajnoczi <stefanha@redhat.com> + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. + */ + +#include <glib.h> +#include <string.h> +#include "libqtest.h" + +static void drive_add(void) +{ + QDict *response; + + response = qmp("{'execute': 'human-monitor-command'," + " 'arguments': {" + " 'command-line': 'drive_add 0 if=none,id=drive0'" + "}}"); + g_assert(response); + g_assert_cmpstr(qdict_get_try_str(response, "return"), ==, "OK\r\n"); + QDECREF(response); +} + +static void drive_del(void) +{ + QDict *response; + + response = qmp("{'execute': 'human-monitor-command'," + " 'arguments': {" + " 'command-line': 'drive_del drive0'" + "}}"); + g_assert(response); + g_assert_cmpstr(qdict_get_try_str(response, "return"), ==, ""); + QDECREF(response); +} + +static void device_del(void) +{ + QDict *response; + + /* Complication: ignore DEVICE_DELETED event */ + qmp_discard_response("{'execute': 'device_del'," + " 'arguments': { 'id': 'dev0' } }"); + response = qmp_receive(); + g_assert(response); + g_assert(qdict_haskey(response, "return")); + QDECREF(response); +} + +static void test_drive_without_dev(void) +{ + /* Start with an empty drive */ + qtest_start("-drive if=none,id=drive0"); + + /* Delete the drive */ + drive_del(); + + /* Ensure re-adding the drive works - there should be no duplicate ID error + * because the old drive must be gone. + */ + drive_add(); + + qtest_end(); +} + +static void test_after_failed_device_add(void) +{ + QDict *response; + QDict *error; + + qtest_start("-drive if=none,id=drive0"); + + /* Make device_add fail. If this leaks the virtio-blk-pci device then a + * reference to drive0 will also be held (via qdev properties). + */ + response = qmp("{'execute': 'device_add'," + " 'arguments': {" + " 'driver': 'virtio-blk-pci'," + " 'drive': 'drive0'" + "}}"); + g_assert(response); + error = qdict_get_qdict(response, "error"); + g_assert_cmpstr(qdict_get_try_str(error, "class"), ==, "GenericError"); + QDECREF(response); + + /* Delete the drive */ + drive_del(); + + /* Try to re-add the drive. This fails with duplicate IDs if a leaked + * virtio-blk-pci exists that holds a reference to the old drive0. + */ + drive_add(); + + qtest_end(); +} + +static void test_drive_del_device_del(void) +{ + /* Start with a drive used by a device that unplugs instantaneously */ + qtest_start("-drive if=none,id=drive0,file=/dev/null" + " -device virtio-scsi-pci" + " -device scsi-hd,drive=drive0,id=dev0"); + + /* + * Delete the drive, and then the device + * Doing it in this order takes notoriously tricky special paths + */ + drive_del(); + device_del(); + + qtest_end(); +} + +int main(int argc, char **argv) +{ + const char *arch = qtest_get_arch(); + + g_test_init(&argc, &argv, NULL); + + qtest_add_func("/drive_del/without-dev", test_drive_without_dev); + + /* TODO I guess any arch with PCI would do */ + if (!strcmp(arch, "i386") || !strcmp(arch, "x86_64")) { + qtest_add_func("/drive_del/after_failed_device_add", + test_after_failed_device_add); + qtest_add_func("/blockdev/drive_del_device_del", + test_drive_del_device_del); + } + + return g_test_run(); +} diff --git a/tests/qdev-monitor-test.c b/tests/qdev-monitor-test.c deleted file mode 100644 index e20ffd67a7..0000000000 --- a/tests/qdev-monitor-test.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * qdev-monitor.c test cases - * - * Copyright (C) 2013 Red Hat Inc. - * - * Authors: - * Stefan Hajnoczi <stefanha@redhat.com> - * - * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. - * See the COPYING.LIB file in the top-level directory. - */ - -#include <string.h> -#include <glib.h> -#include "libqtest.h" -#include "qapi/qmp/qjson.h" - -static void test_device_add(void) -{ - QDict *response; - QDict *error; - - qtest_start("-drive if=none,id=drive0"); - - /* Make device_add fail. If this leaks the virtio-blk-pci device then a - * reference to drive0 will also be held (via qdev properties). - */ - response = qmp("{\"execute\": \"device_add\"," - " \"arguments\": {" - " \"driver\": \"virtio-blk-pci\"," - " \"drive\": \"drive0\"" - "}}"); - g_assert(response); - error = qdict_get_qdict(response, "error"); - g_assert_cmpstr(qdict_get_try_str(error, "class"), ==, "GenericError"); - QDECREF(response); - - /* Delete the drive */ - response = qmp("{\"execute\": \"human-monitor-command\"," - " \"arguments\": {" - " \"command-line\": \"drive_del drive0\"" - "}}"); - g_assert(response); - g_assert_cmpstr(qdict_get_try_str(response, "return"), ==, ""); - QDECREF(response); - - /* Try to re-add the drive. This fails with duplicate IDs if a leaked - * virtio-blk-pci exists that holds a reference to the old drive0. - */ - response = qmp("{\"execute\": \"human-monitor-command\"," - " \"arguments\": {" - " \"command-line\": \"drive_add pci-addr=auto if=none,id=drive0\"" - "}}"); - g_assert(response); - g_assert_cmpstr(qdict_get_try_str(response, "return"), ==, "OK\r\n"); - QDECREF(response); - - qtest_end(); -} - -int main(int argc, char **argv) -{ - const char *arch = qtest_get_arch(); - - /* Check architecture */ - if (strcmp(arch, "i386") && strcmp(arch, "x86_64")) { - g_test_message("Skipping test for non-x86\n"); - return 0; - } - - /* Run the tests */ - g_test_init(&argc, &argv, NULL); - - qtest_add_func("/qmp/device_add", test_device_add); - - return g_test_run(); -} diff --git a/tests/qemu-iotests-quick.sh b/tests/qemu-iotests-quick.sh index 8a9a4c68e9..12af731c68 100755 --- a/tests/qemu-iotests-quick.sh +++ b/tests/qemu-iotests-quick.sh @@ -3,6 +3,6 @@ cd tests/qemu-iotests ret=0 -./check -T -nocache -qcow2 -g quick || ret=1 +./check -T -qcow2 -g quick || ret=1 exit $ret diff --git a/tests/qemu-iotests/052 b/tests/qemu-iotests/052 index 6bdae92780..61959e286e 100755 --- a/tests/qemu-iotests/052 +++ b/tests/qemu-iotests/052 @@ -41,8 +41,9 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 _supported_fmt generic _supported_proto file _supported_os Linux -_default_cache_mode "writethrough" -_supported_cache_modes "writethrough" + +# Don't do O_DIRECT on tmpfs +_supported_cache_modes "writeback" "writethrough" "unsafe" size=128M _make_test_img $size diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060 index 2355567951..9772d365ae 100755 --- a/tests/qemu-iotests/060 +++ b/tests/qemu-iotests/060 @@ -76,6 +76,9 @@ $QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io # The corrupt bit must now be set $PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features +# This information should be available through qemu-img info +$QEMU_IMG info "$TEST_IMG" | _filter_testdir + # Try to open the image R/W (which should fail) $QEMU_IO -c "$OPEN_RW" -c "read 0 512" 2>&1 | _filter_qemu_io \ | _filter_testdir \ diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out index 4f0c6d0c8e..cd679f9454 100644 --- a/tests/qemu-iotests/060.out +++ b/tests/qemu-iotests/060.out @@ -11,6 +11,15 @@ incompatible_features 0x0 qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with active L1 table); further corruption events will be suppressed write failed: Input/output error incompatible_features 0x2 +image: TEST_DIR/t.qcow2 +file format: qcow2 +virtual size: 64M (67108864 bytes) +disk size: 196K +cluster_size: 65536 +Format specific information: + compat: 1.1 + lazy refcounts: false + corrupt: true qemu-io: can't open device TEST_DIR/t.IMGFMT: IMGFMT: Image is corrupt; cannot be opened read/write read 512/512 bytes at offset 0 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) diff --git a/tests/qemu-iotests/065 b/tests/qemu-iotests/065 index e89b61d70b..8d3a9c9afd 100755 --- a/tests/qemu-iotests/065 +++ b/tests/qemu-iotests/065 @@ -94,28 +94,28 @@ class TestQCow2(TestQemuImgInfo): class TestQCow3NotLazy(TestQemuImgInfo): '''Testing a qcow2 version 3 image with lazy refcounts disabled''' img_options = 'compat=1.1,lazy_refcounts=off' - json_compare = { 'compat': '1.1', 'lazy-refcounts': False } - human_compare = [ 'compat: 1.1', 'lazy refcounts: false' ] + json_compare = { 'compat': '1.1', 'lazy-refcounts': False, 'corrupt': False } + human_compare = [ 'compat: 1.1', 'lazy refcounts: false', 'corrupt: false' ] class TestQCow3Lazy(TestQemuImgInfo): '''Testing a qcow2 version 3 image with lazy refcounts enabled''' img_options = 'compat=1.1,lazy_refcounts=on' - json_compare = { 'compat': '1.1', 'lazy-refcounts': True } - human_compare = [ 'compat: 1.1', 'lazy refcounts: true' ] + json_compare = { 'compat': '1.1', 'lazy-refcounts': True, 'corrupt': False } + human_compare = [ 'compat: 1.1', 'lazy refcounts: true', 'corrupt: false' ] class TestQCow3NotLazyQMP(TestQMP): '''Testing a qcow2 version 3 image with lazy refcounts disabled, opening with lazy refcounts enabled''' img_options = 'compat=1.1,lazy_refcounts=off' qemu_options = 'lazy-refcounts=on' - compare = { 'compat': '1.1', 'lazy-refcounts': False } + compare = { 'compat': '1.1', 'lazy-refcounts': False, 'corrupt': False } class TestQCow3LazyQMP(TestQMP): '''Testing a qcow2 version 3 image with lazy refcounts enabled, opening with lazy refcounts disabled''' img_options = 'compat=1.1,lazy_refcounts=on' qemu_options = 'lazy-refcounts=off' - compare = { 'compat': '1.1', 'lazy-refcounts': True } + compare = { 'compat': '1.1', 'lazy-refcounts': True, 'corrupt': False } TestImageInfoSpecific = None TestQemuImgInfo = None diff --git a/tests/qemu-iotests/067.out b/tests/qemu-iotests/067.out index 7e090b95ab..0f72dcf63a 100644 --- a/tests/qemu-iotests/067.out +++ b/tests/qemu-iotests/067.out @@ -6,7 +6,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,if=none,id=disk -device virtio-blk-pci,drive=disk,id=virtio0 QMP_VERSION {"return": {}} -{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} +{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} {"return": {}} {"return": {}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"path": "/machine/peripheral/virtio0/virtio-backend"}} @@ -24,7 +24,7 @@ QMP_VERSION Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,if=none,id=disk QMP_VERSION {"return": {}} -{"return": [{"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} +{"return": [{"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} {"return": {}} {"return": {}} {"return": {}} @@ -44,7 +44,7 @@ Testing: QMP_VERSION {"return": {}} {"return": "OK\r\n"} -{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} +{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} {"return": {}} {"return": {}} {"return": {}} @@ -64,14 +64,14 @@ Testing: QMP_VERSION {"return": {}} {"return": {}} -{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} +{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} {"return": {}} {"return": {}} {"return": {}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"path": "/machine/peripheral/virtio0/virtio-backend"}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"device": "virtio0", "path": "/machine/peripheral/virtio0"}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESET"} -{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} +{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} {"return": {}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}} diff --git a/tests/qemu-iotests/070 b/tests/qemu-iotests/070 index ea0dae7e9c..d649ddf9bd 100755 --- a/tests/qemu-iotests/070 +++ b/tests/qemu-iotests/070 @@ -77,7 +77,7 @@ _use_sample_img test-disk2vhd.vhdx.bz2 echo echo "=== Verify image created by Disk2VHD can be opened ===" -$QEMU_IMG info "$TEST_IMG" 2>&1 | _filter_testdir | _filter_qemu +_img_info # success, all done echo "*** done" diff --git a/tests/qemu-iotests/070.out b/tests/qemu-iotests/070.out index 15f1fc1471..ca743831c9 100644 --- a/tests/qemu-iotests/070.out +++ b/tests/qemu-iotests/070.out @@ -20,9 +20,8 @@ read 18874368/18874368 bytes at offset 0 18 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) === Verify image created by Disk2VHD can be opened === -image: TEST_DIR/test-disk2vhd.vhdx -file format: vhdx +image: TEST_DIR/test-disk2vhd.IMGFMT +file format: IMGFMT virtual size: 256M (268435456 bytes) -disk size: 260M cluster_size: 2097152 *** done diff --git a/tests/qemu-iotests/082 b/tests/qemu-iotests/082 index f6eb75f624..910b13e8f0 100755 --- a/tests/qemu-iotests/082 +++ b/tests/qemu-iotests/082 @@ -56,7 +56,7 @@ echo === create: Options specified more than once === # Last -f should win run_qemu_img create -f foo -f $IMGFMT "$TEST_IMG" $size -run_qemu_img info "$TEST_IMG" +_img_info # Multiple -o should be merged run_qemu_img create -f $IMGFMT -o cluster_size=4k -o lazy_refcounts=on "$TEST_IMG" $size @@ -66,7 +66,7 @@ run_qemu_img info "$TEST_IMG" run_qemu_img create -f $IMGFMT -o cluster_size=4k -o lazy_refcounts=on -o cluster_size=8k "$TEST_IMG" $size run_qemu_img info "$TEST_IMG" run_qemu_img create -f $IMGFMT -o cluster_size=4k,cluster_size=8k "$TEST_IMG" $size -run_qemu_img info "$TEST_IMG" +_img_info echo echo === create: help for -o === @@ -106,11 +106,11 @@ run_qemu_img create -f $IMGFMT "$TEST_IMG" $size # Last -f should win run_qemu_img convert -f foo -f $IMGFMT "$TEST_IMG" "$TEST_IMG".base -run_qemu_img info "$TEST_IMG".base +TEST_IMG="${TEST_IMG}.base" _img_info # Last -O should win run_qemu_img convert -O foo -O $IMGFMT "$TEST_IMG" "$TEST_IMG".base -run_qemu_img info "$TEST_IMG".base +TEST_IMG="${TEST_IMG}.base" _img_info # Multiple -o should be merged run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o lazy_refcounts=on "$TEST_IMG" "$TEST_IMG".base @@ -120,7 +120,7 @@ run_qemu_img info "$TEST_IMG".base run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o lazy_refcounts=on -o cluster_size=8k "$TEST_IMG" "$TEST_IMG".base run_qemu_img info "$TEST_IMG".base run_qemu_img convert -O $IMGFMT -o cluster_size=4k,cluster_size=8k "$TEST_IMG" "$TEST_IMG".base -run_qemu_img info "$TEST_IMG".base +TEST_IMG="${TEST_IMG}.base" _img_info echo echo === convert: help for -o === @@ -167,7 +167,7 @@ run_qemu_img info "$TEST_IMG" run_qemu_img amend -f $IMGFMT -o size=8M -o lazy_refcounts=on -o size=132M "$TEST_IMG" run_qemu_img info "$TEST_IMG" run_qemu_img amend -f $IMGFMT -o size=4M,size=148M "$TEST_IMG" -run_qemu_img info "$TEST_IMG" +_img_info echo echo === amend: help for -o === diff --git a/tests/qemu-iotests/082.out b/tests/qemu-iotests/082.out index 90c21c893b..0a3ab5ac90 100644 --- a/tests/qemu-iotests/082.out +++ b/tests/qemu-iotests/082.out @@ -4,16 +4,10 @@ QA output created by 082 Testing: create -f foo -f qcow2 TEST_DIR/t.qcow2 128M Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=134217728 encryption=off cluster_size=65536 lazy_refcounts=off - -Testing: info TEST_DIR/t.qcow2 -image: TEST_DIR/t.qcow2 -file format: qcow2 +image: TEST_DIR/t.IMGFMT +file format: IMGFMT virtual size: 128M (134217728 bytes) -disk size: 196K cluster_size: 65536 -Format specific information: - compat: 1.1 - lazy refcounts: false Testing: create -f qcow2 -o cluster_size=4k -o lazy_refcounts=on TEST_DIR/t.qcow2 128M Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=134217728 encryption=off cluster_size=4096 lazy_refcounts=on @@ -27,6 +21,7 @@ cluster_size: 4096 Format specific information: compat: 1.1 lazy refcounts: true + corrupt: false Testing: create -f qcow2 -o cluster_size=4k -o lazy_refcounts=on -o cluster_size=8k TEST_DIR/t.qcow2 128M Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=134217728 encryption=off cluster_size=8192 lazy_refcounts=on @@ -40,19 +35,14 @@ cluster_size: 8192 Format specific information: compat: 1.1 lazy refcounts: true + corrupt: false Testing: create -f qcow2 -o cluster_size=4k,cluster_size=8k TEST_DIR/t.qcow2 128M Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=134217728 encryption=off cluster_size=8192 lazy_refcounts=off - -Testing: info TEST_DIR/t.qcow2 -image: TEST_DIR/t.qcow2 -file format: qcow2 +image: TEST_DIR/t.IMGFMT +file format: IMGFMT virtual size: 128M (134217728 bytes) -disk size: 28K cluster_size: 8192 -Format specific information: - compat: 1.1 - lazy refcounts: false === create: help for -o === @@ -188,24 +178,15 @@ Testing: create -f qcow2 TEST_DIR/t.qcow2 128M Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=134217728 encryption=off cluster_size=65536 lazy_refcounts=off Testing: convert -f foo -f qcow2 TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base - -Testing: info TEST_DIR/t.qcow2.base -image: TEST_DIR/t.qcow2.base +image: TEST_DIR/t.IMGFMT.base file format: raw virtual size: 128M (134217728 bytes) -disk size: 0 Testing: convert -O foo -O qcow2 TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base - -Testing: info TEST_DIR/t.qcow2.base -image: TEST_DIR/t.qcow2.base -file format: qcow2 +image: TEST_DIR/t.IMGFMT.base +file format: IMGFMT virtual size: 128M (134217728 bytes) -disk size: 196K cluster_size: 65536 -Format specific information: - compat: 1.1 - lazy refcounts: false Testing: convert -O qcow2 -o cluster_size=4k -o lazy_refcounts=on TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base @@ -218,6 +199,7 @@ cluster_size: 4096 Format specific information: compat: 1.1 lazy refcounts: true + corrupt: false Testing: convert -O qcow2 -o cluster_size=4k -o lazy_refcounts=on -o cluster_size=8k TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base @@ -230,18 +212,13 @@ cluster_size: 8192 Format specific information: compat: 1.1 lazy refcounts: true + corrupt: false Testing: convert -O qcow2 -o cluster_size=4k,cluster_size=8k TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base - -Testing: info TEST_DIR/t.qcow2.base -image: TEST_DIR/t.qcow2.base -file format: qcow2 +image: TEST_DIR/t.IMGFMT.base +file format: IMGFMT virtual size: 128M (134217728 bytes) -disk size: 28K cluster_size: 8192 -Format specific information: - compat: 1.1 - lazy refcounts: false === convert: help for -o === @@ -384,6 +361,7 @@ cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: true + corrupt: false Testing: amend -f qcow2 -o size=130M -o lazy_refcounts=off TEST_DIR/t.qcow2 @@ -396,6 +374,7 @@ cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false + corrupt: false Testing: amend -f qcow2 -o size=8M -o lazy_refcounts=on -o size=132M TEST_DIR/t.qcow2 @@ -408,18 +387,13 @@ cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: true + corrupt: false Testing: amend -f qcow2 -o size=4M,size=148M TEST_DIR/t.qcow2 - -Testing: info TEST_DIR/t.qcow2 -image: TEST_DIR/t.qcow2 -file format: qcow2 +image: TEST_DIR/t.IMGFMT +file format: IMGFMT virtual size: 148M (155189248 bytes) -disk size: 196K cluster_size: 65536 -Format specific information: - compat: 1.1 - lazy refcounts: true === amend: help for -o === diff --git a/tests/qemu-iotests/089.out b/tests/qemu-iotests/089.out index 4ca2f88e6a..b2b0390818 100644 --- a/tests/qemu-iotests/089.out +++ b/tests/qemu-iotests/089.out @@ -41,10 +41,12 @@ vm state offset: 512 MiB Format specific information: compat: 1.1 lazy refcounts: false + corrupt: false format name: IMGFMT cluster size: 64 KiB vm state offset: 512 MiB Format specific information: compat: 1.1 lazy refcounts: false + corrupt: false *** done diff --git a/tests/qemu-iotests/095 b/tests/qemu-iotests/095 index acc7dbf182..6630181a78 100755 --- a/tests/qemu-iotests/095 +++ b/tests/qemu-iotests/095 @@ -60,7 +60,7 @@ _make_test_img -b "${TEST_IMG}.snp1" $size_larger echo echo "=== Base image info before commit and resize ===" -$QEMU_IMG info "${TEST_IMG}.base" | _filter_testdir +TEST_IMG="${TEST_IMG}.base" _img_info echo echo === Running QEMU Live Commit Test === @@ -78,7 +78,7 @@ _send_qemu_cmd $h "{ 'execute': 'block-commit', echo echo "=== Base image info after commit and resize ===" -$QEMU_IMG info "${TEST_IMG}.base" | _filter_testdir +TEST_IMG="${TEST_IMG}.base" _img_info # success, all done echo "*** done" diff --git a/tests/qemu-iotests/095.out b/tests/qemu-iotests/095.out index 5864ddac2b..cc86efacc6 100644 --- a/tests/qemu-iotests/095.out +++ b/tests/qemu-iotests/095.out @@ -4,14 +4,10 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=104857600 backing_file='TEST_DIR Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=104857600 backing_file='TEST_DIR/t.IMGFMT.snp1' === Base image info before commit and resize === -image: TEST_DIR/t.qcow2.base -file format: qcow2 +image: TEST_DIR/t.IMGFMT.base +file format: IMGFMT virtual size: 5.0M (5242880 bytes) -disk size: 196K cluster_size: 65536 -Format specific information: - compat: 1.1 - lazy refcounts: false === Running QEMU Live Commit Test === @@ -20,12 +16,8 @@ Format specific information: {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "test", "len": 104857600, "offset": 104857600, "speed": 0, "type": "commit"}} === Base image info after commit and resize === -image: TEST_DIR/t.qcow2.base -file format: qcow2 +image: TEST_DIR/t.IMGFMT.base +file format: IMGFMT virtual size: 100M (104857600 bytes) -disk size: 196K cluster_size: 65536 -Format specific information: - compat: 1.1 - lazy refcounts: false *** done diff --git a/tests/qemu-iotests/105 b/tests/qemu-iotests/105 new file mode 100755 index 0000000000..9bae49e327 --- /dev/null +++ b/tests/qemu-iotests/105 @@ -0,0 +1,70 @@ +#!/bin/bash +# +# Create, read, write big image +# +# Copyright (C) 2014 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +# creator +owner=famz@redhat.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! + +_cleanup() +{ + _cleanup_test_img +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +_supported_fmt qcow2 vmdk vhdx qed +_supported_proto generic +_supported_os Linux +_unsupported_imgopts "subformat=twoGbMaxExtentFlat" \ + "subformat=twoGbMaxExtentSparse" + +echo +echo "creating large image" +_make_test_img 16T + +echo +echo "small read" +$QEMU_IO -c "read 1024 4096" "$TEST_IMG" | _filter_qemu_io + +echo +echo "small write" +$QEMU_IO -c "write 8192 4096" "$TEST_IMG" | _filter_qemu_io + +echo +echo "small read at high offset" +$QEMU_IO -c "read 14T 4096" "$TEST_IMG" | _filter_qemu_io + +echo +echo "small write at high offset" +$QEMU_IO -c "write 14T 4096" "$TEST_IMG" | _filter_qemu_io + +# success, all done +echo "*** done" +rm -f $seq.full +status=0 diff --git a/tests/qemu-iotests/105.out b/tests/qemu-iotests/105.out new file mode 100644 index 0000000000..13ffcb5932 --- /dev/null +++ b/tests/qemu-iotests/105.out @@ -0,0 +1,21 @@ +QA output created by 105 + +creating large image +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=17592186044416 + +small read +read 4096/4096 bytes at offset 1024 +4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +small write +wrote 4096/4096 bytes at offset 8192 +4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +small read at high offset +read 4096/4096 bytes at offset 15393162788864 +4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +small write at high offset +wrote 4096/4096 bytes at offset 15393162788864 +4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +*** done diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index 622685e94c..b230996528 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -105,3 +105,4 @@ 101 rw auto quick 103 rw auto quick 104 rw auto +105 rw auto quick |