qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 4/6] tests/qemu-iotests/meson.build: Call the 'check' script


From: Hanna Reitz
Subject: Re: [PATCH 4/6] tests/qemu-iotests/meson.build: Call the 'check' script directly
Date: Tue, 8 Feb 2022 14:12:25 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0

On 08.02.22 11:13, Thomas Huth wrote:
We can get a nicer progress indication if we add the iotests
individually via the 'check' script instead of going through
the check-block.sh wrapper.

For this, we have to add some of the sanity checks that have
originally been done in the tests/check-block.sh script (whether
"bash" is available or whether CFLAGS contain -fsanitize switches)
to the meson.build file now, and add the environment variables
that have been set up by the tests/check-block.sh script before.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
  tests/qemu-iotests/meson.build | 45 ++++++++++++++++++++++++++++------
  1 file changed, 37 insertions(+), 8 deletions(-)

diff --git a/tests/qemu-iotests/meson.build b/tests/qemu-iotests/meson.build
index e1832c90e0..5a6ccd35d8 100644
--- a/tests/qemu-iotests/meson.build
+++ b/tests/qemu-iotests/meson.build
@@ -1,9 +1,29 @@
-if not have_tools or targetos == 'windows'
+if not have_tools or targetos == 'windows' or \
+   config_host.has_key('CONFIG_GPROF')
    subdir_done()
  endif
+bash = find_program('bash', required: false)
+if not bash.found() or \
+   run_command(bash, ['--version']).stdout().contains('GNU bash, version 3')

Instead of me asking about where the LANG=C is, or me lamenting that we could test very simply for [123] before and can no longer now... Can we not just do `find_program('bash', required: false, version: '>= 4.0')`?

+  message('bash >= v4.0 not available ==> Disabled the qemu-iotests.')
+  subdir_done()
+endif
+
+foreach cflag: config_host['QEMU_CFLAGS'].split()
+  if cflag.startswith('-fsanitize') and \
+     not cflag.contains('safe-stack') and not cflag.contains('cfi-icall')
+    message('Sanitizers are enabled ==> Disabled the qemu-iotests.')
+    subdir_done()
+  endif
+endforeach
+
  qemu_iotests_binaries = [qemu_img, qemu_io, qemu_nbd, qsd]
-qemu_iotests_env = {'PYTHON': python.full_path()}
+qemu_iotests_env = {
+  'PYTHON': python.full_path(),
+  'PYTHONUTF8': '1',
+  'QEMU_CHECK_BLOCK_AUTO': '1'
+}
  qemu_iotests_formats = {
    'qcow2': 'quick',
    'raw': 'slow',
@@ -18,16 +38,25 @@ foreach k, v : emulators
    endif
  endforeach
+check_script = find_program(meson.current_build_dir() / 'check')
+iotests = run_command(python, [check_script.full_path(), '-g', 'auto', '-n'],
+                      check: true).stdout().strip().replace('tests/', 
'').split('\n')
+
  foreach format, speed: qemu_iotests_formats
    if speed == 'quick'
      suites = 'block'
    else
      suites = ['block-' + speed, speed]
    endif
-  test('qemu-iotests ' + format, sh, args: [files('../check-block.sh'), 
format],
-       depends: qemu_iotests_binaries, env: qemu_iotests_env,
-       protocol: 'tap',
-       suite: suites,
-       timeout: 0,
-       is_parallel: false)
+  foreach tst: iotests
+    test('iotest-' + format + '-' + tst,
+         python, args: [check_script.full_path(), '-tap', '-' + format, tst],
+         depends: qemu_iotests_binaries,
+         env: qemu_iotests_env + \
+              { 'TEST_DIR':
+                meson.current_build_dir() / 'scratch' / format + '-' + tst },
+         protocol: 'tap',
+         suite: suites,
+         timeout: 0)

So as far I understand you’d like to have meson run the iotests in parallel this way.  I don’t actually think that’s safely possible for multiple formats at once, because a test’s output is always written into `${build_dir}/tests/qemu-iotests/${seq}.out.bad`; so if you run e.g. test 001 both with raw and qcow2 simultaneously, then they can get in each other’s way.

(In my test branch, I have https://gitlab.com/hreitz/qemu/-/commit/f3110b1eeb93d02aeadc5c8b807594cfa10a6aad for this – maybe I should send something like this in a more refined form to the list some time...)

As a minor note, the `check` script has recently received a `-j` argument for parallel execution.  Kind of a shame that we wouldn’t be able to use it here, but that’s how it is, I suppose.

Hanna




reply via email to

[Prev in Thread] Current Thread [Next in Thread]