From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: jsnow@redhat.com, peter.maydell@linaro.org,
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Subject: [Qemu-devel] [PULL 19/19] iotests: 169: add cases for source vm resuming
Date: Mon, 29 Oct 2018 17:25:01 -0400 [thread overview]
Message-ID: <20181029212501.5897-20-jsnow@redhat.com> (raw)
In-Reply-To: <20181029212501.5897-1-jsnow@redhat.com>
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Test that we can resume source vm after [failed] migration, and bitmaps
are ok.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: John Snow <jsnow@redhat.com>
---
tests/qemu-iotests/169 | 60 +++++++++++++++++++++++++++++++++++++++++++++-
tests/qemu-iotests/169.out | 4 ++--
2 files changed, 61 insertions(+), 3 deletions(-)
diff --git a/tests/qemu-iotests/169 b/tests/qemu-iotests/169
index 8b7947d650..69850c4c67 100755
--- a/tests/qemu-iotests/169
+++ b/tests/qemu-iotests/169
@@ -77,6 +77,58 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
self.assert_qmp(result, 'error/desc',
"Dirty bitmap 'bitmap0' not found");
+ def do_test_migration_resume_source(self, persistent, migrate_bitmaps):
+ granularity = 512
+
+ # regions = ((start, count), ...)
+ regions = ((0, 0x10000),
+ (0xf0000, 0x10000),
+ (0xa0201, 0x1000))
+
+ mig_caps = [{'capability': 'events', 'state': True}]
+ if migrate_bitmaps:
+ mig_caps.append({'capability': 'dirty-bitmaps', 'state': True})
+
+ result = self.vm_a.qmp('migrate-set-capabilities',
+ capabilities=mig_caps)
+ self.assert_qmp(result, 'return', {})
+
+ self.add_bitmap(self.vm_a, granularity, persistent)
+ for r in regions:
+ self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % r)
+ sha256 = self.get_bitmap_hash(self.vm_a)
+
+ result = self.vm_a.qmp('migrate', uri=mig_cmd)
+ while True:
+ event = self.vm_a.event_wait('MIGRATION')
+ if event['data']['status'] == 'completed':
+ break
+
+ # test that bitmap is still here
+ removed = (not migrate_bitmaps) and persistent
+ self.check_bitmap(self.vm_a, False if removed else sha256)
+
+ self.vm_a.qmp('cont')
+
+ # test that bitmap is still here after invalidation
+ self.check_bitmap(self.vm_a, sha256)
+
+ # shutdown and check that invalidation didn't fail
+ self.vm_a.shutdown()
+
+ # catch 'Could not reopen qcow2 layer: Bitmap already exists'
+ # possible error
+ log = self.vm_a.get_log()
+ log = re.sub(r'^\[I \d+\.\d+\] OPENED\n', '', log)
+ log = re.sub(r'^(wrote .* bytes at offset .*\n.*KiB.*ops.*sec.*\n){3}',
+ '', log)
+ log = re.sub(r'\[I \+\d+\.\d+\] CLOSED\n?$', '', log)
+ self.assertEqual(log, '')
+
+ # test that bitmap is still persistent
+ self.vm_a.launch()
+ self.check_bitmap(self.vm_a, sha256 if persistent else False)
+
def do_test_migration(self, persistent, migrate_bitmaps, online,
shared_storage):
granularity = 512
@@ -152,7 +204,7 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
def inject_test_case(klass, name, method, *args, **kwargs):
mc = operator.methodcaller(method, *args, **kwargs)
- setattr(klass, 'test_' + name, new.instancemethod(mc, None, klass))
+ setattr(klass, 'test_' + method + name, new.instancemethod(mc, None, klass))
for cmb in list(itertools.product((True, False), repeat=4)):
name = ('_' if cmb[0] else '_not_') + 'persistent_'
@@ -163,6 +215,12 @@ for cmb in list(itertools.product((True, False), repeat=4)):
inject_test_case(TestDirtyBitmapMigration, name, 'do_test_migration',
*list(cmb))
+for cmb in list(itertools.product((True, False), repeat=2)):
+ name = ('_' if cmb[0] else '_not_') + 'persistent_'
+ name += ('_' if cmb[1] else '_not_') + 'migbitmap'
+
+ inject_test_case(TestDirtyBitmapMigration, name,
+ 'do_test_migration_resume_source', *list(cmb))
if __name__ == '__main__':
iotests.main(supported_fmts=['qcow2'])
diff --git a/tests/qemu-iotests/169.out b/tests/qemu-iotests/169.out
index b6f257674e..3a89159833 100644
--- a/tests/qemu-iotests/169.out
+++ b/tests/qemu-iotests/169.out
@@ -1,5 +1,5 @@
-................
+....................
----------------------------------------------------------------------
-Ran 16 tests
+Ran 20 tests
OK
--
2.14.5
next prev parent reply other threads:[~2018-10-29 21:25 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-29 21:24 [Qemu-devel] [PULL 00/19] Bitmaps patches John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 01/19] blockdev-backup: add bitmap argument John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 02/19] dirty-bitmap: switch assert-fails to errors in bdrv_merge_dirty_bitmap John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 03/19] dirty-bitmap: rename bdrv_undo_clear_dirty_bitmap John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 04/19] dirty-bitmap: make it possible to restore bitmap after merge John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 05/19] blockdev: rename block-dirty-bitmap-clear transaction handlers John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 06/19] qapi: add transaction support for x-block-dirty-bitmap-merge John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 07/19] iotests: 169: drop deprecated 'autoload' parameter John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 08/19] block/qcow2: improve error message in qcow2_inactivate John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 09/19] bloc/qcow2: drop dirty_bitmaps_loaded state variable John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 10/19] block/dirty-bitmaps: add user_locked status checker John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 11/19] block/dirty-bitmaps: fix merge permissions John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 12/19] block/dirty-bitmaps: allow clear on disabled bitmaps John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 13/19] block/dirty-bitmaps: prohibit enable/disable on locked/frozen bitmaps John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 14/19] block/backup: prohibit backup from using in use bitmaps John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 15/19] nbd: forbid use of frozen bitmaps John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 16/19] bitmap: Update count after a merge John Snow
2018-10-29 21:24 ` [Qemu-devel] [PULL 17/19] dirty-bitmaps: clean-up bitmaps loading and migration logic John Snow
2018-10-29 21:25 ` [Qemu-devel] [PULL 18/19] iotests: improve 169 John Snow
2018-10-29 21:25 ` John Snow [this message]
2018-10-30 15:49 ` [Qemu-devel] [PULL 00/19] Bitmaps patches Peter Maydell
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=20181029212501.5897-20-jsnow@redhat.com \
--to=jsnow@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=vsementsov@virtuozzo.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).