1if not have_tools or host_os == 'windows' 2 subdir_done() 3endif 4 5foreach cflag: qemu_ldflags 6 if cflag.startswith('-fsanitize') and \ 7 not cflag.contains('safe-stack') and not cflag.contains('cfi-icall') 8 message('Sanitizers are enabled ==> Disabled the qemu-iotests.') 9 subdir_done() 10 endif 11endforeach 12 13bash = find_program('bash', required: false, version: '>= 4.0') 14if not bash.found() 15 message('bash >= v4.0 not available ==> Disabled the qemu-iotests.') 16 subdir_done() 17endif 18 19qemu_iotests_binaries = [qemu_img, qemu_io, qemu_nbd, qsd] 20qemu_iotests_env = {'PYTHON': python.full_path()} 21qemu_iotests_formats = { 22 'qcow2': 'quick', 23 'raw': 'slow', 24 'qed': 'thorough', 25 'vmdk': 'thorough', 26 'vpc': 'thorough' 27} 28 29foreach k, v : emulators 30 if k.startswith('qemu-system-') 31 qemu_iotests_binaries += v 32 endif 33endforeach 34 35qemu_iotests_check_cmd = files('check') 36 37foreach format, speed: qemu_iotests_formats 38 if speed == 'quick' 39 suites = 'block' 40 else 41 suites = ['block-' + speed, speed] 42 endif 43 44 args = ['-tap', '-' + format] 45 if speed == 'quick' 46 args += ['-g', 'auto'] 47 endif 48 49 rc = run_command( 50 [python, qemu_iotests_check_cmd] + args + ['-n'], 51 check: true, 52 ) 53 54 foreach item: rc.stdout().strip().split() 55 args = [qemu_iotests_check_cmd, 56 '-tap', '-' + format, item, 57 '--source-dir', meson.current_source_dir(), 58 '--build-dir', meson.current_build_dir()] 59 # Some individual tests take as long as 45 seconds 60 # Bump the timeout to 3 minutes for some headroom 61 # on slow machines to minimize spurious failures 62 test('io-' + format + '-' + item, 63 python, 64 args: args, 65 depends: qemu_iotests_binaries, 66 env: qemu_iotests_env, 67 protocol: 'tap', 68 timeout: 180, 69 suite: suites) 70 endforeach 71endforeach 72