1*11a82d14SPhilippe Mathieu-Daudé#!/usr/bin/env bash 26bf19c94SChristoph Hellwig# 36bf19c94SChristoph Hellwig# Copyright (C) 2009 Red Hat, Inc. 46bf19c94SChristoph Hellwig# Copyright (c) 2000-2002,2006 Silicon Graphics, Inc. All Rights Reserved. 56bf19c94SChristoph Hellwig# 66bf19c94SChristoph Hellwig# This program is free software; you can redistribute it and/or 76bf19c94SChristoph Hellwig# modify it under the terms of the GNU General Public License as 86bf19c94SChristoph Hellwig# published by the Free Software Foundation. 96bf19c94SChristoph Hellwig# 106bf19c94SChristoph Hellwig# This program is distributed in the hope that it would be useful, 116bf19c94SChristoph Hellwig# but WITHOUT ANY WARRANTY; without even the implied warranty of 126bf19c94SChristoph Hellwig# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 136bf19c94SChristoph Hellwig# GNU General Public License for more details. 146bf19c94SChristoph Hellwig# 156bf19c94SChristoph Hellwig# You should have received a copy of the GNU General Public License 16e8c212d6SChristoph Hellwig# along with this program. If not, see <http://www.gnu.org/licenses/>. 176bf19c94SChristoph Hellwig# 186bf19c94SChristoph Hellwig# 196bf19c94SChristoph Hellwig# Control script for QA 206bf19c94SChristoph Hellwig# 216bf19c94SChristoph Hellwig 226bf19c94SChristoph Hellwigstatus=0 236bf19c94SChristoph Hellwigneedwrap=true 246bf19c94SChristoph Hellwigtry=0 256bf19c94SChristoph Hellwign_bad=0 266bf19c94SChristoph Hellwigbad="" 276bf19c94SChristoph Hellwignotrun="" 2857ed557fSAndrey Shinkevichcasenotrun="" 296bf19c94SChristoph Hellwiginterrupt=true 306bf19c94SChristoph Hellwig 316bf19c94SChristoph Hellwig# by default don't output timestamps 326bf19c94SChristoph Hellwigtimestamp=${TIMESTAMP:=false} 336bf19c94SChristoph Hellwig 34e8f8624dSMax Reitz_init_error() 35e8f8624dSMax Reitz{ 364e670492SPaolo Bonzini echo "check: $1" >&2 376bf19c94SChristoph Hellwig exit 1 38e8f8624dSMax Reitz} 39e8f8624dSMax Reitz 40e8f8624dSMax Reitzif [ -L "$0" ] 41e8f8624dSMax Reitzthen 42e8f8624dSMax Reitz # called from the build tree 43e8f8624dSMax Reitz source_iotests=$(dirname "$(readlink "$0")") 44e8f8624dSMax Reitz if [ -z "$source_iotests" ] 45e8f8624dSMax Reitz then 46e8f8624dSMax Reitz _init_error "failed to obtain source tree name from check symlink" 47e8f8624dSMax Reitz fi 48e8f8624dSMax Reitz source_iotests=$(cd "$source_iotests"; pwd) || _init_error "failed to enter source tree" 49e8f8624dSMax Reitz build_iotests=$PWD 50e8f8624dSMax Reitzelse 51e8f8624dSMax Reitz # called from the source tree 52e8f8624dSMax Reitz source_iotests=$PWD 53e8f8624dSMax Reitz # this may be an in-tree build (note that in the following code we may not 54e8f8624dSMax Reitz # assume that it truly is and have to test whether the build results 55e8f8624dSMax Reitz # actually exist) 56e8f8624dSMax Reitz build_iotests=$PWD 57e8f8624dSMax Reitzfi 58e8f8624dSMax Reitz 59e8f8624dSMax Reitzbuild_root="$build_iotests/../.." 60e8f8624dSMax Reitz 617fed1a49SMax Reitz# we need common.env 627fed1a49SMax Reitzif ! . "$build_iotests/common.env" 637fed1a49SMax Reitzthen 647fed1a49SMax Reitz _init_error "failed to source common.env (make sure the qemu-iotests are run from tests/qemu-iotests in the build tree)" 657fed1a49SMax Reitzfi 667fed1a49SMax Reitz 67e8f8624dSMax Reitz# we need common.config 68e8f8624dSMax Reitzif ! . "$source_iotests/common.config" 69e8f8624dSMax Reitzthen 70e8f8624dSMax Reitz _init_error "failed to source common.config" 716bf19c94SChristoph Hellwigfi 726bf19c94SChristoph Hellwig 7309d653e6SPaolo Bonzini_full_imgfmt_details() 7409d653e6SPaolo Bonzini{ 7509d653e6SPaolo Bonzini if [ -n "$IMGOPTS" ]; then 7609d653e6SPaolo Bonzini echo "$IMGFMT ($IMGOPTS)" 7709d653e6SPaolo Bonzini else 7809d653e6SPaolo Bonzini echo "$IMGFMT" 7909d653e6SPaolo Bonzini fi 8009d653e6SPaolo Bonzini} 8109d653e6SPaolo Bonzini 8209d653e6SPaolo Bonzini_full_platform_details() 8309d653e6SPaolo Bonzini{ 844a9e751fSMao Zhongyi os=$(uname -s) 854a9e751fSMao Zhongyi host=$(hostname -s) 864a9e751fSMao Zhongyi kernel=$(uname -r) 874a9e751fSMao Zhongyi platform=$(uname -m) 8809d653e6SPaolo Bonzini echo "$os/$platform $host $kernel" 8909d653e6SPaolo Bonzini} 9009d653e6SPaolo Bonzini 9109d653e6SPaolo Bonzini# $1 = prog to look for 9209d653e6SPaolo Bonziniset_prog_path() 9309d653e6SPaolo Bonzini{ 944a9e751fSMao Zhongyi p=$(command -v $1 2> /dev/null) 9509d653e6SPaolo Bonzini if [ -n "$p" -a -x "$p" ]; then 9663ca8406SEric Blake type -p "$p" 9709d653e6SPaolo Bonzini else 9809d653e6SPaolo Bonzini return 1 9909d653e6SPaolo Bonzini fi 10009d653e6SPaolo Bonzini} 10109d653e6SPaolo Bonzini 10209d653e6SPaolo Bonziniif [ -z "$TEST_DIR" ]; then 103e8d81a61SMao Zhongyi TEST_DIR=$PWD/scratch 10409d653e6SPaolo Bonzinifi 10509d653e6SPaolo Bonzini 10609d653e6SPaolo Bonziniif [ ! -e "$TEST_DIR" ]; then 10709d653e6SPaolo Bonzini mkdir "$TEST_DIR" 10809d653e6SPaolo Bonzinifi 10909d653e6SPaolo Bonzini 11009d653e6SPaolo Bonzinidiff="diff -u" 11109d653e6SPaolo Bonziniverbose=false 11209d653e6SPaolo Bonzinidebug=false 11309d653e6SPaolo Bonzinigroup=false 11409d653e6SPaolo Bonzinixgroup=false 11509d653e6SPaolo Bonziniimgopts=false 11609d653e6SPaolo Bonzinishowme=false 11709d653e6SPaolo Bonzinisortme=false 11809d653e6SPaolo Bonziniexpunge=true 11909d653e6SPaolo Bonzinihave_test_arg=false 12009d653e6SPaolo Bonzinicachemode=false 12109d653e6SPaolo Bonzini 12209d653e6SPaolo Bonzinitmp="${TEST_DIR}"/$$ 12309d653e6SPaolo Bonzinirm -f $tmp.list $tmp.tmp $tmp.sed 12409d653e6SPaolo Bonzini 12509d653e6SPaolo Bonziniexport IMGFMT=raw 12609d653e6SPaolo Bonziniexport IMGFMT_GENERIC=true 12709d653e6SPaolo Bonziniexport IMGPROTO=file 12809d653e6SPaolo Bonziniexport IMGOPTS="" 12909d653e6SPaolo Bonziniexport CACHEMODE="writeback" 13009d653e6SPaolo Bonziniexport QEMU_IO_OPTIONS="" 13109d653e6SPaolo Bonziniexport QEMU_IO_OPTIONS_NO_FMT="" 13209d653e6SPaolo Bonziniexport CACHEMODE_IS_DEFAULT=true 13309d653e6SPaolo Bonziniexport QEMU_OPTIONS="-nodefaults -machine accel=qtest" 13409d653e6SPaolo Bonziniexport VALGRIND_QEMU= 13509d653e6SPaolo Bonziniexport IMGKEYSECRET= 13609d653e6SPaolo Bonziniexport IMGOPTSSYNTAX=false 13709d653e6SPaolo Bonzini 1388803714bSEric Blake# Save current tty settings, since an aborting qemu call may leave things 1398803714bSEric Blake# screwed up 1408803714bSEric BlakeSTTY_RESTORE= 1418803714bSEric Blakeif test -t 0; then 1428803714bSEric Blake STTY_RESTORE=$(stty -g) 1438803714bSEric Blakefi 1448803714bSEric Blake 14509d653e6SPaolo Bonzinifor r 14609d653e6SPaolo Bonzinido 14709d653e6SPaolo Bonzini 14809d653e6SPaolo Bonzini if $group 14909d653e6SPaolo Bonzini then 15009d653e6SPaolo Bonzini # arg after -g 1514a9e751fSMao Zhongyi group_list=$(sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{ 15209d653e6SPaolo Bonzinis/ .*//p 1534a9e751fSMao Zhongyi}') 15409d653e6SPaolo Bonzini if [ -z "$group_list" ] 15509d653e6SPaolo Bonzini then 15609d653e6SPaolo Bonzini echo "Group \"$r\" is empty or not defined?" 15709d653e6SPaolo Bonzini exit 1 15809d653e6SPaolo Bonzini fi 15909d653e6SPaolo Bonzini [ ! -s $tmp.list ] && touch $tmp.list 16009d653e6SPaolo Bonzini for t in $group_list 16109d653e6SPaolo Bonzini do 16209d653e6SPaolo Bonzini if grep -s "^$t\$" $tmp.list >/dev/null 16309d653e6SPaolo Bonzini then 16409d653e6SPaolo Bonzini : 16509d653e6SPaolo Bonzini else 16609d653e6SPaolo Bonzini echo "$t" >>$tmp.list 16709d653e6SPaolo Bonzini fi 16809d653e6SPaolo Bonzini done 16909d653e6SPaolo Bonzini group=false 17009d653e6SPaolo Bonzini continue 17109d653e6SPaolo Bonzini 17209d653e6SPaolo Bonzini elif $xgroup 17309d653e6SPaolo Bonzini then 17409d653e6SPaolo Bonzini # arg after -x 17509d653e6SPaolo Bonzini # Populate $tmp.list with all tests 17609d653e6SPaolo Bonzini awk '/^[0-9]{3,}/ {print $1}' "${source_iotests}/group" > $tmp.list 2>/dev/null 1774a9e751fSMao Zhongyi group_list=$(sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{ 17809d653e6SPaolo Bonzinis/ .*//p 1794a9e751fSMao Zhongyi}') 18009d653e6SPaolo Bonzini if [ -z "$group_list" ] 18109d653e6SPaolo Bonzini then 18209d653e6SPaolo Bonzini echo "Group \"$r\" is empty or not defined?" 18309d653e6SPaolo Bonzini exit 1 18409d653e6SPaolo Bonzini fi 18509d653e6SPaolo Bonzini numsed=0 18609d653e6SPaolo Bonzini rm -f $tmp.sed 18709d653e6SPaolo Bonzini for t in $group_list 18809d653e6SPaolo Bonzini do 18909d653e6SPaolo Bonzini if [ $numsed -gt 100 ] 19009d653e6SPaolo Bonzini then 19109d653e6SPaolo Bonzini sed -f $tmp.sed <$tmp.list >$tmp.tmp 19209d653e6SPaolo Bonzini mv $tmp.tmp $tmp.list 19309d653e6SPaolo Bonzini numsed=0 19409d653e6SPaolo Bonzini rm -f $tmp.sed 19509d653e6SPaolo Bonzini fi 19609d653e6SPaolo Bonzini echo "/^$t\$/d" >>$tmp.sed 1974a9e751fSMao Zhongyi numsed=$(expr $numsed + 1) 19809d653e6SPaolo Bonzini done 19909d653e6SPaolo Bonzini sed -f $tmp.sed <$tmp.list >$tmp.tmp 20009d653e6SPaolo Bonzini mv $tmp.tmp $tmp.list 20109d653e6SPaolo Bonzini xgroup=false 20209d653e6SPaolo Bonzini continue 20309d653e6SPaolo Bonzini 20409d653e6SPaolo Bonzini elif $imgopts 20509d653e6SPaolo Bonzini then 20609d653e6SPaolo Bonzini IMGOPTS="$r" 20709d653e6SPaolo Bonzini imgopts=false 20809d653e6SPaolo Bonzini continue 20909d653e6SPaolo Bonzini elif $cachemode 21009d653e6SPaolo Bonzini then 21109d653e6SPaolo Bonzini CACHEMODE="$r" 21209d653e6SPaolo Bonzini CACHEMODE_IS_DEFAULT=false 21309d653e6SPaolo Bonzini cachemode=false 21409d653e6SPaolo Bonzini continue 21509d653e6SPaolo Bonzini fi 21609d653e6SPaolo Bonzini 21709d653e6SPaolo Bonzini xpand=true 21809d653e6SPaolo Bonzini case "$r" 21909d653e6SPaolo Bonzini in 22009d653e6SPaolo Bonzini 22109d653e6SPaolo Bonzini -\? | -h | --help) # usage 22209d653e6SPaolo Bonzini echo "Usage: $0 [options] [testlist]"' 22309d653e6SPaolo Bonzini 22409d653e6SPaolo Bonzinicommon options 22509d653e6SPaolo Bonzini -v verbose 22609d653e6SPaolo Bonzini -d debug 22709d653e6SPaolo Bonzini 22809d653e6SPaolo Bonziniimage format options 22909d653e6SPaolo Bonzini -raw test raw (default) 23009d653e6SPaolo Bonzini -bochs test bochs 23109d653e6SPaolo Bonzini -cloop test cloop 23209d653e6SPaolo Bonzini -parallels test parallels 23309d653e6SPaolo Bonzini -qcow test qcow 23409d653e6SPaolo Bonzini -qcow2 test qcow2 23509d653e6SPaolo Bonzini -qed test qed 23609d653e6SPaolo Bonzini -vdi test vdi 23709d653e6SPaolo Bonzini -vpc test vpc 23809d653e6SPaolo Bonzini -vhdx test vhdx 23909d653e6SPaolo Bonzini -vmdk test vmdk 24009d653e6SPaolo Bonzini -luks test luks 24176f1cf0aSyuchenlin -dmg test dmg 24209d653e6SPaolo Bonzini 24309d653e6SPaolo Bonziniimage protocol options 24409d653e6SPaolo Bonzini -file test file (default) 24509d653e6SPaolo Bonzini -rbd test rbd 24609d653e6SPaolo Bonzini -sheepdog test sheepdog 24709d653e6SPaolo Bonzini -nbd test nbd 24809d653e6SPaolo Bonzini -ssh test ssh 24909d653e6SPaolo Bonzini -nfs test nfs 25009d653e6SPaolo Bonzini -vxhs test vxhs 25109d653e6SPaolo Bonzini 25209d653e6SPaolo Bonziniother options 25309d653e6SPaolo Bonzini -xdiff graphical mode diff 25409d653e6SPaolo Bonzini -nocache use O_DIRECT on backing file 25509d653e6SPaolo Bonzini -misalign misalign memory allocations 25609d653e6SPaolo Bonzini -n show me, do not run tests 25709d653e6SPaolo Bonzini -o options -o options to pass to qemu-img create/convert 25809d653e6SPaolo Bonzini -T output timestamps 25909d653e6SPaolo Bonzini -c mode cache mode 26009d653e6SPaolo Bonzini 26109d653e6SPaolo Bonzinitestlist options 26209d653e6SPaolo Bonzini -g group[,group...] include tests from these groups 26309d653e6SPaolo Bonzini -x group[,group...] exclude tests from these groups 26409d653e6SPaolo Bonzini NNN include test NNN 26509d653e6SPaolo Bonzini NNN-NNN include test range (eg. 012-021) 26609d653e6SPaolo Bonzini' 26709d653e6SPaolo Bonzini exit 0 26809d653e6SPaolo Bonzini ;; 26909d653e6SPaolo Bonzini 27009d653e6SPaolo Bonzini -raw) 27109d653e6SPaolo Bonzini IMGFMT=raw 27209d653e6SPaolo Bonzini xpand=false 27309d653e6SPaolo Bonzini ;; 27409d653e6SPaolo Bonzini 27509d653e6SPaolo Bonzini -bochs) 27609d653e6SPaolo Bonzini IMGFMT=bochs 27709d653e6SPaolo Bonzini IMGFMT_GENERIC=false 27809d653e6SPaolo Bonzini xpand=false 27909d653e6SPaolo Bonzini ;; 28009d653e6SPaolo Bonzini 28109d653e6SPaolo Bonzini -cloop) 28209d653e6SPaolo Bonzini IMGFMT=cloop 28309d653e6SPaolo Bonzini IMGFMT_GENERIC=false 28409d653e6SPaolo Bonzini xpand=false 28509d653e6SPaolo Bonzini ;; 28609d653e6SPaolo Bonzini 28709d653e6SPaolo Bonzini -parallels) 28809d653e6SPaolo Bonzini IMGFMT=parallels 28909d653e6SPaolo Bonzini xpand=false 29009d653e6SPaolo Bonzini ;; 29109d653e6SPaolo Bonzini 29209d653e6SPaolo Bonzini -qcow) 29309d653e6SPaolo Bonzini IMGFMT=qcow 29409d653e6SPaolo Bonzini xpand=false 29509d653e6SPaolo Bonzini ;; 29609d653e6SPaolo Bonzini 29709d653e6SPaolo Bonzini -qcow2) 29809d653e6SPaolo Bonzini IMGFMT=qcow2 29909d653e6SPaolo Bonzini xpand=false 30009d653e6SPaolo Bonzini ;; 30109d653e6SPaolo Bonzini 30209d653e6SPaolo Bonzini -luks) 30309d653e6SPaolo Bonzini IMGOPTSSYNTAX=true 30409d653e6SPaolo Bonzini IMGFMT=luks 30509d653e6SPaolo Bonzini IMGKEYSECRET=123456 30609d653e6SPaolo Bonzini xpand=false 30709d653e6SPaolo Bonzini ;; 30809d653e6SPaolo Bonzini 30976f1cf0aSyuchenlin -dmg) 31076f1cf0aSyuchenlin IMGFMT=dmg 31176f1cf0aSyuchenlin IMGFMT_GENERIC=false 31276f1cf0aSyuchenlin xpand=false 31376f1cf0aSyuchenlin ;; 31476f1cf0aSyuchenlin 31509d653e6SPaolo Bonzini -qed) 31609d653e6SPaolo Bonzini IMGFMT=qed 31709d653e6SPaolo Bonzini xpand=false 31809d653e6SPaolo Bonzini ;; 31909d653e6SPaolo Bonzini 32009d653e6SPaolo Bonzini -vdi) 32109d653e6SPaolo Bonzini IMGFMT=vdi 32209d653e6SPaolo Bonzini xpand=false 32309d653e6SPaolo Bonzini ;; 32409d653e6SPaolo Bonzini 32509d653e6SPaolo Bonzini -vmdk) 32609d653e6SPaolo Bonzini IMGFMT=vmdk 32709d653e6SPaolo Bonzini xpand=false 32809d653e6SPaolo Bonzini ;; 32909d653e6SPaolo Bonzini 33009d653e6SPaolo Bonzini -vpc) 33109d653e6SPaolo Bonzini IMGFMT=vpc 33209d653e6SPaolo Bonzini xpand=false 33309d653e6SPaolo Bonzini ;; 33409d653e6SPaolo Bonzini 33509d653e6SPaolo Bonzini -vhdx) 33609d653e6SPaolo Bonzini IMGFMT=vhdx 33709d653e6SPaolo Bonzini xpand=false 33809d653e6SPaolo Bonzini ;; 33909d653e6SPaolo Bonzini 34009d653e6SPaolo Bonzini -file) 34109d653e6SPaolo Bonzini IMGPROTO=file 34209d653e6SPaolo Bonzini xpand=false 34309d653e6SPaolo Bonzini ;; 34409d653e6SPaolo Bonzini 34509d653e6SPaolo Bonzini -rbd) 34609d653e6SPaolo Bonzini IMGPROTO=rbd 34709d653e6SPaolo Bonzini xpand=false 34809d653e6SPaolo Bonzini ;; 34909d653e6SPaolo Bonzini 35009d653e6SPaolo Bonzini -sheepdog) 35109d653e6SPaolo Bonzini IMGPROTO=sheepdog 35209d653e6SPaolo Bonzini xpand=false 35309d653e6SPaolo Bonzini ;; 35409d653e6SPaolo Bonzini 35509d653e6SPaolo Bonzini -nbd) 35609d653e6SPaolo Bonzini IMGPROTO=nbd 35709d653e6SPaolo Bonzini xpand=false 35809d653e6SPaolo Bonzini ;; 35909d653e6SPaolo Bonzini 36009d653e6SPaolo Bonzini -vxhs) 36109d653e6SPaolo Bonzini IMGPROTO=vxhs 36209d653e6SPaolo Bonzini xpand=false 36309d653e6SPaolo Bonzini ;; 36409d653e6SPaolo Bonzini 36509d653e6SPaolo Bonzini -ssh) 36609d653e6SPaolo Bonzini IMGPROTO=ssh 36709d653e6SPaolo Bonzini xpand=false 36809d653e6SPaolo Bonzini ;; 36909d653e6SPaolo Bonzini 37009d653e6SPaolo Bonzini -nfs) 37109d653e6SPaolo Bonzini IMGPROTO=nfs 37209d653e6SPaolo Bonzini xpand=false 37309d653e6SPaolo Bonzini ;; 37409d653e6SPaolo Bonzini 37509d653e6SPaolo Bonzini -nocache) 37609d653e6SPaolo Bonzini CACHEMODE="none" 37709d653e6SPaolo Bonzini CACHEMODE_IS_DEFAULT=false 37809d653e6SPaolo Bonzini xpand=false 37909d653e6SPaolo Bonzini ;; 38009d653e6SPaolo Bonzini 38109d653e6SPaolo Bonzini -misalign) 38209d653e6SPaolo Bonzini QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --misalign" 38309d653e6SPaolo Bonzini xpand=false 38409d653e6SPaolo Bonzini ;; 38509d653e6SPaolo Bonzini 38609d653e6SPaolo Bonzini -valgrind) 38709d653e6SPaolo Bonzini VALGRIND_QEMU='y' 38809d653e6SPaolo Bonzini xpand=false 38909d653e6SPaolo Bonzini ;; 39009d653e6SPaolo Bonzini 39109d653e6SPaolo Bonzini -g) # -g group ... pick from group file 39209d653e6SPaolo Bonzini group=true 39309d653e6SPaolo Bonzini xpand=false 39409d653e6SPaolo Bonzini ;; 39509d653e6SPaolo Bonzini 39609d653e6SPaolo Bonzini -xdiff) # graphical diff mode 39709d653e6SPaolo Bonzini xpand=false 39809d653e6SPaolo Bonzini 39909d653e6SPaolo Bonzini if [ ! -z "$DISPLAY" ] 40009d653e6SPaolo Bonzini then 40109d653e6SPaolo Bonzini command -v xdiff >/dev/null 2>&1 && diff=xdiff 40209d653e6SPaolo Bonzini command -v gdiff >/dev/null 2>&1 && diff=gdiff 40309d653e6SPaolo Bonzini command -v tkdiff >/dev/null 2>&1 && diff=tkdiff 40409d653e6SPaolo Bonzini command -v xxdiff >/dev/null 2>&1 && diff=xxdiff 40509d653e6SPaolo Bonzini fi 40609d653e6SPaolo Bonzini ;; 40709d653e6SPaolo Bonzini 40809d653e6SPaolo Bonzini -n) # show me, don't do it 40909d653e6SPaolo Bonzini showme=true 41009d653e6SPaolo Bonzini xpand=false 41109d653e6SPaolo Bonzini ;; 41209d653e6SPaolo Bonzini -o) 41309d653e6SPaolo Bonzini imgopts=true 41409d653e6SPaolo Bonzini xpand=false 41509d653e6SPaolo Bonzini ;; 41609d653e6SPaolo Bonzini -c) 41709d653e6SPaolo Bonzini cachemode=true 41809d653e6SPaolo Bonzini xpand=false 41909d653e6SPaolo Bonzini ;; 42009d653e6SPaolo Bonzini -T) # turn on timestamp output 42109d653e6SPaolo Bonzini timestamp=true 42209d653e6SPaolo Bonzini xpand=false 42309d653e6SPaolo Bonzini ;; 42409d653e6SPaolo Bonzini 42509d653e6SPaolo Bonzini -v) 42609d653e6SPaolo Bonzini verbose=true 42709d653e6SPaolo Bonzini xpand=false 42809d653e6SPaolo Bonzini ;; 42909d653e6SPaolo Bonzini -d) 43009d653e6SPaolo Bonzini debug=true 43109d653e6SPaolo Bonzini xpand=false 43209d653e6SPaolo Bonzini ;; 43309d653e6SPaolo Bonzini -x) # -x group ... exclude from group file 43409d653e6SPaolo Bonzini xgroup=true 43509d653e6SPaolo Bonzini xpand=false 43609d653e6SPaolo Bonzini ;; 43709d653e6SPaolo Bonzini '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]') 43809d653e6SPaolo Bonzini echo "No tests?" 43909d653e6SPaolo Bonzini status=1 44009d653e6SPaolo Bonzini exit $status 44109d653e6SPaolo Bonzini ;; 44209d653e6SPaolo Bonzini 44309d653e6SPaolo Bonzini [0-9]*-[0-9]*) 4444a9e751fSMao Zhongyi eval $(echo $r | sed -e 's/^/start=/' -e 's/-/ end=/') 44509d653e6SPaolo Bonzini ;; 44609d653e6SPaolo Bonzini 44709d653e6SPaolo Bonzini [0-9]*-) 4484a9e751fSMao Zhongyi eval $(echo $r | sed -e 's/^/start=/' -e 's/-//') 4494a9e751fSMao Zhongyi end=$(echo [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] | sed -e 's/\[0-9]//g' -e 's/ *$//' -e 's/.* //') 45009d653e6SPaolo Bonzini if [ -z "$end" ] 45109d653e6SPaolo Bonzini then 45209d653e6SPaolo Bonzini echo "No tests in range \"$r\"?" 45309d653e6SPaolo Bonzini status=1 45409d653e6SPaolo Bonzini exit $status 45509d653e6SPaolo Bonzini fi 45609d653e6SPaolo Bonzini ;; 45709d653e6SPaolo Bonzini 45809d653e6SPaolo Bonzini *) 45909d653e6SPaolo Bonzini start=$r 46009d653e6SPaolo Bonzini end=$r 46109d653e6SPaolo Bonzini ;; 46209d653e6SPaolo Bonzini 46309d653e6SPaolo Bonzini esac 46409d653e6SPaolo Bonzini 46509d653e6SPaolo Bonzini # get rid of leading 0s as can be interpreted as octal 4664a9e751fSMao Zhongyi start=$(echo $start | sed 's/^0*//') 4674a9e751fSMao Zhongyi end=$(echo $end | sed 's/^0*//') 46809d653e6SPaolo Bonzini 46909d653e6SPaolo Bonzini if $xpand 47009d653e6SPaolo Bonzini then 47109d653e6SPaolo Bonzini have_test_arg=true 47209d653e6SPaolo Bonzini awk </dev/null ' 47309d653e6SPaolo BonziniBEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \ 47409d653e6SPaolo Bonzini | while read id 47509d653e6SPaolo Bonzini do 47609d653e6SPaolo Bonzini if grep -s "^$id " "$source_iotests/group" >/dev/null 47709d653e6SPaolo Bonzini then 47809d653e6SPaolo Bonzini # in group file ... OK 47909d653e6SPaolo Bonzini echo $id >>$tmp.list 48009d653e6SPaolo Bonzini else 48109d653e6SPaolo Bonzini if [ -f expunged ] && $expunge && egrep "^$id([ ]|\$)" expunged >/dev/null 48209d653e6SPaolo Bonzini then 48309d653e6SPaolo Bonzini # expunged ... will be reported, but not run, later 48409d653e6SPaolo Bonzini echo $id >>$tmp.list 48509d653e6SPaolo Bonzini else 48609d653e6SPaolo Bonzini # oops 48709d653e6SPaolo Bonzini if [ "$start" == "$end" -a "$id" == "$end" ] 48809d653e6SPaolo Bonzini then 48909d653e6SPaolo Bonzini echo "$id - unknown test" 49009d653e6SPaolo Bonzini exit 1 49109d653e6SPaolo Bonzini else 49209d653e6SPaolo Bonzini echo "$id - unknown test, ignored" 49309d653e6SPaolo Bonzini fi 49409d653e6SPaolo Bonzini fi 49509d653e6SPaolo Bonzini fi 49609d653e6SPaolo Bonzini done || exit 1 49709d653e6SPaolo Bonzini fi 49809d653e6SPaolo Bonzini 49909d653e6SPaolo Bonzinidone 50009d653e6SPaolo Bonzini 50109d653e6SPaolo Bonzini# Set qemu-io cache mode with $CACHEMODE we have 50209d653e6SPaolo BonziniQEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --cache $CACHEMODE" 50309d653e6SPaolo Bonzini 50409d653e6SPaolo BonziniQEMU_IO_OPTIONS_NO_FMT="$QEMU_IO_OPTIONS" 50509d653e6SPaolo Bonziniif [ "$IMGOPTSSYNTAX" != "true" ]; then 50609d653e6SPaolo Bonzini QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS -f $IMGFMT" 50709d653e6SPaolo Bonzinifi 50809d653e6SPaolo Bonzini 50909d653e6SPaolo Bonzini# Set default options for qemu-img create -o if they were not specified 51009d653e6SPaolo Bonziniif [ "$IMGFMT" == "qcow2" ] && ! (echo "$IMGOPTS" | grep "compat=" > /dev/null); then 51109d653e6SPaolo Bonzini IMGOPTS=$(_optstr_add "$IMGOPTS" "compat=1.1") 51209d653e6SPaolo Bonzinifi 51309d653e6SPaolo Bonziniif [ "$IMGFMT" == "luks" ] && ! (echo "$IMGOPTS" | grep "iter-time=" > /dev/null); then 51409d653e6SPaolo Bonzini IMGOPTS=$(_optstr_add "$IMGOPTS" "iter-time=10") 51509d653e6SPaolo Bonzinifi 51609d653e6SPaolo Bonzini 51709d653e6SPaolo Bonziniif [ -z "$SAMPLE_IMG_DIR" ]; then 51809d653e6SPaolo Bonzini SAMPLE_IMG_DIR="$source_iotests/sample_images" 51909d653e6SPaolo Bonzinifi 52009d653e6SPaolo Bonzini 52109d653e6SPaolo Bonziniexport TEST_DIR 52209d653e6SPaolo Bonziniexport SAMPLE_IMG_DIR 52309d653e6SPaolo Bonzini 52409d653e6SPaolo Bonziniif [ -s $tmp.list ] 52509d653e6SPaolo Bonzinithen 52609d653e6SPaolo Bonzini # found some valid test numbers ... this is good 52709d653e6SPaolo Bonzini : 52809d653e6SPaolo Bonzinielse 52909d653e6SPaolo Bonzini if $have_test_arg 53009d653e6SPaolo Bonzini then 53109d653e6SPaolo Bonzini # had test numbers, but none in group file ... do nothing 53209d653e6SPaolo Bonzini touch $tmp.list 53309d653e6SPaolo Bonzini else 53409d653e6SPaolo Bonzini # no test numbers, do everything from group file 53509d653e6SPaolo Bonzini sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' <"$source_iotests/group" >$tmp.list 53609d653e6SPaolo Bonzini fi 53709d653e6SPaolo Bonzinifi 53809d653e6SPaolo Bonzini 53909d653e6SPaolo Bonzini# should be sort -n, but this did not work for Linux when this 54009d653e6SPaolo Bonzini# was ported from IRIX 54109d653e6SPaolo Bonzini# 5424a9e751fSMao Zhongyilist=$(sort $tmp.list) 54309d653e6SPaolo Bonzinirm -f $tmp.list $tmp.tmp $tmp.sed 54409d653e6SPaolo Bonzini 54509d653e6SPaolo Bonziniif [ -z "$QEMU_PROG" ] 54609d653e6SPaolo Bonzinithen 54709d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu" ]; then 54809d653e6SPaolo Bonzini export QEMU_PROG="$build_iotests/qemu" 54996914159SLukáš Doktor elif [ -x "$build_root/${qemu_arch}-softmmu/qemu-system-${qemu_arch}" ]; then 55096914159SLukáš Doktor export QEMU_PROG="$build_root/${qemu_arch}-softmmu/qemu-system-${qemu_arch}" 55109d653e6SPaolo Bonzini else 55209d653e6SPaolo Bonzini pushd "$build_root" > /dev/null 55309d653e6SPaolo Bonzini for binary in *-softmmu/qemu-system-* 55409d653e6SPaolo Bonzini do 55509d653e6SPaolo Bonzini if [ -x "$binary" ] 55609d653e6SPaolo Bonzini then 55709d653e6SPaolo Bonzini export QEMU_PROG="$build_root/$binary" 55809d653e6SPaolo Bonzini break 55909d653e6SPaolo Bonzini fi 56009d653e6SPaolo Bonzini done 56109d653e6SPaolo Bonzini popd > /dev/null 56209d653e6SPaolo Bonzini [ "$QEMU_PROG" = "" ] && _init_error "qemu not found" 56309d653e6SPaolo Bonzini fi 56409d653e6SPaolo Bonzinifi 56563ca8406SEric Blakeexport QEMU_PROG="$(type -p "$QEMU_PROG")" 56609d653e6SPaolo Bonzini 56709d653e6SPaolo Bonziniif [ -z "$QEMU_IMG_PROG" ]; then 56809d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-img" ]; then 56909d653e6SPaolo Bonzini export QEMU_IMG_PROG="$build_iotests/qemu-img" 57009d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-img" ]; then 57109d653e6SPaolo Bonzini export QEMU_IMG_PROG="$build_root/qemu-img" 57209d653e6SPaolo Bonzini else 57309d653e6SPaolo Bonzini _init_error "qemu-img not found" 57409d653e6SPaolo Bonzini fi 57509d653e6SPaolo Bonzinifi 57663ca8406SEric Blakeexport QEMU_IMG_PROG="$(type -p "$QEMU_IMG_PROG")" 57709d653e6SPaolo Bonzini 57809d653e6SPaolo Bonziniif [ -z "$QEMU_IO_PROG" ]; then 57909d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-io" ]; then 58009d653e6SPaolo Bonzini export QEMU_IO_PROG="$build_iotests/qemu-io" 58109d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-io" ]; then 58209d653e6SPaolo Bonzini export QEMU_IO_PROG="$build_root/qemu-io" 58309d653e6SPaolo Bonzini else 58409d653e6SPaolo Bonzini _init_error "qemu-io not found" 58509d653e6SPaolo Bonzini fi 58609d653e6SPaolo Bonzinifi 58763ca8406SEric Blakeexport QEMU_IO_PROG="$(type -p "$QEMU_IO_PROG")" 58809d653e6SPaolo Bonzini 58909d653e6SPaolo Bonziniif [ -z $QEMU_NBD_PROG ]; then 59009d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-nbd" ]; then 59109d653e6SPaolo Bonzini export QEMU_NBD_PROG="$build_iotests/qemu-nbd" 59209d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-nbd" ]; then 59309d653e6SPaolo Bonzini export QEMU_NBD_PROG="$build_root/qemu-nbd" 59409d653e6SPaolo Bonzini else 59509d653e6SPaolo Bonzini _init_error "qemu-nbd not found" 59609d653e6SPaolo Bonzini fi 59709d653e6SPaolo Bonzinifi 59863ca8406SEric Blakeexport QEMU_NBD_PROG="$(type -p "$QEMU_NBD_PROG")" 59909d653e6SPaolo Bonzini 60009d653e6SPaolo Bonziniif [ -z "$QEMU_VXHS_PROG" ]; then 6014a9e751fSMao Zhongyi export QEMU_VXHS_PROG="$(set_prog_path qnio_server)" 60209d653e6SPaolo Bonzinifi 60309d653e6SPaolo Bonzini 60409d653e6SPaolo Bonziniif [ -x "$build_iotests/socket_scm_helper" ] 60509d653e6SPaolo Bonzinithen 60609d653e6SPaolo Bonzini export SOCKET_SCM_HELPER="$build_iotests/socket_scm_helper" 60709d653e6SPaolo Bonzinifi 60809d653e6SPaolo Bonzini 60909d653e6SPaolo Bonzinidefault_machine=$($QEMU_PROG -machine help | sed -n '/(default)/ s/ .*//p') 61009d653e6SPaolo Bonzinidefault_alias_machine=$($QEMU_PROG -machine help | \ 61109d653e6SPaolo Bonzini sed -n "/(alias of $default_machine)/ { s/ .*//p; q; }") 61209d653e6SPaolo Bonziniif [[ "$default_alias_machine" ]]; then 61309d653e6SPaolo Bonzini default_machine="$default_alias_machine" 61409d653e6SPaolo Bonzinifi 61509d653e6SPaolo Bonzini 61609d653e6SPaolo Bonziniexport QEMU_DEFAULT_MACHINE="$default_machine" 61789004368SKevin Wolf 61836bd4228SDaniel P. BerrangeTIMESTAMP_FILE=check.time-$IMGPROTO-$IMGFMT 61936bd4228SDaniel P. Berrange 6206bf19c94SChristoph Hellwig_wallclock() 6216bf19c94SChristoph Hellwig{ 6229ee4b6f8SPaolo Bonzini date "+%H %M %S" | awk '{ print $1*3600 + $2*60 + $3 }' 6236bf19c94SChristoph Hellwig} 6246bf19c94SChristoph Hellwig 6256bf19c94SChristoph Hellwig_timestamp() 6266bf19c94SChristoph Hellwig{ 6274a9e751fSMao Zhongyi now=$(date "+%T") 628b43671f8SEric Blake printf %s " [$now]" 6296bf19c94SChristoph Hellwig} 6306bf19c94SChristoph Hellwig 6316bf19c94SChristoph Hellwig_wrapup() 6326bf19c94SChristoph Hellwig{ 6336bf19c94SChristoph Hellwig if $showme 6346bf19c94SChristoph Hellwig then 6356bf19c94SChristoph Hellwig : 6366bf19c94SChristoph Hellwig elif $needwrap 6376bf19c94SChristoph Hellwig then 63836bd4228SDaniel P. Berrange if [ -f $TIMESTAMP_FILE -a -f $tmp.time ] 6396bf19c94SChristoph Hellwig then 64036bd4228SDaniel P. Berrange cat $TIMESTAMP_FILE $tmp.time \ 6419ee4b6f8SPaolo Bonzini | awk ' 6426bf19c94SChristoph Hellwig { t[$1] = $2 } 6436bf19c94SChristoph HellwigEND { if (NR > 0) { 6446bf19c94SChristoph Hellwig for (i in t) print i " " t[i] 6456bf19c94SChristoph Hellwig } 6466bf19c94SChristoph Hellwig }' \ 6476bf19c94SChristoph Hellwig | sort -n >$tmp.out 64836bd4228SDaniel P. Berrange mv $tmp.out $TIMESTAMP_FILE 6496bf19c94SChristoph Hellwig fi 6506bf19c94SChristoph Hellwig 6516bf19c94SChristoph Hellwig if [ -f $tmp.expunged ] 6526bf19c94SChristoph Hellwig then 6534a9e751fSMao Zhongyi notrun=$(wc -l <$tmp.expunged | sed -e 's/ *//g') 6544a9e751fSMao Zhongyi try=$(expr $try - $notrun) 6554a9e751fSMao Zhongyi list=$(echo "$list" | sed -f $tmp.expunged) 6566bf19c94SChristoph Hellwig fi 6576bf19c94SChristoph Hellwig 6586bf19c94SChristoph Hellwig echo "" >>check.log 6596bf19c94SChristoph Hellwig date >>check.log 6606bf19c94SChristoph Hellwig echo $list | fmt | sed -e 's/^/ /' >>check.log 6616bf19c94SChristoph Hellwig $interrupt && echo "Interrupted!" >>check.log 6626bf19c94SChristoph Hellwig 6636bf19c94SChristoph Hellwig if [ ! -z "$notrun" ] 6646bf19c94SChristoph Hellwig then 6656bf19c94SChristoph Hellwig echo "Not run:$notrun" 6666bf19c94SChristoph Hellwig echo "Not run:$notrun" >>check.log 6676bf19c94SChristoph Hellwig fi 66857ed557fSAndrey Shinkevich if [ ! -z "$casenotrun" ] 66957ed557fSAndrey Shinkevich then 67057ed557fSAndrey Shinkevich echo "Some cases not run in:$casenotrun" 67157ed557fSAndrey Shinkevich echo "Some cases not run in:$casenotrun" >>check.log 67257ed557fSAndrey Shinkevich fi 6736bf19c94SChristoph Hellwig if [ ! -z "$n_bad" -a $n_bad != 0 ] 6746bf19c94SChristoph Hellwig then 6756bf19c94SChristoph Hellwig echo "Failures:$bad" 6766bf19c94SChristoph Hellwig echo "Failed $n_bad of $try tests" 6776bf19c94SChristoph Hellwig echo "Failures:$bad" | fmt >>check.log 6786bf19c94SChristoph Hellwig echo "Failed $n_bad of $try tests" >>check.log 6796bf19c94SChristoph Hellwig else 6806bf19c94SChristoph Hellwig echo "Passed all $try tests" 6816bf19c94SChristoph Hellwig echo "Passed all $try tests" >>check.log 6826bf19c94SChristoph Hellwig fi 6836bf19c94SChristoph Hellwig needwrap=false 6846bf19c94SChristoph Hellwig fi 6856bf19c94SChristoph Hellwig 6868803714bSEric Blake if test -n "$STTY_RESTORE"; then 6878803714bSEric Blake stty $STTY_RESTORE 6888803714bSEric Blake fi 6890145b4e1SSascha Silbe rm -f "${TEST_DIR}"/*.out "${TEST_DIR}"/*.err "${TEST_DIR}"/*.time 6900145b4e1SSascha Silbe rm -f "${TEST_DIR}"/check.pid "${TEST_DIR}"/check.sts 6916bf19c94SChristoph Hellwig rm -f $tmp.* 6926bf19c94SChristoph Hellwig} 6936bf19c94SChristoph Hellwig 6946bf19c94SChristoph Hellwigtrap "_wrapup; exit \$status" 0 1 2 3 15 6956bf19c94SChristoph Hellwig 69636bd4228SDaniel P. Berrange[ -f $TIMESTAMP_FILE ] || touch $TIMESTAMP_FILE 6976bf19c94SChristoph Hellwig 6984a9e751fSMao ZhongyiFULL_IMGFMT_DETAILS=$(_full_imgfmt_details) 6994a9e751fSMao ZhongyiFULL_HOST_DETAILS=$(_full_platform_details) 7006bf19c94SChristoph Hellwig 7016bf19c94SChristoph Hellwigcat <<EOF 702934659c4SMax ReitzQEMU -- "$QEMU_PROG" $QEMU_OPTIONS 703934659c4SMax ReitzQEMU_IMG -- "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS 704934659c4SMax ReitzQEMU_IO -- "$QEMU_IO_PROG" $QEMU_IO_OPTIONS 705934659c4SMax ReitzQEMU_NBD -- "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS 7066bf19c94SChristoph HellwigIMGFMT -- $FULL_IMGFMT_DETAILS 707657c572aSCleber RosaIMGPROTO -- $IMGPROTO 7086bf19c94SChristoph HellwigPLATFORM -- $FULL_HOST_DETAILS 709b8aff7d6SFam ZhengTEST_DIR -- $TEST_DIR 71030b005d9SWenchao XiaSOCKET_SCM_HELPER -- $SOCKET_SCM_HELPER 7116bf19c94SChristoph Hellwig 7126bf19c94SChristoph HellwigEOF 7136bf19c94SChristoph Hellwig 7146bf19c94SChristoph Hellwigseq="check" 7156bf19c94SChristoph Hellwig 7166bf19c94SChristoph Hellwig[ -n "$TESTS_REMAINING_LOG" ] && echo $list > $TESTS_REMAINING_LOG 7176bf19c94SChristoph Hellwig 7186bf19c94SChristoph Hellwigfor seq in $list 7196bf19c94SChristoph Hellwigdo 7206bf19c94SChristoph Hellwig err=false 721b43671f8SEric Blake printf %s "$seq" 7226bf19c94SChristoph Hellwig if [ -n "$TESTS_REMAINING_LOG" ] ; then 7236bf19c94SChristoph Hellwig sed -e "s/$seq//" -e 's/ / /' -e 's/^ *//' $TESTS_REMAINING_LOG > $TESTS_REMAINING_LOG.tmp 7246bf19c94SChristoph Hellwig mv $TESTS_REMAINING_LOG.tmp $TESTS_REMAINING_LOG 7256bf19c94SChristoph Hellwig sync 7266bf19c94SChristoph Hellwig fi 7276bf19c94SChristoph Hellwig 7286bf19c94SChristoph Hellwig if $showme 7296bf19c94SChristoph Hellwig then 7306bf19c94SChristoph Hellwig echo 7316bf19c94SChristoph Hellwig continue 7326bf19c94SChristoph Hellwig elif [ -f expunged ] && $expunge && egrep "^$seq([ ]|\$)" expunged >/dev/null 7336bf19c94SChristoph Hellwig then 7346bf19c94SChristoph Hellwig echo " - expunged" 7356bf19c94SChristoph Hellwig rm -f $seq.out.bad 7366bf19c94SChristoph Hellwig echo "/^$seq\$/d" >>$tmp.expunged 737e8f8624dSMax Reitz elif [ ! -f "$source_iotests/$seq" ] 7386bf19c94SChristoph Hellwig then 7396bf19c94SChristoph Hellwig echo " - no such test?" 7406bf19c94SChristoph Hellwig echo "/^$seq\$/d" >>$tmp.expunged 7416bf19c94SChristoph Hellwig else 7426bf19c94SChristoph Hellwig # really going to try and run this one 7436bf19c94SChristoph Hellwig # 7446bf19c94SChristoph Hellwig rm -f $seq.out.bad 7454a9e751fSMao Zhongyi lasttime=$(sed -n -e "/^$seq /s/.* //p" <$TIMESTAMP_FILE) 7466bf19c94SChristoph Hellwig if [ "X$lasttime" != X ]; then 747b43671f8SEric Blake printf %s " ${lasttime}s ..." 7486bf19c94SChristoph Hellwig else 749b43671f8SEric Blake printf " " # prettier output with timestamps. 7506bf19c94SChristoph Hellwig fi 7516bf19c94SChristoph Hellwig rm -f core $seq.notrun 75257ed557fSAndrey Shinkevich rm -f $seq.casenotrun 7536bf19c94SChristoph Hellwig 7544a9e751fSMao Zhongyi start=$(_wallclock) 755b43671f8SEric Blake $timestamp && printf %s " [$(date "+%T")]" 756ea81ca9dSMax Reitz 757ea81ca9dSMax Reitz if [ "$(head -n 1 "$source_iotests/$seq")" == "#!/usr/bin/env python" ]; then 758ea81ca9dSMax Reitz run_command="$PYTHON $seq" 759ea81ca9dSMax Reitz else 760ea81ca9dSMax Reitz run_command="./$seq" 761ea81ca9dSMax Reitz fi 762e8f8624dSMax Reitz export OUTPUT_DIR=$PWD 763aa4f592aSFam Zheng if $debug; then 764aa4f592aSFam Zheng (cd "$source_iotests"; 765aa4f592aSFam Zheng MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ 766aa4f592aSFam Zheng $run_command -d 2>&1 | tee $tmp.out) 767aa4f592aSFam Zheng else 768e8f8624dSMax Reitz (cd "$source_iotests"; 76904129606SStefan Hajnoczi MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ 770ea81ca9dSMax Reitz $run_command >$tmp.out 2>&1) 771aa4f592aSFam Zheng fi 7726bf19c94SChristoph Hellwig sts=$? 7736bf19c94SChristoph Hellwig $timestamp && _timestamp 7744a9e751fSMao Zhongyi stop=$(_wallclock) 7756bf19c94SChristoph Hellwig 7766bf19c94SChristoph Hellwig if [ -f core ] 7776bf19c94SChristoph Hellwig then 778b43671f8SEric Blake printf " [dumped core]" 7796bf19c94SChristoph Hellwig mv core $seq.core 7806bf19c94SChristoph Hellwig err=true 7816bf19c94SChristoph Hellwig fi 7826bf19c94SChristoph Hellwig 7836bf19c94SChristoph Hellwig if [ -f $seq.notrun ] 7846bf19c94SChristoph Hellwig then 785b43671f8SEric Blake $timestamp || printf " [not run] " 786b43671f8SEric Blake $timestamp && echo " [not run]" && printf %s " $seq -- " 7876bf19c94SChristoph Hellwig cat $seq.notrun 7886bf19c94SChristoph Hellwig notrun="$notrun $seq" 7896bf19c94SChristoph Hellwig else 7906bf19c94SChristoph Hellwig if [ $sts -ne 0 ] 7916bf19c94SChristoph Hellwig then 792b43671f8SEric Blake printf %s " [failed, exit status $sts]" 7936bf19c94SChristoph Hellwig err=true 7946bf19c94SChristoph Hellwig fi 7958f94b077SKevin Wolf 796e8f8624dSMax Reitz reference="$source_iotests/$seq.out" 797e166b414SBo Tu reference_machine="$source_iotests/$seq.$QEMU_DEFAULT_MACHINE.out" 798e166b414SBo Tu if [ -f "$reference_machine" ]; then 799e166b414SBo Tu reference="$reference_machine" 800e166b414SBo Tu fi 801e166b414SBo Tu 802217a0683SStefan Hajnoczi reference_format="$source_iotests/$seq.out.$IMGFMT" 803217a0683SStefan Hajnoczi if [ -f "$reference_format" ]; then 804217a0683SStefan Hajnoczi reference="$reference_format" 805217a0683SStefan Hajnoczi fi 806217a0683SStefan Hajnoczi 8073baa8449SFam Zheng if [ "$CACHEMODE" = "none" ]; then 808e8f8624dSMax Reitz [ -f "$source_iotests/$seq.out.nocache" ] && reference="$source_iotests/$seq.out.nocache" 8098f94b077SKevin Wolf fi 8108f94b077SKevin Wolf 811e8f8624dSMax Reitz if [ ! -f "$reference" ] 8126bf19c94SChristoph Hellwig then 8136bf19c94SChristoph Hellwig echo " - no qualified output" 8146bf19c94SChristoph Hellwig err=true 8156bf19c94SChristoph Hellwig else 816e8f8624dSMax Reitz if diff -w "$reference" $tmp.out >/dev/null 2>&1 8176bf19c94SChristoph Hellwig then 8186bf19c94SChristoph Hellwig echo "" 8196bf19c94SChristoph Hellwig if $err 8206bf19c94SChristoph Hellwig then 8216bf19c94SChristoph Hellwig : 8226bf19c94SChristoph Hellwig else 8234a9e751fSMao Zhongyi echo "$seq $(expr $stop - $start)" >>$tmp.time 8246bf19c94SChristoph Hellwig fi 8256bf19c94SChristoph Hellwig else 8266bf19c94SChristoph Hellwig echo " - output mismatch (see $seq.out.bad)" 8276bf19c94SChristoph Hellwig mv $tmp.out $seq.out.bad 82863ca8406SEric Blake $diff -w "$reference" "$PWD"/$seq.out.bad 8296bf19c94SChristoph Hellwig err=true 8306bf19c94SChristoph Hellwig fi 8316bf19c94SChristoph Hellwig fi 8326bf19c94SChristoph Hellwig fi 83357ed557fSAndrey Shinkevich if [ -f $seq.casenotrun ] 83457ed557fSAndrey Shinkevich then 83557ed557fSAndrey Shinkevich cat $seq.casenotrun 83657ed557fSAndrey Shinkevich casenotrun="$casenotrun $seq" 83757ed557fSAndrey Shinkevich fi 8386bf19c94SChristoph Hellwig fi 8396bf19c94SChristoph Hellwig 8406bf19c94SChristoph Hellwig # come here for each test, except when $showme is true 8416bf19c94SChristoph Hellwig # 8426bf19c94SChristoph Hellwig if $err 8436bf19c94SChristoph Hellwig then 8446bf19c94SChristoph Hellwig bad="$bad $seq" 8454a9e751fSMao Zhongyi n_bad=$(expr $n_bad + 1) 8466bf19c94SChristoph Hellwig quick=false 8476bf19c94SChristoph Hellwig fi 8484a9e751fSMao Zhongyi [ -f $seq.notrun ] || try=$(expr $try + 1) 8496bf19c94SChristoph Hellwig 8506bf19c94SChristoph Hellwig seq="after_$seq" 8516bf19c94SChristoph Hellwigdone 8526bf19c94SChristoph Hellwig 8536bf19c94SChristoph Hellwiginterrupt=false 8544a9e751fSMao Zhongyistatus=$(expr $n_bad) 8556bf19c94SChristoph Hellwigexit 856