qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v11 12/13] qemu-iotests: Add tests for drive-bac


From: John Snow
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
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.3.0



On 02/06/2015 09:23 AM, Vladimir Sementsov-Ogievskiy wrote:
On 12.01.2015 19:31, John Snow wrote:
From: Fam Zheng <address@hidden>

Signed-off-by: Fam Zheng <address@hidden>
Signed-off-by: John Snow <address@hidden>
---
  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 via email to

[Prev in Thread] Current Thread [Next in Thread]