Test simple usage cases for using transactions to create and synchronize incremental backups.
Signed-off-by: John Snow <js...@redhat.com> --- tests/qemu-iotests/124 | 51 ++++++++++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/124.out | 4 ++-- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/tests/qemu-iotests/124 b/tests/qemu-iotests/124 index d16d2c2..31946f9 100644 --- a/tests/qemu-iotests/124 +++ b/tests/qemu-iotests/124 @@ -226,6 +226,57 @@ class TestIncrementalBackup(iotests.QMPTestCase): return True + def test_incremental_transaction(self): + '''Test: Verify backups made from transactionally created bitmaps. + + Create a bitmap "before" VM execution begins, then create a second + bitmap AFTER writes have already occurred. Use transactions to create + a full backup and synchronize both bitmaps to this backup. + Create an incremental backup through both bitmaps and verify that + both backups match the current drive0 image. + ''' + + drive0 = self.drives[0] + bitmap0 = self.add_bitmap('bitmap0', self.drives[0]) + self.hmp_io_writes(drive0['id'], (('0xab', 0, 512), + ('0xfe', '16M', '256k'), + ('0x64', '32736k', '64k'))) + bitmap1 = self.add_bitmap('bitmap1', drive0) + + result = self.vm.qmp('transaction', actions=[ + { + 'type': 'block-dirty-bitmap-clear', + 'data': { 'node': bitmap0.drive['id'], + 'name': bitmap0.name }, + }, + { + 'type': 'block-dirty-bitmap-clear', + 'data': { 'node': bitmap1.drive['id'], + 'name': bitmap1.name }, + }, + { + 'type': 'drive-backup', + 'data': { 'device': drive0['id'], + 'sync': 'full', + 'format': drive0['fmt'], + 'target': drive0['backup'] }, + } + ]) + self.assert_qmp(result, 'return', {}) + self.wait_until_completed() + self.files.append(drive0['backup']) + self.check_full_backup() + + self.hmp_io_writes(drive0['id'], (('0x9a', 0, 512), + ('0x55', '8M', '352k'), + ('0x78', '15872k', '1M'))) + # Both bitmaps should be in sync and create fully valid + # incremental backups + res1 = self.create_incremental(bitmap0) + res2 = self.create_incremental(bitmap1) + self.assertTrue(res1 and res2) + + def test_incremental_failure(self): '''Test: Verify backups made after a failure are correct. diff --git a/tests/qemu-iotests/124.out b/tests/qemu-iotests/124.out index 89968f3..914e373 100644 --- a/tests/qemu-iotests/124.out +++ b/tests/qemu-iotests/124.out @@ -1,5 +1,5 @@ -.... +..... ---------------------------------------------------------------------- -Ran 4 tests +Ran 5 tests OK -- 2.1.0