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{ 834a9e751fSMao Zhongyi os=$(uname -s) 844a9e751fSMao Zhongyi host=$(hostname -s) 854a9e751fSMao Zhongyi kernel=$(uname -r) 864a9e751fSMao Zhongyi 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{ 934a9e751fSMao Zhongyi 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 102e8d81a61SMao Zhongyi 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 1504a9e751fSMao Zhongyi group_list=$(sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{ 15109d653e6SPaolo Bonzinis/ .*//p 1524a9e751fSMao Zhongyi}') 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 1764a9e751fSMao Zhongyi group_list=$(sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{ 17709d653e6SPaolo Bonzinis/ .*//p 1784a9e751fSMao Zhongyi}') 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 1964a9e751fSMao Zhongyi 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 240*76f1cf0aSyuchenlin -dmg test dmg 24109d653e6SPaolo Bonzini 24209d653e6SPaolo Bonziniimage protocol options 24309d653e6SPaolo Bonzini -file test file (default) 24409d653e6SPaolo Bonzini -rbd test rbd 24509d653e6SPaolo Bonzini -sheepdog test sheepdog 24609d653e6SPaolo Bonzini -nbd test nbd 24709d653e6SPaolo Bonzini -ssh test ssh 24809d653e6SPaolo Bonzini -nfs test nfs 24909d653e6SPaolo Bonzini -vxhs test vxhs 25009d653e6SPaolo Bonzini 25109d653e6SPaolo Bonziniother options 25209d653e6SPaolo Bonzini -xdiff graphical mode diff 25309d653e6SPaolo Bonzini -nocache use O_DIRECT on backing file 25409d653e6SPaolo Bonzini -misalign misalign memory allocations 25509d653e6SPaolo Bonzini -n show me, do not run tests 25609d653e6SPaolo Bonzini -o options -o options to pass to qemu-img create/convert 25709d653e6SPaolo Bonzini -T output timestamps 25809d653e6SPaolo Bonzini -c mode cache mode 25909d653e6SPaolo Bonzini 26009d653e6SPaolo Bonzinitestlist options 26109d653e6SPaolo Bonzini -g group[,group...] include tests from these groups 26209d653e6SPaolo Bonzini -x group[,group...] exclude tests from these groups 26309d653e6SPaolo Bonzini NNN include test NNN 26409d653e6SPaolo Bonzini NNN-NNN include test range (eg. 012-021) 26509d653e6SPaolo Bonzini' 26609d653e6SPaolo Bonzini exit 0 26709d653e6SPaolo Bonzini ;; 26809d653e6SPaolo Bonzini 26909d653e6SPaolo Bonzini -raw) 27009d653e6SPaolo Bonzini IMGFMT=raw 27109d653e6SPaolo Bonzini xpand=false 27209d653e6SPaolo Bonzini ;; 27309d653e6SPaolo Bonzini 27409d653e6SPaolo Bonzini -bochs) 27509d653e6SPaolo Bonzini IMGFMT=bochs 27609d653e6SPaolo Bonzini IMGFMT_GENERIC=false 27709d653e6SPaolo Bonzini xpand=false 27809d653e6SPaolo Bonzini ;; 27909d653e6SPaolo Bonzini 28009d653e6SPaolo Bonzini -cloop) 28109d653e6SPaolo Bonzini IMGFMT=cloop 28209d653e6SPaolo Bonzini IMGFMT_GENERIC=false 28309d653e6SPaolo Bonzini xpand=false 28409d653e6SPaolo Bonzini ;; 28509d653e6SPaolo Bonzini 28609d653e6SPaolo Bonzini -parallels) 28709d653e6SPaolo Bonzini IMGFMT=parallels 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 308*76f1cf0aSyuchenlin -dmg) 309*76f1cf0aSyuchenlin IMGFMT=dmg 310*76f1cf0aSyuchenlin IMGFMT_GENERIC=false 311*76f1cf0aSyuchenlin xpand=false 312*76f1cf0aSyuchenlin ;; 313*76f1cf0aSyuchenlin 31409d653e6SPaolo Bonzini -qed) 31509d653e6SPaolo Bonzini IMGFMT=qed 31609d653e6SPaolo Bonzini xpand=false 31709d653e6SPaolo Bonzini ;; 31809d653e6SPaolo Bonzini 31909d653e6SPaolo Bonzini -vdi) 32009d653e6SPaolo Bonzini IMGFMT=vdi 32109d653e6SPaolo Bonzini xpand=false 32209d653e6SPaolo Bonzini ;; 32309d653e6SPaolo Bonzini 32409d653e6SPaolo Bonzini -vmdk) 32509d653e6SPaolo Bonzini IMGFMT=vmdk 32609d653e6SPaolo Bonzini xpand=false 32709d653e6SPaolo Bonzini ;; 32809d653e6SPaolo Bonzini 32909d653e6SPaolo Bonzini -vpc) 33009d653e6SPaolo Bonzini IMGFMT=vpc 33109d653e6SPaolo Bonzini xpand=false 33209d653e6SPaolo Bonzini ;; 33309d653e6SPaolo Bonzini 33409d653e6SPaolo Bonzini -vhdx) 33509d653e6SPaolo Bonzini IMGFMT=vhdx 33609d653e6SPaolo Bonzini xpand=false 33709d653e6SPaolo Bonzini ;; 33809d653e6SPaolo Bonzini 33909d653e6SPaolo Bonzini -file) 34009d653e6SPaolo Bonzini IMGPROTO=file 34109d653e6SPaolo Bonzini xpand=false 34209d653e6SPaolo Bonzini ;; 34309d653e6SPaolo Bonzini 34409d653e6SPaolo Bonzini -rbd) 34509d653e6SPaolo Bonzini IMGPROTO=rbd 34609d653e6SPaolo Bonzini xpand=false 34709d653e6SPaolo Bonzini ;; 34809d653e6SPaolo Bonzini 34909d653e6SPaolo Bonzini -sheepdog) 35009d653e6SPaolo Bonzini IMGPROTO=sheepdog 35109d653e6SPaolo Bonzini xpand=false 35209d653e6SPaolo Bonzini ;; 35309d653e6SPaolo Bonzini 35409d653e6SPaolo Bonzini -nbd) 35509d653e6SPaolo Bonzini IMGPROTO=nbd 35609d653e6SPaolo Bonzini xpand=false 35709d653e6SPaolo Bonzini ;; 35809d653e6SPaolo Bonzini 35909d653e6SPaolo Bonzini -vxhs) 36009d653e6SPaolo Bonzini IMGPROTO=vxhs 36109d653e6SPaolo Bonzini xpand=false 36209d653e6SPaolo Bonzini ;; 36309d653e6SPaolo Bonzini 36409d653e6SPaolo Bonzini -ssh) 36509d653e6SPaolo Bonzini IMGPROTO=ssh 36609d653e6SPaolo Bonzini xpand=false 36709d653e6SPaolo Bonzini ;; 36809d653e6SPaolo Bonzini 36909d653e6SPaolo Bonzini -nfs) 37009d653e6SPaolo Bonzini IMGPROTO=nfs 37109d653e6SPaolo Bonzini xpand=false 37209d653e6SPaolo Bonzini ;; 37309d653e6SPaolo Bonzini 37409d653e6SPaolo Bonzini -nocache) 37509d653e6SPaolo Bonzini CACHEMODE="none" 37609d653e6SPaolo Bonzini CACHEMODE_IS_DEFAULT=false 37709d653e6SPaolo Bonzini xpand=false 37809d653e6SPaolo Bonzini ;; 37909d653e6SPaolo Bonzini 38009d653e6SPaolo Bonzini -misalign) 38109d653e6SPaolo Bonzini QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --misalign" 38209d653e6SPaolo Bonzini xpand=false 38309d653e6SPaolo Bonzini ;; 38409d653e6SPaolo Bonzini 38509d653e6SPaolo Bonzini -valgrind) 38609d653e6SPaolo Bonzini VALGRIND_QEMU='y' 38709d653e6SPaolo Bonzini xpand=false 38809d653e6SPaolo Bonzini ;; 38909d653e6SPaolo Bonzini 39009d653e6SPaolo Bonzini -g) # -g group ... pick from group file 39109d653e6SPaolo Bonzini group=true 39209d653e6SPaolo Bonzini xpand=false 39309d653e6SPaolo Bonzini ;; 39409d653e6SPaolo Bonzini 39509d653e6SPaolo Bonzini -xdiff) # graphical diff mode 39609d653e6SPaolo Bonzini xpand=false 39709d653e6SPaolo Bonzini 39809d653e6SPaolo Bonzini if [ ! -z "$DISPLAY" ] 39909d653e6SPaolo Bonzini then 40009d653e6SPaolo Bonzini command -v xdiff >/dev/null 2>&1 && diff=xdiff 40109d653e6SPaolo Bonzini command -v gdiff >/dev/null 2>&1 && diff=gdiff 40209d653e6SPaolo Bonzini command -v tkdiff >/dev/null 2>&1 && diff=tkdiff 40309d653e6SPaolo Bonzini command -v xxdiff >/dev/null 2>&1 && diff=xxdiff 40409d653e6SPaolo Bonzini fi 40509d653e6SPaolo Bonzini ;; 40609d653e6SPaolo Bonzini 40709d653e6SPaolo Bonzini -n) # show me, don't do it 40809d653e6SPaolo Bonzini showme=true 40909d653e6SPaolo Bonzini xpand=false 41009d653e6SPaolo Bonzini ;; 41109d653e6SPaolo Bonzini -o) 41209d653e6SPaolo Bonzini imgopts=true 41309d653e6SPaolo Bonzini xpand=false 41409d653e6SPaolo Bonzini ;; 41509d653e6SPaolo Bonzini -c) 41609d653e6SPaolo Bonzini cachemode=true 41709d653e6SPaolo Bonzini xpand=false 41809d653e6SPaolo Bonzini ;; 41909d653e6SPaolo Bonzini -T) # turn on timestamp output 42009d653e6SPaolo Bonzini timestamp=true 42109d653e6SPaolo Bonzini xpand=false 42209d653e6SPaolo Bonzini ;; 42309d653e6SPaolo Bonzini 42409d653e6SPaolo Bonzini -v) 42509d653e6SPaolo Bonzini verbose=true 42609d653e6SPaolo Bonzini xpand=false 42709d653e6SPaolo Bonzini ;; 42809d653e6SPaolo Bonzini -d) 42909d653e6SPaolo Bonzini debug=true 43009d653e6SPaolo Bonzini xpand=false 43109d653e6SPaolo Bonzini ;; 43209d653e6SPaolo Bonzini -x) # -x group ... exclude from group file 43309d653e6SPaolo Bonzini xgroup=true 43409d653e6SPaolo Bonzini xpand=false 43509d653e6SPaolo Bonzini ;; 43609d653e6SPaolo Bonzini '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]') 43709d653e6SPaolo Bonzini echo "No tests?" 43809d653e6SPaolo Bonzini status=1 43909d653e6SPaolo Bonzini exit $status 44009d653e6SPaolo Bonzini ;; 44109d653e6SPaolo Bonzini 44209d653e6SPaolo Bonzini [0-9]*-[0-9]*) 4434a9e751fSMao Zhongyi eval $(echo $r | sed -e 's/^/start=/' -e 's/-/ end=/') 44409d653e6SPaolo Bonzini ;; 44509d653e6SPaolo Bonzini 44609d653e6SPaolo Bonzini [0-9]*-) 4474a9e751fSMao Zhongyi eval $(echo $r | sed -e 's/^/start=/' -e 's/-//') 4484a9e751fSMao 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/.* //') 44909d653e6SPaolo Bonzini if [ -z "$end" ] 45009d653e6SPaolo Bonzini then 45109d653e6SPaolo Bonzini echo "No tests in range \"$r\"?" 45209d653e6SPaolo Bonzini status=1 45309d653e6SPaolo Bonzini exit $status 45409d653e6SPaolo Bonzini fi 45509d653e6SPaolo Bonzini ;; 45609d653e6SPaolo Bonzini 45709d653e6SPaolo Bonzini *) 45809d653e6SPaolo Bonzini start=$r 45909d653e6SPaolo Bonzini end=$r 46009d653e6SPaolo Bonzini ;; 46109d653e6SPaolo Bonzini 46209d653e6SPaolo Bonzini esac 46309d653e6SPaolo Bonzini 46409d653e6SPaolo Bonzini # get rid of leading 0s as can be interpreted as octal 4654a9e751fSMao Zhongyi start=$(echo $start | sed 's/^0*//') 4664a9e751fSMao Zhongyi end=$(echo $end | sed 's/^0*//') 46709d653e6SPaolo Bonzini 46809d653e6SPaolo Bonzini if $xpand 46909d653e6SPaolo Bonzini then 47009d653e6SPaolo Bonzini have_test_arg=true 47109d653e6SPaolo Bonzini awk </dev/null ' 47209d653e6SPaolo BonziniBEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \ 47309d653e6SPaolo Bonzini | while read id 47409d653e6SPaolo Bonzini do 47509d653e6SPaolo Bonzini if grep -s "^$id " "$source_iotests/group" >/dev/null 47609d653e6SPaolo Bonzini then 47709d653e6SPaolo Bonzini # in group file ... OK 47809d653e6SPaolo Bonzini echo $id >>$tmp.list 47909d653e6SPaolo Bonzini else 48009d653e6SPaolo Bonzini if [ -f expunged ] && $expunge && egrep "^$id([ ]|\$)" expunged >/dev/null 48109d653e6SPaolo Bonzini then 48209d653e6SPaolo Bonzini # expunged ... will be reported, but not run, later 48309d653e6SPaolo Bonzini echo $id >>$tmp.list 48409d653e6SPaolo Bonzini else 48509d653e6SPaolo Bonzini # oops 48609d653e6SPaolo Bonzini if [ "$start" == "$end" -a "$id" == "$end" ] 48709d653e6SPaolo Bonzini then 48809d653e6SPaolo Bonzini echo "$id - unknown test" 48909d653e6SPaolo Bonzini exit 1 49009d653e6SPaolo Bonzini else 49109d653e6SPaolo Bonzini echo "$id - unknown test, ignored" 49209d653e6SPaolo Bonzini fi 49309d653e6SPaolo Bonzini fi 49409d653e6SPaolo Bonzini fi 49509d653e6SPaolo Bonzini done || exit 1 49609d653e6SPaolo Bonzini fi 49709d653e6SPaolo Bonzini 49809d653e6SPaolo Bonzinidone 49909d653e6SPaolo Bonzini 50009d653e6SPaolo Bonzini# Set qemu-io cache mode with $CACHEMODE we have 50109d653e6SPaolo BonziniQEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --cache $CACHEMODE" 50209d653e6SPaolo Bonzini 50309d653e6SPaolo BonziniQEMU_IO_OPTIONS_NO_FMT="$QEMU_IO_OPTIONS" 50409d653e6SPaolo Bonziniif [ "$IMGOPTSSYNTAX" != "true" ]; then 50509d653e6SPaolo Bonzini QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS -f $IMGFMT" 50609d653e6SPaolo Bonzinifi 50709d653e6SPaolo Bonzini 50809d653e6SPaolo Bonzini# Set default options for qemu-img create -o if they were not specified 50909d653e6SPaolo Bonziniif [ "$IMGFMT" == "qcow2" ] && ! (echo "$IMGOPTS" | grep "compat=" > /dev/null); then 51009d653e6SPaolo Bonzini IMGOPTS=$(_optstr_add "$IMGOPTS" "compat=1.1") 51109d653e6SPaolo Bonzinifi 51209d653e6SPaolo Bonziniif [ "$IMGFMT" == "luks" ] && ! (echo "$IMGOPTS" | grep "iter-time=" > /dev/null); then 51309d653e6SPaolo Bonzini IMGOPTS=$(_optstr_add "$IMGOPTS" "iter-time=10") 51409d653e6SPaolo Bonzinifi 51509d653e6SPaolo Bonzini 51609d653e6SPaolo Bonziniif [ -z "$SAMPLE_IMG_DIR" ]; then 51709d653e6SPaolo Bonzini SAMPLE_IMG_DIR="$source_iotests/sample_images" 51809d653e6SPaolo Bonzinifi 51909d653e6SPaolo Bonzini 52009d653e6SPaolo Bonziniexport TEST_DIR 52109d653e6SPaolo Bonziniexport SAMPLE_IMG_DIR 52209d653e6SPaolo Bonzini 52309d653e6SPaolo Bonziniif [ -s $tmp.list ] 52409d653e6SPaolo Bonzinithen 52509d653e6SPaolo Bonzini # found some valid test numbers ... this is good 52609d653e6SPaolo Bonzini : 52709d653e6SPaolo Bonzinielse 52809d653e6SPaolo Bonzini if $have_test_arg 52909d653e6SPaolo Bonzini then 53009d653e6SPaolo Bonzini # had test numbers, but none in group file ... do nothing 53109d653e6SPaolo Bonzini touch $tmp.list 53209d653e6SPaolo Bonzini else 53309d653e6SPaolo Bonzini # no test numbers, do everything from group file 53409d653e6SPaolo Bonzini sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' <"$source_iotests/group" >$tmp.list 53509d653e6SPaolo Bonzini fi 53609d653e6SPaolo Bonzinifi 53709d653e6SPaolo Bonzini 53809d653e6SPaolo Bonzini# should be sort -n, but this did not work for Linux when this 53909d653e6SPaolo Bonzini# was ported from IRIX 54009d653e6SPaolo Bonzini# 5414a9e751fSMao Zhongyilist=$(sort $tmp.list) 54209d653e6SPaolo Bonzinirm -f $tmp.list $tmp.tmp $tmp.sed 54309d653e6SPaolo Bonzini 54409d653e6SPaolo Bonziniif [ -z "$QEMU_PROG" ] 54509d653e6SPaolo Bonzinithen 54609d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu" ]; then 54709d653e6SPaolo Bonzini export QEMU_PROG="$build_iotests/qemu" 54896914159SLukáš Doktor elif [ -x "$build_root/${qemu_arch}-softmmu/qemu-system-${qemu_arch}" ]; then 54996914159SLukáš Doktor export QEMU_PROG="$build_root/${qemu_arch}-softmmu/qemu-system-${qemu_arch}" 55009d653e6SPaolo Bonzini else 55109d653e6SPaolo Bonzini pushd "$build_root" > /dev/null 55209d653e6SPaolo Bonzini for binary in *-softmmu/qemu-system-* 55309d653e6SPaolo Bonzini do 55409d653e6SPaolo Bonzini if [ -x "$binary" ] 55509d653e6SPaolo Bonzini then 55609d653e6SPaolo Bonzini export QEMU_PROG="$build_root/$binary" 55709d653e6SPaolo Bonzini break 55809d653e6SPaolo Bonzini fi 55909d653e6SPaolo Bonzini done 56009d653e6SPaolo Bonzini popd > /dev/null 56109d653e6SPaolo Bonzini [ "$QEMU_PROG" = "" ] && _init_error "qemu not found" 56209d653e6SPaolo Bonzini fi 56309d653e6SPaolo Bonzinifi 56463ca8406SEric Blakeexport QEMU_PROG="$(type -p "$QEMU_PROG")" 56509d653e6SPaolo Bonzini 56609d653e6SPaolo Bonziniif [ -z "$QEMU_IMG_PROG" ]; then 56709d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-img" ]; then 56809d653e6SPaolo Bonzini export QEMU_IMG_PROG="$build_iotests/qemu-img" 56909d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-img" ]; then 57009d653e6SPaolo Bonzini export QEMU_IMG_PROG="$build_root/qemu-img" 57109d653e6SPaolo Bonzini else 57209d653e6SPaolo Bonzini _init_error "qemu-img not found" 57309d653e6SPaolo Bonzini fi 57409d653e6SPaolo Bonzinifi 57563ca8406SEric Blakeexport QEMU_IMG_PROG="$(type -p "$QEMU_IMG_PROG")" 57609d653e6SPaolo Bonzini 57709d653e6SPaolo Bonziniif [ -z "$QEMU_IO_PROG" ]; then 57809d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-io" ]; then 57909d653e6SPaolo Bonzini export QEMU_IO_PROG="$build_iotests/qemu-io" 58009d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-io" ]; then 58109d653e6SPaolo Bonzini export QEMU_IO_PROG="$build_root/qemu-io" 58209d653e6SPaolo Bonzini else 58309d653e6SPaolo Bonzini _init_error "qemu-io not found" 58409d653e6SPaolo Bonzini fi 58509d653e6SPaolo Bonzinifi 58663ca8406SEric Blakeexport QEMU_IO_PROG="$(type -p "$QEMU_IO_PROG")" 58709d653e6SPaolo Bonzini 58809d653e6SPaolo Bonziniif [ -z $QEMU_NBD_PROG ]; then 58909d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-nbd" ]; then 59009d653e6SPaolo Bonzini export QEMU_NBD_PROG="$build_iotests/qemu-nbd" 59109d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-nbd" ]; then 59209d653e6SPaolo Bonzini export QEMU_NBD_PROG="$build_root/qemu-nbd" 59309d653e6SPaolo Bonzini else 59409d653e6SPaolo Bonzini _init_error "qemu-nbd not found" 59509d653e6SPaolo Bonzini fi 59609d653e6SPaolo Bonzinifi 59763ca8406SEric Blakeexport QEMU_NBD_PROG="$(type -p "$QEMU_NBD_PROG")" 59809d653e6SPaolo Bonzini 59909d653e6SPaolo Bonziniif [ -z "$QEMU_VXHS_PROG" ]; then 6004a9e751fSMao Zhongyi export QEMU_VXHS_PROG="$(set_prog_path qnio_server)" 60109d653e6SPaolo Bonzinifi 60209d653e6SPaolo Bonzini 60309d653e6SPaolo Bonziniif [ -x "$build_iotests/socket_scm_helper" ] 60409d653e6SPaolo Bonzinithen 60509d653e6SPaolo Bonzini export SOCKET_SCM_HELPER="$build_iotests/socket_scm_helper" 60609d653e6SPaolo Bonzinifi 60709d653e6SPaolo Bonzini 60809d653e6SPaolo Bonzinidefault_machine=$($QEMU_PROG -machine help | sed -n '/(default)/ s/ .*//p') 60909d653e6SPaolo Bonzinidefault_alias_machine=$($QEMU_PROG -machine help | \ 61009d653e6SPaolo Bonzini sed -n "/(alias of $default_machine)/ { s/ .*//p; q; }") 61109d653e6SPaolo Bonziniif [[ "$default_alias_machine" ]]; then 61209d653e6SPaolo Bonzini default_machine="$default_alias_machine" 61309d653e6SPaolo Bonzinifi 61409d653e6SPaolo Bonzini 61509d653e6SPaolo Bonziniexport QEMU_DEFAULT_MACHINE="$default_machine" 61689004368SKevin Wolf 61736bd4228SDaniel P. BerrangeTIMESTAMP_FILE=check.time-$IMGPROTO-$IMGFMT 61836bd4228SDaniel P. Berrange 6196bf19c94SChristoph Hellwig_wallclock() 6206bf19c94SChristoph Hellwig{ 6219ee4b6f8SPaolo Bonzini date "+%H %M %S" | awk '{ print $1*3600 + $2*60 + $3 }' 6226bf19c94SChristoph Hellwig} 6236bf19c94SChristoph Hellwig 6246bf19c94SChristoph Hellwig_timestamp() 6256bf19c94SChristoph Hellwig{ 6264a9e751fSMao Zhongyi now=$(date "+%T") 627b43671f8SEric Blake printf %s " [$now]" 6286bf19c94SChristoph Hellwig} 6296bf19c94SChristoph Hellwig 6306bf19c94SChristoph Hellwig_wrapup() 6316bf19c94SChristoph Hellwig{ 6326bf19c94SChristoph Hellwig if $showme 6336bf19c94SChristoph Hellwig then 6346bf19c94SChristoph Hellwig : 6356bf19c94SChristoph Hellwig elif $needwrap 6366bf19c94SChristoph Hellwig then 63736bd4228SDaniel P. Berrange if [ -f $TIMESTAMP_FILE -a -f $tmp.time ] 6386bf19c94SChristoph Hellwig then 63936bd4228SDaniel P. Berrange cat $TIMESTAMP_FILE $tmp.time \ 6409ee4b6f8SPaolo Bonzini | awk ' 6416bf19c94SChristoph Hellwig { t[$1] = $2 } 6426bf19c94SChristoph HellwigEND { if (NR > 0) { 6436bf19c94SChristoph Hellwig for (i in t) print i " " t[i] 6446bf19c94SChristoph Hellwig } 6456bf19c94SChristoph Hellwig }' \ 6466bf19c94SChristoph Hellwig | sort -n >$tmp.out 64736bd4228SDaniel P. Berrange mv $tmp.out $TIMESTAMP_FILE 6486bf19c94SChristoph Hellwig fi 6496bf19c94SChristoph Hellwig 6506bf19c94SChristoph Hellwig if [ -f $tmp.expunged ] 6516bf19c94SChristoph Hellwig then 6524a9e751fSMao Zhongyi notrun=$(wc -l <$tmp.expunged | sed -e 's/ *//g') 6534a9e751fSMao Zhongyi try=$(expr $try - $notrun) 6544a9e751fSMao Zhongyi list=$(echo "$list" | sed -f $tmp.expunged) 6556bf19c94SChristoph Hellwig fi 6566bf19c94SChristoph Hellwig 6576bf19c94SChristoph Hellwig echo "" >>check.log 6586bf19c94SChristoph Hellwig date >>check.log 6596bf19c94SChristoph Hellwig echo $list | fmt | sed -e 's/^/ /' >>check.log 6606bf19c94SChristoph Hellwig $interrupt && echo "Interrupted!" >>check.log 6616bf19c94SChristoph Hellwig 6626bf19c94SChristoph Hellwig if [ ! -z "$notrun" ] 6636bf19c94SChristoph Hellwig then 6646bf19c94SChristoph Hellwig echo "Not run:$notrun" 6656bf19c94SChristoph Hellwig echo "Not run:$notrun" >>check.log 6666bf19c94SChristoph Hellwig fi 6676bf19c94SChristoph Hellwig if [ ! -z "$n_bad" -a $n_bad != 0 ] 6686bf19c94SChristoph Hellwig then 6696bf19c94SChristoph Hellwig echo "Failures:$bad" 6706bf19c94SChristoph Hellwig echo "Failed $n_bad of $try tests" 6716bf19c94SChristoph Hellwig echo "Failures:$bad" | fmt >>check.log 6726bf19c94SChristoph Hellwig echo "Failed $n_bad of $try tests" >>check.log 6736bf19c94SChristoph Hellwig else 6746bf19c94SChristoph Hellwig echo "Passed all $try tests" 6756bf19c94SChristoph Hellwig echo "Passed all $try tests" >>check.log 6766bf19c94SChristoph Hellwig fi 6776bf19c94SChristoph Hellwig needwrap=false 6786bf19c94SChristoph Hellwig fi 6796bf19c94SChristoph Hellwig 6808803714bSEric Blake if test -n "$STTY_RESTORE"; then 6818803714bSEric Blake stty $STTY_RESTORE 6828803714bSEric Blake fi 6830145b4e1SSascha Silbe rm -f "${TEST_DIR}"/*.out "${TEST_DIR}"/*.err "${TEST_DIR}"/*.time 6840145b4e1SSascha Silbe rm -f "${TEST_DIR}"/check.pid "${TEST_DIR}"/check.sts 6856bf19c94SChristoph Hellwig rm -f $tmp.* 6866bf19c94SChristoph Hellwig} 6876bf19c94SChristoph Hellwig 6886bf19c94SChristoph Hellwigtrap "_wrapup; exit \$status" 0 1 2 3 15 6896bf19c94SChristoph Hellwig 69036bd4228SDaniel P. Berrange[ -f $TIMESTAMP_FILE ] || touch $TIMESTAMP_FILE 6916bf19c94SChristoph Hellwig 6924a9e751fSMao ZhongyiFULL_IMGFMT_DETAILS=$(_full_imgfmt_details) 6934a9e751fSMao ZhongyiFULL_HOST_DETAILS=$(_full_platform_details) 6946bf19c94SChristoph Hellwig 6956bf19c94SChristoph Hellwigcat <<EOF 696934659c4SMax ReitzQEMU -- "$QEMU_PROG" $QEMU_OPTIONS 697934659c4SMax ReitzQEMU_IMG -- "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS 698934659c4SMax ReitzQEMU_IO -- "$QEMU_IO_PROG" $QEMU_IO_OPTIONS 699934659c4SMax ReitzQEMU_NBD -- "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS 7006bf19c94SChristoph HellwigIMGFMT -- $FULL_IMGFMT_DETAILS 701657c572aSCleber RosaIMGPROTO -- $IMGPROTO 7026bf19c94SChristoph HellwigPLATFORM -- $FULL_HOST_DETAILS 703b8aff7d6SFam ZhengTEST_DIR -- $TEST_DIR 70430b005d9SWenchao XiaSOCKET_SCM_HELPER -- $SOCKET_SCM_HELPER 7056bf19c94SChristoph Hellwig 7066bf19c94SChristoph HellwigEOF 7076bf19c94SChristoph Hellwig 7086bf19c94SChristoph Hellwigseq="check" 7096bf19c94SChristoph Hellwig 7106bf19c94SChristoph Hellwig[ -n "$TESTS_REMAINING_LOG" ] && echo $list > $TESTS_REMAINING_LOG 7116bf19c94SChristoph Hellwig 7126bf19c94SChristoph Hellwigfor seq in $list 7136bf19c94SChristoph Hellwigdo 7146bf19c94SChristoph Hellwig err=false 715b43671f8SEric Blake printf %s "$seq" 7166bf19c94SChristoph Hellwig if [ -n "$TESTS_REMAINING_LOG" ] ; then 7176bf19c94SChristoph Hellwig sed -e "s/$seq//" -e 's/ / /' -e 's/^ *//' $TESTS_REMAINING_LOG > $TESTS_REMAINING_LOG.tmp 7186bf19c94SChristoph Hellwig mv $TESTS_REMAINING_LOG.tmp $TESTS_REMAINING_LOG 7196bf19c94SChristoph Hellwig sync 7206bf19c94SChristoph Hellwig fi 7216bf19c94SChristoph Hellwig 7226bf19c94SChristoph Hellwig if $showme 7236bf19c94SChristoph Hellwig then 7246bf19c94SChristoph Hellwig echo 7256bf19c94SChristoph Hellwig continue 7266bf19c94SChristoph Hellwig elif [ -f expunged ] && $expunge && egrep "^$seq([ ]|\$)" expunged >/dev/null 7276bf19c94SChristoph Hellwig then 7286bf19c94SChristoph Hellwig echo " - expunged" 7296bf19c94SChristoph Hellwig rm -f $seq.out.bad 7306bf19c94SChristoph Hellwig echo "/^$seq\$/d" >>$tmp.expunged 731e8f8624dSMax Reitz elif [ ! -f "$source_iotests/$seq" ] 7326bf19c94SChristoph Hellwig then 7336bf19c94SChristoph Hellwig echo " - no such test?" 7346bf19c94SChristoph Hellwig echo "/^$seq\$/d" >>$tmp.expunged 7356bf19c94SChristoph Hellwig else 7366bf19c94SChristoph Hellwig # really going to try and run this one 7376bf19c94SChristoph Hellwig # 7386bf19c94SChristoph Hellwig rm -f $seq.out.bad 7394a9e751fSMao Zhongyi lasttime=$(sed -n -e "/^$seq /s/.* //p" <$TIMESTAMP_FILE) 7406bf19c94SChristoph Hellwig if [ "X$lasttime" != X ]; then 741b43671f8SEric Blake printf %s " ${lasttime}s ..." 7426bf19c94SChristoph Hellwig else 743b43671f8SEric Blake printf " " # prettier output with timestamps. 7446bf19c94SChristoph Hellwig fi 7456bf19c94SChristoph Hellwig rm -f core $seq.notrun 7466bf19c94SChristoph Hellwig 7474a9e751fSMao Zhongyi start=$(_wallclock) 748b43671f8SEric Blake $timestamp && printf %s " [$(date "+%T")]" 749ea81ca9dSMax Reitz 750ea81ca9dSMax Reitz if [ "$(head -n 1 "$source_iotests/$seq")" == "#!/usr/bin/env python" ]; then 751ea81ca9dSMax Reitz run_command="$PYTHON $seq" 752ea81ca9dSMax Reitz else 753ea81ca9dSMax Reitz run_command="./$seq" 754ea81ca9dSMax Reitz fi 755e8f8624dSMax Reitz export OUTPUT_DIR=$PWD 756aa4f592aSFam Zheng if $debug; then 757aa4f592aSFam Zheng (cd "$source_iotests"; 758aa4f592aSFam Zheng MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ 759aa4f592aSFam Zheng $run_command -d 2>&1 | tee $tmp.out) 760aa4f592aSFam Zheng else 761e8f8624dSMax Reitz (cd "$source_iotests"; 76204129606SStefan Hajnoczi MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ 763ea81ca9dSMax Reitz $run_command >$tmp.out 2>&1) 764aa4f592aSFam Zheng fi 7656bf19c94SChristoph Hellwig sts=$? 7666bf19c94SChristoph Hellwig $timestamp && _timestamp 7674a9e751fSMao Zhongyi stop=$(_wallclock) 7686bf19c94SChristoph Hellwig 7696bf19c94SChristoph Hellwig if [ -f core ] 7706bf19c94SChristoph Hellwig then 771b43671f8SEric Blake printf " [dumped core]" 7726bf19c94SChristoph Hellwig mv core $seq.core 7736bf19c94SChristoph Hellwig err=true 7746bf19c94SChristoph Hellwig fi 7756bf19c94SChristoph Hellwig 7766bf19c94SChristoph Hellwig if [ -f $seq.notrun ] 7776bf19c94SChristoph Hellwig then 778b43671f8SEric Blake $timestamp || printf " [not run] " 779b43671f8SEric Blake $timestamp && echo " [not run]" && printf %s " $seq -- " 7806bf19c94SChristoph Hellwig cat $seq.notrun 7816bf19c94SChristoph Hellwig notrun="$notrun $seq" 7826bf19c94SChristoph Hellwig else 7836bf19c94SChristoph Hellwig if [ $sts -ne 0 ] 7846bf19c94SChristoph Hellwig then 785b43671f8SEric Blake printf %s " [failed, exit status $sts]" 7866bf19c94SChristoph Hellwig err=true 7876bf19c94SChristoph Hellwig fi 7888f94b077SKevin Wolf 789e8f8624dSMax Reitz reference="$source_iotests/$seq.out" 790e166b414SBo Tu reference_machine="$source_iotests/$seq.$QEMU_DEFAULT_MACHINE.out" 791e166b414SBo Tu if [ -f "$reference_machine" ]; then 792e166b414SBo Tu reference="$reference_machine" 793e166b414SBo Tu fi 794e166b414SBo Tu 795217a0683SStefan Hajnoczi reference_format="$source_iotests/$seq.out.$IMGFMT" 796217a0683SStefan Hajnoczi if [ -f "$reference_format" ]; then 797217a0683SStefan Hajnoczi reference="$reference_format" 798217a0683SStefan Hajnoczi fi 799217a0683SStefan Hajnoczi 8003baa8449SFam Zheng if [ "$CACHEMODE" = "none" ]; then 801e8f8624dSMax Reitz [ -f "$source_iotests/$seq.out.nocache" ] && reference="$source_iotests/$seq.out.nocache" 8028f94b077SKevin Wolf fi 8038f94b077SKevin Wolf 804e8f8624dSMax Reitz if [ ! -f "$reference" ] 8056bf19c94SChristoph Hellwig then 8066bf19c94SChristoph Hellwig echo " - no qualified output" 8076bf19c94SChristoph Hellwig err=true 8086bf19c94SChristoph Hellwig else 809e8f8624dSMax Reitz if diff -w "$reference" $tmp.out >/dev/null 2>&1 8106bf19c94SChristoph Hellwig then 8116bf19c94SChristoph Hellwig echo "" 8126bf19c94SChristoph Hellwig if $err 8136bf19c94SChristoph Hellwig then 8146bf19c94SChristoph Hellwig : 8156bf19c94SChristoph Hellwig else 8164a9e751fSMao Zhongyi echo "$seq $(expr $stop - $start)" >>$tmp.time 8176bf19c94SChristoph Hellwig fi 8186bf19c94SChristoph Hellwig else 8196bf19c94SChristoph Hellwig echo " - output mismatch (see $seq.out.bad)" 8206bf19c94SChristoph Hellwig mv $tmp.out $seq.out.bad 82163ca8406SEric Blake $diff -w "$reference" "$PWD"/$seq.out.bad 8226bf19c94SChristoph Hellwig err=true 8236bf19c94SChristoph Hellwig fi 8246bf19c94SChristoph Hellwig fi 8256bf19c94SChristoph Hellwig fi 8266bf19c94SChristoph Hellwig 8276bf19c94SChristoph Hellwig fi 8286bf19c94SChristoph Hellwig 8296bf19c94SChristoph Hellwig # come here for each test, except when $showme is true 8306bf19c94SChristoph Hellwig # 8316bf19c94SChristoph Hellwig if $err 8326bf19c94SChristoph Hellwig then 8336bf19c94SChristoph Hellwig bad="$bad $seq" 8344a9e751fSMao Zhongyi n_bad=$(expr $n_bad + 1) 8356bf19c94SChristoph Hellwig quick=false 8366bf19c94SChristoph Hellwig fi 8374a9e751fSMao Zhongyi [ -f $seq.notrun ] || try=$(expr $try + 1) 8386bf19c94SChristoph Hellwig 8396bf19c94SChristoph Hellwig seq="after_$seq" 8406bf19c94SChristoph Hellwigdone 8416bf19c94SChristoph Hellwig 8426bf19c94SChristoph Hellwiginterrupt=false 8434a9e751fSMao Zhongyistatus=$(expr $n_bad) 8446bf19c94SChristoph Hellwigexit 845