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)
> 

Reply via email to