[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 08/15] iotests: rewrite iotest 240 in python
From: |
Max Reitz |
Subject: |
[PULL 08/15] iotests: rewrite iotest 240 in python |
Date: |
Mon, 9 Nov 2020 18:38:32 +0100 |
From: Maxim Levitsky <mlevitsk@redhat.com>
The recent changes that brought RCU delayed device deletion,
broke few tests and this test breakage went unnoticed.
Fix this test by rewriting it in python
(which allows to wait for DEVICE_DELETED events before continuing).
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201104185025.434703-3-mlevitsk@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
tests/qemu-iotests/240 | 219 +++++++++++++++----------------------
tests/qemu-iotests/240.out | 76 +++++++------
2 files changed, 130 insertions(+), 165 deletions(-)
diff --git a/tests/qemu-iotests/240 b/tests/qemu-iotests/240
index 8b4337b58d..c0f71f0461 100755
--- a/tests/qemu-iotests/240
+++ b/tests/qemu-iotests/240
@@ -1,5 +1,5 @@
-#!/usr/bin/env bash
-#
+#!/usr/bin/env python3
+
# Test hot plugging and unplugging with iothreads
#
# Copyright (C) 2019 Igalia, S.L.
@@ -17,133 +17,90 @@
#
# 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=berto@igalia.com
-
-seq=`basename $0`
-echo "QA output created by $seq"
-
-status=1 # failure is the default!
-
-_cleanup()
-{
- rm -f "$SOCK_DIR/nbd"
-}
-trap "_cleanup; exit \$status" 0 1 2 3 15
-
-# get standard environment, filters and checks
-. ./common.rc
-. ./common.filter
-
-_supported_fmt generic
-_supported_proto generic
-
-do_run_qemu()
-{
- echo Testing: "$@"
- $QEMU -nographic -qmp stdio -serial none "$@"
- echo
-}
-
-# Remove QMP events from (pretty-printed) output. Doesn't handle
-# nested dicts correctly, but we don't get any of those in this test.
-_filter_qmp_events()
-{
- tr '\n' '\t' | sed -e \
-
's/{\s*"timestamp":\s*{[^}]*},\s*"event":[^,}]*\(,\s*"data":\s*{[^}]*}\)\?\s*}\s*//g'
\
- | tr '\t' '\n'
-}
-
-run_qemu()
-{
- do_run_qemu "$@" 2>&1 | _filter_qmp | _filter_qmp_events
-}
-
-case "$QEMU_DEFAULT_MACHINE" in
- s390-ccw-virtio)
- virtio_scsi=virtio-scsi-ccw
- ;;
- *)
- virtio_scsi=virtio-scsi-pci
- ;;
-esac
-
-echo
-echo === Unplug a SCSI disk and then plug it again ===
-echo
-
-run_qemu <<EOF
-{ "execute": "qmp_capabilities" }
-{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes":
true, "node-name": "hd0"}}
-{ "execute": "object-add", "arguments": {"qom-type": "iothread", "id":
"iothread0"}}
-{ "execute": "device_add", "arguments": {"id": "scsi0", "driver":
"${virtio_scsi}", "iothread": "iothread0"}}
-{ "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver":
"scsi-hd", "drive": "hd0"}}
-{ "execute": "device_del", "arguments": {"id": "scsi-hd0"}}
-{ "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver":
"scsi-hd", "drive": "hd0"}}
-{ "execute": "device_del", "arguments": {"id": "scsi-hd0"}}
-{ "execute": "device_del", "arguments": {"id": "scsi0"}}
-{ "execute": "blockdev-del", "arguments": {"node-name": "hd0"}}
-{ "execute": "quit"}
-EOF
-
-echo
-echo === Attach two SCSI disks using the same block device and the same
iothread ===
-echo
-
-run_qemu <<EOF
-{ "execute": "qmp_capabilities" }
-{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes":
true, "node-name": "hd0", "read-only": true}}
-{ "execute": "object-add", "arguments": {"qom-type": "iothread", "id":
"iothread0"}}
-{ "execute": "device_add", "arguments": {"id": "scsi0", "driver":
"${virtio_scsi}", "iothread": "iothread0"}}
-{ "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver":
"scsi-hd", "drive": "hd0"}}
-{ "execute": "device_add", "arguments": {"id": "scsi-hd1", "driver":
"scsi-hd", "drive": "hd0"}}
-{ "execute": "device_del", "arguments": {"id": "scsi-hd0"}}
-{ "execute": "device_del", "arguments": {"id": "scsi-hd1"}}
-{ "execute": "device_del", "arguments": {"id": "scsi0"}}
-{ "execute": "blockdev-del", "arguments": {"node-name": "hd0"}}
-{ "execute": "quit"}
-EOF
-
-echo
-echo === Attach two SCSI disks using the same block device but different
iothreads ===
-echo
-
-run_qemu <<EOF
-{ "execute": "qmp_capabilities" }
-{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes":
true, "node-name": "hd0", "read-only": true}}
-{ "execute": "object-add", "arguments": {"qom-type": "iothread", "id":
"iothread0"}}
-{ "execute": "object-add", "arguments": {"qom-type": "iothread", "id":
"iothread1"}}
-{ "execute": "device_add", "arguments": {"id": "scsi0", "driver":
"${virtio_scsi}", "iothread": "iothread0"}}
-{ "execute": "device_add", "arguments": {"id": "scsi1", "driver":
"${virtio_scsi}", "iothread": "iothread1"}}
-{ "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver":
"scsi-hd", "drive": "hd0", "bus": "scsi0.0"}}
-{ "execute": "device_add", "arguments": {"id": "scsi-hd1", "driver":
"scsi-hd", "drive": "hd0", "bus": "scsi1.0"}}
-{ "execute": "device_del", "arguments": {"id": "scsi-hd0"}}
-{ "execute": "device_add", "arguments": {"id": "scsi-hd1", "driver":
"scsi-hd", "drive": "hd0", "bus": "scsi1.0"}}
-{ "execute": "device_del", "arguments": {"id": "scsi-hd1"}}
-{ "execute": "device_del", "arguments": {"id": "scsi0"}}
-{ "execute": "device_del", "arguments": {"id": "scsi1"}}
-{ "execute": "blockdev-del", "arguments": {"node-name": "hd0"}}
-{ "execute": "quit"}
-EOF
-
-echo
-echo === Attach a SCSI disks using the same block device as a NBD server ===
-echo
-
-run_qemu <<EOF
-{ "execute": "qmp_capabilities" }
-{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes":
true, "node-name": "hd0", "read-only": true}}
-{ "execute": "nbd-server-start", "arguments":
{"addr":{"type":"unix","data":{"path":"$SOCK_DIR/nbd"}}}}
-{ "execute": "nbd-server-add", "arguments": {"device":"hd0"}}
-{ "execute": "object-add", "arguments": {"qom-type": "iothread", "id":
"iothread0"}}
-{ "execute": "device_add", "arguments": {"id": "scsi0", "driver":
"${virtio_scsi}", "iothread": "iothread0"}}
-{ "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver":
"scsi-hd", "drive": "hd0", "bus": "scsi0.0"}}
-{ "execute": "quit"}
-EOF
-
-# success, all done
-echo "*** done"
-rm -f $seq.full
-status=0
+import iotests
+import os
+
+nbd_sock = iotests.file_path('nbd.sock', base_dir=iotests.sock_dir)
+
+class TestCase(iotests.QMPTestCase):
+ test_driver = "null-co"
+
+ def required_drivers(self):
+ return [self.test_driver]
+
+ @iotests.skip_if_unsupported(required_drivers)
+ def setUp(self):
+ self.vm = iotests.VM()
+ self.vm.launch()
+
+ def tearDown(self):
+ self.vm.shutdown()
+
+ def test1(self):
+ iotests.log('==Unplug a SCSI disk and then plug it again==')
+ self.vm.qmp_log('blockdev-add', driver='null-co', read_zeroes=True,
node_name='hd0')
+ self.vm.qmp_log('object-add', qom_type='iothread', id="iothread0")
+ self.vm.qmp_log('device_add', id='scsi0',
driver=iotests.get_virtio_scsi_device(), iothread='iothread0',
filters=[iotests.filter_qmp_virtio_scsi])
+ self.vm.qmp_log('device_add', id='scsi-hd0', driver='scsi-hd',
drive='hd0')
+ self.vm.qmp_log('device_del', id='scsi-hd0')
+ self.vm.event_wait('DEVICE_DELETED')
+ self.vm.qmp_log('device_add', id='scsi-hd0', driver='scsi-hd',
drive='hd0')
+ self.vm.qmp_log('device_del', id='scsi-hd0')
+ self.vm.event_wait('DEVICE_DELETED')
+ self.vm.qmp_log('blockdev-del', node_name='hd0')
+
+ def test2(self):
+ iotests.log('==Attach two SCSI disks using the same block device and
the same iothread==')
+ self.vm.qmp_log('blockdev-add', driver='null-co', read_zeroes=True,
node_name='hd0', read_only=True)
+ self.vm.qmp_log('object-add', qom_type='iothread', id="iothread0")
+ self.vm.qmp_log('device_add', id='scsi0',
driver=iotests.get_virtio_scsi_device(), iothread='iothread0',
filters=[iotests.filter_qmp_virtio_scsi])
+
+ self.vm.qmp_log('device_add', id='scsi-hd0', driver='scsi-hd',
drive='hd0')
+ self.vm.qmp_log('device_add', id='scsi-hd1', driver='scsi-hd',
drive='hd0')
+ self.vm.qmp_log('device_del', id='scsi-hd0')
+ self.vm.event_wait('DEVICE_DELETED')
+ self.vm.qmp_log('device_del', id='scsi-hd1')
+ self.vm.event_wait('DEVICE_DELETED')
+ self.vm.qmp_log('blockdev-del', node_name='hd0')
+
+ def test3(self):
+ iotests.log('==Attach two SCSI disks using the same block device but
different iothreads==')
+
+ self.vm.qmp_log('blockdev-add', driver='null-co', read_zeroes=True,
node_name='hd0', read_only=True)
+
+ self.vm.qmp_log('object-add', qom_type='iothread', id="iothread0")
+ self.vm.qmp_log('object-add', qom_type='iothread', id="iothread1")
+
+ self.vm.qmp_log('device_add', id='scsi0',
driver=iotests.get_virtio_scsi_device(), iothread='iothread0',
filters=[iotests.filter_qmp_virtio_scsi])
+ self.vm.qmp_log('device_add', id='scsi1',
driver=iotests.get_virtio_scsi_device(), iothread='iothread1',
filters=[iotests.filter_qmp_virtio_scsi])
+
+ self.vm.qmp_log('device_add', id='scsi-hd0', driver='scsi-hd',
drive='hd0', bus="scsi0.0")
+ self.vm.qmp_log('device_add', id='scsi-hd1', driver='scsi-hd',
drive='hd0', bus="scsi1.0")
+
+ self.vm.qmp_log('device_del', id='scsi-hd0')
+ self.vm.event_wait('DEVICE_DELETED')
+ self.vm.qmp_log('device_add', id='scsi-hd1', driver='scsi-hd',
drive='hd0', bus="scsi1.0")
+
+ self.vm.qmp_log('device_del', id='scsi-hd1')
+ self.vm.event_wait('DEVICE_DELETED')
+ self.vm.qmp_log('blockdev-del', node_name='hd0')
+
+ def test4(self):
+ iotests.log('==Attach a SCSI disks using the same block device as a
NBD server==')
+
+ self.vm.qmp_log('blockdev-add', driver='null-co', read_zeroes=True,
node_name='hd0', read_only=True)
+
+ self.vm.qmp_log('nbd-server-start',
+ filters=[iotests.filter_qmp_testfiles],
+ addr={'type':'unix', 'data':{'path':nbd_sock}})
+
+ self.vm.qmp_log('nbd-server-add', device='hd0')
+
+ self.vm.qmp_log('object-add', qom_type='iothread', id="iothread0")
+ self.vm.qmp_log('device_add', id='scsi0',
driver=iotests.get_virtio_scsi_device(), iothread='iothread0',
filters=[iotests.filter_qmp_virtio_scsi])
+ self.vm.qmp_log('device_add', id='scsi-hd0', driver='scsi-hd',
drive='hd0')
+
+if __name__ == '__main__':
+ iotests.activate_logging()
+ iotests.main()
diff --git a/tests/qemu-iotests/240.out b/tests/qemu-iotests/240.out
index d00df50297..e0982831ae 100644
--- a/tests/qemu-iotests/240.out
+++ b/tests/qemu-iotests/240.out
@@ -1,67 +1,75 @@
-QA output created by 240
-
-=== Unplug a SCSI disk and then plug it again ===
-
-Testing:
-QMP_VERSION
-{"return": {}}
+==Unplug a SCSI disk and then plug it again==
+{"execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name":
"hd0", "read-zeroes": true}}
{"return": {}}
+{"execute": "object-add", "arguments": {"id": "iothread0", "qom-type":
"iothread"}}
{"return": {}}
+{"execute": "device_add", "arguments": {"driver": "virtio-scsi", "id":
"scsi0", "iothread": "iothread0"}}
{"return": {}}
+{"execute": "device_add", "arguments": {"drive": "hd0", "driver": "scsi-hd",
"id": "scsi-hd0"}}
{"return": {}}
+{"execute": "device_del", "arguments": {"id": "scsi-hd0"}}
{"return": {}}
+{"execute": "device_add", "arguments": {"drive": "hd0", "driver": "scsi-hd",
"id": "scsi-hd0"}}
{"return": {}}
+{"execute": "device_del", "arguments": {"id": "scsi-hd0"}}
{"return": {}}
+{"execute": "blockdev-del", "arguments": {"node-name": "hd0"}}
{"return": {}}
+==Attach two SCSI disks using the same block device and the same iothread==
+{"execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name":
"hd0", "read-only": true, "read-zeroes": true}}
{"return": {}}
+{"execute": "object-add", "arguments": {"id": "iothread0", "qom-type":
"iothread"}}
{"return": {}}
-
-=== Attach two SCSI disks using the same block device and the same iothread ===
-
-Testing:
-QMP_VERSION
-{"return": {}}
+{"execute": "device_add", "arguments": {"driver": "virtio-scsi", "id":
"scsi0", "iothread": "iothread0"}}
{"return": {}}
+{"execute": "device_add", "arguments": {"drive": "hd0", "driver": "scsi-hd",
"id": "scsi-hd0"}}
{"return": {}}
+{"execute": "device_add", "arguments": {"drive": "hd0", "driver": "scsi-hd",
"id": "scsi-hd1"}}
{"return": {}}
+{"execute": "device_del", "arguments": {"id": "scsi-hd0"}}
{"return": {}}
+{"execute": "device_del", "arguments": {"id": "scsi-hd1"}}
{"return": {}}
+{"execute": "blockdev-del", "arguments": {"node-name": "hd0"}}
{"return": {}}
+==Attach two SCSI disks using the same block device but different iothreads==
+{"execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name":
"hd0", "read-only": true, "read-zeroes": true}}
{"return": {}}
+{"execute": "object-add", "arguments": {"id": "iothread0", "qom-type":
"iothread"}}
{"return": {}}
+{"execute": "object-add", "arguments": {"id": "iothread1", "qom-type":
"iothread"}}
{"return": {}}
+{"execute": "device_add", "arguments": {"driver": "virtio-scsi", "id":
"scsi0", "iothread": "iothread0"}}
{"return": {}}
-
-=== Attach two SCSI disks using the same block device but different iothreads
===
-
-Testing:
-QMP_VERSION
-{"return": {}}
-{"return": {}}
-{"return": {}}
-{"return": {}}
-{"return": {}}
+{"execute": "device_add", "arguments": {"driver": "virtio-scsi", "id":
"scsi1", "iothread": "iothread1"}}
{"return": {}}
+{"execute": "device_add", "arguments": {"bus": "scsi0.0", "drive": "hd0",
"driver": "scsi-hd", "id": "scsi-hd0"}}
{"return": {}}
+{"execute": "device_add", "arguments": {"bus": "scsi1.0", "drive": "hd0",
"driver": "scsi-hd", "id": "scsi-hd1"}}
{"error": {"class": "GenericError", "desc": "Cannot change iothread of active
block backend"}}
+{"execute": "device_del", "arguments": {"id": "scsi-hd0"}}
{"return": {}}
+{"execute": "device_add", "arguments": {"bus": "scsi1.0", "drive": "hd0",
"driver": "scsi-hd", "id": "scsi-hd1"}}
{"return": {}}
+{"execute": "device_del", "arguments": {"id": "scsi-hd1"}}
{"return": {}}
+{"execute": "blockdev-del", "arguments": {"node-name": "hd0"}}
{"return": {}}
+==Attach a SCSI disks using the same block device as a NBD server==
+{"execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name":
"hd0", "read-only": true, "read-zeroes": true}}
{"return": {}}
+{"execute": "nbd-server-start", "arguments": {"addr": {"data": {"path":
"SOCK_DIR/PID-nbd.sock"}, "type": "unix"}}}
{"return": {}}
+{"execute": "nbd-server-add", "arguments": {"device": "hd0"}}
{"return": {}}
-
-=== Attach a SCSI disks using the same block device as a NBD server ===
-
-Testing:
-QMP_VERSION
-{"return": {}}
-{"return": {}}
-{"return": {}}
-{"return": {}}
+{"execute": "object-add", "arguments": {"id": "iothread0", "qom-type":
"iothread"}}
{"return": {}}
+{"execute": "device_add", "arguments": {"driver": "virtio-scsi", "id":
"scsi0", "iothread": "iothread0"}}
{"return": {}}
+{"execute": "device_add", "arguments": {"drive": "hd0", "driver": "scsi-hd",
"id": "scsi-hd0"}}
{"return": {}}
-{"return": {}}
-*** done
+....
+----------------------------------------------------------------------
+Ran 4 tests
+
+OK
--
2.28.0
- [PULL 00/15] Block patches for 5.2.0-rc1, Max Reitz, 2020/11/09
- [PULL 01/15] block: Remove unused include, Max Reitz, 2020/11/09
- [PULL 02/15] block: Move bdrv_drain_all_end_quiesce() to block_int.h, Max Reitz, 2020/11/09
- [PULL 03/15] qcow2: Document and enforce the QCowL2Meta invariants, Max Reitz, 2020/11/09
- [PULL 04/15] hw/block/nvme: fix null ns in register namespace, Max Reitz, 2020/11/09
- [PULL 05/15] hw/block/nvme: fix uint16_t use of uint32_t sgls member, Max Reitz, 2020/11/09
- [PULL 06/15] hw/block/nvme: fix free of array-typed value, Max Reitz, 2020/11/09
- [PULL 08/15] iotests: rewrite iotest 240 in python,
Max Reitz <=
- [PULL 07/15] iotests: add filter_qmp_virtio_scsi function, Max Reitz, 2020/11/09
- [PULL 09/15] block: Fixes nfs compiling error on msys2/mingw, Max Reitz, 2020/11/09
- [PULL 13/15] block: add forgotten bdrv_abort_perm_update() to bdrv_co_invalidate_cache(), Max Reitz, 2020/11/09
- [PULL 10/15] block: enable libnfs on msys2/mingw in cirrus.yml, Max Reitz, 2020/11/09
- [PULL 14/15] block: add bdrv_replace_node_common(), Max Reitz, 2020/11/09
- [PULL 12/15] block: Fix some code style problems, "foo* bar" should be "foo *bar", Max Reitz, 2020/11/09
- [PULL 11/15] block: Fix integer promotion error in bdrv_getlength(), Max Reitz, 2020/11/09
- [PULL 15/15] block: make bdrv_drop_intermediate() less wrong, Max Reitz, 2020/11/09
- Re: [PULL 00/15] Block patches for 5.2.0-rc1, Max Reitz, 2020/11/09