1if not have_tools or targetos == 'windows' or get_option('gprof') 2 subdir_done() 3endif 4 5foreach cflag: config_host['QEMU_CFLAGS'].split() 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 [qemu_iotests_check_cmd] + args + ['-n'], 51 check: true, 52 ) 53 54 foreach item: rc.stdout().strip().split() 55 args = ['-tap', '-' + format, item, 56 '--source-dir', meson.current_source_dir(), 57 '--build-dir', meson.current_build_dir()] 58 # Some individual tests take as long as 45 seconds 59 # Bump the timeout to 3 minutes for some headroom 60 # on slow machines to minimize spurious failures 61 test('io-' + format + '-' + item, 62 qemu_iotests_check_cmd, 63 args: args, 64 depends: qemu_iotests_binaries, 65 env: qemu_iotests_env, 66 protocol: 'tap', 67 timeout: 180, 68 suite: suites) 69 endforeach 70endforeach 71