[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 5/6] qemu-iotests: add block-stream speed value test
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PULL 5/6] qemu-iotests: add block-stream speed value test case |
Date: |
Fri, 27 Apr 2012 12:01:00 -0300 |
From: Stefan Hajnoczi <address@hidden>
Add tests to exercise the InvalidParameter 'speed' error code path, as
well as the regular success case for setting the speed. The
block-stream 'speed' parameter allows the speed limit of the job to be
applied immediately when the job starts instead of issuing a separate
block-job-set-speed command later. If the parameter has an invalid
value we expect to get an error and the job is not created.
It turns out that cancelling a block job is a common operation in these
test cases, let's extract a cancel_and_wait() function instead of
duplicating the QMP commands.
Signed-off-by: Stefan Hajnoczi <address@hidden>
Acked-by: Kevin Wolf <address@hidden>
Signed-off-by: Luiz Capitulino <address@hidden>
---
tests/qemu-iotests/030 | 85 +++++++++++++++++++++++++++++++++++---------
tests/qemu-iotests/030.out | 4 +--
2 files changed, 71 insertions(+), 18 deletions(-)
diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030
index 978fd82..38abc2c 100755
--- a/tests/qemu-iotests/030
+++ b/tests/qemu-iotests/030
@@ -32,6 +32,21 @@ class ImageStreamingTestCase(iotests.QMPTestCase):
result = self.vm.qmp('query-block-jobs')
self.assert_qmp(result, 'return', [])
+ def cancel_and_wait(self, drive='drive0'):
+ '''Cancel a block job and wait for it to finish'''
+ result = self.vm.qmp('block-job-cancel', device=drive)
+ self.assert_qmp(result, 'return', {})
+
+ cancelled = False
+ while not cancelled:
+ for event in self.vm.get_qmp_events(wait=True):
+ if event['event'] == 'BLOCK_JOB_CANCELLED':
+ self.assert_qmp(event, 'data/type', 'stream')
+ self.assert_qmp(event, 'data/device', drive)
+ cancelled = True
+
+ self.assert_no_active_streams()
+
class TestSingleDrive(ImageStreamingTestCase):
image_len = 1 * 1024 * 1024 # MB
@@ -97,21 +112,8 @@ class TestStreamStop(ImageStreamingTestCase):
events = self.vm.get_qmp_events(wait=False)
self.assertEqual(events, [], 'unexpected QMP event: %s' % events)
- self.vm.qmp('block-job-cancel', device='drive0')
- self.assert_qmp(result, 'return', {})
+ self.cancel_and_wait()
- cancelled = False
- while not cancelled:
- for event in self.vm.get_qmp_events(wait=True):
- if event['event'] == 'BLOCK_JOB_CANCELLED':
- self.assert_qmp(event, 'data/type', 'stream')
- self.assert_qmp(event, 'data/device', 'drive0')
- cancelled = True
-
- self.assert_no_active_streams()
-
-# This is a short performance test which is not run by default.
-# Invoke "IMGFMT=qed ./030 TestSetSpeed.perf_test_set_speed"
class TestSetSpeed(ImageStreamingTestCase):
image_len = 80 * 1024 * 1024 # MB
@@ -126,13 +128,15 @@ class TestSetSpeed(ImageStreamingTestCase):
os.remove(test_img)
os.remove(backing_img)
- def perf_test_set_speed(self):
+ # This is a short performance test which is not run by default.
+ # Invoke "IMGFMT=qed ./030 TestSetSpeed.perf_test_throughput"
+ def perf_test_throughput(self):
self.assert_no_active_streams()
result = self.vm.qmp('block-stream', device='drive0')
self.assert_qmp(result, 'return', {})
- result = self.vm.qmp('block-job-set-speed', device='drive0', value=8 *
1024 * 1024)
+ result = self.vm.qmp('block-job-set-speed', device='drive0', speed=8 *
1024 * 1024)
self.assert_qmp(result, 'return', {})
completed = False
@@ -147,5 +151,54 @@ class TestSetSpeed(ImageStreamingTestCase):
self.assert_no_active_streams()
+ def test_set_speed(self):
+ self.assert_no_active_streams()
+
+ result = self.vm.qmp('block-stream', device='drive0')
+ self.assert_qmp(result, 'return', {})
+
+ # Default speed is 0
+ result = self.vm.qmp('query-block-jobs')
+ self.assert_qmp(result, 'return[0]/device', 'drive0')
+ self.assert_qmp(result, 'return[0]/speed', 0)
+
+ result = self.vm.qmp('block-job-set-speed', device='drive0', speed=8 *
1024 * 1024)
+ self.assert_qmp(result, 'return', {})
+
+ # Ensure the speed we set was accepted
+ result = self.vm.qmp('query-block-jobs')
+ self.assert_qmp(result, 'return[0]/device', 'drive0')
+ self.assert_qmp(result, 'return[0]/speed', 8 * 1024 * 1024)
+
+ self.cancel_and_wait()
+
+ # Check setting speed in block-stream works
+ result = self.vm.qmp('block-stream', device='drive0', speed=4 * 1024 *
1024)
+ self.assert_qmp(result, 'return', {})
+
+ result = self.vm.qmp('query-block-jobs')
+ self.assert_qmp(result, 'return[0]/device', 'drive0')
+ self.assert_qmp(result, 'return[0]/speed', 4 * 1024 * 1024)
+
+ self.cancel_and_wait()
+
+ def test_set_speed_invalid(self):
+ self.assert_no_active_streams()
+
+ result = self.vm.qmp('block-stream', device='drive0', speed=-1)
+ self.assert_qmp(result, 'error/class', 'InvalidParameter')
+ self.assert_qmp(result, 'error/data/name', 'speed')
+
+ self.assert_no_active_streams()
+
+ result = self.vm.qmp('block-stream', device='drive0')
+ self.assert_qmp(result, 'return', {})
+
+ result = self.vm.qmp('block-job-set-speed', device='drive0', speed=-1)
+ self.assert_qmp(result, 'error/class', 'InvalidParameter')
+ self.assert_qmp(result, 'error/data/name', 'speed')
+
+ self.cancel_and_wait()
+
if __name__ == '__main__':
iotests.main(supported_fmts=['qcow2', 'qed'])
diff --git a/tests/qemu-iotests/030.out b/tests/qemu-iotests/030.out
index 8d7e996..914e373 100644
--- a/tests/qemu-iotests/030.out
+++ b/tests/qemu-iotests/030.out
@@ -1,5 +1,5 @@
-...
+.....
----------------------------------------------------------------------
-Ran 3 tests
+Ran 5 tests
OK
--
1.7.9.2.384.g4a92a
- [Qemu-devel] [PULL 0/6]: QMP queue, Luiz Capitulino, 2012/04/27
- [Qemu-devel] [PULL 5/6] qemu-iotests: add block-stream speed value test case,
Luiz Capitulino <=
- [Qemu-devel] [PULL 6/6] qapi: fix qmp_balloon() conversion, Luiz Capitulino, 2012/04/27
- [Qemu-devel] [PULL 2/6] block: use Error mechanism instead of -errno for block_job_set_speed(), Luiz Capitulino, 2012/04/27
- [Qemu-devel] [PULL 4/6] block: add 'speed' optional parameter to block-stream, Luiz Capitulino, 2012/04/27
- [Qemu-devel] [PULL 1/6] block: use Error mechanism instead of -errno for block_job_create(), Luiz Capitulino, 2012/04/27
- [Qemu-devel] [PULL 3/6] block: change block-job-set-speed argument from 'value' to 'speed', Luiz Capitulino, 2012/04/27