Message ID | 20190820235243.26092-2-jsnow@redhat.com |
---|---|
State | New |
Headers | show |
Series | iotests: use python logging | expand |
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) >
On 8/29/19 2:27 PM, Philippe Mathieu-Daudé wrote: > This restrict test 208 to the Linux platform, is this OK? > > The rest looks good. I forgot about that, so good catch. I don't know. We seem to already restrict a LOT of tests to the Linux platform. Does this one actually work on other platforms? Actually, I can't see any other supported oses/supported platforms calls anywhere in iotests that don't just specify Linux or leave it the default (...which is also linux.) There isn't a way to engage the old-style python unittest framework without implying Linux; you have to manually override it if so. For new tests, MOST of them specified Linux in some way or another, as you saw. So either: - 208 was an oversight, or - Many tests are accidentally limiting to Linux and could be loosened. Which is it? Dunno. Guess I'll look at the VM tests to see if I can co-opt some of that... stay tuned? --js
On 8/29/19 8:43 PM, John Snow wrote: > On 8/29/19 2:27 PM, Philippe Mathieu-Daudé wrote: >> This restrict test 208 to the Linux platform, is this OK? >> >> The rest looks good. > > I forgot about that, so good catch. > > I don't know. We seem to already restrict a LOT of tests to the Linux > platform. Does this one actually work on other platforms? > > Actually, I can't see any other supported oses/supported platforms calls > anywhere in iotests that don't just specify Linux or leave it the > default (...which is also linux.) > > There isn't a way to engage the old-style python unittest framework > without implying Linux; you have to manually override it if so. Then let's use: iotests.script_initialize(supported_oses=[]) and call it a day? > > For new tests, MOST of them specified Linux in some way or another, as > you saw. > > So either: > - 208 was an oversight, or > - Many tests are accidentally limiting to Linux and could be loosened. This can stay in your TODO for after this painful series. > Which is it? Dunno. Guess I'll look at the VM tests to see if I can > co-opt some of that... stay tuned? > > --js >
On 8/29/19 2:58 PM, Philippe Mathieu-Daudé wrote: > On 8/29/19 8:43 PM, John Snow wrote: >> On 8/29/19 2:27 PM, Philippe Mathieu-Daudé wrote: >>> This restrict test 208 to the Linux platform, is this OK? >>> >>> The rest looks good. >> >> I forgot about that, so good catch. >> >> I don't know. We seem to already restrict a LOT of tests to the Linux >> platform. Does this one actually work on other platforms? >> >> Actually, I can't see any other supported oses/supported platforms calls >> anywhere in iotests that don't just specify Linux or leave it the >> default (...which is also linux.) >> >> There isn't a way to engage the old-style python unittest framework >> without implying Linux; you have to manually override it if so. > > Then let's use: > > iotests.script_initialize(supported_oses=[]) > > and call it a day? > *whines* The even lazier thing to do is to do more work to come up with some excuse to avoid re-spinning the series: commit bc521696607c5348fcd8a9e57b408d0ac0dbe2f8 Author: Fam Zheng <famz@redhat.com> Date: Sun Jan 4 09:53:52 2015 +0800 qemu-iotests: Add supported os parameter for python tests If I understand correctly, qemu-iotests never meant to be portable. We only support Linux for all the shell cases, but didn't specify it for python tests. Now add this and default all the python tests as Linux only. If we cares enough later, we can override the parameter in individual cases. I think it's only an oversight that this one test didn't specify a platform. It's certainly the only one. If someone feels strongly that other platforms are supported, let them send the patch. --js
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() + 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)