mirror of https://gitee.com/openkylin/qemu.git
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:
parent
4e4de22279
commit
8a9cb86408
|
@ -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.'''
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
............
|
.............
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
Ran 12 tests
|
Ran 13 tests
|
||||||
|
|
||||||
OK
|
OK
|
||||||
|
|
Loading…
Reference in New Issue