From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56261) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yrtnd-0001Mi-Tg for qemu-devel@nongnu.org; Mon, 11 May 2015 15:55:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Yrtnc-0000mb-BC for qemu-devel@nongnu.org; Mon, 11 May 2015 15:55:37 -0400 Message-ID: <5551092F.1010502@redhat.com> Date: Mon, 11 May 2015 15:55:27 -0400 From: John Snow MIME-Version: 1.0 References: <1430887928-18189-1-git-send-email-famz@redhat.com> <1430887928-18189-5-git-send-email-famz@redhat.com> In-Reply-To: <1430887928-18189-5-git-send-email-famz@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2 4/6] qemu-iotests: Make block job methods common List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng , qemu-devel@nongnu.org Cc: Kevin Wolf , pbonzini@redhat.com, Stefan Hajnoczi , qemu-block@nongnu.org, wangxiaolong@ucloud.cn On 05/06/2015 12:52 AM, Fam Zheng wrote: > Signed-off-by: Fam Zheng > --- > tests/qemu-iotests/041 | 66 ++++++++++-------------------------= -------- > tests/qemu-iotests/iotests.py | 28 ++++++++++++++++++ > 2 files changed, 43 insertions(+), 51 deletions(-) >=20 > diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041 > index 59a8f73..3d46ed7 100755 > --- a/tests/qemu-iotests/041 > +++ b/tests/qemu-iotests/041 > @@ -34,38 +34,8 @@ quorum_img3 =3D os.path.join(iotests.test_dir, 'quor= um3.img') > quorum_repair_img =3D os.path.join(iotests.test_dir, 'quorum_repair.im= g') > quorum_snapshot_file =3D os.path.join(iotests.test_dir, 'quorum_snapsh= ot.img') > =20 > -class ImageMirroringTestCase(iotests.QMPTestCase): > - '''Abstract base class for image mirroring test cases''' > =20 > - def wait_ready(self, drive=3D'drive0'): > - '''Wait until a block job BLOCK_JOB_READY event''' > - ready =3D False > - while not ready: > - for event in self.vm.get_qmp_events(wait=3DTrue): > - if event['event'] =3D=3D 'BLOCK_JOB_READY': > - self.assert_qmp(event, 'data/type', 'mirror') > - self.assert_qmp(event, 'data/device', drive) > - ready =3D True > - > - def wait_ready_and_cancel(self, drive=3D'drive0'): > - self.wait_ready(drive=3Ddrive) > - event =3D self.cancel_and_wait(drive=3Ddrive) > - self.assertEquals(event['event'], 'BLOCK_JOB_COMPLETED') > - self.assert_qmp(event, 'data/type', 'mirror') > - self.assert_qmp(event, 'data/offset', event['data']['len']) > - > - def complete_and_wait(self, drive=3D'drive0', wait_ready=3DTrue): > - '''Complete a block job and wait for it to finish''' > - if wait_ready: > - self.wait_ready(drive=3Ddrive) > - > - result =3D self.vm.qmp('block-job-complete', device=3Ddrive) > - self.assert_qmp(result, 'return', {}) > - > - event =3D self.wait_until_completed(drive=3Ddrive) > - self.assert_qmp(event, 'data/type', 'mirror') > - > -class TestSingleDrive(ImageMirroringTestCase): > +class TestSingleDrive(iotests.QMPTestCase): > image_len =3D 1 * 1024 * 1024 # MB > =20 > def setUp(self): > @@ -221,17 +191,9 @@ class TestSingleDriveUnalignedLength(TestSingleDri= ve): > test_small_buffer2 =3D None > test_large_cluster =3D None > =20 > -class TestMirrorNoBacking(ImageMirroringTestCase): > +class TestMirrorNoBacking(iotests.QMPTestCase): > image_len =3D 2 * 1024 * 1024 # MB > =20 > - def complete_and_wait(self, drive=3D'drive0', wait_ready=3DTrue): > - iotests.create_image(target_backing_img, TestMirrorNoBacking.i= mage_len) > - return ImageMirroringTestCase.complete_and_wait(self, drive, w= ait_ready) > - > - def compare_images(self, img1, img2): > - iotests.create_image(target_backing_img, TestMirrorNoBacking.i= mage_len) > - return iotests.compare_images(img1, img2) > - > def setUp(self): > iotests.create_image(backing_img, TestMirrorNoBacking.image_le= n) > qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=3D= %s' % backing_img, test_img) > @@ -242,7 +204,10 @@ class TestMirrorNoBacking(ImageMirroringTestCase): > self.vm.shutdown() > os.remove(test_img) > os.remove(backing_img) > - os.remove(target_backing_img) > + try: > + os.remove(target_backing_img) > + except: > + pass > os.remove(target_img) > =20 > def test_complete(self): > @@ -257,7 +222,7 @@ class TestMirrorNoBacking(ImageMirroringTestCase): > result =3D self.vm.qmp('query-block') > self.assert_qmp(result, 'return[0]/inserted/file', target_img) > self.vm.shutdown() > - self.assertTrue(self.compare_images(test_img, target_img), > + self.assertTrue(iotests.compare_images(test_img, target_img), > 'target image does not match source after mirr= oring') > =20 > def test_cancel(self): > @@ -272,7 +237,7 @@ class TestMirrorNoBacking(ImageMirroringTestCase): > result =3D self.vm.qmp('query-block') > self.assert_qmp(result, 'return[0]/inserted/file', test_img) > self.vm.shutdown() > - self.assertTrue(self.compare_images(test_img, target_img), > + self.assertTrue(iotests.compare_images(test_img, target_img), > 'target image does not match source after mirr= oring') > =20 > def test_large_cluster(self): > @@ -283,7 +248,6 @@ class TestMirrorNoBacking(ImageMirroringTestCase): > %(TestMirrorNoBacking.image_len), target_backi= ng_img) > qemu_img('create', '-f', iotests.imgfmt, '-o', 'cluster_size=3D= %d,backing_file=3D%s' > % (TestMirrorNoBacking.image_len, target_backi= ng_img), target_img) > - os.remove(target_backing_img) > =20 > result =3D self.vm.qmp('drive-mirror', device=3D'drive0', sync= =3D'full', > mode=3D'existing', target=3Dtarget_img) > @@ -293,10 +257,10 @@ class TestMirrorNoBacking(ImageMirroringTestCase)= : > result =3D self.vm.qmp('query-block') > self.assert_qmp(result, 'return[0]/inserted/file', target_img) > self.vm.shutdown() > - self.assertTrue(self.compare_images(test_img, target_img), > + self.assertTrue(iotests.compare_images(test_img, target_img), > 'target image does not match source after mirr= oring') > =20 > -class TestMirrorResized(ImageMirroringTestCase): > +class TestMirrorResized(iotests.QMPTestCase): > backing_len =3D 1 * 1024 * 1024 # MB > image_len =3D 2 * 1024 * 1024 # MB > =20 > @@ -344,7 +308,7 @@ class TestMirrorResized(ImageMirroringTestCase): > self.assertTrue(iotests.compare_images(test_img, target_img), > 'target image does not match source after mirr= oring') > =20 > -class TestReadErrors(ImageMirroringTestCase): > +class TestReadErrors(iotests.QMPTestCase): > image_len =3D 2 * 1024 * 1024 # MB > =20 > # this should be a multiple of twice the default granularity > @@ -498,7 +462,7 @@ new_state =3D "1" > self.assert_no_active_block_jobs() > self.vm.shutdown() > =20 > -class TestWriteErrors(ImageMirroringTestCase): > +class TestWriteErrors(iotests.QMPTestCase): > image_len =3D 2 * 1024 * 1024 # MB > =20 > # this should be a multiple of twice the default granularity > @@ -624,7 +588,7 @@ new_state =3D "1" > self.assert_no_active_block_jobs() > self.vm.shutdown() > =20 > -class TestSetSpeed(ImageMirroringTestCase): > +class TestSetSpeed(iotests.QMPTestCase): > image_len =3D 80 * 1024 * 1024 # MB > =20 > def setUp(self): > @@ -690,7 +654,7 @@ class TestSetSpeed(ImageMirroringTestCase): > =20 > self.wait_ready_and_cancel() > =20 > -class TestUnbackedSource(ImageMirroringTestCase): > +class TestUnbackedSource(iotests.QMPTestCase): > image_len =3D 2 * 1024 * 1024 # MB > =20 > def setUp(self): > @@ -731,7 +695,7 @@ class TestUnbackedSource(ImageMirroringTestCase): > self.complete_and_wait() > self.assert_no_active_block_jobs() > =20 > -class TestRepairQuorum(ImageMirroringTestCase): > +class TestRepairQuorum(iotests.QMPTestCase): > """ This class test quorum file repair using drive-mirror. > It's mostly a fork of TestSingleDrive """ > image_len =3D 1 * 1024 * 1024 # MB > diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests= .py > index e93e623..2e07cc4 100644 > --- a/tests/qemu-iotests/iotests.py > +++ b/tests/qemu-iotests/iotests.py > @@ -326,6 +326,34 @@ class QMPTestCase(unittest.TestCase): > self.assert_no_active_block_jobs() > return event > =20 > + def wait_ready(self, drive=3D'drive0'): > + '''Wait until a block job BLOCK_JOB_READY event''' > + ready =3D False > + while not ready: > + for event in self.vm.get_qmp_events(wait=3DTrue): > + if event['event'] =3D=3D 'BLOCK_JOB_READY': > + self.assert_qmp(event, 'data/type', 'mirror') > + self.assert_qmp(event, 'data/device', drive) > + ready =3D True > + > + def wait_ready_and_cancel(self, drive=3D'drive0'): > + self.wait_ready(drive=3Ddrive) > + event =3D self.cancel_and_wait(drive=3Ddrive) > + self.assertEquals(event['event'], 'BLOCK_JOB_COMPLETED') > + self.assert_qmp(event, 'data/type', 'mirror') > + self.assert_qmp(event, 'data/offset', event['data']['len']) > + > + def complete_and_wait(self, drive=3D'drive0', wait_ready=3DTrue): > + '''Complete a block job and wait for it to finish''' > + if wait_ready: > + self.wait_ready(drive=3Ddrive) > + > + result =3D self.vm.qmp('block-job-complete', device=3Ddrive) > + self.assert_qmp(result, 'return', {}) > + > + event =3D self.wait_until_completed(drive=3Ddrive) > + self.assert_qmp(event, 'data/type', 'mirror') > + > def notrun(reason): > '''Skip this test suite''' > # Each test in qemu-iotests has a number ("seq") >=20 Reviewed-by: John Snow Side-note: we should at some point clean up the images this tests leaves laying around. Not caused by this patch, though.