All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@parallels.com>,
	qemu-devel@nongnu.org
Cc: kwolf@redhat.com, famz@redhat.com, armbru@redhat.com,
	mreitz@redhat.com, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH v11 12/13] qemu-iotests: Add tests for drive-backup sync=dirty-bitmap
Date: Fri, 06 Feb 2015 12:14:56 -0500	[thread overview]
Message-ID: <54D4F690.7020909@redhat.com> (raw)
In-Reply-To: <54D4CE6D.1000609@parallels.com>



On 02/06/2015 09:23 AM, Vladimir Sementsov-Ogievskiy wrote:
> On 12.01.2015 19:31, John Snow wrote:
>> From: Fam Zheng <famz@redhat.com>
>>
>> Signed-off-by: Fam Zheng <famz@redhat.com>
>> Signed-off-by: John Snow <jsnow@redhat.com>
>> ---
>>   tests/qemu-iotests/056        | 33 ++++++++++++++++++++++++++++++---
>>   tests/qemu-iotests/056.out    |  4 ++--
>>   tests/qemu-iotests/iotests.py |  8 ++++++++
>>   3 files changed, 40 insertions(+), 5 deletions(-)
>>
>> diff --git a/tests/qemu-iotests/056 b/tests/qemu-iotests/056
>> index 54e4bd0..6f8aa9a 100755
>> --- a/tests/qemu-iotests/056
>> +++ b/tests/qemu-iotests/056
>> @@ -23,17 +23,17 @@
>>   import time
>>   import os
>>   import iotests
>> -from iotests import qemu_img, qemu_io, create_image
>> +from iotests import qemu_img, qemu_img_map_assert, qemu_io, create_image
>>   backing_img = os.path.join(iotests.test_dir, 'backing.img')
>>   test_img = os.path.join(iotests.test_dir, 'test.img')
>>   target_img = os.path.join(iotests.test_dir, 'target.img')
>> -class TestSyncModesNoneAndTop(iotests.QMPTestCase):
>> +class TestSyncModes(iotests.QMPTestCase):
>>       image_len = 64 * 1024 * 1024 # MB
>>       def setUp(self):
>> -        create_image(backing_img, TestSyncModesNoneAndTop.image_len)
>> +        create_image(backing_img, TestSyncModes.image_len)
>>           qemu_img('create', '-f', iotests.imgfmt, '-o',
>> 'backing_file=%s' % backing_img, test_img)
>>           qemu_io('-c', 'write -P0x41 0 512', test_img)
>>           qemu_io('-c', 'write -P0xd5 1M 32k', test_img)
>> @@ -64,6 +64,33 @@ class TestSyncModesNoneAndTop(iotests.QMPTestCase):
>>           self.assertTrue(iotests.compare_images(test_img, target_img),
>>                           'target image does not match source after
>> backup')
>> +    def test_sync_dirty_bitmap_missing(self):
>> +        self.assert_no_active_block_jobs()
>> +        result = self.vm.qmp('drive-backup', device='drive0',
>> sync='dirty-bitmap',
>> +                             format=iotests.imgfmt, target=target_img)
>> +        self.assert_qmp(result, 'error/class', 'GenericError')
>> +
>> +    def test_sync_dirty_bitmap_not_found(self):
>> +        self.assert_no_active_block_jobs()
>> +        result = self.vm.qmp('drive-backup', device='drive0',
>> sync='dirty-bitmap',
>> +                             bitmap='unknown',
>> +                             format=iotests.imgfmt, target=target_img)
>> +        self.assert_qmp(result, 'error/class', 'GenericError')
>> +
>> +    def test_sync_dirty_bitmap(self):
>> +        self.assert_no_active_block_jobs()
>> +        result = self.vm.qmp('block-dirty-bitmap-add',
>> node_ref='drive0', name='bitmap0')
>> +        self.assert_qmp(result, 'return', {})
>> +        self.vm.hmp_qemu_io('drive0', 'write -P0x5a 0 512')
>> +        self.vm.hmp_qemu_io('drive0', 'write -P0x5a 48M 512')
>> +        result = self.vm.qmp('drive-backup', device='drive0',
>> sync='dirty-bitmap',
>> +                             bitmap='bitmap0',
>> +                             format=iotests.imgfmt, target=target_img)
>> +        self.assert_qmp(result, 'return', {})
>> +        self.wait_until_completed(check_offset=False)
>> +        self.assert_no_active_block_jobs()
>> +        qemu_img_map_assert(target_img, [0, 0x3000000])
>> +
>>       def test_cancel_sync_none(self):
>>           self.assert_no_active_block_jobs()
>> diff --git a/tests/qemu-iotests/056.out b/tests/qemu-iotests/056.out
>> index fbc63e6..914e373 100644
>> --- a/tests/qemu-iotests/056.out
>> +++ b/tests/qemu-iotests/056.out
>> @@ -1,5 +1,5 @@
>> -..
>> +.....
>>   ----------------------------------------------------------------------
>> -Ran 2 tests
>> +Ran 5 tests
>>   OK
>> diff --git a/tests/qemu-iotests/iotests.py
>> b/tests/qemu-iotests/iotests.py
>> index f57f154..95bb959 100644
>> --- a/tests/qemu-iotests/iotests.py
>> +++ b/tests/qemu-iotests/iotests.py
>> @@ -55,6 +55,14 @@ def qemu_img_pipe(*args):
>>       '''Run qemu-img and return its output'''
>>       return subprocess.Popen(qemu_img_args + list(args),
>> stdout=subprocess.PIPE).communicate()[0]
>> +def qemu_img_map_assert(img, offsets):
>> +    '''Run qemu-img map on img and check the mapped ranges'''
>> +    offs = []
>> +    for line in qemu_img_pipe('map', img).splitlines()[1:]:
>> +        offset, length, mapped, fname = line.split()
>> +        offs.append(int(offset, 16))
>> +    assert set(offs) == set(offsets), "mapped offsets in image '%s'
>> not equal to '%s'" % (str(offs), str(offsets))
>> +
>>   def qemu_io(*args):
>>       '''Run qemu-io and return the stdout data'''
>>       args = qemu_io_args + list(args)
>
> why not just check by qemu-io -c "write -P0x5a 0 512" for symmetry?
>
> -- Best regards, Vladimir

I actually have a much more thorough and rigorous iotest planned; this 
test is still mostly as it was written by Fam and I haven't made any 
changes to it yet (because nobody has objected!)

I wrote a proof-of-concept demo to actually test the incremental backup 
success and failure cases recently, I will port it to iotests and submit 
it as a patch soon.

  reply	other threads:[~2015-02-06 17:15 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-12 16:30 [Qemu-devel] [PATCH v11 00/13] block: Incremental backup series John Snow
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 01/13] block: fix spoiling all dirty bitmaps by mirror and migration John Snow
2015-01-13 15:54   ` Vladimir Sementsov-Ogievskiy
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 02/13] qapi: Add optional field "name" to block dirty bitmap John Snow
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 03/13] qmp: Add block-dirty-bitmap-add and block-dirty-bitmap-remove John Snow
2015-01-16 15:36   ` Max Reitz
2015-01-16 16:48     ` John Snow
2015-01-16 16:51       ` Max Reitz
2015-01-16 16:54         ` John Snow
2015-01-19 10:08       ` Markus Armbruster
2015-01-19 21:05         ` John Snow
2015-01-20  8:26           ` Markus Armbruster
2015-01-20 16:48             ` John Snow
2015-01-21  9:34               ` Markus Armbruster
2015-01-21 15:51                 ` Eric Blake
2015-01-30 14:32                 ` Kevin Wolf
2015-01-30 17:04                   ` John Snow
2015-01-30 18:52                     ` Kevin Wolf
2015-02-02 10:10                       ` Markus Armbruster
2015-02-02 21:40                         ` John Snow
2015-01-29 13:55   ` Vladimir Sementsov-Ogievskiy
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 04/13] block: Introduce bdrv_dirty_bitmap_granularity() John Snow
2015-01-16 15:40   ` Max Reitz
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 05/13] block: Add bdrv_clear_dirty_bitmap John Snow
2015-01-16 15:56   ` Max Reitz
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 06/13] hbitmap: add hbitmap_merge John Snow
2015-01-16 16:12   ` Max Reitz
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 07/13] qmp: Add block-dirty-bitmap-enable and block-dirty-bitmap-disable John Snow
2015-01-16 16:28   ` Max Reitz
2015-01-16 17:09     ` John Snow
2015-01-12 16:31 ` [Qemu-devel] [PATCH v11 08/13] block: Add bitmap successors John Snow
2015-01-13  9:24   ` Fam Zheng
2015-01-13 17:26     ` John Snow
2015-01-16 18:22     ` John Snow
2015-01-19  1:00       ` Fam Zheng
2015-01-12 16:31 ` [Qemu-devel] [PATCH v11 09/13] qmp: Add support of "dirty-bitmap" sync mode for drive-backup John Snow
2015-01-13  9:37   ` Fam Zheng
2015-01-13 17:50     ` John Snow
2015-01-14  6:29       ` Fam Zheng
2015-01-16 17:52   ` Max Reitz
2015-01-16 17:59     ` John Snow
2015-01-12 16:31 ` [Qemu-devel] [PATCH v11 10/13] qapi: Add transaction support to block-dirty-bitmap-{add, enable, disable} John Snow
2015-01-12 16:31 ` [Qemu-devel] [PATCH v11 11/13] qmp: Add dirty bitmap status fields in query-block John Snow
2015-01-12 16:31 ` [Qemu-devel] [PATCH v11 12/13] qemu-iotests: Add tests for drive-backup sync=dirty-bitmap John Snow
2015-02-06 14:23   ` Vladimir Sementsov-Ogievskiy
2015-02-06 17:14     ` John Snow [this message]
2015-01-12 16:31 ` [Qemu-devel] [PATCH v11 13/13] block: BdrvDirtyBitmap miscellaneous fixup John Snow
2015-01-13 16:50   ` Vladimir Sementsov-Ogievskiy
2015-01-13 18:27     ` John Snow
2015-01-13  1:21 ` [Qemu-devel] [PATCH v11 00/13] block: Incremental backup series Fam Zheng
2015-01-13 19:52 ` John Snow
2015-01-29 22:38 ` John Snow
2015-01-30 10:24 ` Vladimir Sementsov-Ogievskiy
2015-01-30 18:46   ` John Snow

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54D4F690.7020909@redhat.com \
    --to=jsnow@redhat.com \
    --cc=armbru@redhat.com \
    --cc=famz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=vsementsov@parallels.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.