summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberto Garcia <berto@igalia.com>2016-10-28 10:08:16 +0300
committerKevin Wolf <kwolf@redhat.com>2016-10-31 16:52:39 +0100
commit704d59f13d5b0e02674f18fa32f8c44ca18abea3 (patch)
treecd53ac360bb58ef840987ae222a88e532d19ebbe
parenteb290b78ffec18975b7a31175de770e862749185 (diff)
downloadqemu-704d59f13d5b0e02674f18fa32f8c44ca18abea3.zip
qemu-iotests: Test block-stream and block-commit in parallel
As with test_stream_parallel(), we allow mixing block-stream and block-commit operations in the same backing chain as long as there's no overlap among the involved nodes. Signed-off-by: Alberto Garcia <berto@igalia.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
-rwxr-xr-xtests/qemu-iotests/03030
-rw-r--r--tests/qemu-iotests/030.out4
2 files changed, 32 insertions, 2 deletions
diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030
index 3533495137..83aeaa694d 100755
--- a/tests/qemu-iotests/030
+++ b/tests/qemu-iotests/030
@@ -315,6 +315,36 @@ class TestParallelOps(iotests.QMPTestCase):
self.assert_qmp(result, 'return', {})
self.wait_until_completed(drive='commit-drive0')
+
+ # Test a block-stream and a block-commit job in parallel
+ def test_stream_commit(self):
+ self.assertLessEqual(8, self.num_imgs)
+ self.assert_no_active_block_jobs()
+
+ # Stream from node0 into node2
+ result = self.vm.qmp('block-stream', device='node2', job_id='node2')
+ self.assert_qmp(result, 'return', {})
+
+ # Commit from the active layer into node3
+ result = self.vm.qmp('block-commit', device='drive0', base=self.imgs[3])
+ self.assert_qmp(result, 'return', {})
+
+ # Wait for all jobs to be finished.
+ pending_jobs = ['node2', 'drive0']
+ while len(pending_jobs) > 0:
+ for event in self.vm.get_qmp_events(wait=True):
+ if event['event'] == 'BLOCK_JOB_COMPLETED':
+ node_name = self.dictpath(event, 'data/device')
+ self.assertTrue(node_name in pending_jobs)
+ self.assert_qmp_absent(event, 'data/error')
+ pending_jobs.remove(node_name)
+ if event['event'] == 'BLOCK_JOB_READY':
+ self.assert_qmp(event, 'data/device', 'drive0')
+ self.assert_qmp(event, 'data/type', 'commit')
+ self.assert_qmp_absent(event, 'data/error')
+ self.assertTrue('drive0' in pending_jobs)
+ self.vm.qmp('block-job-complete', device='drive0')
+
self.assert_no_active_block_jobs()
class TestSmallerBackingFile(iotests.QMPTestCase):
diff --git a/tests/qemu-iotests/030.out b/tests/qemu-iotests/030.out
index 4176bb9402..3a89159833 100644
--- a/tests/qemu-iotests/030.out
+++ b/tests/qemu-iotests/030.out
@@ -1,5 +1,5 @@
-...................
+....................
----------------------------------------------------------------------
-Ran 19 tests
+Ran 20 tests
OK