mirror of https://github.com/xemu-project/xemu.git
iotests/124: Add cluster_size mismatch test
If a backing file isn't specified in the target image and the cluster_size is larger than the bitmap granularity, we run the risk of creating bitmaps with allocated clusters but empty/no data which will prevent the proper reading of the backup in the future. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Message-id: 1456433911-24718-4-git-send-email-jsnow@redhat.com Signed-off-by: Jeff Cody <jcody@redhat.com>
This commit is contained in:
parent
4c9bca7e39
commit
cc199b16cf
|
@ -132,14 +132,16 @@ class TestIncrementalBackupBase(iotests.QMPTestCase):
|
||||||
|
|
||||||
|
|
||||||
def img_create(self, img, fmt=iotests.imgfmt, size='64M',
|
def img_create(self, img, fmt=iotests.imgfmt, size='64M',
|
||||||
parent=None, parentFormat=None):
|
parent=None, parentFormat=None, **kwargs):
|
||||||
|
optargs = []
|
||||||
|
for k,v in kwargs.iteritems():
|
||||||
|
optargs = optargs + ['-o', '%s=%s' % (k,v)]
|
||||||
|
args = ['create', '-f', fmt] + optargs + [img, size]
|
||||||
if parent:
|
if parent:
|
||||||
if parentFormat is None:
|
if parentFormat is None:
|
||||||
parentFormat = fmt
|
parentFormat = fmt
|
||||||
iotests.qemu_img('create', '-f', fmt, img, size,
|
args = args + ['-b', parent, '-F', parentFormat]
|
||||||
'-b', parent, '-F', parentFormat)
|
iotests.qemu_img(*args)
|
||||||
else:
|
|
||||||
iotests.qemu_img('create', '-f', fmt, img, size)
|
|
||||||
self.files.append(img)
|
self.files.append(img)
|
||||||
|
|
||||||
|
|
||||||
|
@ -307,6 +309,52 @@ class TestIncrementalBackup(TestIncrementalBackupBase):
|
||||||
return self.do_incremental_simple(granularity=131072)
|
return self.do_incremental_simple(granularity=131072)
|
||||||
|
|
||||||
|
|
||||||
|
def test_larger_cluster_target(self):
|
||||||
|
'''
|
||||||
|
Test: Create and verify backups made to a larger cluster size target.
|
||||||
|
|
||||||
|
With a default granularity of 64KiB, verify that backups made to a
|
||||||
|
larger cluster size target of 128KiB without a backing file works.
|
||||||
|
'''
|
||||||
|
drive0 = self.drives[0]
|
||||||
|
|
||||||
|
# Create a cluster_size=128k full backup / "anchor" backup
|
||||||
|
self.img_create(drive0['backup'], cluster_size='128k')
|
||||||
|
self.assertTrue(self.do_qmp_backup(device=drive0['id'], sync='full',
|
||||||
|
format=drive0['fmt'],
|
||||||
|
target=drive0['backup'],
|
||||||
|
mode='existing'))
|
||||||
|
|
||||||
|
# Create bitmap and dirty it with some new writes.
|
||||||
|
# overwrite [32736, 32799] which will dirty bitmap clusters at
|
||||||
|
# 32M-64K and 32M. 32M+64K will be left undirtied.
|
||||||
|
bitmap0 = self.add_bitmap('bitmap0', drive0)
|
||||||
|
self.hmp_io_writes(drive0['id'],
|
||||||
|
(('0xab', 0, 512),
|
||||||
|
('0xfe', '16M', '256k'),
|
||||||
|
('0x64', '32736k', '64k')))
|
||||||
|
|
||||||
|
|
||||||
|
# Prepare a cluster_size=128k backup target without a backing file.
|
||||||
|
(target, _) = bitmap0.new_target()
|
||||||
|
self.img_create(target, bitmap0.drive['fmt'], cluster_size='128k')
|
||||||
|
|
||||||
|
# Perform Incremental Backup
|
||||||
|
self.assertTrue(self.do_qmp_backup(device=bitmap0.drive['id'],
|
||||||
|
sync='incremental',
|
||||||
|
bitmap=bitmap0.name,
|
||||||
|
format=bitmap0.drive['fmt'],
|
||||||
|
target=target,
|
||||||
|
mode='existing'))
|
||||||
|
self.make_reference_backup(bitmap0)
|
||||||
|
|
||||||
|
# Add the backing file, then compare and exit.
|
||||||
|
iotests.qemu_img('rebase', '-f', drive0['fmt'], '-u', '-b',
|
||||||
|
drive0['backup'], '-F', drive0['fmt'], target)
|
||||||
|
self.vm.shutdown()
|
||||||
|
self.check_backups()
|
||||||
|
|
||||||
|
|
||||||
def test_incremental_transaction(self):
|
def test_incremental_transaction(self):
|
||||||
'''Test: Verify backups made from transactionally created bitmaps.
|
'''Test: Verify backups made from transactionally created bitmaps.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.........
|
..........
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
Ran 9 tests
|
Ran 10 tests
|
||||||
|
|
||||||
OK
|
OK
|
||||||
|
|
Loading…
Reference in New Issue