mirror of https://github.com/xemu-project/xemu.git
migrate-bitmaps-test: Fix pylint warnings
There are a couple of things pylint takes issue with: - The "time" import is unused - The import order (iotests should come last) - get_bitmap_hash() doesn't use @self and so should be a function - Semicolons at the end of some lines - Parentheses after "if" - Some lines are too long (80 characters instead of 79) - inject_test_case()'s @name parameter shadows a top-level @name variable - "lambda self: mc(self)" were equivalent to just "mc", but in inject_test_case(), it is not equivalent, so add a comment and disable the warning locally - Always put two empty lines after a function - f'exec: cat > /dev/null' does not need to be an f-string Fix them. Signed-off-by: Hanna Reitz <hreitz@redhat.com> Message-Id: <20210902094017.32902-4-hreitz@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
This commit is contained in:
parent
e2ad17a62d
commit
d8c2e47dbe
|
@ -20,11 +20,10 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import iotests
|
|
||||||
import time
|
|
||||||
import itertools
|
import itertools
|
||||||
import operator
|
import operator
|
||||||
import re
|
import re
|
||||||
|
import iotests
|
||||||
from iotests import qemu_img, qemu_img_create, Timeout
|
from iotests import qemu_img, qemu_img_create, Timeout
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,6 +36,12 @@ mig_cmd = 'exec: cat > ' + mig_file
|
||||||
incoming_cmd = 'exec: cat ' + mig_file
|
incoming_cmd = 'exec: cat ' + mig_file
|
||||||
|
|
||||||
|
|
||||||
|
def get_bitmap_hash(vm):
|
||||||
|
result = vm.qmp('x-debug-block-dirty-bitmap-sha256',
|
||||||
|
node='drive0', name='bitmap0')
|
||||||
|
return result['return']['sha256']
|
||||||
|
|
||||||
|
|
||||||
class TestDirtyBitmapMigration(iotests.QMPTestCase):
|
class TestDirtyBitmapMigration(iotests.QMPTestCase):
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.vm_a.shutdown()
|
self.vm_a.shutdown()
|
||||||
|
@ -62,21 +67,16 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
|
||||||
params['persistent'] = True
|
params['persistent'] = True
|
||||||
|
|
||||||
result = vm.qmp('block-dirty-bitmap-add', **params)
|
result = vm.qmp('block-dirty-bitmap-add', **params)
|
||||||
self.assert_qmp(result, 'return', {});
|
self.assert_qmp(result, 'return', {})
|
||||||
|
|
||||||
def get_bitmap_hash(self, vm):
|
|
||||||
result = vm.qmp('x-debug-block-dirty-bitmap-sha256',
|
|
||||||
node='drive0', name='bitmap0')
|
|
||||||
return result['return']['sha256']
|
|
||||||
|
|
||||||
def check_bitmap(self, vm, sha256):
|
def check_bitmap(self, vm, sha256):
|
||||||
result = vm.qmp('x-debug-block-dirty-bitmap-sha256',
|
result = vm.qmp('x-debug-block-dirty-bitmap-sha256',
|
||||||
node='drive0', name='bitmap0')
|
node='drive0', name='bitmap0')
|
||||||
if sha256:
|
if sha256:
|
||||||
self.assert_qmp(result, 'return/sha256', sha256);
|
self.assert_qmp(result, 'return/sha256', sha256)
|
||||||
else:
|
else:
|
||||||
self.assert_qmp(result, 'error/desc',
|
self.assert_qmp(result, 'error/desc',
|
||||||
"Dirty bitmap 'bitmap0' not found");
|
"Dirty bitmap 'bitmap0' not found")
|
||||||
|
|
||||||
def do_test_migration_resume_source(self, persistent, migrate_bitmaps):
|
def do_test_migration_resume_source(self, persistent, migrate_bitmaps):
|
||||||
granularity = 512
|
granularity = 512
|
||||||
|
@ -97,7 +97,7 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
|
||||||
self.add_bitmap(self.vm_a, granularity, persistent)
|
self.add_bitmap(self.vm_a, granularity, persistent)
|
||||||
for r in regions:
|
for r in regions:
|
||||||
self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % r)
|
self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % r)
|
||||||
sha256 = self.get_bitmap_hash(self.vm_a)
|
sha256 = get_bitmap_hash(self.vm_a)
|
||||||
|
|
||||||
result = self.vm_a.qmp('migrate', uri=mig_cmd)
|
result = self.vm_a.qmp('migrate', uri=mig_cmd)
|
||||||
while True:
|
while True:
|
||||||
|
@ -106,7 +106,7 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
|
||||||
break
|
break
|
||||||
while True:
|
while True:
|
||||||
result = self.vm_a.qmp('query-status')
|
result = self.vm_a.qmp('query-status')
|
||||||
if (result['return']['status'] == 'postmigrate'):
|
if result['return']['status'] == 'postmigrate':
|
||||||
break
|
break
|
||||||
|
|
||||||
# test that bitmap is still here
|
# test that bitmap is still here
|
||||||
|
@ -164,7 +164,7 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
|
||||||
self.add_bitmap(self.vm_a, granularity, persistent)
|
self.add_bitmap(self.vm_a, granularity, persistent)
|
||||||
for r in regions:
|
for r in regions:
|
||||||
self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % r)
|
self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % r)
|
||||||
sha256 = self.get_bitmap_hash(self.vm_a)
|
sha256 = get_bitmap_hash(self.vm_a)
|
||||||
|
|
||||||
if pre_shutdown:
|
if pre_shutdown:
|
||||||
self.vm_a.shutdown()
|
self.vm_a.shutdown()
|
||||||
|
@ -214,16 +214,22 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
|
||||||
self.check_bitmap(self.vm_b, sha256 if persistent else False)
|
self.check_bitmap(self.vm_b, sha256 if persistent else False)
|
||||||
|
|
||||||
|
|
||||||
def inject_test_case(klass, name, method, *args, **kwargs):
|
def inject_test_case(klass, suffix, method, *args, **kwargs):
|
||||||
mc = operator.methodcaller(method, *args, **kwargs)
|
mc = operator.methodcaller(method, *args, **kwargs)
|
||||||
setattr(klass, 'test_' + method + name, lambda self: mc(self))
|
# We want to add a function attribute to `klass`, so that it is
|
||||||
|
# correctly converted to a method on instantiation. The
|
||||||
|
# methodcaller object `mc` is a callable, not a function, so we
|
||||||
|
# need the lambda to turn it into a function.
|
||||||
|
# pylint: disable=unnecessary-lambda
|
||||||
|
setattr(klass, 'test_' + method + suffix, lambda self: mc(self))
|
||||||
|
|
||||||
|
|
||||||
for cmb in list(itertools.product((True, False), repeat=5)):
|
for cmb in list(itertools.product((True, False), repeat=5)):
|
||||||
name = ('_' if cmb[0] else '_not_') + 'persistent_'
|
name = ('_' if cmb[0] else '_not_') + 'persistent_'
|
||||||
name += ('_' if cmb[1] else '_not_') + 'migbitmap_'
|
name += ('_' if cmb[1] else '_not_') + 'migbitmap_'
|
||||||
name += '_online' if cmb[2] else '_offline'
|
name += '_online' if cmb[2] else '_offline'
|
||||||
name += '_shared' if cmb[3] else '_nonshared'
|
name += '_shared' if cmb[3] else '_nonshared'
|
||||||
if (cmb[4]):
|
if cmb[4]:
|
||||||
name += '__pre_shutdown'
|
name += '__pre_shutdown'
|
||||||
|
|
||||||
inject_test_case(TestDirtyBitmapMigration, name, 'do_test_migration',
|
inject_test_case(TestDirtyBitmapMigration, name, 'do_test_migration',
|
||||||
|
@ -270,7 +276,8 @@ class TestDirtyBitmapBackingMigration(iotests.QMPTestCase):
|
||||||
self.assert_qmp(result, 'return', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
|
|
||||||
# Check that the bitmaps are there
|
# Check that the bitmaps are there
|
||||||
for node in self.vm.qmp('query-named-block-nodes', flat=True)['return']:
|
nodes = self.vm.qmp('query-named-block-nodes', flat=True)['return']
|
||||||
|
for node in nodes:
|
||||||
if 'node0' in node['node-name']:
|
if 'node0' in node['node-name']:
|
||||||
self.assert_qmp(node, 'dirty-bitmaps[0]/name', 'bmap0')
|
self.assert_qmp(node, 'dirty-bitmaps[0]/name', 'bmap0')
|
||||||
|
|
||||||
|
@ -287,7 +294,7 @@ class TestDirtyBitmapBackingMigration(iotests.QMPTestCase):
|
||||||
"""
|
"""
|
||||||
Continue the source after migration.
|
Continue the source after migration.
|
||||||
"""
|
"""
|
||||||
result = self.vm.qmp('migrate', uri=f'exec: cat > /dev/null')
|
result = self.vm.qmp('migrate', uri='exec: cat > /dev/null')
|
||||||
self.assert_qmp(result, 'return', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
|
|
||||||
with Timeout(10, 'Migration timeout'):
|
with Timeout(10, 'Migration timeout'):
|
||||||
|
|
Loading…
Reference in New Issue