From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39268) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aT8GR-0007Sz-6e for qemu-devel@nongnu.org; Tue, 09 Feb 2016 08:23:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aT8GL-00055S-7G for qemu-devel@nongnu.org; Tue, 09 Feb 2016 08:23:31 -0500 Received: from e06smtp06.uk.ibm.com ([195.75.94.102]:55176) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aT8GK-00054Z-RE for qemu-devel@nongnu.org; Tue, 09 Feb 2016 08:23:25 -0500 Received: from localhost by e06smtp06.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 9 Feb 2016 13:23:22 -0000 From: Sascha Silbe Date: Tue, 9 Feb 2016 14:23:10 +0100 Message-Id: <1455024190-105823-3-git-send-email-silbe@linux.vnet.ibm.com> In-Reply-To: <1455024190-105823-1-git-send-email-silbe@linux.vnet.ibm.com> References: <1455024190-105823-1-git-send-email-silbe@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [PATCH 2/2] qemu-iotests: 067: ignore QMP events List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, Kevin Wolf , qemu-block@nongnu.org Cc: Tu Bo The relative ordering of the "device_del" return value and the "DEVICE_DELETED" QMP event depends on the architecture being tested. On x86 unplugging virtio disks is asynchronous (=qdev_unplug()= → =hotplug_handler_unplug_request()=) while on s390x it is synchronous (=qdev_unplug()= → =hotplug_handler_unplug()=). This leads to the actual output on s390x consistently differing from the reference output (that was probably produced on x86). The easiest way to address this is to filter out QMP events in 067. The DEVICE_DELETED event is already getting explicitly tested by the Python-based test case 139, so the test coverage should be unaffected. Make use of _filter_qmp_events() introduced by the previous patch to remove QMP events from the test case output and adjust the reference output accordingly. Signed-off-by: Sascha Silbe --- This patch is a lot easier to read using the following command after applying it locally (will hide all whitespace-only changes): git log -p -1 --word-diff-regex='[^[:space:]]' There are two alternative solutions: 1. Add per-architecture reference output for architectures with synchronous hotplug handling. Contributors often forget to update the reference output files after changing the qemu output. With per-architecture files, this gets a lot worse as contributors would need to run the tests for all supported architectures, possibly *on* all supported architectures, to notice the changed output and verify their changes to the reference output. 2. Reimplement 067 in Python. 067 currently covers a lot of QMP output for (virtio) block devices, even if just as a side effect. If we don't want to risk reducing the test coverage, we'd need to either ensure some other test is covering this output (and will continue to do so in the future) or add a lot of explicit checking in the Python test. This isn't quite as bad as it sounds as we can check the entire result against a dictionary literal each time. Both alternatives have the advantage that we don't need very long lines (currently up to 753 characters) in the reference output. --- tests/qemu-iotests/067 | 4 +- tests/qemu-iotests/067.out | 527 +++------------------------------------------ 2 files changed, 35 insertions(+), 496 deletions(-) diff --git a/tests/qemu-iotests/067 b/tests/qemu-iotests/067 index 3788534..8fd19f5 100755 --- a/tests/qemu-iotests/067 +++ b/tests/qemu-iotests/067 @@ -41,7 +41,7 @@ _unsupported_imgopts 'refcount_bits=\([^1]\|.\([^6]\|$\)\)' function do_run_qemu() { echo Testing: "$@" - $QEMU -nographic -qmp-pretty stdio -serial none "$@" + $QEMU -nographic -qmp stdio -serial none "$@" echo } @@ -49,7 +49,7 @@ function run_qemu() { do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp | _filter_qemu \ | sed -e 's/\("actual-size":\s*\)[0-9]\+/\1SIZE/g' \ - | _filter_generated_node_ids + | _filter_generated_node_ids | _filter_qmp_events } size=128M diff --git a/tests/qemu-iotests/067.out b/tests/qemu-iotests/067.out index ae3fccb..1877271 100644 --- a/tests/qemu-iotests/067.out +++ b/tests/qemu-iotests/067.out @@ -4,514 +4,53 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 === -drive/-device and device_del === Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,if=none,id=disk -device virtio-blk,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, - "refcount-bits": 16, - "corrupt": false - } - }, - "dirty-flag": false - }, - "iops_wr": 0, - "ro": false, - "node-name": "NODE_NAME", - "backing_file_depth": 0, - "drv": "qcow2", - "iops": 0, - "bps_wr": 0, - "write_threshold": 0, - "encrypted": false, - "bps": 0, - "bps_rd": 0, - "cache": { - "no-flush": false, - "direct": false, - "writeback": true - }, - "file": "TEST_DIR/t.qcow2", - "encryption_key_missing": false - }, - "type": "unknown" - } - ] -} -{ - "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": [ - ] -} -{ - "return": { - } -} -{ - "timestamp": { - "seconds": TIMESTAMP, - "microseconds": TIMESTAMP - }, - "event": "SHUTDOWN" -} +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, "refcount-bits": 16, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "NODE_NAME", "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "write_threshold": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "cache": {"no-flush": false, "direct": false, "writeback": true}, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}]} +{"return": {}} +{"return": {}} +{"return": []} +{"return": {}} === -drive/device_add and device_del === 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, - "refcount-bits": 16, - "corrupt": false - } - }, - "dirty-flag": false - }, - "iops_wr": 0, - "ro": false, - "node-name": "NODE_NAME", - "backing_file_depth": 0, - "drv": "qcow2", - "iops": 0, - "bps_wr": 0, - "write_threshold": 0, - "encrypted": false, - "bps": 0, - "bps_rd": 0, - "cache": { - "no-flush": false, - "direct": false, - "writeback": true - }, - "file": "TEST_DIR/t.qcow2", - "encryption_key_missing": 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": [ - ] -} -{ - "return": { - } -} -{ - "timestamp": { - "seconds": TIMESTAMP, - "microseconds": TIMESTAMP - }, - "event": "SHUTDOWN" -} +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, "refcount-bits": 16, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "NODE_NAME", "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "write_threshold": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "cache": {"no-flush": false, "direct": false, "writeback": true}, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}]} +{"return": {}} +{"return": {}} +{"return": {}} +{"return": []} +{"return": {}} === drive_add/device_add and device_del === Testing: -{ - QMP_VERSION -} -{ - "return": { - } -} -{ - "return": "OK\r\n" -} -{ - "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, - "refcount-bits": 16, - "corrupt": false - } - }, - "dirty-flag": false - }, - "iops_wr": 0, - "ro": false, - "node-name": "NODE_NAME", - "backing_file_depth": 0, - "drv": "qcow2", - "iops": 0, - "bps_wr": 0, - "write_threshold": 0, - "encrypted": false, - "bps": 0, - "bps_rd": 0, - "cache": { - "no-flush": false, - "direct": false, - "writeback": true - }, - "file": "TEST_DIR/t.qcow2", - "encryption_key_missing": 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": [ - ] -} -{ - "return": { - } -} -{ - "timestamp": { - "seconds": TIMESTAMP, - "microseconds": TIMESTAMP - }, - "event": "SHUTDOWN" -} +QMP_VERSION +{"return": {}} +{"return": "OK\r\n"} +{"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, "refcount-bits": 16, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "NODE_NAME", "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "write_threshold": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "cache": {"no-flush": false, "direct": false, "writeback": true}, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}]} +{"return": {}} +{"return": {}} +{"return": {}} +{"return": []} +{"return": {}} === blockdev_add/device_add and device_del === Testing: -{ - QMP_VERSION -} -{ - "return": { - } -} -{ - "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, - "refcount-bits": 16, - "corrupt": false - } - }, - "dirty-flag": false - }, - "iops_wr": 0, - "ro": false, - "node-name": "NODE_NAME", - "backing_file_depth": 0, - "drv": "qcow2", - "iops": 0, - "bps_wr": 0, - "write_threshold": 0, - "encrypted": false, - "bps": 0, - "bps_rd": 0, - "cache": { - "no-flush": false, - "direct": false, - "writeback": true - }, - "file": "TEST_DIR/t.qcow2", - "encryption_key_missing": 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": "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, - "refcount-bits": 16, - "corrupt": false - } - }, - "dirty-flag": false - }, - "iops_wr": 0, - "ro": false, - "node-name": "NODE_NAME", - "backing_file_depth": 0, - "drv": "qcow2", - "iops": 0, - "bps_wr": 0, - "write_threshold": 0, - "encrypted": false, - "bps": 0, - "bps_rd": 0, - "cache": { - "no-flush": false, - "direct": false, - "writeback": true - }, - "file": "TEST_DIR/t.qcow2", - "encryption_key_missing": false - }, - "type": "unknown" - } - ] -} -{ - "return": { - } -} -{ - "timestamp": { - "seconds": TIMESTAMP, - "microseconds": TIMESTAMP - }, - "event": "SHUTDOWN" -} +QMP_VERSION +{"return": {}} +{"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, "refcount-bits": 16, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "NODE_NAME", "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "write_threshold": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "cache": {"no-flush": false, "direct": false, "writeback": true}, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}]} +{"return": {}} +{"return": {}} +{"return": {}} +{"return": [{"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, "refcount-bits": 16, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "NODE_NAME", "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "write_threshold": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "cache": {"no-flush": false, "direct": false, "writeback": true}, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}]} +{"return": {}} *** done -- 2.1.4