[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 3/3] qemu-iotests: Test blockdev-backup in 055
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH 3/3] qemu-iotests: Test blockdev-backup in 055 |
Date: |
Fri, 10 Oct 2014 14:07:32 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) |
Fam Zheng <address@hidden> writes:
> This applies cases on drive-backup on blockdev-backup, except cases with
> target format and mode.
>
> Also add a case to check source == target.
>
> Signed-off-by: Fam Zheng <address@hidden>
> ---
> tests/qemu-iotests/055 | 277
> ++++++++++++++++++++++++++++++++++++++-------
> tests/qemu-iotests/055.out | 4 +-
> 2 files changed, 236 insertions(+), 45 deletions(-)
>
> diff --git a/tests/qemu-iotests/055 b/tests/qemu-iotests/055
> index 451b67d..ab47d59 100755
> --- a/tests/qemu-iotests/055
> +++ b/tests/qemu-iotests/055
> @@ -1,8 +1,8 @@
> #!/usr/bin/env python
> #
> -# Tests for drive-backup
> +# Tests for drive-backup and blockdev-backup
> #
> -# Copyright (C) 2013 Red Hat, Inc.
> +# Copyright (C) 2013, 2014 Red Hat, Inc.
> #
> # Based on 041.
> #
> @@ -27,6 +27,7 @@ from iotests import qemu_img, qemu_io
>
> test_img = os.path.join(iotests.test_dir, 'test.img')
> target_img = os.path.join(iotests.test_dir, 'target.img')
> +blockdev_target_img = os.path.join(iotests.test_dir, 'blockdev-target.img')
>
> class TestSingleDrive(iotests.QMPTestCase):
> image_len = 64 * 1024 * 1024 # MB
> @@ -38,34 +39,48 @@ class TestSingleDrive(iotests.QMPTestCase):
> qemu_io('-c', 'write -P0xd5 1M 32k', test_img)
> qemu_io('-c', 'write -P0xdc 32M 124k', test_img)
> qemu_io('-c', 'write -P0xdc 67043328 64k', test_img)
> + qemu_img('create', '-f', iotests.imgfmt, blockdev_target_img,
> str(TestSingleDrive.image_len))
>
> - self.vm = iotests.VM().add_drive(test_img)
> + self.vm =
> iotests.VM().add_drive(test_img).add_drive(blockdev_target_img)
> self.vm.launch()
>
> def tearDown(self):
> self.vm.shutdown()
> os.remove(test_img)
> + os.remove(blockdev_target_img)
> try:
> os.remove(target_img)
> except OSError:
> pass
>
> - def test_cancel(self):
> + def do_test_cancel(self, test_drive_backup):
> self.assert_no_active_block_jobs()
>
> - result = self.vm.qmp('drive-backup', device='drive0',
> - target=target_img, sync='full')
> + if test_drive_backup:
> + result = self.vm.qmp('drive-backup', device='drive0',
> + target=target_img, sync='full')
> + else:
> + result = self.vm.qmp('blockdev-backup', device='drive0',
> + target='drive1', sync='full')
> self.assert_qmp(result, 'return', {})
>
> event = self.cancel_and_wait()
> self.assert_qmp(event, 'data/type', 'backup')
>
> - def test_pause(self):
> + def test_cancel(self):
> + self.do_test_cancel(True)
> + self.do_test_cancel(False)
> +
The bool parameter feels inelegant. Perhaps you'd prefer something like
this (untested):
def do_test_cancel(self, cmd, **args):
self.assert_no_active_block_jobs()
result = self.vm.qmp(cmd, **args)
self.assert_qmp(result, 'return', {})
event = self.cancel_and_wait()
self.assert_qmp(event, 'data/type', 'backup')
def test_cancel(self):
self.do_test_cancel('drive-backup', device='drive0',
target=target_img, sync='full'))
self.do_test_cancel('blockdev-backup', device='drive0',
target='drive1', sync='full')
Entirely up to you. More of the same below.
> + def do_test_pause(self, test_drive_backup):
> self.assert_no_active_block_jobs()
>
> self.vm.pause_drive('drive0')
> - result = self.vm.qmp('drive-backup', device='drive0',
> - target=target_img, sync='full')
> + if test_drive_backup:
> + result = self.vm.qmp('drive-backup', device='drive0',
> + target=target_img, sync='full')
> + else:
> + result = self.vm.qmp('blockdev-backup', device='drive0',
> + target='drive1', sync='full')
> self.assert_qmp(result, 'return', {})
>
> result = self.vm.qmp('block-job-pause', device='drive0')
> @@ -86,14 +101,28 @@ class TestSingleDrive(iotests.QMPTestCase):
> self.wait_until_completed()
>
> self.vm.shutdown()
> - self.assertTrue(iotests.compare_images(test_img, target_img),
> - 'target image does not match source after backup')
> + if test_drive_backup:
> + self.assertTrue(iotests.compare_images(test_img, target_img),
> + 'target image does not match source after
> backup')
> + else:
> + self.assertTrue(iotests.compare_images(test_img,
> blockdev_target_img),
> + 'target image does not match source after
> backup')
> +
> + def test_pause_drive_backup(self):
> + self.do_test_pause(True)
> +
> + def test_pause_blockdev_backup(self):
> + self.do_test_pause(False)
>
> def test_medium_not_found(self):
> result = self.vm.qmp('drive-backup', device='ide1-cd0',
> target=target_img, sync='full')
> self.assert_qmp(result, 'error/class', 'GenericError')
>
> + result = self.vm.qmp('blockdev-backup', device='ide1-cd0',
> + target='drive1', sync='full')
> + self.assert_qmp(result, 'error/class', 'GenericError')
> +
> def test_image_not_found(self):
> result = self.vm.qmp('drive-backup', device='drive0',
> target=target_img, sync='full', mode='existing')
> @@ -110,26 +139,56 @@ class TestSingleDrive(iotests.QMPTestCase):
> target=target_img, sync='full')
> self.assert_qmp(result, 'error/class', 'DeviceNotFound')
>
> + result = self.vm.qmp('blockdev-backup', device='nonexistent',
> + target='drive0', sync='full')
> + self.assert_qmp(result, 'error/class', 'DeviceNotFound')
> +
> + result = self.vm.qmp('blockdev-backup', device='drive0',
> + target='nonexistent', sync='full')
> + self.assert_qmp(result, 'error/class', 'DeviceNotFound')
> +
> + result = self.vm.qmp('blockdev-backup', device='nonexistent',
> + target='nonexistent', sync='full')
> + self.assert_qmp(result, 'error/class', 'DeviceNotFound')
> +
> + def test_target_is_source(self):
> + result = self.vm.qmp('blockdev-backup', device='drive0',
> + target='drive0', sync='full')
> + self.assert_qmp(result, 'error/class', 'GenericError')
> +
> class TestSetSpeed(iotests.QMPTestCase):
> image_len = 80 * 1024 * 1024 # MB
>
> def setUp(self):
> qemu_img('create', '-f', iotests.imgfmt, test_img,
> str(TestSetSpeed.image_len))
> qemu_io('-c', 'write -P1 0 512', test_img)
> - self.vm = iotests.VM().add_drive(test_img)
> + qemu_img('create', '-f', iotests.imgfmt, blockdev_target_img,
> str(TestSingleDrive.image_len))
> +
> + self.vm =
> iotests.VM().add_drive(test_img).add_drive(blockdev_target_img)
> self.vm.launch()
>
> def tearDown(self):
> self.vm.shutdown()
> os.remove(test_img)
> - os.remove(target_img)
> + try:
> + os.remove(blockdev_target_img)
> + except OSError:
> + pass
Elsewhere, you remove blockdev_target_img without a try. Why not here?
> + try:
> + os.remove(target_img)
> + except OSError:
> + pass
Why do you need to wrap removal of target_img in a try now?
>
> - def test_set_speed(self):
> + def do_test_set_speed(self, test_drive_backup):
> self.assert_no_active_block_jobs()
>
> self.vm.pause_drive('drive0')
> - result = self.vm.qmp('drive-backup', device='drive0',
> - target=target_img, sync='full')
> + if test_drive_backup:
> + result = self.vm.qmp('drive-backup', device='drive0',
> + target=target_img, sync='full')
> + else:
> + result = self.vm.qmp('blockdev-backup', device='drive0',
> + target='drive1', sync='full')
> self.assert_qmp(result, 'return', {})
>
> # Default speed is 0
[...]
- Re: [Qemu-devel] [PATCH 3/3] qemu-iotests: Test blockdev-backup in 055,
Markus Armbruster <=