From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41174) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c01IY-0000zB-Ms for qemu-devel@nongnu.org; Fri, 28 Oct 2016 03:09:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c01IX-00007C-AP for qemu-devel@nongnu.org; Fri, 28 Oct 2016 03:09:54 -0400 From: Alberto Garcia Date: Fri, 28 Oct 2016 10:08:16 +0300 Message-Id: <3b5f77eac97d7638890a20aa387a76d6d3bed475.1477638050.git.berto@igalia.com> In-Reply-To: References: In-Reply-To: References: Subject: [Qemu-devel] [PATCH v13 15/19] qemu-iotests: Test block-stream and block-commit in parallel List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, Kevin Wolf , Eric Blake , Markus Armbruster , Max Reitz , Alberto Garcia 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 --- tests/qemu-iotests/030 | 30 ++++++++++++++++++++++++++++++ tests/qemu-iotests/030.out | 4 ++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030 index 3533495..83aeaa6 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 4176bb9..3a89159 100644 --- a/tests/qemu-iotests/030.out +++ b/tests/qemu-iotests/030.out @@ -1,5 +1,5 @@ -................... +.................... ---------------------------------------------------------------------- -Ran 19 tests +Ran 20 tests OK -- 2.9.3