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 9509d653e6SPaolo Bonzini realpath -- "$(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 137*8803714bSEric Blake# Save current tty settings, since an aborting qemu call may leave things 138*8803714bSEric Blake# screwed up 139*8803714bSEric BlakeSTTY_RESTORE= 140*8803714bSEric Blakeif test -t 0; then 141*8803714bSEric Blake STTY_RESTORE=$(stty -g) 142*8803714bSEric Blakefi 143*8803714bSEric 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 IMGFMT_GENERIC=false 28809d653e6SPaolo Bonzini xpand=false 28909d653e6SPaolo Bonzini ;; 29009d653e6SPaolo Bonzini 29109d653e6SPaolo Bonzini -qcow) 29209d653e6SPaolo Bonzini IMGFMT=qcow 29309d653e6SPaolo Bonzini xpand=false 29409d653e6SPaolo Bonzini ;; 29509d653e6SPaolo Bonzini 29609d653e6SPaolo Bonzini -qcow2) 29709d653e6SPaolo Bonzini IMGFMT=qcow2 29809d653e6SPaolo Bonzini xpand=false 29909d653e6SPaolo Bonzini ;; 30009d653e6SPaolo Bonzini 30109d653e6SPaolo Bonzini -luks) 30209d653e6SPaolo Bonzini IMGOPTSSYNTAX=true 30309d653e6SPaolo Bonzini IMGFMT=luks 30409d653e6SPaolo Bonzini IMGKEYSECRET=123456 30509d653e6SPaolo Bonzini xpand=false 30609d653e6SPaolo Bonzini ;; 30709d653e6SPaolo Bonzini 30809d653e6SPaolo Bonzini -qed) 30909d653e6SPaolo Bonzini IMGFMT=qed 31009d653e6SPaolo Bonzini xpand=false 31109d653e6SPaolo Bonzini ;; 31209d653e6SPaolo Bonzini 31309d653e6SPaolo Bonzini -vdi) 31409d653e6SPaolo Bonzini IMGFMT=vdi 31509d653e6SPaolo Bonzini xpand=false 31609d653e6SPaolo Bonzini ;; 31709d653e6SPaolo Bonzini 31809d653e6SPaolo Bonzini -vmdk) 31909d653e6SPaolo Bonzini IMGFMT=vmdk 32009d653e6SPaolo Bonzini xpand=false 32109d653e6SPaolo Bonzini ;; 32209d653e6SPaolo Bonzini 32309d653e6SPaolo Bonzini -vpc) 32409d653e6SPaolo Bonzini IMGFMT=vpc 32509d653e6SPaolo Bonzini xpand=false 32609d653e6SPaolo Bonzini ;; 32709d653e6SPaolo Bonzini 32809d653e6SPaolo Bonzini -vhdx) 32909d653e6SPaolo Bonzini IMGFMT=vhdx 33009d653e6SPaolo Bonzini xpand=false 33109d653e6SPaolo Bonzini ;; 33209d653e6SPaolo Bonzini 33309d653e6SPaolo Bonzini -file) 33409d653e6SPaolo Bonzini IMGPROTO=file 33509d653e6SPaolo Bonzini xpand=false 33609d653e6SPaolo Bonzini ;; 33709d653e6SPaolo Bonzini 33809d653e6SPaolo Bonzini -rbd) 33909d653e6SPaolo Bonzini IMGPROTO=rbd 34009d653e6SPaolo Bonzini xpand=false 34109d653e6SPaolo Bonzini ;; 34209d653e6SPaolo Bonzini 34309d653e6SPaolo Bonzini -sheepdog) 34409d653e6SPaolo Bonzini IMGPROTO=sheepdog 34509d653e6SPaolo Bonzini xpand=false 34609d653e6SPaolo Bonzini ;; 34709d653e6SPaolo Bonzini 34809d653e6SPaolo Bonzini -nbd) 34909d653e6SPaolo Bonzini IMGPROTO=nbd 35009d653e6SPaolo Bonzini xpand=false 35109d653e6SPaolo Bonzini ;; 35209d653e6SPaolo Bonzini 35309d653e6SPaolo Bonzini -vxhs) 35409d653e6SPaolo Bonzini IMGPROTO=vxhs 35509d653e6SPaolo Bonzini xpand=false 35609d653e6SPaolo Bonzini ;; 35709d653e6SPaolo Bonzini 35809d653e6SPaolo Bonzini -ssh) 35909d653e6SPaolo Bonzini IMGPROTO=ssh 36009d653e6SPaolo Bonzini xpand=false 36109d653e6SPaolo Bonzini ;; 36209d653e6SPaolo Bonzini 36309d653e6SPaolo Bonzini -nfs) 36409d653e6SPaolo Bonzini IMGPROTO=nfs 36509d653e6SPaolo Bonzini xpand=false 36609d653e6SPaolo Bonzini ;; 36709d653e6SPaolo Bonzini 36809d653e6SPaolo Bonzini -nocache) 36909d653e6SPaolo Bonzini CACHEMODE="none" 37009d653e6SPaolo Bonzini CACHEMODE_IS_DEFAULT=false 37109d653e6SPaolo Bonzini xpand=false 37209d653e6SPaolo Bonzini ;; 37309d653e6SPaolo Bonzini 37409d653e6SPaolo Bonzini -misalign) 37509d653e6SPaolo Bonzini QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --misalign" 37609d653e6SPaolo Bonzini xpand=false 37709d653e6SPaolo Bonzini ;; 37809d653e6SPaolo Bonzini 37909d653e6SPaolo Bonzini -valgrind) 38009d653e6SPaolo Bonzini VALGRIND_QEMU='y' 38109d653e6SPaolo Bonzini xpand=false 38209d653e6SPaolo Bonzini ;; 38309d653e6SPaolo Bonzini 38409d653e6SPaolo Bonzini -g) # -g group ... pick from group file 38509d653e6SPaolo Bonzini group=true 38609d653e6SPaolo Bonzini xpand=false 38709d653e6SPaolo Bonzini ;; 38809d653e6SPaolo Bonzini 38909d653e6SPaolo Bonzini -xdiff) # graphical diff mode 39009d653e6SPaolo Bonzini xpand=false 39109d653e6SPaolo Bonzini 39209d653e6SPaolo Bonzini if [ ! -z "$DISPLAY" ] 39309d653e6SPaolo Bonzini then 39409d653e6SPaolo Bonzini command -v xdiff >/dev/null 2>&1 && diff=xdiff 39509d653e6SPaolo Bonzini command -v gdiff >/dev/null 2>&1 && diff=gdiff 39609d653e6SPaolo Bonzini command -v tkdiff >/dev/null 2>&1 && diff=tkdiff 39709d653e6SPaolo Bonzini command -v xxdiff >/dev/null 2>&1 && diff=xxdiff 39809d653e6SPaolo Bonzini fi 39909d653e6SPaolo Bonzini ;; 40009d653e6SPaolo Bonzini 40109d653e6SPaolo Bonzini -n) # show me, don't do it 40209d653e6SPaolo Bonzini showme=true 40309d653e6SPaolo Bonzini xpand=false 40409d653e6SPaolo Bonzini ;; 40509d653e6SPaolo Bonzini -o) 40609d653e6SPaolo Bonzini imgopts=true 40709d653e6SPaolo Bonzini xpand=false 40809d653e6SPaolo Bonzini ;; 40909d653e6SPaolo Bonzini -c) 41009d653e6SPaolo Bonzini cachemode=true 41109d653e6SPaolo Bonzini xpand=false 41209d653e6SPaolo Bonzini ;; 41309d653e6SPaolo Bonzini -T) # turn on timestamp output 41409d653e6SPaolo Bonzini timestamp=true 41509d653e6SPaolo Bonzini xpand=false 41609d653e6SPaolo Bonzini ;; 41709d653e6SPaolo Bonzini 41809d653e6SPaolo Bonzini -v) 41909d653e6SPaolo Bonzini verbose=true 42009d653e6SPaolo Bonzini xpand=false 42109d653e6SPaolo Bonzini ;; 42209d653e6SPaolo Bonzini -d) 42309d653e6SPaolo Bonzini debug=true 42409d653e6SPaolo Bonzini xpand=false 42509d653e6SPaolo Bonzini ;; 42609d653e6SPaolo Bonzini -x) # -x group ... exclude from group file 42709d653e6SPaolo Bonzini xgroup=true 42809d653e6SPaolo Bonzini xpand=false 42909d653e6SPaolo Bonzini ;; 43009d653e6SPaolo Bonzini '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]') 43109d653e6SPaolo Bonzini echo "No tests?" 43209d653e6SPaolo Bonzini status=1 43309d653e6SPaolo Bonzini exit $status 43409d653e6SPaolo Bonzini ;; 43509d653e6SPaolo Bonzini 43609d653e6SPaolo Bonzini [0-9]*-[0-9]*) 43709d653e6SPaolo Bonzini eval `echo $r | sed -e 's/^/start=/' -e 's/-/ end=/'` 43809d653e6SPaolo Bonzini ;; 43909d653e6SPaolo Bonzini 44009d653e6SPaolo Bonzini [0-9]*-) 44109d653e6SPaolo Bonzini eval `echo $r | sed -e 's/^/start=/' -e 's/-//'` 44209d653e6SPaolo 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/.* //'` 44309d653e6SPaolo Bonzini if [ -z "$end" ] 44409d653e6SPaolo Bonzini then 44509d653e6SPaolo Bonzini echo "No tests in range \"$r\"?" 44609d653e6SPaolo Bonzini status=1 44709d653e6SPaolo Bonzini exit $status 44809d653e6SPaolo Bonzini fi 44909d653e6SPaolo Bonzini ;; 45009d653e6SPaolo Bonzini 45109d653e6SPaolo Bonzini *) 45209d653e6SPaolo Bonzini start=$r 45309d653e6SPaolo Bonzini end=$r 45409d653e6SPaolo Bonzini ;; 45509d653e6SPaolo Bonzini 45609d653e6SPaolo Bonzini esac 45709d653e6SPaolo Bonzini 45809d653e6SPaolo Bonzini # get rid of leading 0s as can be interpreted as octal 45909d653e6SPaolo Bonzini start=`echo $start | sed 's/^0*//'` 46009d653e6SPaolo Bonzini end=`echo $end | sed 's/^0*//'` 46109d653e6SPaolo Bonzini 46209d653e6SPaolo Bonzini if $xpand 46309d653e6SPaolo Bonzini then 46409d653e6SPaolo Bonzini have_test_arg=true 46509d653e6SPaolo Bonzini awk </dev/null ' 46609d653e6SPaolo BonziniBEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \ 46709d653e6SPaolo Bonzini | while read id 46809d653e6SPaolo Bonzini do 46909d653e6SPaolo Bonzini if grep -s "^$id " "$source_iotests/group" >/dev/null 47009d653e6SPaolo Bonzini then 47109d653e6SPaolo Bonzini # in group file ... OK 47209d653e6SPaolo Bonzini echo $id >>$tmp.list 47309d653e6SPaolo Bonzini else 47409d653e6SPaolo Bonzini if [ -f expunged ] && $expunge && egrep "^$id([ ]|\$)" expunged >/dev/null 47509d653e6SPaolo Bonzini then 47609d653e6SPaolo Bonzini # expunged ... will be reported, but not run, later 47709d653e6SPaolo Bonzini echo $id >>$tmp.list 47809d653e6SPaolo Bonzini else 47909d653e6SPaolo Bonzini # oops 48009d653e6SPaolo Bonzini if [ "$start" == "$end" -a "$id" == "$end" ] 48109d653e6SPaolo Bonzini then 48209d653e6SPaolo Bonzini echo "$id - unknown test" 48309d653e6SPaolo Bonzini exit 1 48409d653e6SPaolo Bonzini else 48509d653e6SPaolo Bonzini echo "$id - unknown test, ignored" 48609d653e6SPaolo Bonzini fi 48709d653e6SPaolo Bonzini fi 48809d653e6SPaolo Bonzini fi 48909d653e6SPaolo Bonzini done || exit 1 49009d653e6SPaolo Bonzini fi 49109d653e6SPaolo Bonzini 49209d653e6SPaolo Bonzinidone 49309d653e6SPaolo Bonzini 49409d653e6SPaolo Bonzini# Set qemu-io cache mode with $CACHEMODE we have 49509d653e6SPaolo BonziniQEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --cache $CACHEMODE" 49609d653e6SPaolo Bonzini 49709d653e6SPaolo BonziniQEMU_IO_OPTIONS_NO_FMT="$QEMU_IO_OPTIONS" 49809d653e6SPaolo Bonziniif [ "$IMGOPTSSYNTAX" != "true" ]; then 49909d653e6SPaolo Bonzini QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS -f $IMGFMT" 50009d653e6SPaolo Bonzinifi 50109d653e6SPaolo Bonzini 50209d653e6SPaolo Bonzini# Set default options for qemu-img create -o if they were not specified 50309d653e6SPaolo Bonziniif [ "$IMGFMT" == "qcow2" ] && ! (echo "$IMGOPTS" | grep "compat=" > /dev/null); then 50409d653e6SPaolo Bonzini IMGOPTS=$(_optstr_add "$IMGOPTS" "compat=1.1") 50509d653e6SPaolo Bonzinifi 50609d653e6SPaolo Bonziniif [ "$IMGFMT" == "luks" ] && ! (echo "$IMGOPTS" | grep "iter-time=" > /dev/null); then 50709d653e6SPaolo Bonzini IMGOPTS=$(_optstr_add "$IMGOPTS" "iter-time=10") 50809d653e6SPaolo Bonzinifi 50909d653e6SPaolo Bonzini 51009d653e6SPaolo Bonziniif [ -z "$SAMPLE_IMG_DIR" ]; then 51109d653e6SPaolo Bonzini SAMPLE_IMG_DIR="$source_iotests/sample_images" 51209d653e6SPaolo Bonzinifi 51309d653e6SPaolo Bonzini 51409d653e6SPaolo Bonziniexport TEST_DIR 51509d653e6SPaolo Bonziniexport SAMPLE_IMG_DIR 51609d653e6SPaolo Bonzini 51709d653e6SPaolo Bonziniif [ -s $tmp.list ] 51809d653e6SPaolo Bonzinithen 51909d653e6SPaolo Bonzini # found some valid test numbers ... this is good 52009d653e6SPaolo Bonzini : 52109d653e6SPaolo Bonzinielse 52209d653e6SPaolo Bonzini if $have_test_arg 52309d653e6SPaolo Bonzini then 52409d653e6SPaolo Bonzini # had test numbers, but none in group file ... do nothing 52509d653e6SPaolo Bonzini touch $tmp.list 52609d653e6SPaolo Bonzini else 52709d653e6SPaolo Bonzini # no test numbers, do everything from group file 52809d653e6SPaolo Bonzini sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' <"$source_iotests/group" >$tmp.list 52909d653e6SPaolo Bonzini fi 53009d653e6SPaolo Bonzinifi 53109d653e6SPaolo Bonzini 53209d653e6SPaolo Bonzini# should be sort -n, but this did not work for Linux when this 53309d653e6SPaolo Bonzini# was ported from IRIX 53409d653e6SPaolo Bonzini# 53509d653e6SPaolo Bonzinilist=`sort $tmp.list` 53609d653e6SPaolo Bonzinirm -f $tmp.list $tmp.tmp $tmp.sed 53709d653e6SPaolo Bonzini 53809d653e6SPaolo Bonziniif [ -z "$QEMU_PROG" ] 53909d653e6SPaolo Bonzinithen 54009d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu" ]; then 54109d653e6SPaolo Bonzini export QEMU_PROG="$build_iotests/qemu" 54209d653e6SPaolo Bonzini elif [ -x "$build_root/$arch-softmmu/qemu-system-$arch" ]; then 54309d653e6SPaolo Bonzini export QEMU_PROG="$build_root/$arch-softmmu/qemu-system-$arch" 54409d653e6SPaolo Bonzini else 54509d653e6SPaolo Bonzini pushd "$build_root" > /dev/null 54609d653e6SPaolo Bonzini for binary in *-softmmu/qemu-system-* 54709d653e6SPaolo Bonzini do 54809d653e6SPaolo Bonzini if [ -x "$binary" ] 54909d653e6SPaolo Bonzini then 55009d653e6SPaolo Bonzini export QEMU_PROG="$build_root/$binary" 55109d653e6SPaolo Bonzini break 55209d653e6SPaolo Bonzini fi 55309d653e6SPaolo Bonzini done 55409d653e6SPaolo Bonzini popd > /dev/null 55509d653e6SPaolo Bonzini [ "$QEMU_PROG" = "" ] && _init_error "qemu not found" 55609d653e6SPaolo Bonzini fi 55709d653e6SPaolo Bonzinifi 55809d653e6SPaolo Bonziniexport QEMU_PROG=$(realpath -- "$(type -p "$QEMU_PROG")") 55909d653e6SPaolo Bonzini 56009d653e6SPaolo Bonziniif [ -z "$QEMU_IMG_PROG" ]; then 56109d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-img" ]; then 56209d653e6SPaolo Bonzini export QEMU_IMG_PROG="$build_iotests/qemu-img" 56309d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-img" ]; then 56409d653e6SPaolo Bonzini export QEMU_IMG_PROG="$build_root/qemu-img" 56509d653e6SPaolo Bonzini else 56609d653e6SPaolo Bonzini _init_error "qemu-img not found" 56709d653e6SPaolo Bonzini fi 56809d653e6SPaolo Bonzinifi 56909d653e6SPaolo Bonziniexport QEMU_IMG_PROG=$(realpath -- "$(type -p "$QEMU_IMG_PROG")") 57009d653e6SPaolo Bonzini 57109d653e6SPaolo Bonziniif [ -z "$QEMU_IO_PROG" ]; then 57209d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-io" ]; then 57309d653e6SPaolo Bonzini export QEMU_IO_PROG="$build_iotests/qemu-io" 57409d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-io" ]; then 57509d653e6SPaolo Bonzini export QEMU_IO_PROG="$build_root/qemu-io" 57609d653e6SPaolo Bonzini else 57709d653e6SPaolo Bonzini _init_error "qemu-io not found" 57809d653e6SPaolo Bonzini fi 57909d653e6SPaolo Bonzinifi 58009d653e6SPaolo Bonziniexport QEMU_IO_PROG=$(realpath -- "$(type -p "$QEMU_IO_PROG")") 58109d653e6SPaolo Bonzini 58209d653e6SPaolo Bonziniif [ -z $QEMU_NBD_PROG ]; then 58309d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-nbd" ]; then 58409d653e6SPaolo Bonzini export QEMU_NBD_PROG="$build_iotests/qemu-nbd" 58509d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-nbd" ]; then 58609d653e6SPaolo Bonzini export QEMU_NBD_PROG="$build_root/qemu-nbd" 58709d653e6SPaolo Bonzini else 58809d653e6SPaolo Bonzini _init_error "qemu-nbd not found" 58909d653e6SPaolo Bonzini fi 59009d653e6SPaolo Bonzinifi 59109d653e6SPaolo Bonziniexport QEMU_NBD_PROG=$(realpath -- "$(type -p "$QEMU_NBD_PROG")") 59209d653e6SPaolo Bonzini 59309d653e6SPaolo Bonziniif [ -z "$QEMU_VXHS_PROG" ]; then 59409d653e6SPaolo Bonzini export QEMU_VXHS_PROG="`set_prog_path qnio_server`" 59509d653e6SPaolo Bonzinifi 59609d653e6SPaolo Bonzini 59709d653e6SPaolo Bonziniif [ -x "$build_iotests/socket_scm_helper" ] 59809d653e6SPaolo Bonzinithen 59909d653e6SPaolo Bonzini export SOCKET_SCM_HELPER="$build_iotests/socket_scm_helper" 60009d653e6SPaolo Bonzinifi 60109d653e6SPaolo Bonzini 60209d653e6SPaolo Bonzinidefault_machine=$($QEMU_PROG -machine help | sed -n '/(default)/ s/ .*//p') 60309d653e6SPaolo Bonzinidefault_alias_machine=$($QEMU_PROG -machine help | \ 60409d653e6SPaolo Bonzini sed -n "/(alias of $default_machine)/ { s/ .*//p; q; }") 60509d653e6SPaolo Bonziniif [[ "$default_alias_machine" ]]; then 60609d653e6SPaolo Bonzini default_machine="$default_alias_machine" 60709d653e6SPaolo Bonzinifi 60809d653e6SPaolo Bonzini 60909d653e6SPaolo Bonziniexport QEMU_DEFAULT_MACHINE="$default_machine" 61089004368SKevin Wolf 61136bd4228SDaniel P. BerrangeTIMESTAMP_FILE=check.time-$IMGPROTO-$IMGFMT 61236bd4228SDaniel P. Berrange 6136bf19c94SChristoph Hellwig_wallclock() 6146bf19c94SChristoph Hellwig{ 6159ee4b6f8SPaolo Bonzini date "+%H %M %S" | awk '{ print $1*3600 + $2*60 + $3 }' 6166bf19c94SChristoph Hellwig} 6176bf19c94SChristoph Hellwig 6186bf19c94SChristoph Hellwig_timestamp() 6196bf19c94SChristoph Hellwig{ 6206bf19c94SChristoph Hellwig now=`date "+%T"` 621b43671f8SEric Blake printf %s " [$now]" 6226bf19c94SChristoph Hellwig} 6236bf19c94SChristoph Hellwig 6246bf19c94SChristoph Hellwig_wrapup() 6256bf19c94SChristoph Hellwig{ 6266bf19c94SChristoph Hellwig if $showme 6276bf19c94SChristoph Hellwig then 6286bf19c94SChristoph Hellwig : 6296bf19c94SChristoph Hellwig elif $needwrap 6306bf19c94SChristoph Hellwig then 63136bd4228SDaniel P. Berrange if [ -f $TIMESTAMP_FILE -a -f $tmp.time ] 6326bf19c94SChristoph Hellwig then 63336bd4228SDaniel P. Berrange cat $TIMESTAMP_FILE $tmp.time \ 6349ee4b6f8SPaolo Bonzini | awk ' 6356bf19c94SChristoph Hellwig { t[$1] = $2 } 6366bf19c94SChristoph HellwigEND { if (NR > 0) { 6376bf19c94SChristoph Hellwig for (i in t) print i " " t[i] 6386bf19c94SChristoph Hellwig } 6396bf19c94SChristoph Hellwig }' \ 6406bf19c94SChristoph Hellwig | sort -n >$tmp.out 64136bd4228SDaniel P. Berrange mv $tmp.out $TIMESTAMP_FILE 6426bf19c94SChristoph Hellwig fi 6436bf19c94SChristoph Hellwig 6446bf19c94SChristoph Hellwig if [ -f $tmp.expunged ] 6456bf19c94SChristoph Hellwig then 6466bf19c94SChristoph Hellwig notrun=`wc -l <$tmp.expunged | sed -e 's/ *//g'` 6476bf19c94SChristoph Hellwig try=`expr $try - $notrun` 6486bf19c94SChristoph Hellwig list=`echo "$list" | sed -f $tmp.expunged` 6496bf19c94SChristoph Hellwig fi 6506bf19c94SChristoph Hellwig 6516bf19c94SChristoph Hellwig echo "" >>check.log 6526bf19c94SChristoph Hellwig date >>check.log 6536bf19c94SChristoph Hellwig echo $list | fmt | sed -e 's/^/ /' >>check.log 6546bf19c94SChristoph Hellwig $interrupt && echo "Interrupted!" >>check.log 6556bf19c94SChristoph Hellwig 6566bf19c94SChristoph Hellwig if [ ! -z "$notrun" ] 6576bf19c94SChristoph Hellwig then 6586bf19c94SChristoph Hellwig echo "Not run:$notrun" 6596bf19c94SChristoph Hellwig echo "Not run:$notrun" >>check.log 6606bf19c94SChristoph Hellwig fi 6616bf19c94SChristoph Hellwig if [ ! -z "$n_bad" -a $n_bad != 0 ] 6626bf19c94SChristoph Hellwig then 6636bf19c94SChristoph Hellwig echo "Failures:$bad" 6646bf19c94SChristoph Hellwig echo "Failed $n_bad of $try tests" 6656bf19c94SChristoph Hellwig echo "Failures:$bad" | fmt >>check.log 6666bf19c94SChristoph Hellwig echo "Failed $n_bad of $try tests" >>check.log 6676bf19c94SChristoph Hellwig else 6686bf19c94SChristoph Hellwig echo "Passed all $try tests" 6696bf19c94SChristoph Hellwig echo "Passed all $try tests" >>check.log 6706bf19c94SChristoph Hellwig fi 6716bf19c94SChristoph Hellwig needwrap=false 6726bf19c94SChristoph Hellwig fi 6736bf19c94SChristoph Hellwig 674*8803714bSEric Blake if test -n "$STTY_RESTORE"; then 675*8803714bSEric Blake stty $STTY_RESTORE 676*8803714bSEric Blake fi 6770145b4e1SSascha Silbe rm -f "${TEST_DIR}"/*.out "${TEST_DIR}"/*.err "${TEST_DIR}"/*.time 6780145b4e1SSascha Silbe rm -f "${TEST_DIR}"/check.pid "${TEST_DIR}"/check.sts 6796bf19c94SChristoph Hellwig rm -f $tmp.* 6806bf19c94SChristoph Hellwig} 6816bf19c94SChristoph Hellwig 6826bf19c94SChristoph Hellwigtrap "_wrapup; exit \$status" 0 1 2 3 15 6836bf19c94SChristoph Hellwig 68436bd4228SDaniel P. Berrange[ -f $TIMESTAMP_FILE ] || touch $TIMESTAMP_FILE 6856bf19c94SChristoph Hellwig 6866bf19c94SChristoph HellwigFULL_IMGFMT_DETAILS=`_full_imgfmt_details` 6876bf19c94SChristoph HellwigFULL_HOST_DETAILS=`_full_platform_details` 6886bf19c94SChristoph Hellwig 6896bf19c94SChristoph Hellwigcat <<EOF 690934659c4SMax ReitzQEMU -- "$QEMU_PROG" $QEMU_OPTIONS 691934659c4SMax ReitzQEMU_IMG -- "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS 692934659c4SMax ReitzQEMU_IO -- "$QEMU_IO_PROG" $QEMU_IO_OPTIONS 693934659c4SMax ReitzQEMU_NBD -- "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS 6946bf19c94SChristoph HellwigIMGFMT -- $FULL_IMGFMT_DETAILS 695657c572aSCleber RosaIMGPROTO -- $IMGPROTO 6966bf19c94SChristoph HellwigPLATFORM -- $FULL_HOST_DETAILS 697b8aff7d6SFam ZhengTEST_DIR -- $TEST_DIR 69830b005d9SWenchao XiaSOCKET_SCM_HELPER -- $SOCKET_SCM_HELPER 6996bf19c94SChristoph Hellwig 7006bf19c94SChristoph HellwigEOF 7016bf19c94SChristoph Hellwig 7026bf19c94SChristoph Hellwigseq="check" 7036bf19c94SChristoph Hellwig 7046bf19c94SChristoph Hellwig[ -n "$TESTS_REMAINING_LOG" ] && echo $list > $TESTS_REMAINING_LOG 7056bf19c94SChristoph Hellwig 7066bf19c94SChristoph Hellwigfor seq in $list 7076bf19c94SChristoph Hellwigdo 7086bf19c94SChristoph Hellwig err=false 709b43671f8SEric Blake printf %s "$seq" 7106bf19c94SChristoph Hellwig if [ -n "$TESTS_REMAINING_LOG" ] ; then 7116bf19c94SChristoph Hellwig sed -e "s/$seq//" -e 's/ / /' -e 's/^ *//' $TESTS_REMAINING_LOG > $TESTS_REMAINING_LOG.tmp 7126bf19c94SChristoph Hellwig mv $TESTS_REMAINING_LOG.tmp $TESTS_REMAINING_LOG 7136bf19c94SChristoph Hellwig sync 7146bf19c94SChristoph Hellwig fi 7156bf19c94SChristoph Hellwig 7166bf19c94SChristoph Hellwig if $showme 7176bf19c94SChristoph Hellwig then 7186bf19c94SChristoph Hellwig echo 7196bf19c94SChristoph Hellwig continue 7206bf19c94SChristoph Hellwig elif [ -f expunged ] && $expunge && egrep "^$seq([ ]|\$)" expunged >/dev/null 7216bf19c94SChristoph Hellwig then 7226bf19c94SChristoph Hellwig echo " - expunged" 7236bf19c94SChristoph Hellwig rm -f $seq.out.bad 7246bf19c94SChristoph Hellwig echo "/^$seq\$/d" >>$tmp.expunged 725e8f8624dSMax Reitz elif [ ! -f "$source_iotests/$seq" ] 7266bf19c94SChristoph Hellwig then 7276bf19c94SChristoph Hellwig echo " - no such test?" 7286bf19c94SChristoph Hellwig echo "/^$seq\$/d" >>$tmp.expunged 7296bf19c94SChristoph Hellwig else 7306bf19c94SChristoph Hellwig # really going to try and run this one 7316bf19c94SChristoph Hellwig # 7326bf19c94SChristoph Hellwig rm -f $seq.out.bad 73336bd4228SDaniel P. Berrange lasttime=`sed -n -e "/^$seq /s/.* //p" <$TIMESTAMP_FILE` 7346bf19c94SChristoph Hellwig if [ "X$lasttime" != X ]; then 735b43671f8SEric Blake printf %s " ${lasttime}s ..." 7366bf19c94SChristoph Hellwig else 737b43671f8SEric Blake printf " " # prettier output with timestamps. 7386bf19c94SChristoph Hellwig fi 7396bf19c94SChristoph Hellwig rm -f core $seq.notrun 7406bf19c94SChristoph Hellwig 7416bf19c94SChristoph Hellwig start=`_wallclock` 742b43671f8SEric Blake $timestamp && printf %s " [$(date "+%T")]" 743ea81ca9dSMax Reitz 744ea81ca9dSMax Reitz if [ "$(head -n 1 "$source_iotests/$seq")" == "#!/usr/bin/env python" ]; then 745ea81ca9dSMax Reitz run_command="$PYTHON $seq" 746ea81ca9dSMax Reitz else 747ea81ca9dSMax Reitz run_command="./$seq" 748ea81ca9dSMax Reitz fi 749e8f8624dSMax Reitz export OUTPUT_DIR=$PWD 750aa4f592aSFam Zheng if $debug; then 751aa4f592aSFam Zheng (cd "$source_iotests"; 752aa4f592aSFam Zheng MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ 753aa4f592aSFam Zheng $run_command -d 2>&1 | tee $tmp.out) 754aa4f592aSFam Zheng else 755e8f8624dSMax Reitz (cd "$source_iotests"; 75604129606SStefan Hajnoczi MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ 757ea81ca9dSMax Reitz $run_command >$tmp.out 2>&1) 758aa4f592aSFam Zheng fi 7596bf19c94SChristoph Hellwig sts=$? 7606bf19c94SChristoph Hellwig $timestamp && _timestamp 7616bf19c94SChristoph Hellwig stop=`_wallclock` 7626bf19c94SChristoph Hellwig 7636bf19c94SChristoph Hellwig if [ -f core ] 7646bf19c94SChristoph Hellwig then 765b43671f8SEric Blake printf " [dumped core]" 7666bf19c94SChristoph Hellwig mv core $seq.core 7676bf19c94SChristoph Hellwig err=true 7686bf19c94SChristoph Hellwig fi 7696bf19c94SChristoph Hellwig 7706bf19c94SChristoph Hellwig if [ -f $seq.notrun ] 7716bf19c94SChristoph Hellwig then 772b43671f8SEric Blake $timestamp || printf " [not run] " 773b43671f8SEric Blake $timestamp && echo " [not run]" && printf %s " $seq -- " 7746bf19c94SChristoph Hellwig cat $seq.notrun 7756bf19c94SChristoph Hellwig notrun="$notrun $seq" 7766bf19c94SChristoph Hellwig else 7776bf19c94SChristoph Hellwig if [ $sts -ne 0 ] 7786bf19c94SChristoph Hellwig then 779b43671f8SEric Blake printf %s " [failed, exit status $sts]" 7806bf19c94SChristoph Hellwig err=true 7816bf19c94SChristoph Hellwig fi 7828f94b077SKevin Wolf 783e8f8624dSMax Reitz reference="$source_iotests/$seq.out" 784e166b414SBo Tu reference_machine="$source_iotests/$seq.$QEMU_DEFAULT_MACHINE.out" 785e166b414SBo Tu if [ -f "$reference_machine" ]; then 786e166b414SBo Tu reference="$reference_machine" 787e166b414SBo Tu fi 788e166b414SBo Tu 789217a0683SStefan Hajnoczi reference_format="$source_iotests/$seq.out.$IMGFMT" 790217a0683SStefan Hajnoczi if [ -f "$reference_format" ]; then 791217a0683SStefan Hajnoczi reference="$reference_format" 792217a0683SStefan Hajnoczi fi 793217a0683SStefan Hajnoczi 7943baa8449SFam Zheng if [ "$CACHEMODE" = "none" ]; then 795e8f8624dSMax Reitz [ -f "$source_iotests/$seq.out.nocache" ] && reference="$source_iotests/$seq.out.nocache" 7968f94b077SKevin Wolf fi 7978f94b077SKevin Wolf 798e8f8624dSMax Reitz if [ ! -f "$reference" ] 7996bf19c94SChristoph Hellwig then 8006bf19c94SChristoph Hellwig echo " - no qualified output" 8016bf19c94SChristoph Hellwig err=true 8026bf19c94SChristoph Hellwig else 803e8f8624dSMax Reitz if diff -w "$reference" $tmp.out >/dev/null 2>&1 8046bf19c94SChristoph Hellwig then 8056bf19c94SChristoph Hellwig echo "" 8066bf19c94SChristoph Hellwig if $err 8076bf19c94SChristoph Hellwig then 8086bf19c94SChristoph Hellwig : 8096bf19c94SChristoph Hellwig else 8106bf19c94SChristoph Hellwig echo "$seq `expr $stop - $start`" >>$tmp.time 8116bf19c94SChristoph Hellwig fi 8126bf19c94SChristoph Hellwig else 8136bf19c94SChristoph Hellwig echo " - output mismatch (see $seq.out.bad)" 8146bf19c94SChristoph Hellwig mv $tmp.out $seq.out.bad 81593e53fb6SFam Zheng $diff -w "$reference" $(realpath $seq.out.bad) 8166bf19c94SChristoph Hellwig err=true 8176bf19c94SChristoph Hellwig fi 8186bf19c94SChristoph Hellwig fi 8196bf19c94SChristoph Hellwig fi 8206bf19c94SChristoph Hellwig 8216bf19c94SChristoph Hellwig fi 8226bf19c94SChristoph Hellwig 8236bf19c94SChristoph Hellwig # come here for each test, except when $showme is true 8246bf19c94SChristoph Hellwig # 8256bf19c94SChristoph Hellwig if $err 8266bf19c94SChristoph Hellwig then 8276bf19c94SChristoph Hellwig bad="$bad $seq" 8286bf19c94SChristoph Hellwig n_bad=`expr $n_bad + 1` 8296bf19c94SChristoph Hellwig quick=false 8306bf19c94SChristoph Hellwig fi 8316bf19c94SChristoph Hellwig [ -f $seq.notrun ] || try=`expr $try + 1` 8326bf19c94SChristoph Hellwig 8336bf19c94SChristoph Hellwig seq="after_$seq" 8346bf19c94SChristoph Hellwigdone 8356bf19c94SChristoph Hellwig 8366bf19c94SChristoph Hellwiginterrupt=false 8376bf19c94SChristoph Hellwigstatus=`expr $n_bad` 8386bf19c94SChristoph Hellwigexit 839