1908eaf68SStefan Hajnoczi#!/bin/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="" 286bf19c94SChristoph Hellwiginterrupt=true 296bf19c94SChristoph Hellwig 306bf19c94SChristoph Hellwig# by default don't output timestamps 316bf19c94SChristoph Hellwigtimestamp=${TIMESTAMP:=false} 326bf19c94SChristoph Hellwig 33e8f8624dSMax Reitz_init_error() 34e8f8624dSMax Reitz{ 354e670492SPaolo Bonzini echo "check: $1" >&2 366bf19c94SChristoph Hellwig exit 1 37e8f8624dSMax Reitz} 38e8f8624dSMax Reitz 39e8f8624dSMax Reitzif [ -L "$0" ] 40e8f8624dSMax Reitzthen 41e8f8624dSMax Reitz # called from the build tree 42e8f8624dSMax Reitz source_iotests=$(dirname "$(readlink "$0")") 43e8f8624dSMax Reitz if [ -z "$source_iotests" ] 44e8f8624dSMax Reitz then 45e8f8624dSMax Reitz _init_error "failed to obtain source tree name from check symlink" 46e8f8624dSMax Reitz fi 47e8f8624dSMax Reitz source_iotests=$(cd "$source_iotests"; pwd) || _init_error "failed to enter source tree" 48e8f8624dSMax Reitz build_iotests=$PWD 49e8f8624dSMax Reitzelse 50e8f8624dSMax Reitz # called from the source tree 51e8f8624dSMax Reitz source_iotests=$PWD 52e8f8624dSMax Reitz # this may be an in-tree build (note that in the following code we may not 53e8f8624dSMax Reitz # assume that it truly is and have to test whether the build results 54e8f8624dSMax Reitz # actually exist) 55e8f8624dSMax Reitz build_iotests=$PWD 56e8f8624dSMax Reitzfi 57e8f8624dSMax Reitz 58e8f8624dSMax Reitzbuild_root="$build_iotests/../.." 59e8f8624dSMax Reitz 607fed1a49SMax Reitz# we need common.env 617fed1a49SMax Reitzif ! . "$build_iotests/common.env" 627fed1a49SMax Reitzthen 637fed1a49SMax Reitz _init_error "failed to source common.env (make sure the qemu-iotests are run from tests/qemu-iotests in the build tree)" 647fed1a49SMax Reitzfi 657fed1a49SMax Reitz 66e8f8624dSMax Reitz# we need common.config 67e8f8624dSMax Reitzif ! . "$source_iotests/common.config" 68e8f8624dSMax Reitzthen 69e8f8624dSMax Reitz _init_error "failed to source common.config" 706bf19c94SChristoph Hellwigfi 716bf19c94SChristoph Hellwig 7209d653e6SPaolo Bonzini_full_imgfmt_details() 7309d653e6SPaolo Bonzini{ 7409d653e6SPaolo Bonzini if [ -n "$IMGOPTS" ]; then 7509d653e6SPaolo Bonzini echo "$IMGFMT ($IMGOPTS)" 7609d653e6SPaolo Bonzini else 7709d653e6SPaolo Bonzini echo "$IMGFMT" 7809d653e6SPaolo Bonzini fi 7909d653e6SPaolo Bonzini} 8009d653e6SPaolo Bonzini 8109d653e6SPaolo Bonzini_full_platform_details() 8209d653e6SPaolo Bonzini{ 8309d653e6SPaolo Bonzini os=`uname -s` 8409d653e6SPaolo Bonzini host=`hostname -s` 8509d653e6SPaolo Bonzini kernel=`uname -r` 8609d653e6SPaolo Bonzini platform=`uname -m` 8709d653e6SPaolo Bonzini echo "$os/$platform $host $kernel" 8809d653e6SPaolo Bonzini} 8909d653e6SPaolo Bonzini 9009d653e6SPaolo Bonzini# $1 = prog to look for 9109d653e6SPaolo Bonziniset_prog_path() 9209d653e6SPaolo Bonzini{ 9309d653e6SPaolo Bonzini p=`command -v $1 2> /dev/null` 9409d653e6SPaolo Bonzini if [ -n "$p" -a -x "$p" ]; then 9563ca8406SEric Blake type -p "$p" 9609d653e6SPaolo Bonzini else 9709d653e6SPaolo Bonzini return 1 9809d653e6SPaolo Bonzini fi 9909d653e6SPaolo Bonzini} 10009d653e6SPaolo Bonzini 10109d653e6SPaolo Bonziniif [ -z "$TEST_DIR" ]; then 10209d653e6SPaolo Bonzini TEST_DIR=`pwd`/scratch 10309d653e6SPaolo Bonzinifi 10409d653e6SPaolo Bonzini 10509d653e6SPaolo Bonziniif [ ! -e "$TEST_DIR" ]; then 10609d653e6SPaolo Bonzini mkdir "$TEST_DIR" 10709d653e6SPaolo Bonzinifi 10809d653e6SPaolo Bonzini 10909d653e6SPaolo Bonzinidiff="diff -u" 11009d653e6SPaolo Bonziniverbose=false 11109d653e6SPaolo Bonzinidebug=false 11209d653e6SPaolo Bonzinigroup=false 11309d653e6SPaolo Bonzinixgroup=false 11409d653e6SPaolo Bonziniimgopts=false 11509d653e6SPaolo Bonzinishowme=false 11609d653e6SPaolo Bonzinisortme=false 11709d653e6SPaolo Bonziniexpunge=true 11809d653e6SPaolo Bonzinihave_test_arg=false 11909d653e6SPaolo Bonzinicachemode=false 12009d653e6SPaolo Bonzini 12109d653e6SPaolo Bonzinitmp="${TEST_DIR}"/$$ 12209d653e6SPaolo Bonzinirm -f $tmp.list $tmp.tmp $tmp.sed 12309d653e6SPaolo Bonzini 12409d653e6SPaolo Bonziniexport IMGFMT=raw 12509d653e6SPaolo Bonziniexport IMGFMT_GENERIC=true 12609d653e6SPaolo Bonziniexport IMGPROTO=file 12709d653e6SPaolo Bonziniexport IMGOPTS="" 12809d653e6SPaolo Bonziniexport CACHEMODE="writeback" 12909d653e6SPaolo Bonziniexport QEMU_IO_OPTIONS="" 13009d653e6SPaolo Bonziniexport QEMU_IO_OPTIONS_NO_FMT="" 13109d653e6SPaolo Bonziniexport CACHEMODE_IS_DEFAULT=true 13209d653e6SPaolo Bonziniexport QEMU_OPTIONS="-nodefaults -machine accel=qtest" 13309d653e6SPaolo Bonziniexport VALGRIND_QEMU= 13409d653e6SPaolo Bonziniexport IMGKEYSECRET= 13509d653e6SPaolo Bonziniexport IMGOPTSSYNTAX=false 13609d653e6SPaolo Bonzini 1378803714bSEric Blake# Save current tty settings, since an aborting qemu call may leave things 1388803714bSEric Blake# screwed up 1398803714bSEric BlakeSTTY_RESTORE= 1408803714bSEric Blakeif test -t 0; then 1418803714bSEric Blake STTY_RESTORE=$(stty -g) 1428803714bSEric Blakefi 1438803714bSEric Blake 14409d653e6SPaolo Bonzinifor r 14509d653e6SPaolo Bonzinido 14609d653e6SPaolo Bonzini 14709d653e6SPaolo Bonzini if $group 14809d653e6SPaolo Bonzini then 14909d653e6SPaolo Bonzini # arg after -g 15009d653e6SPaolo Bonzini group_list=`sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{ 15109d653e6SPaolo Bonzinis/ .*//p 15209d653e6SPaolo Bonzini}'` 15309d653e6SPaolo Bonzini if [ -z "$group_list" ] 15409d653e6SPaolo Bonzini then 15509d653e6SPaolo Bonzini echo "Group \"$r\" is empty or not defined?" 15609d653e6SPaolo Bonzini exit 1 15709d653e6SPaolo Bonzini fi 15809d653e6SPaolo Bonzini [ ! -s $tmp.list ] && touch $tmp.list 15909d653e6SPaolo Bonzini for t in $group_list 16009d653e6SPaolo Bonzini do 16109d653e6SPaolo Bonzini if grep -s "^$t\$" $tmp.list >/dev/null 16209d653e6SPaolo Bonzini then 16309d653e6SPaolo Bonzini : 16409d653e6SPaolo Bonzini else 16509d653e6SPaolo Bonzini echo "$t" >>$tmp.list 16609d653e6SPaolo Bonzini fi 16709d653e6SPaolo Bonzini done 16809d653e6SPaolo Bonzini group=false 16909d653e6SPaolo Bonzini continue 17009d653e6SPaolo Bonzini 17109d653e6SPaolo Bonzini elif $xgroup 17209d653e6SPaolo Bonzini then 17309d653e6SPaolo Bonzini # arg after -x 17409d653e6SPaolo Bonzini # Populate $tmp.list with all tests 17509d653e6SPaolo Bonzini awk '/^[0-9]{3,}/ {print $1}' "${source_iotests}/group" > $tmp.list 2>/dev/null 17609d653e6SPaolo Bonzini group_list=`sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{ 17709d653e6SPaolo Bonzinis/ .*//p 17809d653e6SPaolo Bonzini}'` 17909d653e6SPaolo Bonzini if [ -z "$group_list" ] 18009d653e6SPaolo Bonzini then 18109d653e6SPaolo Bonzini echo "Group \"$r\" is empty or not defined?" 18209d653e6SPaolo Bonzini exit 1 18309d653e6SPaolo Bonzini fi 18409d653e6SPaolo Bonzini numsed=0 18509d653e6SPaolo Bonzini rm -f $tmp.sed 18609d653e6SPaolo Bonzini for t in $group_list 18709d653e6SPaolo Bonzini do 18809d653e6SPaolo Bonzini if [ $numsed -gt 100 ] 18909d653e6SPaolo Bonzini then 19009d653e6SPaolo Bonzini sed -f $tmp.sed <$tmp.list >$tmp.tmp 19109d653e6SPaolo Bonzini mv $tmp.tmp $tmp.list 19209d653e6SPaolo Bonzini numsed=0 19309d653e6SPaolo Bonzini rm -f $tmp.sed 19409d653e6SPaolo Bonzini fi 19509d653e6SPaolo Bonzini echo "/^$t\$/d" >>$tmp.sed 19609d653e6SPaolo Bonzini numsed=`expr $numsed + 1` 19709d653e6SPaolo Bonzini done 19809d653e6SPaolo Bonzini sed -f $tmp.sed <$tmp.list >$tmp.tmp 19909d653e6SPaolo Bonzini mv $tmp.tmp $tmp.list 20009d653e6SPaolo Bonzini xgroup=false 20109d653e6SPaolo Bonzini continue 20209d653e6SPaolo Bonzini 20309d653e6SPaolo Bonzini elif $imgopts 20409d653e6SPaolo Bonzini then 20509d653e6SPaolo Bonzini IMGOPTS="$r" 20609d653e6SPaolo Bonzini imgopts=false 20709d653e6SPaolo Bonzini continue 20809d653e6SPaolo Bonzini elif $cachemode 20909d653e6SPaolo Bonzini then 21009d653e6SPaolo Bonzini CACHEMODE="$r" 21109d653e6SPaolo Bonzini CACHEMODE_IS_DEFAULT=false 21209d653e6SPaolo Bonzini cachemode=false 21309d653e6SPaolo Bonzini continue 21409d653e6SPaolo Bonzini fi 21509d653e6SPaolo Bonzini 21609d653e6SPaolo Bonzini xpand=true 21709d653e6SPaolo Bonzini case "$r" 21809d653e6SPaolo Bonzini in 21909d653e6SPaolo Bonzini 22009d653e6SPaolo Bonzini -\? | -h | --help) # usage 22109d653e6SPaolo Bonzini echo "Usage: $0 [options] [testlist]"' 22209d653e6SPaolo Bonzini 22309d653e6SPaolo Bonzinicommon options 22409d653e6SPaolo Bonzini -v verbose 22509d653e6SPaolo Bonzini -d debug 22609d653e6SPaolo Bonzini 22709d653e6SPaolo Bonziniimage format options 22809d653e6SPaolo Bonzini -raw test raw (default) 22909d653e6SPaolo Bonzini -bochs test bochs 23009d653e6SPaolo Bonzini -cloop test cloop 23109d653e6SPaolo Bonzini -parallels test parallels 23209d653e6SPaolo Bonzini -qcow test qcow 23309d653e6SPaolo Bonzini -qcow2 test qcow2 23409d653e6SPaolo Bonzini -qed test qed 23509d653e6SPaolo Bonzini -vdi test vdi 23609d653e6SPaolo Bonzini -vpc test vpc 23709d653e6SPaolo Bonzini -vhdx test vhdx 23809d653e6SPaolo Bonzini -vmdk test vmdk 23909d653e6SPaolo Bonzini -luks test luks 24009d653e6SPaolo Bonzini 24109d653e6SPaolo Bonziniimage protocol options 24209d653e6SPaolo Bonzini -file test file (default) 24309d653e6SPaolo Bonzini -rbd test rbd 24409d653e6SPaolo Bonzini -sheepdog test sheepdog 24509d653e6SPaolo Bonzini -nbd test nbd 24609d653e6SPaolo Bonzini -ssh test ssh 24709d653e6SPaolo Bonzini -nfs test nfs 24809d653e6SPaolo Bonzini -vxhs test vxhs 24909d653e6SPaolo Bonzini 25009d653e6SPaolo Bonziniother options 25109d653e6SPaolo Bonzini -xdiff graphical mode diff 25209d653e6SPaolo Bonzini -nocache use O_DIRECT on backing file 25309d653e6SPaolo Bonzini -misalign misalign memory allocations 25409d653e6SPaolo Bonzini -n show me, do not run tests 25509d653e6SPaolo Bonzini -o options -o options to pass to qemu-img create/convert 25609d653e6SPaolo Bonzini -T output timestamps 25709d653e6SPaolo Bonzini -c mode cache mode 25809d653e6SPaolo Bonzini 25909d653e6SPaolo Bonzinitestlist options 26009d653e6SPaolo Bonzini -g group[,group...] include tests from these groups 26109d653e6SPaolo Bonzini -x group[,group...] exclude tests from these groups 26209d653e6SPaolo Bonzini NNN include test NNN 26309d653e6SPaolo Bonzini NNN-NNN include test range (eg. 012-021) 26409d653e6SPaolo Bonzini' 26509d653e6SPaolo Bonzini exit 0 26609d653e6SPaolo Bonzini ;; 26709d653e6SPaolo Bonzini 26809d653e6SPaolo Bonzini -raw) 26909d653e6SPaolo Bonzini IMGFMT=raw 27009d653e6SPaolo Bonzini xpand=false 27109d653e6SPaolo Bonzini ;; 27209d653e6SPaolo Bonzini 27309d653e6SPaolo Bonzini -bochs) 27409d653e6SPaolo Bonzini IMGFMT=bochs 27509d653e6SPaolo Bonzini IMGFMT_GENERIC=false 27609d653e6SPaolo Bonzini xpand=false 27709d653e6SPaolo Bonzini ;; 27809d653e6SPaolo Bonzini 27909d653e6SPaolo Bonzini -cloop) 28009d653e6SPaolo Bonzini IMGFMT=cloop 28109d653e6SPaolo Bonzini IMGFMT_GENERIC=false 28209d653e6SPaolo Bonzini xpand=false 28309d653e6SPaolo Bonzini ;; 28409d653e6SPaolo Bonzini 28509d653e6SPaolo Bonzini -parallels) 28609d653e6SPaolo Bonzini IMGFMT=parallels 28709d653e6SPaolo Bonzini xpand=false 28809d653e6SPaolo Bonzini ;; 28909d653e6SPaolo Bonzini 29009d653e6SPaolo Bonzini -qcow) 29109d653e6SPaolo Bonzini IMGFMT=qcow 29209d653e6SPaolo Bonzini xpand=false 29309d653e6SPaolo Bonzini ;; 29409d653e6SPaolo Bonzini 29509d653e6SPaolo Bonzini -qcow2) 29609d653e6SPaolo Bonzini IMGFMT=qcow2 29709d653e6SPaolo Bonzini xpand=false 29809d653e6SPaolo Bonzini ;; 29909d653e6SPaolo Bonzini 30009d653e6SPaolo Bonzini -luks) 30109d653e6SPaolo Bonzini IMGOPTSSYNTAX=true 30209d653e6SPaolo Bonzini IMGFMT=luks 30309d653e6SPaolo Bonzini IMGKEYSECRET=123456 30409d653e6SPaolo Bonzini xpand=false 30509d653e6SPaolo Bonzini ;; 30609d653e6SPaolo Bonzini 30709d653e6SPaolo Bonzini -qed) 30809d653e6SPaolo Bonzini IMGFMT=qed 30909d653e6SPaolo Bonzini xpand=false 31009d653e6SPaolo Bonzini ;; 31109d653e6SPaolo Bonzini 31209d653e6SPaolo Bonzini -vdi) 31309d653e6SPaolo Bonzini IMGFMT=vdi 31409d653e6SPaolo Bonzini xpand=false 31509d653e6SPaolo Bonzini ;; 31609d653e6SPaolo Bonzini 31709d653e6SPaolo Bonzini -vmdk) 31809d653e6SPaolo Bonzini IMGFMT=vmdk 31909d653e6SPaolo Bonzini xpand=false 32009d653e6SPaolo Bonzini ;; 32109d653e6SPaolo Bonzini 32209d653e6SPaolo Bonzini -vpc) 32309d653e6SPaolo Bonzini IMGFMT=vpc 32409d653e6SPaolo Bonzini xpand=false 32509d653e6SPaolo Bonzini ;; 32609d653e6SPaolo Bonzini 32709d653e6SPaolo Bonzini -vhdx) 32809d653e6SPaolo Bonzini IMGFMT=vhdx 32909d653e6SPaolo Bonzini xpand=false 33009d653e6SPaolo Bonzini ;; 33109d653e6SPaolo Bonzini 33209d653e6SPaolo Bonzini -file) 33309d653e6SPaolo Bonzini IMGPROTO=file 33409d653e6SPaolo Bonzini xpand=false 33509d653e6SPaolo Bonzini ;; 33609d653e6SPaolo Bonzini 33709d653e6SPaolo Bonzini -rbd) 33809d653e6SPaolo Bonzini IMGPROTO=rbd 33909d653e6SPaolo Bonzini xpand=false 34009d653e6SPaolo Bonzini ;; 34109d653e6SPaolo Bonzini 34209d653e6SPaolo Bonzini -sheepdog) 34309d653e6SPaolo Bonzini IMGPROTO=sheepdog 34409d653e6SPaolo Bonzini xpand=false 34509d653e6SPaolo Bonzini ;; 34609d653e6SPaolo Bonzini 34709d653e6SPaolo Bonzini -nbd) 34809d653e6SPaolo Bonzini IMGPROTO=nbd 34909d653e6SPaolo Bonzini xpand=false 35009d653e6SPaolo Bonzini ;; 35109d653e6SPaolo Bonzini 35209d653e6SPaolo Bonzini -vxhs) 35309d653e6SPaolo Bonzini IMGPROTO=vxhs 35409d653e6SPaolo Bonzini xpand=false 35509d653e6SPaolo Bonzini ;; 35609d653e6SPaolo Bonzini 35709d653e6SPaolo Bonzini -ssh) 35809d653e6SPaolo Bonzini IMGPROTO=ssh 35909d653e6SPaolo Bonzini xpand=false 36009d653e6SPaolo Bonzini ;; 36109d653e6SPaolo Bonzini 36209d653e6SPaolo Bonzini -nfs) 36309d653e6SPaolo Bonzini IMGPROTO=nfs 36409d653e6SPaolo Bonzini xpand=false 36509d653e6SPaolo Bonzini ;; 36609d653e6SPaolo Bonzini 36709d653e6SPaolo Bonzini -nocache) 36809d653e6SPaolo Bonzini CACHEMODE="none" 36909d653e6SPaolo Bonzini CACHEMODE_IS_DEFAULT=false 37009d653e6SPaolo Bonzini xpand=false 37109d653e6SPaolo Bonzini ;; 37209d653e6SPaolo Bonzini 37309d653e6SPaolo Bonzini -misalign) 37409d653e6SPaolo Bonzini QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --misalign" 37509d653e6SPaolo Bonzini xpand=false 37609d653e6SPaolo Bonzini ;; 37709d653e6SPaolo Bonzini 37809d653e6SPaolo Bonzini -valgrind) 37909d653e6SPaolo Bonzini VALGRIND_QEMU='y' 38009d653e6SPaolo Bonzini xpand=false 38109d653e6SPaolo Bonzini ;; 38209d653e6SPaolo Bonzini 38309d653e6SPaolo Bonzini -g) # -g group ... pick from group file 38409d653e6SPaolo Bonzini group=true 38509d653e6SPaolo Bonzini xpand=false 38609d653e6SPaolo Bonzini ;; 38709d653e6SPaolo Bonzini 38809d653e6SPaolo Bonzini -xdiff) # graphical diff mode 38909d653e6SPaolo Bonzini xpand=false 39009d653e6SPaolo Bonzini 39109d653e6SPaolo Bonzini if [ ! -z "$DISPLAY" ] 39209d653e6SPaolo Bonzini then 39309d653e6SPaolo Bonzini command -v xdiff >/dev/null 2>&1 && diff=xdiff 39409d653e6SPaolo Bonzini command -v gdiff >/dev/null 2>&1 && diff=gdiff 39509d653e6SPaolo Bonzini command -v tkdiff >/dev/null 2>&1 && diff=tkdiff 39609d653e6SPaolo Bonzini command -v xxdiff >/dev/null 2>&1 && diff=xxdiff 39709d653e6SPaolo Bonzini fi 39809d653e6SPaolo Bonzini ;; 39909d653e6SPaolo Bonzini 40009d653e6SPaolo Bonzini -n) # show me, don't do it 40109d653e6SPaolo Bonzini showme=true 40209d653e6SPaolo Bonzini xpand=false 40309d653e6SPaolo Bonzini ;; 40409d653e6SPaolo Bonzini -o) 40509d653e6SPaolo Bonzini imgopts=true 40609d653e6SPaolo Bonzini xpand=false 40709d653e6SPaolo Bonzini ;; 40809d653e6SPaolo Bonzini -c) 40909d653e6SPaolo Bonzini cachemode=true 41009d653e6SPaolo Bonzini xpand=false 41109d653e6SPaolo Bonzini ;; 41209d653e6SPaolo Bonzini -T) # turn on timestamp output 41309d653e6SPaolo Bonzini timestamp=true 41409d653e6SPaolo Bonzini xpand=false 41509d653e6SPaolo Bonzini ;; 41609d653e6SPaolo Bonzini 41709d653e6SPaolo Bonzini -v) 41809d653e6SPaolo Bonzini verbose=true 41909d653e6SPaolo Bonzini xpand=false 42009d653e6SPaolo Bonzini ;; 42109d653e6SPaolo Bonzini -d) 42209d653e6SPaolo Bonzini debug=true 42309d653e6SPaolo Bonzini xpand=false 42409d653e6SPaolo Bonzini ;; 42509d653e6SPaolo Bonzini -x) # -x group ... exclude from group file 42609d653e6SPaolo Bonzini xgroup=true 42709d653e6SPaolo Bonzini xpand=false 42809d653e6SPaolo Bonzini ;; 42909d653e6SPaolo Bonzini '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]') 43009d653e6SPaolo Bonzini echo "No tests?" 43109d653e6SPaolo Bonzini status=1 43209d653e6SPaolo Bonzini exit $status 43309d653e6SPaolo Bonzini ;; 43409d653e6SPaolo Bonzini 43509d653e6SPaolo Bonzini [0-9]*-[0-9]*) 43609d653e6SPaolo Bonzini eval `echo $r | sed -e 's/^/start=/' -e 's/-/ end=/'` 43709d653e6SPaolo Bonzini ;; 43809d653e6SPaolo Bonzini 43909d653e6SPaolo Bonzini [0-9]*-) 44009d653e6SPaolo Bonzini eval `echo $r | sed -e 's/^/start=/' -e 's/-//'` 44109d653e6SPaolo Bonzini 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/.* //'` 44209d653e6SPaolo Bonzini if [ -z "$end" ] 44309d653e6SPaolo Bonzini then 44409d653e6SPaolo Bonzini echo "No tests in range \"$r\"?" 44509d653e6SPaolo Bonzini status=1 44609d653e6SPaolo Bonzini exit $status 44709d653e6SPaolo Bonzini fi 44809d653e6SPaolo Bonzini ;; 44909d653e6SPaolo Bonzini 45009d653e6SPaolo Bonzini *) 45109d653e6SPaolo Bonzini start=$r 45209d653e6SPaolo Bonzini end=$r 45309d653e6SPaolo Bonzini ;; 45409d653e6SPaolo Bonzini 45509d653e6SPaolo Bonzini esac 45609d653e6SPaolo Bonzini 45709d653e6SPaolo Bonzini # get rid of leading 0s as can be interpreted as octal 45809d653e6SPaolo Bonzini start=`echo $start | sed 's/^0*//'` 45909d653e6SPaolo Bonzini end=`echo $end | sed 's/^0*//'` 46009d653e6SPaolo Bonzini 46109d653e6SPaolo Bonzini if $xpand 46209d653e6SPaolo Bonzini then 46309d653e6SPaolo Bonzini have_test_arg=true 46409d653e6SPaolo Bonzini awk </dev/null ' 46509d653e6SPaolo BonziniBEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \ 46609d653e6SPaolo Bonzini | while read id 46709d653e6SPaolo Bonzini do 46809d653e6SPaolo Bonzini if grep -s "^$id " "$source_iotests/group" >/dev/null 46909d653e6SPaolo Bonzini then 47009d653e6SPaolo Bonzini # in group file ... OK 47109d653e6SPaolo Bonzini echo $id >>$tmp.list 47209d653e6SPaolo Bonzini else 47309d653e6SPaolo Bonzini if [ -f expunged ] && $expunge && egrep "^$id([ ]|\$)" expunged >/dev/null 47409d653e6SPaolo Bonzini then 47509d653e6SPaolo Bonzini # expunged ... will be reported, but not run, later 47609d653e6SPaolo Bonzini echo $id >>$tmp.list 47709d653e6SPaolo Bonzini else 47809d653e6SPaolo Bonzini # oops 47909d653e6SPaolo Bonzini if [ "$start" == "$end" -a "$id" == "$end" ] 48009d653e6SPaolo Bonzini then 48109d653e6SPaolo Bonzini echo "$id - unknown test" 48209d653e6SPaolo Bonzini exit 1 48309d653e6SPaolo Bonzini else 48409d653e6SPaolo Bonzini echo "$id - unknown test, ignored" 48509d653e6SPaolo Bonzini fi 48609d653e6SPaolo Bonzini fi 48709d653e6SPaolo Bonzini fi 48809d653e6SPaolo Bonzini done || exit 1 48909d653e6SPaolo Bonzini fi 49009d653e6SPaolo Bonzini 49109d653e6SPaolo Bonzinidone 49209d653e6SPaolo Bonzini 49309d653e6SPaolo Bonzini# Set qemu-io cache mode with $CACHEMODE we have 49409d653e6SPaolo BonziniQEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --cache $CACHEMODE" 49509d653e6SPaolo Bonzini 49609d653e6SPaolo BonziniQEMU_IO_OPTIONS_NO_FMT="$QEMU_IO_OPTIONS" 49709d653e6SPaolo Bonziniif [ "$IMGOPTSSYNTAX" != "true" ]; then 49809d653e6SPaolo Bonzini QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS -f $IMGFMT" 49909d653e6SPaolo Bonzinifi 50009d653e6SPaolo Bonzini 50109d653e6SPaolo Bonzini# Set default options for qemu-img create -o if they were not specified 50209d653e6SPaolo Bonziniif [ "$IMGFMT" == "qcow2" ] && ! (echo "$IMGOPTS" | grep "compat=" > /dev/null); then 50309d653e6SPaolo Bonzini IMGOPTS=$(_optstr_add "$IMGOPTS" "compat=1.1") 50409d653e6SPaolo Bonzinifi 50509d653e6SPaolo Bonziniif [ "$IMGFMT" == "luks" ] && ! (echo "$IMGOPTS" | grep "iter-time=" > /dev/null); then 50609d653e6SPaolo Bonzini IMGOPTS=$(_optstr_add "$IMGOPTS" "iter-time=10") 50709d653e6SPaolo Bonzinifi 50809d653e6SPaolo Bonzini 50909d653e6SPaolo Bonziniif [ -z "$SAMPLE_IMG_DIR" ]; then 51009d653e6SPaolo Bonzini SAMPLE_IMG_DIR="$source_iotests/sample_images" 51109d653e6SPaolo Bonzinifi 51209d653e6SPaolo Bonzini 51309d653e6SPaolo Bonziniexport TEST_DIR 51409d653e6SPaolo Bonziniexport SAMPLE_IMG_DIR 51509d653e6SPaolo Bonzini 51609d653e6SPaolo Bonziniif [ -s $tmp.list ] 51709d653e6SPaolo Bonzinithen 51809d653e6SPaolo Bonzini # found some valid test numbers ... this is good 51909d653e6SPaolo Bonzini : 52009d653e6SPaolo Bonzinielse 52109d653e6SPaolo Bonzini if $have_test_arg 52209d653e6SPaolo Bonzini then 52309d653e6SPaolo Bonzini # had test numbers, but none in group file ... do nothing 52409d653e6SPaolo Bonzini touch $tmp.list 52509d653e6SPaolo Bonzini else 52609d653e6SPaolo Bonzini # no test numbers, do everything from group file 52709d653e6SPaolo Bonzini sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' <"$source_iotests/group" >$tmp.list 52809d653e6SPaolo Bonzini fi 52909d653e6SPaolo Bonzinifi 53009d653e6SPaolo Bonzini 53109d653e6SPaolo Bonzini# should be sort -n, but this did not work for Linux when this 53209d653e6SPaolo Bonzini# was ported from IRIX 53309d653e6SPaolo Bonzini# 53409d653e6SPaolo Bonzinilist=`sort $tmp.list` 53509d653e6SPaolo Bonzinirm -f $tmp.list $tmp.tmp $tmp.sed 53609d653e6SPaolo Bonzini 53709d653e6SPaolo Bonziniif [ -z "$QEMU_PROG" ] 53809d653e6SPaolo Bonzinithen 53909d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu" ]; then 54009d653e6SPaolo Bonzini export QEMU_PROG="$build_iotests/qemu" 541*96914159SLukáš Doktor elif [ -x "$build_root/${qemu_arch}-softmmu/qemu-system-${qemu_arch}" ]; then 542*96914159SLukáš Doktor export QEMU_PROG="$build_root/${qemu_arch}-softmmu/qemu-system-${qemu_arch}" 54309d653e6SPaolo Bonzini else 54409d653e6SPaolo Bonzini pushd "$build_root" > /dev/null 54509d653e6SPaolo Bonzini for binary in *-softmmu/qemu-system-* 54609d653e6SPaolo Bonzini do 54709d653e6SPaolo Bonzini if [ -x "$binary" ] 54809d653e6SPaolo Bonzini then 54909d653e6SPaolo Bonzini export QEMU_PROG="$build_root/$binary" 55009d653e6SPaolo Bonzini break 55109d653e6SPaolo Bonzini fi 55209d653e6SPaolo Bonzini done 55309d653e6SPaolo Bonzini popd > /dev/null 55409d653e6SPaolo Bonzini [ "$QEMU_PROG" = "" ] && _init_error "qemu not found" 55509d653e6SPaolo Bonzini fi 55609d653e6SPaolo Bonzinifi 55763ca8406SEric Blakeexport QEMU_PROG="$(type -p "$QEMU_PROG")" 55809d653e6SPaolo Bonzini 55909d653e6SPaolo Bonziniif [ -z "$QEMU_IMG_PROG" ]; then 56009d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-img" ]; then 56109d653e6SPaolo Bonzini export QEMU_IMG_PROG="$build_iotests/qemu-img" 56209d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-img" ]; then 56309d653e6SPaolo Bonzini export QEMU_IMG_PROG="$build_root/qemu-img" 56409d653e6SPaolo Bonzini else 56509d653e6SPaolo Bonzini _init_error "qemu-img not found" 56609d653e6SPaolo Bonzini fi 56709d653e6SPaolo Bonzinifi 56863ca8406SEric Blakeexport QEMU_IMG_PROG="$(type -p "$QEMU_IMG_PROG")" 56909d653e6SPaolo Bonzini 57009d653e6SPaolo Bonziniif [ -z "$QEMU_IO_PROG" ]; then 57109d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-io" ]; then 57209d653e6SPaolo Bonzini export QEMU_IO_PROG="$build_iotests/qemu-io" 57309d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-io" ]; then 57409d653e6SPaolo Bonzini export QEMU_IO_PROG="$build_root/qemu-io" 57509d653e6SPaolo Bonzini else 57609d653e6SPaolo Bonzini _init_error "qemu-io not found" 57709d653e6SPaolo Bonzini fi 57809d653e6SPaolo Bonzinifi 57963ca8406SEric Blakeexport QEMU_IO_PROG="$(type -p "$QEMU_IO_PROG")" 58009d653e6SPaolo Bonzini 58109d653e6SPaolo Bonziniif [ -z $QEMU_NBD_PROG ]; then 58209d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-nbd" ]; then 58309d653e6SPaolo Bonzini export QEMU_NBD_PROG="$build_iotests/qemu-nbd" 58409d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-nbd" ]; then 58509d653e6SPaolo Bonzini export QEMU_NBD_PROG="$build_root/qemu-nbd" 58609d653e6SPaolo Bonzini else 58709d653e6SPaolo Bonzini _init_error "qemu-nbd not found" 58809d653e6SPaolo Bonzini fi 58909d653e6SPaolo Bonzinifi 59063ca8406SEric Blakeexport QEMU_NBD_PROG="$(type -p "$QEMU_NBD_PROG")" 59109d653e6SPaolo Bonzini 59209d653e6SPaolo Bonziniif [ -z "$QEMU_VXHS_PROG" ]; then 59309d653e6SPaolo Bonzini export QEMU_VXHS_PROG="`set_prog_path qnio_server`" 59409d653e6SPaolo Bonzinifi 59509d653e6SPaolo Bonzini 59609d653e6SPaolo Bonziniif [ -x "$build_iotests/socket_scm_helper" ] 59709d653e6SPaolo Bonzinithen 59809d653e6SPaolo Bonzini export SOCKET_SCM_HELPER="$build_iotests/socket_scm_helper" 59909d653e6SPaolo Bonzinifi 60009d653e6SPaolo Bonzini 60109d653e6SPaolo Bonzinidefault_machine=$($QEMU_PROG -machine help | sed -n '/(default)/ s/ .*//p') 60209d653e6SPaolo Bonzinidefault_alias_machine=$($QEMU_PROG -machine help | \ 60309d653e6SPaolo Bonzini sed -n "/(alias of $default_machine)/ { s/ .*//p; q; }") 60409d653e6SPaolo Bonziniif [[ "$default_alias_machine" ]]; then 60509d653e6SPaolo Bonzini default_machine="$default_alias_machine" 60609d653e6SPaolo Bonzinifi 60709d653e6SPaolo Bonzini 60809d653e6SPaolo Bonziniexport QEMU_DEFAULT_MACHINE="$default_machine" 60989004368SKevin Wolf 61036bd4228SDaniel P. BerrangeTIMESTAMP_FILE=check.time-$IMGPROTO-$IMGFMT 61136bd4228SDaniel P. Berrange 6126bf19c94SChristoph Hellwig_wallclock() 6136bf19c94SChristoph Hellwig{ 6149ee4b6f8SPaolo Bonzini date "+%H %M %S" | awk '{ print $1*3600 + $2*60 + $3 }' 6156bf19c94SChristoph Hellwig} 6166bf19c94SChristoph Hellwig 6176bf19c94SChristoph Hellwig_timestamp() 6186bf19c94SChristoph Hellwig{ 6196bf19c94SChristoph Hellwig now=`date "+%T"` 620b43671f8SEric Blake printf %s " [$now]" 6216bf19c94SChristoph Hellwig} 6226bf19c94SChristoph Hellwig 6236bf19c94SChristoph Hellwig_wrapup() 6246bf19c94SChristoph Hellwig{ 6256bf19c94SChristoph Hellwig if $showme 6266bf19c94SChristoph Hellwig then 6276bf19c94SChristoph Hellwig : 6286bf19c94SChristoph Hellwig elif $needwrap 6296bf19c94SChristoph Hellwig then 63036bd4228SDaniel P. Berrange if [ -f $TIMESTAMP_FILE -a -f $tmp.time ] 6316bf19c94SChristoph Hellwig then 63236bd4228SDaniel P. Berrange cat $TIMESTAMP_FILE $tmp.time \ 6339ee4b6f8SPaolo Bonzini | awk ' 6346bf19c94SChristoph Hellwig { t[$1] = $2 } 6356bf19c94SChristoph HellwigEND { if (NR > 0) { 6366bf19c94SChristoph Hellwig for (i in t) print i " " t[i] 6376bf19c94SChristoph Hellwig } 6386bf19c94SChristoph Hellwig }' \ 6396bf19c94SChristoph Hellwig | sort -n >$tmp.out 64036bd4228SDaniel P. Berrange mv $tmp.out $TIMESTAMP_FILE 6416bf19c94SChristoph Hellwig fi 6426bf19c94SChristoph Hellwig 6436bf19c94SChristoph Hellwig if [ -f $tmp.expunged ] 6446bf19c94SChristoph Hellwig then 6456bf19c94SChristoph Hellwig notrun=`wc -l <$tmp.expunged | sed -e 's/ *//g'` 6466bf19c94SChristoph Hellwig try=`expr $try - $notrun` 6476bf19c94SChristoph Hellwig list=`echo "$list" | sed -f $tmp.expunged` 6486bf19c94SChristoph Hellwig fi 6496bf19c94SChristoph Hellwig 6506bf19c94SChristoph Hellwig echo "" >>check.log 6516bf19c94SChristoph Hellwig date >>check.log 6526bf19c94SChristoph Hellwig echo $list | fmt | sed -e 's/^/ /' >>check.log 6536bf19c94SChristoph Hellwig $interrupt && echo "Interrupted!" >>check.log 6546bf19c94SChristoph Hellwig 6556bf19c94SChristoph Hellwig if [ ! -z "$notrun" ] 6566bf19c94SChristoph Hellwig then 6576bf19c94SChristoph Hellwig echo "Not run:$notrun" 6586bf19c94SChristoph Hellwig echo "Not run:$notrun" >>check.log 6596bf19c94SChristoph Hellwig fi 6606bf19c94SChristoph Hellwig if [ ! -z "$n_bad" -a $n_bad != 0 ] 6616bf19c94SChristoph Hellwig then 6626bf19c94SChristoph Hellwig echo "Failures:$bad" 6636bf19c94SChristoph Hellwig echo "Failed $n_bad of $try tests" 6646bf19c94SChristoph Hellwig echo "Failures:$bad" | fmt >>check.log 6656bf19c94SChristoph Hellwig echo "Failed $n_bad of $try tests" >>check.log 6666bf19c94SChristoph Hellwig else 6676bf19c94SChristoph Hellwig echo "Passed all $try tests" 6686bf19c94SChristoph Hellwig echo "Passed all $try tests" >>check.log 6696bf19c94SChristoph Hellwig fi 6706bf19c94SChristoph Hellwig needwrap=false 6716bf19c94SChristoph Hellwig fi 6726bf19c94SChristoph Hellwig 6738803714bSEric Blake if test -n "$STTY_RESTORE"; then 6748803714bSEric Blake stty $STTY_RESTORE 6758803714bSEric Blake fi 6760145b4e1SSascha Silbe rm -f "${TEST_DIR}"/*.out "${TEST_DIR}"/*.err "${TEST_DIR}"/*.time 6770145b4e1SSascha Silbe rm -f "${TEST_DIR}"/check.pid "${TEST_DIR}"/check.sts 6786bf19c94SChristoph Hellwig rm -f $tmp.* 6796bf19c94SChristoph Hellwig} 6806bf19c94SChristoph Hellwig 6816bf19c94SChristoph Hellwigtrap "_wrapup; exit \$status" 0 1 2 3 15 6826bf19c94SChristoph Hellwig 68336bd4228SDaniel P. Berrange[ -f $TIMESTAMP_FILE ] || touch $TIMESTAMP_FILE 6846bf19c94SChristoph Hellwig 6856bf19c94SChristoph HellwigFULL_IMGFMT_DETAILS=`_full_imgfmt_details` 6866bf19c94SChristoph HellwigFULL_HOST_DETAILS=`_full_platform_details` 6876bf19c94SChristoph Hellwig 6886bf19c94SChristoph Hellwigcat <<EOF 689934659c4SMax ReitzQEMU -- "$QEMU_PROG" $QEMU_OPTIONS 690934659c4SMax ReitzQEMU_IMG -- "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS 691934659c4SMax ReitzQEMU_IO -- "$QEMU_IO_PROG" $QEMU_IO_OPTIONS 692934659c4SMax ReitzQEMU_NBD -- "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS 6936bf19c94SChristoph HellwigIMGFMT -- $FULL_IMGFMT_DETAILS 694657c572aSCleber RosaIMGPROTO -- $IMGPROTO 6956bf19c94SChristoph HellwigPLATFORM -- $FULL_HOST_DETAILS 696b8aff7d6SFam ZhengTEST_DIR -- $TEST_DIR 69730b005d9SWenchao XiaSOCKET_SCM_HELPER -- $SOCKET_SCM_HELPER 6986bf19c94SChristoph Hellwig 6996bf19c94SChristoph HellwigEOF 7006bf19c94SChristoph Hellwig 7016bf19c94SChristoph Hellwigseq="check" 7026bf19c94SChristoph Hellwig 7036bf19c94SChristoph Hellwig[ -n "$TESTS_REMAINING_LOG" ] && echo $list > $TESTS_REMAINING_LOG 7046bf19c94SChristoph Hellwig 7056bf19c94SChristoph Hellwigfor seq in $list 7066bf19c94SChristoph Hellwigdo 7076bf19c94SChristoph Hellwig err=false 708b43671f8SEric Blake printf %s "$seq" 7096bf19c94SChristoph Hellwig if [ -n "$TESTS_REMAINING_LOG" ] ; then 7106bf19c94SChristoph Hellwig sed -e "s/$seq//" -e 's/ / /' -e 's/^ *//' $TESTS_REMAINING_LOG > $TESTS_REMAINING_LOG.tmp 7116bf19c94SChristoph Hellwig mv $TESTS_REMAINING_LOG.tmp $TESTS_REMAINING_LOG 7126bf19c94SChristoph Hellwig sync 7136bf19c94SChristoph Hellwig fi 7146bf19c94SChristoph Hellwig 7156bf19c94SChristoph Hellwig if $showme 7166bf19c94SChristoph Hellwig then 7176bf19c94SChristoph Hellwig echo 7186bf19c94SChristoph Hellwig continue 7196bf19c94SChristoph Hellwig elif [ -f expunged ] && $expunge && egrep "^$seq([ ]|\$)" expunged >/dev/null 7206bf19c94SChristoph Hellwig then 7216bf19c94SChristoph Hellwig echo " - expunged" 7226bf19c94SChristoph Hellwig rm -f $seq.out.bad 7236bf19c94SChristoph Hellwig echo "/^$seq\$/d" >>$tmp.expunged 724e8f8624dSMax Reitz elif [ ! -f "$source_iotests/$seq" ] 7256bf19c94SChristoph Hellwig then 7266bf19c94SChristoph Hellwig echo " - no such test?" 7276bf19c94SChristoph Hellwig echo "/^$seq\$/d" >>$tmp.expunged 7286bf19c94SChristoph Hellwig else 7296bf19c94SChristoph Hellwig # really going to try and run this one 7306bf19c94SChristoph Hellwig # 7316bf19c94SChristoph Hellwig rm -f $seq.out.bad 73236bd4228SDaniel P. Berrange lasttime=`sed -n -e "/^$seq /s/.* //p" <$TIMESTAMP_FILE` 7336bf19c94SChristoph Hellwig if [ "X$lasttime" != X ]; then 734b43671f8SEric Blake printf %s " ${lasttime}s ..." 7356bf19c94SChristoph Hellwig else 736b43671f8SEric Blake printf " " # prettier output with timestamps. 7376bf19c94SChristoph Hellwig fi 7386bf19c94SChristoph Hellwig rm -f core $seq.notrun 7396bf19c94SChristoph Hellwig 7406bf19c94SChristoph Hellwig start=`_wallclock` 741b43671f8SEric Blake $timestamp && printf %s " [$(date "+%T")]" 742ea81ca9dSMax Reitz 743ea81ca9dSMax Reitz if [ "$(head -n 1 "$source_iotests/$seq")" == "#!/usr/bin/env python" ]; then 744ea81ca9dSMax Reitz run_command="$PYTHON $seq" 745ea81ca9dSMax Reitz else 746ea81ca9dSMax Reitz run_command="./$seq" 747ea81ca9dSMax Reitz fi 748e8f8624dSMax Reitz export OUTPUT_DIR=$PWD 749aa4f592aSFam Zheng if $debug; then 750aa4f592aSFam Zheng (cd "$source_iotests"; 751aa4f592aSFam Zheng MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ 752aa4f592aSFam Zheng $run_command -d 2>&1 | tee $tmp.out) 753aa4f592aSFam Zheng else 754e8f8624dSMax Reitz (cd "$source_iotests"; 75504129606SStefan Hajnoczi MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ 756ea81ca9dSMax Reitz $run_command >$tmp.out 2>&1) 757aa4f592aSFam Zheng fi 7586bf19c94SChristoph Hellwig sts=$? 7596bf19c94SChristoph Hellwig $timestamp && _timestamp 7606bf19c94SChristoph Hellwig stop=`_wallclock` 7616bf19c94SChristoph Hellwig 7626bf19c94SChristoph Hellwig if [ -f core ] 7636bf19c94SChristoph Hellwig then 764b43671f8SEric Blake printf " [dumped core]" 7656bf19c94SChristoph Hellwig mv core $seq.core 7666bf19c94SChristoph Hellwig err=true 7676bf19c94SChristoph Hellwig fi 7686bf19c94SChristoph Hellwig 7696bf19c94SChristoph Hellwig if [ -f $seq.notrun ] 7706bf19c94SChristoph Hellwig then 771b43671f8SEric Blake $timestamp || printf " [not run] " 772b43671f8SEric Blake $timestamp && echo " [not run]" && printf %s " $seq -- " 7736bf19c94SChristoph Hellwig cat $seq.notrun 7746bf19c94SChristoph Hellwig notrun="$notrun $seq" 7756bf19c94SChristoph Hellwig else 7766bf19c94SChristoph Hellwig if [ $sts -ne 0 ] 7776bf19c94SChristoph Hellwig then 778b43671f8SEric Blake printf %s " [failed, exit status $sts]" 7796bf19c94SChristoph Hellwig err=true 7806bf19c94SChristoph Hellwig fi 7818f94b077SKevin Wolf 782e8f8624dSMax Reitz reference="$source_iotests/$seq.out" 783e166b414SBo Tu reference_machine="$source_iotests/$seq.$QEMU_DEFAULT_MACHINE.out" 784e166b414SBo Tu if [ -f "$reference_machine" ]; then 785e166b414SBo Tu reference="$reference_machine" 786e166b414SBo Tu fi 787e166b414SBo Tu 788217a0683SStefan Hajnoczi reference_format="$source_iotests/$seq.out.$IMGFMT" 789217a0683SStefan Hajnoczi if [ -f "$reference_format" ]; then 790217a0683SStefan Hajnoczi reference="$reference_format" 791217a0683SStefan Hajnoczi fi 792217a0683SStefan Hajnoczi 7933baa8449SFam Zheng if [ "$CACHEMODE" = "none" ]; then 794e8f8624dSMax Reitz [ -f "$source_iotests/$seq.out.nocache" ] && reference="$source_iotests/$seq.out.nocache" 7958f94b077SKevin Wolf fi 7968f94b077SKevin Wolf 797e8f8624dSMax Reitz if [ ! -f "$reference" ] 7986bf19c94SChristoph Hellwig then 7996bf19c94SChristoph Hellwig echo " - no qualified output" 8006bf19c94SChristoph Hellwig err=true 8016bf19c94SChristoph Hellwig else 802e8f8624dSMax Reitz if diff -w "$reference" $tmp.out >/dev/null 2>&1 8036bf19c94SChristoph Hellwig then 8046bf19c94SChristoph Hellwig echo "" 8056bf19c94SChristoph Hellwig if $err 8066bf19c94SChristoph Hellwig then 8076bf19c94SChristoph Hellwig : 8086bf19c94SChristoph Hellwig else 8096bf19c94SChristoph Hellwig echo "$seq `expr $stop - $start`" >>$tmp.time 8106bf19c94SChristoph Hellwig fi 8116bf19c94SChristoph Hellwig else 8126bf19c94SChristoph Hellwig echo " - output mismatch (see $seq.out.bad)" 8136bf19c94SChristoph Hellwig mv $tmp.out $seq.out.bad 81463ca8406SEric Blake $diff -w "$reference" "$PWD"/$seq.out.bad 8156bf19c94SChristoph Hellwig err=true 8166bf19c94SChristoph Hellwig fi 8176bf19c94SChristoph Hellwig fi 8186bf19c94SChristoph Hellwig fi 8196bf19c94SChristoph Hellwig 8206bf19c94SChristoph Hellwig fi 8216bf19c94SChristoph Hellwig 8226bf19c94SChristoph Hellwig # come here for each test, except when $showme is true 8236bf19c94SChristoph Hellwig # 8246bf19c94SChristoph Hellwig if $err 8256bf19c94SChristoph Hellwig then 8266bf19c94SChristoph Hellwig bad="$bad $seq" 8276bf19c94SChristoph Hellwig n_bad=`expr $n_bad + 1` 8286bf19c94SChristoph Hellwig quick=false 8296bf19c94SChristoph Hellwig fi 8306bf19c94SChristoph Hellwig [ -f $seq.notrun ] || try=`expr $try + 1` 8316bf19c94SChristoph Hellwig 8326bf19c94SChristoph Hellwig seq="after_$seq" 8336bf19c94SChristoph Hellwigdone 8346bf19c94SChristoph Hellwig 8356bf19c94SChristoph Hellwiginterrupt=false 8366bf19c94SChristoph Hellwigstatus=`expr $n_bad` 8376bf19c94SChristoph Hellwigexit 838