iotests: Test incremental backup after truncation

Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190805152840.32190-1-mreitz@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
Max Reitz 2019-08-05 17:28:40 +02:00
parent 4e4de22279
commit 8a9cb86408
2 changed files with 36 additions and 6 deletions

View File

@ -212,25 +212,28 @@ class TestIncrementalBackupBase(iotests.QMPTestCase):
return bitmap return bitmap
def prepare_backup(self, bitmap=None, parent=None): def prepare_backup(self, bitmap=None, parent=None, **kwargs):
if bitmap is None: if bitmap is None:
bitmap = self.bitmaps[-1] bitmap = self.bitmaps[-1]
if parent is None: if parent is None:
parent, _ = bitmap.last_target() parent, _ = bitmap.last_target()
target, _ = bitmap.new_target() target, _ = bitmap.new_target()
self.img_create(target, bitmap.drive['fmt'], parent=parent) self.img_create(target, bitmap.drive['fmt'], parent=parent,
**kwargs)
return target return target
def create_incremental(self, bitmap=None, parent=None, def create_incremental(self, bitmap=None, parent=None,
parentFormat=None, validate=True): parentFormat=None, validate=True,
target=None):
if bitmap is None: if bitmap is None:
bitmap = self.bitmaps[-1] bitmap = self.bitmaps[-1]
if parent is None: if parent is None:
parent, _ = bitmap.last_target() parent, _ = bitmap.last_target()
target = self.prepare_backup(bitmap, parent) if target is None:
target = self.prepare_backup(bitmap, parent)
res = self.do_qmp_backup(job_id=bitmap.drive['id'], res = self.do_qmp_backup(job_id=bitmap.drive['id'],
device=bitmap.drive['id'], device=bitmap.drive['id'],
sync='incremental', bitmap=bitmap.name, sync='incremental', bitmap=bitmap.name,
@ -572,6 +575,33 @@ class TestIncrementalBackup(TestIncrementalBackupBase):
'bitmap0', self.drives[0], 'bitmap0', self.drives[0],
granularity=64000) granularity=64000)
def test_growing_before_backup(self):
'''
Test: Add a bitmap, truncate the image, write past the old
end, do a backup.
Incremental backup should not ignore dirty bits past the old
image end.
'''
self.assert_no_active_block_jobs()
self.create_anchor_backup()
self.add_bitmap('bitmap0', self.drives[0])
res = self.vm.qmp('block_resize', device=self.drives[0]['id'],
size=(65 * 1048576))
self.assert_qmp(res, 'return', {})
# Dirty the image past the old end
self.vm.hmp_qemu_io(self.drives[0]['id'], 'write 64M 64k')
target = self.prepare_backup(size='65M')
self.create_incremental(target=target)
self.vm.shutdown()
self.check_backups()
class TestIncrementalBackupBlkdebug(TestIncrementalBackupBase): class TestIncrementalBackupBlkdebug(TestIncrementalBackupBase):
'''Incremental backup tests that utilize a BlkDebug filter on drive0.''' '''Incremental backup tests that utilize a BlkDebug filter on drive0.'''

View File

@ -1,5 +1,5 @@
............ .............
---------------------------------------------------------------------- ----------------------------------------------------------------------
Ran 12 tests Ran 13 tests
OK OK