[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL for-2.11-rc2 5/5] qemu-iotests: Test I/O limits with
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL for-2.11-rc2 5/5] qemu-iotests: Test I/O limits with removable media |
Date: |
Tue, 14 Nov 2017 10:37:21 +0000 |
From: Alberto Garcia <address@hidden>
This test hotplugs a CD drive to a VM and checks that I/O limits can
be set only when the drive has media inserted and that they are kept
when the media is replaced.
This also tests the removal of a device with valid I/O limits set but
no media inserted. This involves deleting and disabling the limits
of a BlockBackend without BlockDriverState, a scenario that has been
crashing until the fixes from the last couple of patches.
[Python PEP8 fixup: "Don't use spaces are the = sign when used to
indicate a keyword argument or a default parameter value"
--Stefan]
Signed-off-by: Alberto Garcia <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
Message-id: address@hidden
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
tests/qemu-iotests/093 | 62 ++++++++++++++++++++++++++++++++++++++++++++++
tests/qemu-iotests/093.out | 4 +--
2 files changed, 64 insertions(+), 2 deletions(-)
diff --git a/tests/qemu-iotests/093 b/tests/qemu-iotests/093
index ef3997206b..5c36a5fb4d 100755
--- a/tests/qemu-iotests/093
+++ b/tests/qemu-iotests/093
@@ -308,6 +308,68 @@ class ThrottleTestGroupNames(iotests.QMPTestCase):
groupname = "group%d" % i
self.verify_name(devname, groupname)
+class ThrottleTestRemovableMedia(iotests.QMPTestCase):
+ def setUp(self):
+ self.vm = iotests.VM()
+ if iotests.qemu_default_machine == 's390-ccw-virtio':
+ self.vm.add_device("virtio-scsi-ccw,id=virtio-scsi")
+ else:
+ self.vm.add_device("virtio-scsi-pci,id=virtio-scsi")
+ self.vm.launch()
+
+ def tearDown(self):
+ self.vm.shutdown()
+
+ def test_removable_media(self):
+ # Add a couple of dummy nodes named cd0 and cd1
+ result = self.vm.qmp("blockdev-add", driver="null-aio",
+ node_name="cd0")
+ self.assert_qmp(result, 'return', {})
+ result = self.vm.qmp("blockdev-add", driver="null-aio",
+ node_name="cd1")
+ self.assert_qmp(result, 'return', {})
+
+ # Attach a CD drive with cd0 inserted
+ result = self.vm.qmp("device_add", driver="scsi-cd",
+ id="dev0", drive="cd0")
+ self.assert_qmp(result, 'return', {})
+
+ # Set I/O limits
+ args = { "id": "dev0", "iops": 100, "iops_rd": 0, "iops_wr": 0,
+ "bps": 50, "bps_rd": 0, "bps_wr": 0 }
+ result = self.vm.qmp("block_set_io_throttle", conv_keys=False, **args)
+ self.assert_qmp(result, 'return', {})
+
+ # Check that the I/O limits have been set
+ result = self.vm.qmp("query-block")
+ self.assert_qmp(result, 'return[0]/inserted/iops', 100)
+ self.assert_qmp(result, 'return[0]/inserted/bps', 50)
+
+ # Now eject cd0 and insert cd1
+ result = self.vm.qmp("blockdev-open-tray", id='dev0')
+ self.assert_qmp(result, 'return', {})
+ result = self.vm.qmp("x-blockdev-remove-medium", id='dev0')
+ self.assert_qmp(result, 'return', {})
+ result = self.vm.qmp("x-blockdev-insert-medium", id='dev0',
node_name='cd1')
+ self.assert_qmp(result, 'return', {})
+
+ # Check that the I/O limits are still the same
+ result = self.vm.qmp("query-block")
+ self.assert_qmp(result, 'return[0]/inserted/iops', 100)
+ self.assert_qmp(result, 'return[0]/inserted/bps', 50)
+
+ # Eject cd1
+ result = self.vm.qmp("x-blockdev-remove-medium", id='dev0')
+ self.assert_qmp(result, 'return', {})
+
+ # Check that we can't set limits if the device has no medium
+ result = self.vm.qmp("block_set_io_throttle", conv_keys=False, **args)
+ self.assert_qmp(result, 'error/class', 'GenericError')
+
+ # Remove the CD drive
+ result = self.vm.qmp("device_del", id='dev0')
+ self.assert_qmp(result, 'return', {})
+
if __name__ == '__main__':
iotests.main(supported_fmts=["raw"])
diff --git a/tests/qemu-iotests/093.out b/tests/qemu-iotests/093.out
index 2f7d3902f2..594c16f49f 100644
--- a/tests/qemu-iotests/093.out
+++ b/tests/qemu-iotests/093.out
@@ -1,5 +1,5 @@
-.......
+........
----------------------------------------------------------------------
-Ran 7 tests
+Ran 8 tests
OK
--
2.13.6
- [Qemu-devel] [PULL for-2.11-rc2 0/5] Block patches, Stefan Hajnoczi, 2017/11/14
- [Qemu-devel] [PULL for-2.11-rc2 1/5] block: all I/O should be completed before removing throttle timers., Stefan Hajnoczi, 2017/11/14
- [Qemu-devel] [PULL for-2.11-rc2 2/5] throttle-groups: drain before detaching ThrottleState, Stefan Hajnoczi, 2017/11/14
- [Qemu-devel] [PULL for-2.11-rc2 3/5] block: Check for inserted BlockDriverState in blk_io_limits_disable(), Stefan Hajnoczi, 2017/11/14
- [Qemu-devel] [PULL for-2.11-rc2 4/5] block: Leave valid throttle timers when removing a BDS from a backend, Stefan Hajnoczi, 2017/11/14
- [Qemu-devel] [PULL for-2.11-rc2 5/5] qemu-iotests: Test I/O limits with removable media,
Stefan Hajnoczi <=
- Re: [Qemu-devel] [PULL for-2.11-rc2 0/5] Block patches, Peter Maydell, 2017/11/14