qemu-iotests: 300: Add test case for modifying persistence of bitmap
Verify that the modification of the bitmap persistence over migration which is controlled via BitmapMigrationBitmapAliasTransform works properly. Based on TestCrossAliasMigration Signed-off-by: Peter Krempa <pkrempa@redhat.com> Message-Id: <d9c8e9827e9b6001b2dd1b92e64aab858e6d2a86.1613150869.git.pkrempa@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> [eblake: Adjust test for explicit read_zeroes=False] Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
6e9f21a2aa
commit
ca4bfec41d
@ -600,6 +600,99 @@ class TestCrossAliasMigration(TestDirtyBitmapMigration):
|
||||
self.verify_dest_has_all_bitmaps()
|
||||
self.verify_dest_error(None)
|
||||
|
||||
class TestAliasTransformMigration(TestDirtyBitmapMigration):
|
||||
"""
|
||||
Tests the 'transform' option which modifies bitmap persistence on migration.
|
||||
"""
|
||||
|
||||
src_node_name = 'node-a'
|
||||
dst_node_name = 'node-b'
|
||||
src_bmap_name = 'bmap-a'
|
||||
dst_bmap_name = 'bmap-b'
|
||||
|
||||
def setUp(self) -> None:
|
||||
TestDirtyBitmapMigration.setUp(self)
|
||||
|
||||
# Now create another block device and let both have two bitmaps each
|
||||
result = self.vm_a.qmp('blockdev-add',
|
||||
node_name='node-b', driver='null-co',
|
||||
read_zeroes=False)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
result = self.vm_b.qmp('blockdev-add',
|
||||
node_name='node-a', driver='null-co',
|
||||
read_zeroes=False)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
bmaps_to_add = (('node-a', 'bmap-b'),
|
||||
('node-b', 'bmap-a'),
|
||||
('node-b', 'bmap-b'))
|
||||
|
||||
for (node, bmap) in bmaps_to_add:
|
||||
result = self.vm_a.qmp('block-dirty-bitmap-add',
|
||||
node=node, name=bmap)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
@staticmethod
|
||||
def transform_mapping() -> BlockBitmapMapping:
|
||||
return [
|
||||
{
|
||||
'node-name': 'node-a',
|
||||
'alias': 'node-a',
|
||||
'bitmaps': [
|
||||
{
|
||||
'name': 'bmap-a',
|
||||
'alias': 'bmap-a',
|
||||
'transform':
|
||||
{
|
||||
'persistent': True
|
||||
}
|
||||
},
|
||||
{
|
||||
'name': 'bmap-b',
|
||||
'alias': 'bmap-b'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'node-name': 'node-b',
|
||||
'alias': 'node-b',
|
||||
'bitmaps': [
|
||||
{
|
||||
'name': 'bmap-a',
|
||||
'alias': 'bmap-a'
|
||||
},
|
||||
{
|
||||
'name': 'bmap-b',
|
||||
'alias': 'bmap-b'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
def verify_dest_bitmap_state(self) -> None:
|
||||
bitmaps = self.vm_b.query_bitmaps()
|
||||
|
||||
for node in bitmaps:
|
||||
bitmaps[node] = sorted(((bmap['name'], bmap['persistent']) for bmap in bitmaps[node]))
|
||||
|
||||
self.assertEqual(bitmaps,
|
||||
{'node-a': [('bmap-a', True), ('bmap-b', False)],
|
||||
'node-b': [('bmap-a', False), ('bmap-b', False)]})
|
||||
|
||||
def test_transform_on_src(self) -> None:
|
||||
self.set_mapping(self.vm_a, self.transform_mapping())
|
||||
|
||||
self.migrate()
|
||||
self.verify_dest_bitmap_state()
|
||||
self.verify_dest_error(None)
|
||||
|
||||
def test_transform_on_dst(self) -> None:
|
||||
self.set_mapping(self.vm_b, self.transform_mapping())
|
||||
|
||||
self.migrate()
|
||||
self.verify_dest_bitmap_state()
|
||||
self.verify_dest_error(None)
|
||||
|
||||
if __name__ == '__main__':
|
||||
iotests.main(supported_protocols=['file'])
|
||||
|
@ -1,5 +1,5 @@
|
||||
.....................................
|
||||
.......................................
|
||||
----------------------------------------------------------------------
|
||||
Ran 37 tests
|
||||
Ran 39 tests
|
||||
|
||||
OK
|
||||
|
Loading…
Reference in New Issue
Block a user