On 8/21/19 1:52 AM, John Snow wrote: > Like script_main, but doesn't require a single point of entry. > Replace all existing initialization sections with this drop-in replacement. > > This brings debug support to all existing script-style iotests. > > Note: supported_oses=['linux'] was omitted, as it is a default argument. > --- > tests/qemu-iotests/149 | 3 +- > tests/qemu-iotests/194 | 3 +- > tests/qemu-iotests/202 | 3 +- > tests/qemu-iotests/203 | 3 +- > tests/qemu-iotests/206 | 2 +- > tests/qemu-iotests/207 | 2 +- > tests/qemu-iotests/208 | 2 +- > tests/qemu-iotests/209 | 2 +- > tests/qemu-iotests/210 | 2 +- > tests/qemu-iotests/211 | 2 +- > tests/qemu-iotests/212 | 2 +- > tests/qemu-iotests/213 | 2 +- > tests/qemu-iotests/216 | 3 +- > tests/qemu-iotests/218 | 2 +- > tests/qemu-iotests/219 | 2 +- > tests/qemu-iotests/222 | 5 ++- > tests/qemu-iotests/224 | 3 +- > tests/qemu-iotests/228 | 3 +- > tests/qemu-iotests/234 | 3 +- > tests/qemu-iotests/235 | 4 +-- > tests/qemu-iotests/236 | 2 +- > tests/qemu-iotests/237 | 2 +- > tests/qemu-iotests/238 | 2 ++ > tests/qemu-iotests/242 | 2 +- > tests/qemu-iotests/246 | 2 +- > tests/qemu-iotests/248 | 2 +- > tests/qemu-iotests/254 | 2 +- > tests/qemu-iotests/255 | 2 +- > tests/qemu-iotests/256 | 2 +- > tests/qemu-iotests/262 | 3 +- > tests/qemu-iotests/iotests.py | 58 +++++++++++++++++++++++------------ > 31 files changed, 71 insertions(+), 61 deletions(-) > > diff --git a/tests/qemu-iotests/149 b/tests/qemu-iotests/149 > index 4f363f295f..9fa97966c5 100755 > --- a/tests/qemu-iotests/149 > +++ b/tests/qemu-iotests/149 > @@ -383,8 +383,7 @@ def test_once(config, qemu_img=False): > > > # Obviously we only work with the luks image format > -iotests.verify_image_format(supported_fmts=['luks']) > -iotests.verify_platform() > +iotests.script_initialize(supported_fmts=['luks']) > > # We need sudo in order to run cryptsetup to create > # dm-crypt devices. This is safe to use on any > diff --git a/tests/qemu-iotests/194 b/tests/qemu-iotests/194 > index d746ab1e21..c8aeb6d0e4 100755 > --- a/tests/qemu-iotests/194 > +++ b/tests/qemu-iotests/194 > @@ -21,8 +21,7 @@ > > import iotests > > -iotests.verify_image_format(supported_fmts=['qcow2', 'qed', 'raw']) > -iotests.verify_platform(['linux']) > +iotests.script_initialize(supported_fmts=['qcow2', 'qed', 'raw']) > > with iotests.FilePath('source.img') as source_img_path, \ > iotests.FilePath('dest.img') as dest_img_path, \ > diff --git a/tests/qemu-iotests/202 b/tests/qemu-iotests/202 > index 581ca34d79..1271ac9459 100755 > --- a/tests/qemu-iotests/202 > +++ b/tests/qemu-iotests/202 > @@ -24,8 +24,7 @@ > > import iotests > > -iotests.verify_image_format(supported_fmts=['qcow2']) > -iotests.verify_platform(['linux']) > +iotests.script_initialize(supported_fmts=['qcow2']) > > with iotests.FilePath('disk0.img') as disk0_img_path, \ > iotests.FilePath('disk1.img') as disk1_img_path, \ > diff --git a/tests/qemu-iotests/203 b/tests/qemu-iotests/203 > index 4874a1a0d8..c40fe231ea 100755 > --- a/tests/qemu-iotests/203 > +++ b/tests/qemu-iotests/203 > @@ -24,8 +24,7 @@ > > import iotests > > -iotests.verify_image_format(supported_fmts=['qcow2']) > -iotests.verify_platform(['linux']) > +iotests.script_initialize(supported_fmts=['qcow2']) > > with iotests.FilePath('disk0.img') as disk0_img_path, \ > iotests.FilePath('disk1.img') as disk1_img_path, \ > diff --git a/tests/qemu-iotests/206 b/tests/qemu-iotests/206 > index 5bb738bf23..23ff2f624b 100755 > --- a/tests/qemu-iotests/206 > +++ b/tests/qemu-iotests/206 > @@ -23,7 +23,7 @@ > import iotests > from iotests import imgfmt > > -iotests.verify_image_format(supported_fmts=['qcow2']) > +iotests.script_initialize(supported_fmts=['qcow2']) > > def blockdev_create(vm, options): > result = vm.qmp_log('blockdev-create', > diff --git a/tests/qemu-iotests/207 b/tests/qemu-iotests/207 > index ec8c1d06f0..ab9e3b6747 100755 > --- a/tests/qemu-iotests/207 > +++ b/tests/qemu-iotests/207 > @@ -24,7 +24,7 @@ import iotests > import subprocess > import re > > -iotests.verify_image_format(supported_fmts=['raw']) > +iotests.script_initialize(supported_fmts=['raw']) > iotests.verify_protocol(supported=['ssh']) > > def filter_hash(qmsg): > diff --git a/tests/qemu-iotests/208 b/tests/qemu-iotests/208 > index 1e202388dc..dfce6f9fe4 100755 > --- a/tests/qemu-iotests/208 > +++ b/tests/qemu-iotests/208 > @@ -22,7 +22,7 @@ > > import iotests > > -iotests.verify_image_format(supported_fmts=['generic']) > +iotests.script_initialize(supported_fmts=['generic']) > > with iotests.FilePath('disk.img') as disk_img_path, \ > iotests.FilePath('disk-snapshot.img') as disk_snapshot_img_path, \ > diff --git a/tests/qemu-iotests/209 b/tests/qemu-iotests/209 > index 259e991ec6..a77f884166 100755 > --- a/tests/qemu-iotests/209 > +++ b/tests/qemu-iotests/209 > @@ -22,7 +22,7 @@ import iotests > from iotests import qemu_img_create, qemu_io, qemu_img_verbose, qemu_nbd, \ > file_path > > -iotests.verify_image_format(supported_fmts=['qcow2']) > +iotests.script_initialize(supported_fmts=['qcow2']) > > disk, nbd_sock = file_path('disk', 'nbd-sock') > nbd_uri = 'nbd+unix:///exp?socket=' + nbd_sock > diff --git a/tests/qemu-iotests/210 b/tests/qemu-iotests/210 > index 565e3b7b9b..5a7013cd34 100755 > --- a/tests/qemu-iotests/210 > +++ b/tests/qemu-iotests/210 > @@ -23,7 +23,7 @@ > import iotests > from iotests import imgfmt > > -iotests.verify_image_format(supported_fmts=['luks']) > +iotests.script_initialize(supported_fmts=['luks']) > iotests.verify_protocol(supported=['file']) > > def blockdev_create(vm, options): > diff --git a/tests/qemu-iotests/211 b/tests/qemu-iotests/211 > index 6afc894f76..4d6aac497f 100755 > --- a/tests/qemu-iotests/211 > +++ b/tests/qemu-iotests/211 > @@ -23,7 +23,7 @@ > import iotests > from iotests import imgfmt > > -iotests.verify_image_format(supported_fmts=['vdi']) > +iotests.script_initialize(supported_fmts=['vdi']) > iotests.verify_protocol(supported=['file']) > > def blockdev_create(vm, options): > diff --git a/tests/qemu-iotests/212 b/tests/qemu-iotests/212 > index 42b74f208b..ec35bceb11 100755 > --- a/tests/qemu-iotests/212 > +++ b/tests/qemu-iotests/212 > @@ -23,7 +23,7 @@ > import iotests > from iotests import imgfmt > > -iotests.verify_image_format(supported_fmts=['parallels']) > +iotests.script_initialize(supported_fmts=['parallels']) > iotests.verify_protocol(supported=['file']) > > def blockdev_create(vm, options): > diff --git a/tests/qemu-iotests/213 b/tests/qemu-iotests/213 > index 5604f3cebb..3d2c024375 100755 > --- a/tests/qemu-iotests/213 > +++ b/tests/qemu-iotests/213 > @@ -23,7 +23,7 @@ > import iotests > from iotests import imgfmt > > -iotests.verify_image_format(supported_fmts=['vhdx']) > +iotests.script_initialize(supported_fmts=['vhdx']) > iotests.verify_protocol(supported=['file']) > > def blockdev_create(vm, options): > diff --git a/tests/qemu-iotests/216 b/tests/qemu-iotests/216 > index 3c0ae54b44..7574bcc09f 100755 > --- a/tests/qemu-iotests/216 > +++ b/tests/qemu-iotests/216 > @@ -23,8 +23,7 @@ import iotests > from iotests import log, qemu_img, qemu_io_silent > > # Need backing file support > -iotests.verify_image_format(supported_fmts=['qcow2', 'qcow', 'qed', 'vmdk']) > -iotests.verify_platform(['linux']) > +iotests.script_initialize(supported_fmts=['qcow2', 'qcow', 'qed', 'vmdk']) > > log('') > log('=== Copy-on-read across nodes ===') > diff --git a/tests/qemu-iotests/218 b/tests/qemu-iotests/218 > index 2554d84581..e18e31076b 100755 > --- a/tests/qemu-iotests/218 > +++ b/tests/qemu-iotests/218 > @@ -29,7 +29,7 @@ > import iotests > from iotests import log, qemu_img, qemu_io_silent > > -iotests.verify_image_format(supported_fmts=['qcow2', 'raw']) > +iotests.script_initialize(supported_fmts=['qcow2', 'raw']) > > > # Launches the VM, adds two null-co nodes (source and target), and > diff --git a/tests/qemu-iotests/219 b/tests/qemu-iotests/219 > index e0c51662c0..9ae27cb04e 100755 > --- a/tests/qemu-iotests/219 > +++ b/tests/qemu-iotests/219 > @@ -21,7 +21,7 @@ > > import iotests > > -iotests.verify_image_format(supported_fmts=['qcow2']) > +iotests.script_initialize(supported_fmts=['qcow2']) > > img_size = 4 * 1024 * 1024 > > diff --git a/tests/qemu-iotests/222 b/tests/qemu-iotests/222 > index 0ead56d574..6788979ed3 100644 > --- a/tests/qemu-iotests/222 > +++ b/tests/qemu-iotests/222 > @@ -24,9 +24,8 @@ > import iotests > from iotests import log, qemu_img, qemu_io, qemu_io_silent > > -iotests.verify_platform(['linux']) > -iotests.verify_image_format(supported_fmts=['qcow2', 'qcow', 'qed', 'vmdk', > - 'vhdx', 'raw']) > +iotests.script_initialize(supported_fmts=['qcow2', 'qcow', 'qed', 'vmdk', > + 'vhdx', 'raw']) > > patterns = [("0x5d", "0", "64k"), > ("0xd5", "1M", "64k"), > diff --git a/tests/qemu-iotests/224 b/tests/qemu-iotests/224 > index b4dfaa639f..d0d0c44104 100755 > --- a/tests/qemu-iotests/224 > +++ b/tests/qemu-iotests/224 > @@ -26,8 +26,7 @@ from iotests import log, qemu_img, qemu_io_silent, > filter_qmp_testfiles, \ > import json > > # Need backing file support (for arbitrary backing formats) > -iotests.verify_image_format(supported_fmts=['qcow2', 'qcow', 'qed']) > -iotests.verify_platform(['linux']) > +iotests.script_initialize(supported_fmts=['qcow2', 'qcow', 'qed']) > > > # There are two variations of this test: > diff --git a/tests/qemu-iotests/228 b/tests/qemu-iotests/228 > index 9a50afd205..9785868ab3 100755 > --- a/tests/qemu-iotests/228 > +++ b/tests/qemu-iotests/228 > @@ -25,8 +25,7 @@ from iotests import log, qemu_img, filter_testfiles, > filter_imgfmt, \ > filter_qmp_testfiles, filter_qmp_imgfmt > > # Need backing file and change-backing-file support > -iotests.verify_image_format(supported_fmts=['qcow2', 'qed']) > -iotests.verify_platform(['linux']) > +iotests.script_initialize(supported_fmts=['qcow2', 'qed']) > > > def log_node_info(node): > diff --git a/tests/qemu-iotests/234 b/tests/qemu-iotests/234 > index 34c818c485..3de6ab2341 100755 > --- a/tests/qemu-iotests/234 > +++ b/tests/qemu-iotests/234 > @@ -23,8 +23,7 @@ > import iotests > import os > > -iotests.verify_image_format(supported_fmts=['qcow2']) > -iotests.verify_platform(['linux']) > +iotests.script_initialize(supported_fmts=['qcow2']) > > with iotests.FilePath('img') as img_path, \ > iotests.FilePath('backing') as backing_path, \ > diff --git a/tests/qemu-iotests/235 b/tests/qemu-iotests/235 > index fedd111fd4..9e88c65b93 100755 > --- a/tests/qemu-iotests/235 > +++ b/tests/qemu-iotests/235 > @@ -27,6 +27,8 @@ sys.path.append(os.path.join(os.path.dirname(__file__), > '..', '..', 'python')) > > from qemu.machine import QEMUMachine > > +iotests.script_initialize(supported_fmts=['qcow2']) > + > # Note: > # This test was added to check that mirror dead-lock was fixed (see previous > # commit before this test addition). > @@ -40,8 +42,6 @@ from qemu.machine import QEMUMachine > > size = 1 * 1024 * 1024 * 1024 > > -iotests.verify_image_format(supported_fmts=['qcow2']) > - > disk = file_path('disk') > > # prepare source image > diff --git a/tests/qemu-iotests/236 b/tests/qemu-iotests/236 > index 79a6381f8e..b88779eb0b 100755 > --- a/tests/qemu-iotests/236 > +++ b/tests/qemu-iotests/236 > @@ -22,7 +22,7 @@ > import iotests > from iotests import log > > -iotests.verify_image_format(supported_fmts=['generic']) > +iotests.script_initialize(supported_fmts=['generic']) > size = 64 * 1024 * 1024 > granularity = 64 * 1024 > > diff --git a/tests/qemu-iotests/237 b/tests/qemu-iotests/237 > index 06897f8c87..3758ace0bc 100755 > --- a/tests/qemu-iotests/237 > +++ b/tests/qemu-iotests/237 > @@ -24,7 +24,7 @@ import math > import iotests > from iotests import imgfmt > > -iotests.verify_image_format(supported_fmts=['vmdk']) > +iotests.script_initialize(supported_fmts=['vmdk']) > > def blockdev_create(vm, options): > result = vm.qmp_log('blockdev-create', job_id='job0', options=options, > diff --git a/tests/qemu-iotests/238 b/tests/qemu-iotests/238 > index e5ac2b2ff8..6e27fb40c2 100755 > --- a/tests/qemu-iotests/238 > +++ b/tests/qemu-iotests/238 > @@ -23,6 +23,8 @@ import os > import iotests > from iotests import log > > +iotests.script_initialize()
This restrict test 208 to the Linux platform, is this OK? The rest looks good. > + > virtio_scsi_device = iotests.get_virtio_scsi_device() > > vm = iotests.VM() > diff --git a/tests/qemu-iotests/242 b/tests/qemu-iotests/242 > index c176e92da6..7c2685b4cc 100755 > --- a/tests/qemu-iotests/242 > +++ b/tests/qemu-iotests/242 > @@ -24,7 +24,7 @@ import struct > from iotests import qemu_img_create, qemu_io, qemu_img_pipe, \ > file_path, img_info_log, log, filter_qemu_io > > -iotests.verify_image_format(supported_fmts=['qcow2']) > +iotests.script_initialize(supported_fmts=['qcow2']) > > disk = file_path('disk') > chunk = 256 * 1024 > diff --git a/tests/qemu-iotests/246 b/tests/qemu-iotests/246 > index b0997a392f..1d7747d62d 100755 > --- a/tests/qemu-iotests/246 > +++ b/tests/qemu-iotests/246 > @@ -22,7 +22,7 @@ > import iotests > from iotests import log > > -iotests.verify_image_format(supported_fmts=['qcow2']) > +iotests.script_initialize(supported_fmts=['qcow2']) > size = 64 * 1024 * 1024 * 1024 > gran_small = 32 * 1024 > gran_large = 128 * 1024 > diff --git a/tests/qemu-iotests/248 b/tests/qemu-iotests/248 > index f26b4bb2aa..781b21b227 100755 > --- a/tests/qemu-iotests/248 > +++ b/tests/qemu-iotests/248 > @@ -21,7 +21,7 @@ > import iotests > from iotests import qemu_img_create, qemu_io, file_path, filter_qmp_testfiles > > -iotests.verify_image_format(supported_fmts=['qcow2']) > +iotests.script_initialize(supported_fmts=['qcow2']) > > source, target = file_path('source', 'target') > size = 5 * 1024 * 1024 > diff --git a/tests/qemu-iotests/254 b/tests/qemu-iotests/254 > index 09584f3f7d..43b40f4f71 100755 > --- a/tests/qemu-iotests/254 > +++ b/tests/qemu-iotests/254 > @@ -21,7 +21,7 @@ > import iotests > from iotests import qemu_img_create, file_path, log > > -iotests.verify_image_format(supported_fmts=['qcow2']) > +iotests.script_initialize(supported_fmts=['qcow2']) > > disk, top = file_path('disk', 'top') > size = 1024 * 1024 > diff --git a/tests/qemu-iotests/255 b/tests/qemu-iotests/255 > index 3632d507d0..ff16402268 100755 > --- a/tests/qemu-iotests/255 > +++ b/tests/qemu-iotests/255 > @@ -23,7 +23,7 @@ > import iotests > from iotests import imgfmt > > -iotests.verify_image_format(supported_fmts=['qcow2']) > +iotests.script_initialize(supported_fmts=['qcow2']) > > def blockdev_create(vm, options): > result = vm.qmp_log('blockdev-create', > diff --git a/tests/qemu-iotests/256 b/tests/qemu-iotests/256 > index c594a43205..d2f9212e5a 100755 > --- a/tests/qemu-iotests/256 > +++ b/tests/qemu-iotests/256 > @@ -23,7 +23,7 @@ import os > import iotests > from iotests import log > > -iotests.verify_image_format(supported_fmts=['qcow2']) > +iotests.script_initialize(supported_fmts=['qcow2']) > size = 64 * 1024 * 1024 > > with iotests.FilePath('img0') as img0_path, \ > diff --git a/tests/qemu-iotests/262 b/tests/qemu-iotests/262 > index 398f63587e..f0e9d0f8ac 100755 > --- a/tests/qemu-iotests/262 > +++ b/tests/qemu-iotests/262 > @@ -23,8 +23,7 @@ > import iotests > import os > > -iotests.verify_image_format(supported_fmts=['qcow2']) > -iotests.verify_platform(['linux']) > +iotests.script_initialize(supported_fmts=['qcow2']) > > with iotests.FilePath('img') as img_path, \ > iotests.FilePath('mig_fifo') as fifo, \ > diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py > index 84438e837c..2970d7304a 100644 > --- a/tests/qemu-iotests/iotests.py > +++ b/tests/qemu-iotests/iotests.py > @@ -895,7 +895,20 @@ def skip_if_unsupported(required_formats=[], > read_only=False): > return func_wrapper > return skip_test_decorator > > -def execute_unittest(output, verbosity, debug): > +def execute_unittest(debug=False): > + """Executes unittests within the calling module.""" > + > + verbosity = 2 if debug else 1 > + > + if debug: > + output = sys.stdout > + elif sys.version_info.major >= 3: > + output = io.StringIO() > + else: > + # io.StringIO is for unicode strings, which is not what > + # 2.x's test runner emits. > + output = io.BytesIO() > + > runner = unittest.TextTestRunner(stream=output, descriptions=True, > verbosity=verbosity) > try: > @@ -903,14 +916,19 @@ def execute_unittest(output, verbosity, debug): > # exception > unittest.main(testRunner=runner) > finally: > + # We need to filter out the time taken from the output so that > + # qemu-iotest can reliably diff the results against master output. > if not debug: > sys.stderr.write(re.sub(r'Ran (\d+) tests? in [\d.]+s', > r'Ran \1 tests', output.getvalue())) > > -def execute_test(test_function=None, > - supported_fmts=[], supported_oses=['linux'], > - supported_cache_modes=[], unsupported_fmts=[]): > - """Run either unittest or script-style tests.""" > +def execute_setup_common(supported_fmts=[], > + supported_oses=['linux'], > + supported_cache_modes=[], > + unsupported_fmts=[]): > + """ > + Perform necessary setup for either script-style or unittest-style tests. > + """ > > # We are using TEST_DIR and QEMU_DEFAULT_MACHINE as proxies to > # indicate that we're not being run via "check". There may be > @@ -920,37 +938,37 @@ def execute_test(test_function=None, > sys.stderr.write('Please run this test via the "check" script\n') > sys.exit(os.EX_USAGE) > > - debug = '-d' in sys.argv > - verbosity = 1 > verify_image_format(supported_fmts, unsupported_fmts) > verify_platform(supported_oses) > verify_cache_mode(supported_cache_modes) > > + debug = '-d' in sys.argv > if debug: > - output = sys.stdout > - verbosity = 2 > sys.argv.remove('-d') > - else: > - # We need to filter out the time taken from the output so that > - # qemu-iotest can reliably diff the results against master output. > - if sys.version_info.major >= 3: > - output = io.StringIO() > - else: > - # io.StringIO is for unicode strings, which is not what > - # 2.x's test runner emits. > - output = io.BytesIO() > - > logging.basicConfig(level=(logging.DEBUG if debug else logging.WARN)) > > + return debug > + > +def execute_test(test_function=None, *args, **kwargs): > + """Run either unittest or script-style tests.""" > + > + debug = execute_setup_common(*args, **kwargs) > if not test_function: > - execute_unittest(output, verbosity, debug) > + execute_unittest(debug) > else: > test_function() > > +# This is called from script-style iotests without a single point of entry > +def script_initialize(*args, **kwargs): > + """Initialize script-style tests without running any tests.""" > + execute_setup_common(*args, **kwargs) > + > +# This is called from script-style iotests with a single point of entry > def script_main(test_function, *args, **kwargs): > """Run script-style tests outside of the unittest framework""" > execute_test(test_function, *args, **kwargs) > > +# This is called from unittest style iotests > def main(*args, **kwargs): > """Run tests using the unittest framework""" > execute_test(None, *args, **kwargs) >