111a82d14SPhilippe Mathieu-Daudé#!/usr/bin/env bash 26bf19c94SChristoph Hellwig# 36bf19c94SChristoph Hellwig# Copyright (C) 2009 Red Hat, Inc. 46bf19c94SChristoph Hellwig# Copyright (c) 2000-2002,2006 Silicon Graphics, Inc. All Rights Reserved. 56bf19c94SChristoph Hellwig# 66bf19c94SChristoph Hellwig# This program is free software; you can redistribute it and/or 76bf19c94SChristoph Hellwig# modify it under the terms of the GNU General Public License as 86bf19c94SChristoph Hellwig# published by the Free Software Foundation. 96bf19c94SChristoph Hellwig# 106bf19c94SChristoph Hellwig# This program is distributed in the hope that it would be useful, 116bf19c94SChristoph Hellwig# but WITHOUT ANY WARRANTY; without even the implied warranty of 126bf19c94SChristoph Hellwig# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 136bf19c94SChristoph Hellwig# GNU General Public License for more details. 146bf19c94SChristoph Hellwig# 156bf19c94SChristoph Hellwig# You should have received a copy of the GNU General Public License 16e8c212d6SChristoph Hellwig# along with this program. If not, see <http://www.gnu.org/licenses/>. 176bf19c94SChristoph Hellwig# 186bf19c94SChristoph Hellwig# 196bf19c94SChristoph Hellwig# Control script for QA 206bf19c94SChristoph Hellwig# 216bf19c94SChristoph Hellwig 226bf19c94SChristoph Hellwigstatus=0 236bf19c94SChristoph Hellwigneedwrap=true 246bf19c94SChristoph Hellwigtry=0 256bf19c94SChristoph Hellwign_bad=0 266bf19c94SChristoph Hellwigbad="" 276bf19c94SChristoph Hellwignotrun="" 2857ed557fSAndrey Shinkevichcasenotrun="" 296bf19c94SChristoph Hellwiginterrupt=true 30*70ff5b07SAlex Bennéemakecheck=false 316bf19c94SChristoph Hellwig 32e8f8624dSMax Reitz_init_error() 33e8f8624dSMax Reitz{ 344e670492SPaolo Bonzini echo "check: $1" >&2 356bf19c94SChristoph Hellwig exit 1 36e8f8624dSMax Reitz} 37e8f8624dSMax Reitz 38e8f8624dSMax Reitzif [ -L "$0" ] 39e8f8624dSMax Reitzthen 40e8f8624dSMax Reitz # called from the build tree 41e8f8624dSMax Reitz source_iotests=$(dirname "$(readlink "$0")") 42e8f8624dSMax Reitz if [ -z "$source_iotests" ] 43e8f8624dSMax Reitz then 44e8f8624dSMax Reitz _init_error "failed to obtain source tree name from check symlink" 45e8f8624dSMax Reitz fi 46e8f8624dSMax Reitz source_iotests=$(cd "$source_iotests"; pwd) || _init_error "failed to enter source tree" 47e8f8624dSMax Reitz build_iotests=$PWD 48e8f8624dSMax Reitzelse 49e8f8624dSMax Reitz # called from the source tree 50e8f8624dSMax Reitz source_iotests=$PWD 51e8f8624dSMax Reitz # this may be an in-tree build (note that in the following code we may not 52e8f8624dSMax Reitz # assume that it truly is and have to test whether the build results 53e8f8624dSMax Reitz # actually exist) 54e8f8624dSMax Reitz build_iotests=$PWD 55e8f8624dSMax Reitzfi 56e8f8624dSMax Reitz 57e8f8624dSMax Reitzbuild_root="$build_iotests/../.." 58e8f8624dSMax Reitz 597fed1a49SMax Reitz# we need common.env 607fed1a49SMax Reitzif ! . "$build_iotests/common.env" 617fed1a49SMax Reitzthen 627fed1a49SMax Reitz _init_error "failed to source common.env (make sure the qemu-iotests are run from tests/qemu-iotests in the build tree)" 637fed1a49SMax Reitzfi 647fed1a49SMax Reitz 65e8f8624dSMax Reitz# we need common.config 66e8f8624dSMax Reitzif ! . "$source_iotests/common.config" 67e8f8624dSMax Reitzthen 68e8f8624dSMax Reitz _init_error "failed to source common.config" 696bf19c94SChristoph Hellwigfi 706bf19c94SChristoph Hellwig 7109d653e6SPaolo Bonzini_full_imgfmt_details() 7209d653e6SPaolo Bonzini{ 7309d653e6SPaolo Bonzini if [ -n "$IMGOPTS" ]; then 7409d653e6SPaolo Bonzini echo "$IMGFMT ($IMGOPTS)" 7509d653e6SPaolo Bonzini else 7609d653e6SPaolo Bonzini echo "$IMGFMT" 7709d653e6SPaolo Bonzini fi 7809d653e6SPaolo Bonzini} 7909d653e6SPaolo Bonzini 8009d653e6SPaolo Bonzini_full_platform_details() 8109d653e6SPaolo Bonzini{ 824a9e751fSMao Zhongyi os=$(uname -s) 834a9e751fSMao Zhongyi host=$(hostname -s) 844a9e751fSMao Zhongyi kernel=$(uname -r) 854a9e751fSMao Zhongyi platform=$(uname -m) 8609d653e6SPaolo Bonzini echo "$os/$platform $host $kernel" 8709d653e6SPaolo Bonzini} 8809d653e6SPaolo Bonzini 89*70ff5b07SAlex Bennée_full_env_details() 90*70ff5b07SAlex Bennée{ 91*70ff5b07SAlex Bennée cat <<EOF 92*70ff5b07SAlex BennéeQEMU -- "$QEMU_PROG" $QEMU_OPTIONS 93*70ff5b07SAlex BennéeQEMU_IMG -- "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS 94*70ff5b07SAlex BennéeQEMU_IO -- "$QEMU_IO_PROG" $QEMU_IO_OPTIONS 95*70ff5b07SAlex BennéeQEMU_NBD -- "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS 96*70ff5b07SAlex BennéeIMGFMT -- $FULL_IMGFMT_DETAILS 97*70ff5b07SAlex BennéeIMGPROTO -- $IMGPROTO 98*70ff5b07SAlex BennéePLATFORM -- $FULL_HOST_DETAILS 99*70ff5b07SAlex BennéeTEST_DIR -- $TEST_DIR 100*70ff5b07SAlex BennéeSOCKET_SCM_HELPER -- $SOCKET_SCM_HELPER 101*70ff5b07SAlex Bennée 102*70ff5b07SAlex BennéeEOF 103*70ff5b07SAlex Bennée} 104*70ff5b07SAlex Bennée 10509d653e6SPaolo Bonzini# $1 = prog to look for 10609d653e6SPaolo Bonziniset_prog_path() 10709d653e6SPaolo Bonzini{ 1084a9e751fSMao Zhongyi p=$(command -v $1 2> /dev/null) 10909d653e6SPaolo Bonzini if [ -n "$p" -a -x "$p" ]; then 11063ca8406SEric Blake type -p "$p" 11109d653e6SPaolo Bonzini else 11209d653e6SPaolo Bonzini return 1 11309d653e6SPaolo Bonzini fi 11409d653e6SPaolo Bonzini} 11509d653e6SPaolo Bonzini 11609d653e6SPaolo Bonziniif [ -z "$TEST_DIR" ]; then 117e8d81a61SMao Zhongyi TEST_DIR=$PWD/scratch 11809d653e6SPaolo Bonzinifi 11909d653e6SPaolo Bonzini 12009d653e6SPaolo Bonziniif [ ! -e "$TEST_DIR" ]; then 12109d653e6SPaolo Bonzini mkdir "$TEST_DIR" 12209d653e6SPaolo Bonzinifi 12309d653e6SPaolo Bonzini 12409d653e6SPaolo Bonzinidiff="diff -u" 12509d653e6SPaolo Bonziniverbose=false 12609d653e6SPaolo Bonzinidebug=false 12709d653e6SPaolo Bonzinigroup=false 12809d653e6SPaolo Bonzinixgroup=false 12909d653e6SPaolo Bonziniimgopts=false 13009d653e6SPaolo Bonzinishowme=false 13109d653e6SPaolo Bonzinisortme=false 13209d653e6SPaolo Bonziniexpunge=true 13309d653e6SPaolo Bonzinihave_test_arg=false 13409d653e6SPaolo Bonzinicachemode=false 13509d653e6SPaolo Bonzini 13609d653e6SPaolo Bonzinitmp="${TEST_DIR}"/$$ 13709d653e6SPaolo Bonzinirm -f $tmp.list $tmp.tmp $tmp.sed 13809d653e6SPaolo Bonzini 13909d653e6SPaolo Bonziniexport IMGFMT=raw 14009d653e6SPaolo Bonziniexport IMGFMT_GENERIC=true 14109d653e6SPaolo Bonziniexport IMGPROTO=file 14209d653e6SPaolo Bonziniexport IMGOPTS="" 14309d653e6SPaolo Bonziniexport CACHEMODE="writeback" 14409d653e6SPaolo Bonziniexport QEMU_IO_OPTIONS="" 14509d653e6SPaolo Bonziniexport QEMU_IO_OPTIONS_NO_FMT="" 14609d653e6SPaolo Bonziniexport CACHEMODE_IS_DEFAULT=true 14709d653e6SPaolo Bonziniexport VALGRIND_QEMU= 14809d653e6SPaolo Bonziniexport IMGKEYSECRET= 14909d653e6SPaolo Bonziniexport IMGOPTSSYNTAX=false 15009d653e6SPaolo Bonzini 1518803714bSEric Blake# Save current tty settings, since an aborting qemu call may leave things 1528803714bSEric Blake# screwed up 1538803714bSEric BlakeSTTY_RESTORE= 1548803714bSEric Blakeif test -t 0; then 1558803714bSEric Blake STTY_RESTORE=$(stty -g) 1568803714bSEric Blakefi 1578803714bSEric Blake 15809d653e6SPaolo Bonzinifor r 15909d653e6SPaolo Bonzinido 16009d653e6SPaolo Bonzini 16109d653e6SPaolo Bonzini if $group 16209d653e6SPaolo Bonzini then 16309d653e6SPaolo Bonzini # arg after -g 1644a9e751fSMao Zhongyi group_list=$(sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{ 16509d653e6SPaolo Bonzinis/ .*//p 1664a9e751fSMao Zhongyi}') 16709d653e6SPaolo Bonzini if [ -z "$group_list" ] 16809d653e6SPaolo Bonzini then 16909d653e6SPaolo Bonzini echo "Group \"$r\" is empty or not defined?" 17009d653e6SPaolo Bonzini exit 1 17109d653e6SPaolo Bonzini fi 17209d653e6SPaolo Bonzini [ ! -s $tmp.list ] && touch $tmp.list 17309d653e6SPaolo Bonzini for t in $group_list 17409d653e6SPaolo Bonzini do 17509d653e6SPaolo Bonzini if grep -s "^$t\$" $tmp.list >/dev/null 17609d653e6SPaolo Bonzini then 17709d653e6SPaolo Bonzini : 17809d653e6SPaolo Bonzini else 17909d653e6SPaolo Bonzini echo "$t" >>$tmp.list 18009d653e6SPaolo Bonzini fi 18109d653e6SPaolo Bonzini done 18209d653e6SPaolo Bonzini group=false 18309d653e6SPaolo Bonzini continue 18409d653e6SPaolo Bonzini 18509d653e6SPaolo Bonzini elif $xgroup 18609d653e6SPaolo Bonzini then 18709d653e6SPaolo Bonzini # arg after -x 18809d653e6SPaolo Bonzini # Populate $tmp.list with all tests 18909d653e6SPaolo Bonzini awk '/^[0-9]{3,}/ {print $1}' "${source_iotests}/group" > $tmp.list 2>/dev/null 1904a9e751fSMao Zhongyi group_list=$(sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{ 19109d653e6SPaolo Bonzinis/ .*//p 1924a9e751fSMao Zhongyi}') 19309d653e6SPaolo Bonzini if [ -z "$group_list" ] 19409d653e6SPaolo Bonzini then 19509d653e6SPaolo Bonzini echo "Group \"$r\" is empty or not defined?" 19609d653e6SPaolo Bonzini exit 1 19709d653e6SPaolo Bonzini fi 19809d653e6SPaolo Bonzini numsed=0 19909d653e6SPaolo Bonzini rm -f $tmp.sed 20009d653e6SPaolo Bonzini for t in $group_list 20109d653e6SPaolo Bonzini do 20209d653e6SPaolo Bonzini if [ $numsed -gt 100 ] 20309d653e6SPaolo Bonzini then 20409d653e6SPaolo Bonzini sed -f $tmp.sed <$tmp.list >$tmp.tmp 20509d653e6SPaolo Bonzini mv $tmp.tmp $tmp.list 20609d653e6SPaolo Bonzini numsed=0 20709d653e6SPaolo Bonzini rm -f $tmp.sed 20809d653e6SPaolo Bonzini fi 20909d653e6SPaolo Bonzini echo "/^$t\$/d" >>$tmp.sed 2104a9e751fSMao Zhongyi numsed=$(expr $numsed + 1) 21109d653e6SPaolo Bonzini done 21209d653e6SPaolo Bonzini sed -f $tmp.sed <$tmp.list >$tmp.tmp 21309d653e6SPaolo Bonzini mv $tmp.tmp $tmp.list 21409d653e6SPaolo Bonzini xgroup=false 21509d653e6SPaolo Bonzini continue 21609d653e6SPaolo Bonzini 21709d653e6SPaolo Bonzini elif $imgopts 21809d653e6SPaolo Bonzini then 21909d653e6SPaolo Bonzini IMGOPTS="$r" 22009d653e6SPaolo Bonzini imgopts=false 22109d653e6SPaolo Bonzini continue 22209d653e6SPaolo Bonzini elif $cachemode 22309d653e6SPaolo Bonzini then 22409d653e6SPaolo Bonzini CACHEMODE="$r" 22509d653e6SPaolo Bonzini CACHEMODE_IS_DEFAULT=false 22609d653e6SPaolo Bonzini cachemode=false 22709d653e6SPaolo Bonzini continue 22809d653e6SPaolo Bonzini fi 22909d653e6SPaolo Bonzini 23009d653e6SPaolo Bonzini xpand=true 23109d653e6SPaolo Bonzini case "$r" 23209d653e6SPaolo Bonzini in 23309d653e6SPaolo Bonzini 23409d653e6SPaolo Bonzini -\? | -h | --help) # usage 23509d653e6SPaolo Bonzini echo "Usage: $0 [options] [testlist]"' 23609d653e6SPaolo Bonzini 23709d653e6SPaolo Bonzinicommon options 23809d653e6SPaolo Bonzini -v verbose 23909d653e6SPaolo Bonzini -d debug 24009d653e6SPaolo Bonzini 24109d653e6SPaolo Bonziniimage format options 24209d653e6SPaolo Bonzini -raw test raw (default) 24309d653e6SPaolo Bonzini -bochs test bochs 24409d653e6SPaolo Bonzini -cloop test cloop 24509d653e6SPaolo Bonzini -parallels test parallels 24609d653e6SPaolo Bonzini -qcow test qcow 24709d653e6SPaolo Bonzini -qcow2 test qcow2 24809d653e6SPaolo Bonzini -qed test qed 24909d653e6SPaolo Bonzini -vdi test vdi 25009d653e6SPaolo Bonzini -vpc test vpc 25109d653e6SPaolo Bonzini -vhdx test vhdx 25209d653e6SPaolo Bonzini -vmdk test vmdk 25309d653e6SPaolo Bonzini -luks test luks 25476f1cf0aSyuchenlin -dmg test dmg 25509d653e6SPaolo Bonzini 25609d653e6SPaolo Bonziniimage protocol options 25709d653e6SPaolo Bonzini -file test file (default) 25809d653e6SPaolo Bonzini -rbd test rbd 25909d653e6SPaolo Bonzini -sheepdog test sheepdog 26009d653e6SPaolo Bonzini -nbd test nbd 26109d653e6SPaolo Bonzini -ssh test ssh 26209d653e6SPaolo Bonzini -nfs test nfs 26309d653e6SPaolo Bonzini -vxhs test vxhs 26409d653e6SPaolo Bonzini 26509d653e6SPaolo Bonziniother options 26609d653e6SPaolo Bonzini -xdiff graphical mode diff 26709d653e6SPaolo Bonzini -nocache use O_DIRECT on backing file 26809d653e6SPaolo Bonzini -misalign misalign memory allocations 26909d653e6SPaolo Bonzini -n show me, do not run tests 27009d653e6SPaolo Bonzini -o options -o options to pass to qemu-img create/convert 27109d653e6SPaolo Bonzini -c mode cache mode 272*70ff5b07SAlex Bennée -makecheck pretty print output for make check 27309d653e6SPaolo Bonzini 27409d653e6SPaolo Bonzinitestlist options 27509d653e6SPaolo Bonzini -g group[,group...] include tests from these groups 27609d653e6SPaolo Bonzini -x group[,group...] exclude tests from these groups 27709d653e6SPaolo Bonzini NNN include test NNN 27809d653e6SPaolo Bonzini NNN-NNN include test range (eg. 012-021) 27909d653e6SPaolo Bonzini' 28009d653e6SPaolo Bonzini exit 0 28109d653e6SPaolo Bonzini ;; 28209d653e6SPaolo Bonzini 28309d653e6SPaolo Bonzini -raw) 28409d653e6SPaolo Bonzini IMGFMT=raw 28509d653e6SPaolo Bonzini xpand=false 28609d653e6SPaolo Bonzini ;; 28709d653e6SPaolo Bonzini 28809d653e6SPaolo Bonzini -bochs) 28909d653e6SPaolo Bonzini IMGFMT=bochs 29009d653e6SPaolo Bonzini IMGFMT_GENERIC=false 29109d653e6SPaolo Bonzini xpand=false 29209d653e6SPaolo Bonzini ;; 29309d653e6SPaolo Bonzini 29409d653e6SPaolo Bonzini -cloop) 29509d653e6SPaolo Bonzini IMGFMT=cloop 29609d653e6SPaolo Bonzini IMGFMT_GENERIC=false 29709d653e6SPaolo Bonzini xpand=false 29809d653e6SPaolo Bonzini ;; 29909d653e6SPaolo Bonzini 30009d653e6SPaolo Bonzini -parallels) 30109d653e6SPaolo Bonzini IMGFMT=parallels 30209d653e6SPaolo Bonzini xpand=false 30309d653e6SPaolo Bonzini ;; 30409d653e6SPaolo Bonzini 30509d653e6SPaolo Bonzini -qcow) 30609d653e6SPaolo Bonzini IMGFMT=qcow 30709d653e6SPaolo Bonzini xpand=false 30809d653e6SPaolo Bonzini ;; 30909d653e6SPaolo Bonzini 31009d653e6SPaolo Bonzini -qcow2) 31109d653e6SPaolo Bonzini IMGFMT=qcow2 31209d653e6SPaolo Bonzini xpand=false 31309d653e6SPaolo Bonzini ;; 31409d653e6SPaolo Bonzini 31509d653e6SPaolo Bonzini -luks) 31609d653e6SPaolo Bonzini IMGOPTSSYNTAX=true 31709d653e6SPaolo Bonzini IMGFMT=luks 31809d653e6SPaolo Bonzini IMGKEYSECRET=123456 31909d653e6SPaolo Bonzini xpand=false 32009d653e6SPaolo Bonzini ;; 32109d653e6SPaolo Bonzini 32276f1cf0aSyuchenlin -dmg) 32376f1cf0aSyuchenlin IMGFMT=dmg 32476f1cf0aSyuchenlin IMGFMT_GENERIC=false 32576f1cf0aSyuchenlin xpand=false 32676f1cf0aSyuchenlin ;; 32776f1cf0aSyuchenlin 32809d653e6SPaolo Bonzini -qed) 32909d653e6SPaolo Bonzini IMGFMT=qed 33009d653e6SPaolo Bonzini xpand=false 33109d653e6SPaolo Bonzini ;; 33209d653e6SPaolo Bonzini 33309d653e6SPaolo Bonzini -vdi) 33409d653e6SPaolo Bonzini IMGFMT=vdi 33509d653e6SPaolo Bonzini xpand=false 33609d653e6SPaolo Bonzini ;; 33709d653e6SPaolo Bonzini 33809d653e6SPaolo Bonzini -vmdk) 33909d653e6SPaolo Bonzini IMGFMT=vmdk 34009d653e6SPaolo Bonzini xpand=false 34109d653e6SPaolo Bonzini ;; 34209d653e6SPaolo Bonzini 34309d653e6SPaolo Bonzini -vpc) 34409d653e6SPaolo Bonzini IMGFMT=vpc 34509d653e6SPaolo Bonzini xpand=false 34609d653e6SPaolo Bonzini ;; 34709d653e6SPaolo Bonzini 34809d653e6SPaolo Bonzini -vhdx) 34909d653e6SPaolo Bonzini IMGFMT=vhdx 35009d653e6SPaolo Bonzini xpand=false 35109d653e6SPaolo Bonzini ;; 35209d653e6SPaolo Bonzini 35309d653e6SPaolo Bonzini -file) 35409d653e6SPaolo Bonzini IMGPROTO=file 35509d653e6SPaolo Bonzini xpand=false 35609d653e6SPaolo Bonzini ;; 35709d653e6SPaolo Bonzini 35809d653e6SPaolo Bonzini -rbd) 35909d653e6SPaolo Bonzini IMGPROTO=rbd 36009d653e6SPaolo Bonzini xpand=false 36109d653e6SPaolo Bonzini ;; 36209d653e6SPaolo Bonzini 36309d653e6SPaolo Bonzini -sheepdog) 36409d653e6SPaolo Bonzini IMGPROTO=sheepdog 36509d653e6SPaolo Bonzini xpand=false 36609d653e6SPaolo Bonzini ;; 36709d653e6SPaolo Bonzini 36809d653e6SPaolo Bonzini -nbd) 36909d653e6SPaolo Bonzini IMGPROTO=nbd 37009d653e6SPaolo Bonzini xpand=false 37109d653e6SPaolo Bonzini ;; 37209d653e6SPaolo Bonzini 37309d653e6SPaolo Bonzini -vxhs) 37409d653e6SPaolo Bonzini IMGPROTO=vxhs 37509d653e6SPaolo Bonzini xpand=false 37609d653e6SPaolo Bonzini ;; 37709d653e6SPaolo Bonzini 37809d653e6SPaolo Bonzini -ssh) 37909d653e6SPaolo Bonzini IMGPROTO=ssh 38009d653e6SPaolo Bonzini xpand=false 38109d653e6SPaolo Bonzini ;; 38209d653e6SPaolo Bonzini 38309d653e6SPaolo Bonzini -nfs) 38409d653e6SPaolo Bonzini IMGPROTO=nfs 38509d653e6SPaolo Bonzini xpand=false 38609d653e6SPaolo Bonzini ;; 38709d653e6SPaolo Bonzini 38809d653e6SPaolo Bonzini -nocache) 38909d653e6SPaolo Bonzini CACHEMODE="none" 39009d653e6SPaolo Bonzini CACHEMODE_IS_DEFAULT=false 39109d653e6SPaolo Bonzini xpand=false 39209d653e6SPaolo Bonzini ;; 39309d653e6SPaolo Bonzini 39409d653e6SPaolo Bonzini -misalign) 39509d653e6SPaolo Bonzini QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --misalign" 39609d653e6SPaolo Bonzini xpand=false 39709d653e6SPaolo Bonzini ;; 39809d653e6SPaolo Bonzini 39909d653e6SPaolo Bonzini -valgrind) 40009d653e6SPaolo Bonzini VALGRIND_QEMU='y' 40109d653e6SPaolo Bonzini xpand=false 40209d653e6SPaolo Bonzini ;; 40309d653e6SPaolo Bonzini 40409d653e6SPaolo Bonzini -g) # -g group ... pick from group file 40509d653e6SPaolo Bonzini group=true 40609d653e6SPaolo Bonzini xpand=false 40709d653e6SPaolo Bonzini ;; 40809d653e6SPaolo Bonzini 40909d653e6SPaolo Bonzini -xdiff) # graphical diff mode 41009d653e6SPaolo Bonzini xpand=false 41109d653e6SPaolo Bonzini 41209d653e6SPaolo Bonzini if [ ! -z "$DISPLAY" ] 41309d653e6SPaolo Bonzini then 41409d653e6SPaolo Bonzini command -v xdiff >/dev/null 2>&1 && diff=xdiff 41509d653e6SPaolo Bonzini command -v gdiff >/dev/null 2>&1 && diff=gdiff 41609d653e6SPaolo Bonzini command -v tkdiff >/dev/null 2>&1 && diff=tkdiff 41709d653e6SPaolo Bonzini command -v xxdiff >/dev/null 2>&1 && diff=xxdiff 41809d653e6SPaolo Bonzini fi 41909d653e6SPaolo Bonzini ;; 420*70ff5b07SAlex Bennée -makecheck) # makecheck friendly output 421*70ff5b07SAlex Bennée makecheck=true 422*70ff5b07SAlex Bennée xpand=false 423*70ff5b07SAlex Bennée ;; 42409d653e6SPaolo Bonzini -n) # show me, don't do it 42509d653e6SPaolo Bonzini showme=true 42609d653e6SPaolo Bonzini xpand=false 42709d653e6SPaolo Bonzini ;; 42809d653e6SPaolo Bonzini -o) 42909d653e6SPaolo Bonzini imgopts=true 43009d653e6SPaolo Bonzini xpand=false 43109d653e6SPaolo Bonzini ;; 43209d653e6SPaolo Bonzini -c) 43309d653e6SPaolo Bonzini cachemode=true 43409d653e6SPaolo Bonzini xpand=false 43509d653e6SPaolo Bonzini ;; 436*70ff5b07SAlex Bennée -T) # deprecated timestamp option 43709d653e6SPaolo Bonzini xpand=false 43809d653e6SPaolo Bonzini ;; 43909d653e6SPaolo Bonzini 44009d653e6SPaolo Bonzini -v) 44109d653e6SPaolo Bonzini verbose=true 44209d653e6SPaolo Bonzini xpand=false 44309d653e6SPaolo Bonzini ;; 44409d653e6SPaolo Bonzini -d) 44509d653e6SPaolo Bonzini debug=true 44609d653e6SPaolo Bonzini xpand=false 44709d653e6SPaolo Bonzini ;; 44809d653e6SPaolo Bonzini -x) # -x group ... exclude from group file 44909d653e6SPaolo Bonzini xgroup=true 45009d653e6SPaolo Bonzini xpand=false 45109d653e6SPaolo Bonzini ;; 45209d653e6SPaolo Bonzini '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]') 45309d653e6SPaolo Bonzini echo "No tests?" 45409d653e6SPaolo Bonzini status=1 45509d653e6SPaolo Bonzini exit $status 45609d653e6SPaolo Bonzini ;; 45709d653e6SPaolo Bonzini 45809d653e6SPaolo Bonzini [0-9]*-[0-9]*) 4594a9e751fSMao Zhongyi eval $(echo $r | sed -e 's/^/start=/' -e 's/-/ end=/') 46009d653e6SPaolo Bonzini ;; 46109d653e6SPaolo Bonzini 46209d653e6SPaolo Bonzini [0-9]*-) 4634a9e751fSMao Zhongyi eval $(echo $r | sed -e 's/^/start=/' -e 's/-//') 4644a9e751fSMao 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/.* //') 46509d653e6SPaolo Bonzini if [ -z "$end" ] 46609d653e6SPaolo Bonzini then 46709d653e6SPaolo Bonzini echo "No tests in range \"$r\"?" 46809d653e6SPaolo Bonzini status=1 46909d653e6SPaolo Bonzini exit $status 47009d653e6SPaolo Bonzini fi 47109d653e6SPaolo Bonzini ;; 47209d653e6SPaolo Bonzini 47309d653e6SPaolo Bonzini *) 47409d653e6SPaolo Bonzini start=$r 47509d653e6SPaolo Bonzini end=$r 47609d653e6SPaolo Bonzini ;; 47709d653e6SPaolo Bonzini 47809d653e6SPaolo Bonzini esac 47909d653e6SPaolo Bonzini 48009d653e6SPaolo Bonzini # get rid of leading 0s as can be interpreted as octal 4814a9e751fSMao Zhongyi start=$(echo $start | sed 's/^0*//') 4824a9e751fSMao Zhongyi end=$(echo $end | sed 's/^0*//') 48309d653e6SPaolo Bonzini 48409d653e6SPaolo Bonzini if $xpand 48509d653e6SPaolo Bonzini then 48609d653e6SPaolo Bonzini have_test_arg=true 48709d653e6SPaolo Bonzini awk </dev/null ' 48809d653e6SPaolo BonziniBEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \ 48909d653e6SPaolo Bonzini | while read id 49009d653e6SPaolo Bonzini do 49109d653e6SPaolo Bonzini if grep -s "^$id " "$source_iotests/group" >/dev/null 49209d653e6SPaolo Bonzini then 49309d653e6SPaolo Bonzini # in group file ... OK 49409d653e6SPaolo Bonzini echo $id >>$tmp.list 49509d653e6SPaolo Bonzini else 49609d653e6SPaolo Bonzini if [ -f expunged ] && $expunge && egrep "^$id([ ]|\$)" expunged >/dev/null 49709d653e6SPaolo Bonzini then 49809d653e6SPaolo Bonzini # expunged ... will be reported, but not run, later 49909d653e6SPaolo Bonzini echo $id >>$tmp.list 50009d653e6SPaolo Bonzini else 50109d653e6SPaolo Bonzini # oops 50209d653e6SPaolo Bonzini if [ "$start" == "$end" -a "$id" == "$end" ] 50309d653e6SPaolo Bonzini then 50409d653e6SPaolo Bonzini echo "$id - unknown test" 50509d653e6SPaolo Bonzini exit 1 50609d653e6SPaolo Bonzini else 50709d653e6SPaolo Bonzini echo "$id - unknown test, ignored" 50809d653e6SPaolo Bonzini fi 50909d653e6SPaolo Bonzini fi 51009d653e6SPaolo Bonzini fi 51109d653e6SPaolo Bonzini done || exit 1 51209d653e6SPaolo Bonzini fi 51309d653e6SPaolo Bonzini 51409d653e6SPaolo Bonzinidone 51509d653e6SPaolo Bonzini 51609d653e6SPaolo Bonzini# Set qemu-io cache mode with $CACHEMODE we have 51709d653e6SPaolo BonziniQEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --cache $CACHEMODE" 51809d653e6SPaolo Bonzini 51909d653e6SPaolo BonziniQEMU_IO_OPTIONS_NO_FMT="$QEMU_IO_OPTIONS" 52009d653e6SPaolo Bonziniif [ "$IMGOPTSSYNTAX" != "true" ]; then 52109d653e6SPaolo Bonzini QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS -f $IMGFMT" 52209d653e6SPaolo Bonzinifi 52309d653e6SPaolo Bonzini 52409d653e6SPaolo Bonzini# Set default options for qemu-img create -o if they were not specified 52509d653e6SPaolo Bonziniif [ "$IMGFMT" == "qcow2" ] && ! (echo "$IMGOPTS" | grep "compat=" > /dev/null); then 52609d653e6SPaolo Bonzini IMGOPTS=$(_optstr_add "$IMGOPTS" "compat=1.1") 52709d653e6SPaolo Bonzinifi 52809d653e6SPaolo Bonziniif [ "$IMGFMT" == "luks" ] && ! (echo "$IMGOPTS" | grep "iter-time=" > /dev/null); then 52909d653e6SPaolo Bonzini IMGOPTS=$(_optstr_add "$IMGOPTS" "iter-time=10") 53009d653e6SPaolo Bonzinifi 53109d653e6SPaolo Bonzini 53209d653e6SPaolo Bonziniif [ -z "$SAMPLE_IMG_DIR" ]; then 53309d653e6SPaolo Bonzini SAMPLE_IMG_DIR="$source_iotests/sample_images" 53409d653e6SPaolo Bonzinifi 53509d653e6SPaolo Bonzini 53609d653e6SPaolo Bonziniexport TEST_DIR 53709d653e6SPaolo Bonziniexport SAMPLE_IMG_DIR 53809d653e6SPaolo Bonzini 53909d653e6SPaolo Bonziniif [ -s $tmp.list ] 54009d653e6SPaolo Bonzinithen 54109d653e6SPaolo Bonzini # found some valid test numbers ... this is good 54209d653e6SPaolo Bonzini : 54309d653e6SPaolo Bonzinielse 54409d653e6SPaolo Bonzini if $have_test_arg 54509d653e6SPaolo Bonzini then 54609d653e6SPaolo Bonzini # had test numbers, but none in group file ... do nothing 54709d653e6SPaolo Bonzini touch $tmp.list 54809d653e6SPaolo Bonzini else 54909d653e6SPaolo Bonzini # no test numbers, do everything from group file 55009d653e6SPaolo Bonzini sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' <"$source_iotests/group" >$tmp.list 55109d653e6SPaolo Bonzini fi 55209d653e6SPaolo Bonzinifi 55309d653e6SPaolo Bonzini 55409d653e6SPaolo Bonzini# should be sort -n, but this did not work for Linux when this 55509d653e6SPaolo Bonzini# was ported from IRIX 55609d653e6SPaolo Bonzini# 5574a9e751fSMao Zhongyilist=$(sort $tmp.list) 55809d653e6SPaolo Bonzinirm -f $tmp.list $tmp.tmp $tmp.sed 55909d653e6SPaolo Bonzini 56009d653e6SPaolo Bonziniif [ -z "$QEMU_PROG" ] 56109d653e6SPaolo Bonzinithen 56209d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu" ]; then 56309d653e6SPaolo Bonzini export QEMU_PROG="$build_iotests/qemu" 56496914159SLukáš Doktor elif [ -x "$build_root/${qemu_arch}-softmmu/qemu-system-${qemu_arch}" ]; then 56596914159SLukáš Doktor export QEMU_PROG="$build_root/${qemu_arch}-softmmu/qemu-system-${qemu_arch}" 56609d653e6SPaolo Bonzini else 56709d653e6SPaolo Bonzini pushd "$build_root" > /dev/null 56809d653e6SPaolo Bonzini for binary in *-softmmu/qemu-system-* 56909d653e6SPaolo Bonzini do 57009d653e6SPaolo Bonzini if [ -x "$binary" ] 57109d653e6SPaolo Bonzini then 57209d653e6SPaolo Bonzini export QEMU_PROG="$build_root/$binary" 57309d653e6SPaolo Bonzini break 57409d653e6SPaolo Bonzini fi 57509d653e6SPaolo Bonzini done 57609d653e6SPaolo Bonzini popd > /dev/null 57709d653e6SPaolo Bonzini [ "$QEMU_PROG" = "" ] && _init_error "qemu not found" 57809d653e6SPaolo Bonzini fi 57909d653e6SPaolo Bonzinifi 58063ca8406SEric Blakeexport QEMU_PROG="$(type -p "$QEMU_PROG")" 58109d653e6SPaolo Bonzini 5824a715461SThomas Huthcase "$QEMU_PROG" in 5834a715461SThomas Huth *qemu-system-arm|*qemu-system-aarch64) 5844a715461SThomas Huth export QEMU_OPTIONS="-nodefaults -machine virt,accel=qtest" 5854a715461SThomas Huth ;; 5864a715461SThomas Huth *qemu-system-tricore) 5874a715461SThomas Huth export QEMU_OPTIONS="-nodefaults -machine tricore_testboard,accel=qtest" 5884a715461SThomas Huth ;; 5894a715461SThomas Huth *) 5904a715461SThomas Huth export QEMU_OPTIONS="-nodefaults -machine accel=qtest" 5914a715461SThomas Huth ;; 5924a715461SThomas Huthesac 5934a715461SThomas Huth 59409d653e6SPaolo Bonziniif [ -z "$QEMU_IMG_PROG" ]; then 59509d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-img" ]; then 59609d653e6SPaolo Bonzini export QEMU_IMG_PROG="$build_iotests/qemu-img" 59709d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-img" ]; then 59809d653e6SPaolo Bonzini export QEMU_IMG_PROG="$build_root/qemu-img" 59909d653e6SPaolo Bonzini else 60009d653e6SPaolo Bonzini _init_error "qemu-img not found" 60109d653e6SPaolo Bonzini fi 60209d653e6SPaolo Bonzinifi 60363ca8406SEric Blakeexport QEMU_IMG_PROG="$(type -p "$QEMU_IMG_PROG")" 60409d653e6SPaolo Bonzini 60509d653e6SPaolo Bonziniif [ -z "$QEMU_IO_PROG" ]; then 60609d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-io" ]; then 60709d653e6SPaolo Bonzini export QEMU_IO_PROG="$build_iotests/qemu-io" 60809d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-io" ]; then 60909d653e6SPaolo Bonzini export QEMU_IO_PROG="$build_root/qemu-io" 61009d653e6SPaolo Bonzini else 61109d653e6SPaolo Bonzini _init_error "qemu-io not found" 61209d653e6SPaolo Bonzini fi 61309d653e6SPaolo Bonzinifi 61463ca8406SEric Blakeexport QEMU_IO_PROG="$(type -p "$QEMU_IO_PROG")" 61509d653e6SPaolo Bonzini 61609d653e6SPaolo Bonziniif [ -z $QEMU_NBD_PROG ]; then 61709d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-nbd" ]; then 61809d653e6SPaolo Bonzini export QEMU_NBD_PROG="$build_iotests/qemu-nbd" 61909d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-nbd" ]; then 62009d653e6SPaolo Bonzini export QEMU_NBD_PROG="$build_root/qemu-nbd" 62109d653e6SPaolo Bonzini else 62209d653e6SPaolo Bonzini _init_error "qemu-nbd not found" 62309d653e6SPaolo Bonzini fi 62409d653e6SPaolo Bonzinifi 62563ca8406SEric Blakeexport QEMU_NBD_PROG="$(type -p "$QEMU_NBD_PROG")" 62609d653e6SPaolo Bonzini 62709d653e6SPaolo Bonziniif [ -z "$QEMU_VXHS_PROG" ]; then 6284a9e751fSMao Zhongyi export QEMU_VXHS_PROG="$(set_prog_path qnio_server)" 62909d653e6SPaolo Bonzinifi 63009d653e6SPaolo Bonzini 63109d653e6SPaolo Bonziniif [ -x "$build_iotests/socket_scm_helper" ] 63209d653e6SPaolo Bonzinithen 63309d653e6SPaolo Bonzini export SOCKET_SCM_HELPER="$build_iotests/socket_scm_helper" 63409d653e6SPaolo Bonzinifi 63509d653e6SPaolo Bonzini 63609d653e6SPaolo Bonzinidefault_machine=$($QEMU_PROG -machine help | sed -n '/(default)/ s/ .*//p') 63709d653e6SPaolo Bonzinidefault_alias_machine=$($QEMU_PROG -machine help | \ 63809d653e6SPaolo Bonzini sed -n "/(alias of $default_machine)/ { s/ .*//p; q; }") 63909d653e6SPaolo Bonziniif [[ "$default_alias_machine" ]]; then 64009d653e6SPaolo Bonzini default_machine="$default_alias_machine" 64109d653e6SPaolo Bonzinifi 64209d653e6SPaolo Bonzini 64309d653e6SPaolo Bonziniexport QEMU_DEFAULT_MACHINE="$default_machine" 64489004368SKevin Wolf 64536bd4228SDaniel P. BerrangeTIMESTAMP_FILE=check.time-$IMGPROTO-$IMGFMT 64636bd4228SDaniel P. Berrange 6476bf19c94SChristoph Hellwig_wallclock() 6486bf19c94SChristoph Hellwig{ 6499ee4b6f8SPaolo Bonzini date "+%H %M %S" | awk '{ print $1*3600 + $2*60 + $3 }' 6506bf19c94SChristoph Hellwig} 6516bf19c94SChristoph Hellwig 6526bf19c94SChristoph Hellwig_wrapup() 6536bf19c94SChristoph Hellwig{ 6546bf19c94SChristoph Hellwig if $showme 6556bf19c94SChristoph Hellwig then 6566bf19c94SChristoph Hellwig : 6576bf19c94SChristoph Hellwig elif $needwrap 6586bf19c94SChristoph Hellwig then 65936bd4228SDaniel P. Berrange if [ -f $TIMESTAMP_FILE -a -f $tmp.time ] 6606bf19c94SChristoph Hellwig then 66136bd4228SDaniel P. Berrange cat $TIMESTAMP_FILE $tmp.time \ 6629ee4b6f8SPaolo Bonzini | awk ' 6636bf19c94SChristoph Hellwig { t[$1] = $2 } 6646bf19c94SChristoph HellwigEND { if (NR > 0) { 6656bf19c94SChristoph Hellwig for (i in t) print i " " t[i] 6666bf19c94SChristoph Hellwig } 6676bf19c94SChristoph Hellwig }' \ 6686bf19c94SChristoph Hellwig | sort -n >$tmp.out 66936bd4228SDaniel P. Berrange mv $tmp.out $TIMESTAMP_FILE 6706bf19c94SChristoph Hellwig fi 6716bf19c94SChristoph Hellwig 6726bf19c94SChristoph Hellwig if [ -f $tmp.expunged ] 6736bf19c94SChristoph Hellwig then 6744a9e751fSMao Zhongyi notrun=$(wc -l <$tmp.expunged | sed -e 's/ *//g') 6754a9e751fSMao Zhongyi try=$(expr $try - $notrun) 6764a9e751fSMao Zhongyi list=$(echo "$list" | sed -f $tmp.expunged) 6776bf19c94SChristoph Hellwig fi 6786bf19c94SChristoph Hellwig 6796bf19c94SChristoph Hellwig echo "" >>check.log 6806bf19c94SChristoph Hellwig date >>check.log 6816bf19c94SChristoph Hellwig echo $list | fmt | sed -e 's/^/ /' >>check.log 6826bf19c94SChristoph Hellwig $interrupt && echo "Interrupted!" >>check.log 6836bf19c94SChristoph Hellwig 6846bf19c94SChristoph Hellwig if [ ! -z "$notrun" ] 6856bf19c94SChristoph Hellwig then 6866bf19c94SChristoph Hellwig echo "Not run:$notrun" 6876bf19c94SChristoph Hellwig echo "Not run:$notrun" >>check.log 6886bf19c94SChristoph Hellwig fi 68957ed557fSAndrey Shinkevich if [ ! -z "$casenotrun" ] 69057ed557fSAndrey Shinkevich then 69157ed557fSAndrey Shinkevich echo "Some cases not run in:$casenotrun" 69257ed557fSAndrey Shinkevich echo "Some cases not run in:$casenotrun" >>check.log 69357ed557fSAndrey Shinkevich fi 6946bf19c94SChristoph Hellwig if [ ! -z "$n_bad" -a $n_bad != 0 ] 6956bf19c94SChristoph Hellwig then 6966bf19c94SChristoph Hellwig echo "Failures:$bad" 6976bf19c94SChristoph Hellwig echo "Failed $n_bad of $try tests" 6986bf19c94SChristoph Hellwig echo "Failures:$bad" | fmt >>check.log 6996bf19c94SChristoph Hellwig echo "Failed $n_bad of $try tests" >>check.log 7006bf19c94SChristoph Hellwig else 7016bf19c94SChristoph Hellwig echo "Passed all $try tests" 7026bf19c94SChristoph Hellwig echo "Passed all $try tests" >>check.log 7036bf19c94SChristoph Hellwig fi 7046bf19c94SChristoph Hellwig needwrap=false 7056bf19c94SChristoph Hellwig fi 7066bf19c94SChristoph Hellwig 7078803714bSEric Blake if test -n "$STTY_RESTORE"; then 7088803714bSEric Blake stty $STTY_RESTORE 7098803714bSEric Blake fi 7100145b4e1SSascha Silbe rm -f "${TEST_DIR}"/*.out "${TEST_DIR}"/*.err "${TEST_DIR}"/*.time 7110145b4e1SSascha Silbe rm -f "${TEST_DIR}"/check.pid "${TEST_DIR}"/check.sts 7126bf19c94SChristoph Hellwig rm -f $tmp.* 7136bf19c94SChristoph Hellwig} 7146bf19c94SChristoph Hellwig 7156bf19c94SChristoph Hellwigtrap "_wrapup; exit \$status" 0 1 2 3 15 7166bf19c94SChristoph Hellwig 717*70ff5b07SAlex Bennée# Report the test start and results. For makecheck we want to pretty 718*70ff5b07SAlex Bennée# print the whole report at the end of the execution. 719*70ff5b07SAlex Bennée# args: $seq, $starttime, $lasttime 720*70ff5b07SAlex Bennée_report_test_start() 721*70ff5b07SAlex Bennée{ 722*70ff5b07SAlex Bennée if ! $makecheck; then 723*70ff5b07SAlex Bennée if [ -n "$3" ]; then 724*70ff5b07SAlex Bennée local lasttime=" (last: $3s)" 725*70ff5b07SAlex Bennée fi 726*70ff5b07SAlex Bennée printf "%-8s %-10s [%s] %4s%-14s\r" "$1" "..." "$2" "..." "$lasttime" 727*70ff5b07SAlex Bennée fi 728*70ff5b07SAlex Bennée} 729*70ff5b07SAlex Bennée# args:$seq $status $starttime $lasttime $thistime $details 730*70ff5b07SAlex Bennée_report_test_result() 731*70ff5b07SAlex Bennée{ 732*70ff5b07SAlex Bennée local status lasttime thistime 733*70ff5b07SAlex Bennée if $makecheck; then 734*70ff5b07SAlex Bennée if [ -n "$2" ] && [ "$2" != "pass" ]; then 735*70ff5b07SAlex Bennée status=" [$2]" 736*70ff5b07SAlex Bennée fi 737*70ff5b07SAlex Bennée printf " TEST iotest-$IMGFMT: %s%s\n" "$1" "$status" 738*70ff5b07SAlex Bennée return 739*70ff5b07SAlex Bennée fi 740*70ff5b07SAlex Bennée 741*70ff5b07SAlex Bennée if [ -n "$4" ]; then 742*70ff5b07SAlex Bennée lasttime=" (last: $4s)" 743*70ff5b07SAlex Bennée fi 744*70ff5b07SAlex Bennée if [ -n "$5" ]; then 745*70ff5b07SAlex Bennée thistime=" $5s" 746*70ff5b07SAlex Bennée fi 747*70ff5b07SAlex Bennée case "$2" in 748*70ff5b07SAlex Bennée "pass") status=$(printf "\e[32m%-10s\e[0m" "$2") ;; 749*70ff5b07SAlex Bennée "fail") status=$(printf "\e[1m\e[31m%-10s\e[0m" "$2") ;; 750*70ff5b07SAlex Bennée "not run") status=$(printf "\e[33m%-10s\e[0m" "$2") ;; 751*70ff5b07SAlex Bennée *) status=$(printf "%-10s" "$2") ;; 752*70ff5b07SAlex Bennée esac 753*70ff5b07SAlex Bennée 754*70ff5b07SAlex Bennée printf "%-8s %s [%s] [%s] %4s%-14s %s\n" "$1" "$status" "$3" "$(date '+%T')" "$thistime" "$lasttime" "$6" 755*70ff5b07SAlex Bennée} 756*70ff5b07SAlex Bennée 75736bd4228SDaniel P. Berrange[ -f $TIMESTAMP_FILE ] || touch $TIMESTAMP_FILE 7586bf19c94SChristoph Hellwig 7594a9e751fSMao ZhongyiFULL_IMGFMT_DETAILS=$(_full_imgfmt_details) 7604a9e751fSMao ZhongyiFULL_HOST_DETAILS=$(_full_platform_details) 7616bf19c94SChristoph Hellwig 762*70ff5b07SAlex Bennéeif ! $makecheck; then 763*70ff5b07SAlex Bennée _full_env_details 764*70ff5b07SAlex Bennéefi 7656bf19c94SChristoph Hellwig 7666bf19c94SChristoph Hellwigseq="check" 7676bf19c94SChristoph Hellwig 7686bf19c94SChristoph Hellwig[ -n "$TESTS_REMAINING_LOG" ] && echo $list > $TESTS_REMAINING_LOG 7696bf19c94SChristoph Hellwig 7706bf19c94SChristoph Hellwigfor seq in $list 7716bf19c94SChristoph Hellwigdo 772*70ff5b07SAlex Bennée err=false # error flag 773*70ff5b07SAlex Bennée printdiff=false # show diff to reference output? 774*70ff5b07SAlex Bennée status="" # test result summary 775*70ff5b07SAlex Bennée results="" # test result details 776*70ff5b07SAlex Bennée 7776bf19c94SChristoph Hellwig if [ -n "$TESTS_REMAINING_LOG" ] ; then 7786bf19c94SChristoph Hellwig sed -e "s/$seq//" -e 's/ / /' -e 's/^ *//' $TESTS_REMAINING_LOG > $TESTS_REMAINING_LOG.tmp 7796bf19c94SChristoph Hellwig mv $TESTS_REMAINING_LOG.tmp $TESTS_REMAINING_LOG 7806bf19c94SChristoph Hellwig sync 7816bf19c94SChristoph Hellwig fi 7826bf19c94SChristoph Hellwig 783*70ff5b07SAlex Bennée lasttime=$(sed -n -e "/^$seq /s/.* //p" <$TIMESTAMP_FILE) 784*70ff5b07SAlex Bennée starttime=$(date "+%T") 785*70ff5b07SAlex Bennée _report_test_start $seq $starttime $lasttime 786*70ff5b07SAlex Bennée 7876bf19c94SChristoph Hellwig if $showme 7886bf19c94SChristoph Hellwig then 789*70ff5b07SAlex Bennée status="not run" 7906bf19c94SChristoph Hellwig elif [ -f expunged ] && $expunge && egrep "^$seq([ ]|\$)" expunged >/dev/null 7916bf19c94SChristoph Hellwig then 792*70ff5b07SAlex Bennée status="not run" 793*70ff5b07SAlex Bennée results="expunged" 7946bf19c94SChristoph Hellwig rm -f $seq.out.bad 7956bf19c94SChristoph Hellwig echo "/^$seq\$/d" >>$tmp.expunged 796e8f8624dSMax Reitz elif [ ! -f "$source_iotests/$seq" ] 7976bf19c94SChristoph Hellwig then 798*70ff5b07SAlex Bennée status="not run" 799*70ff5b07SAlex Bennée results="no such test?" 8006bf19c94SChristoph Hellwig echo "/^$seq\$/d" >>$tmp.expunged 8016bf19c94SChristoph Hellwig else 8026bf19c94SChristoph Hellwig # really going to try and run this one 8036bf19c94SChristoph Hellwig # 8046bf19c94SChristoph Hellwig rm -f $seq.out.bad 8056bf19c94SChristoph Hellwig rm -f core $seq.notrun 80657ed557fSAndrey Shinkevich rm -f $seq.casenotrun 8076bf19c94SChristoph Hellwig 8084a9e751fSMao Zhongyi start=$(_wallclock) 809ea81ca9dSMax Reitz 810ea81ca9dSMax Reitz if [ "$(head -n 1 "$source_iotests/$seq")" == "#!/usr/bin/env python" ]; then 811ea81ca9dSMax Reitz run_command="$PYTHON $seq" 812ea81ca9dSMax Reitz else 813ea81ca9dSMax Reitz run_command="./$seq" 814ea81ca9dSMax Reitz fi 815e8f8624dSMax Reitz export OUTPUT_DIR=$PWD 816aa4f592aSFam Zheng if $debug; then 817aa4f592aSFam Zheng (cd "$source_iotests"; 818aa4f592aSFam Zheng MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ 819aa4f592aSFam Zheng $run_command -d 2>&1 | tee $tmp.out) 820aa4f592aSFam Zheng else 821e8f8624dSMax Reitz (cd "$source_iotests"; 82204129606SStefan Hajnoczi MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ 823ea81ca9dSMax Reitz $run_command >$tmp.out 2>&1) 824aa4f592aSFam Zheng fi 8256bf19c94SChristoph Hellwig sts=$? 8264a9e751fSMao Zhongyi stop=$(_wallclock) 8276bf19c94SChristoph Hellwig 8286bf19c94SChristoph Hellwig if [ -f core ] 8296bf19c94SChristoph Hellwig then 8306bf19c94SChristoph Hellwig mv core $seq.core 831*70ff5b07SAlex Bennée status="fail" 832*70ff5b07SAlex Bennée results="[dumped core] $seq.core" 8336bf19c94SChristoph Hellwig err=true 8346bf19c94SChristoph Hellwig fi 8356bf19c94SChristoph Hellwig 8366bf19c94SChristoph Hellwig if [ -f $seq.notrun ] 8376bf19c94SChristoph Hellwig then 838*70ff5b07SAlex Bennée # overwrites timestamp output 839*70ff5b07SAlex Bennée status="not run" 840*70ff5b07SAlex Bennée results="$(cat $seq.notrun)" 8416bf19c94SChristoph Hellwig else 8426bf19c94SChristoph Hellwig if [ $sts -ne 0 ] 8436bf19c94SChristoph Hellwig then 844*70ff5b07SAlex Bennée status="fail" 845*70ff5b07SAlex Bennée results=$(printf %s "[failed, exit status $sts]") 8466bf19c94SChristoph Hellwig err=true 8476bf19c94SChristoph Hellwig fi 8488f94b077SKevin Wolf 849e8f8624dSMax Reitz reference="$source_iotests/$seq.out" 850e166b414SBo Tu reference_machine="$source_iotests/$seq.$QEMU_DEFAULT_MACHINE.out" 851e166b414SBo Tu if [ -f "$reference_machine" ]; then 852e166b414SBo Tu reference="$reference_machine" 853e166b414SBo Tu fi 854e166b414SBo Tu 855217a0683SStefan Hajnoczi reference_format="$source_iotests/$seq.out.$IMGFMT" 856217a0683SStefan Hajnoczi if [ -f "$reference_format" ]; then 857217a0683SStefan Hajnoczi reference="$reference_format" 858217a0683SStefan Hajnoczi fi 859217a0683SStefan Hajnoczi 8603baa8449SFam Zheng if [ "$CACHEMODE" = "none" ]; then 861e8f8624dSMax Reitz [ -f "$source_iotests/$seq.out.nocache" ] && reference="$source_iotests/$seq.out.nocache" 8628f94b077SKevin Wolf fi 8638f94b077SKevin Wolf 864e8f8624dSMax Reitz if [ ! -f "$reference" ] 8656bf19c94SChristoph Hellwig then 866*70ff5b07SAlex Bennée status="fail" 867*70ff5b07SAlex Bennée reason="no qualified output" 8686bf19c94SChristoph Hellwig err=true 8696bf19c94SChristoph Hellwig else 870e8f8624dSMax Reitz if diff -w "$reference" $tmp.out >/dev/null 2>&1 8716bf19c94SChristoph Hellwig then 872*70ff5b07SAlex Bennée if ! $err; then 873*70ff5b07SAlex Bennée status="pass" 874*70ff5b07SAlex Bennée thistime=$(expr $stop - $start) 875*70ff5b07SAlex Bennée echo "$seq $thistime" >>$tmp.time 8766bf19c94SChristoph Hellwig fi 8776bf19c94SChristoph Hellwig else 8786bf19c94SChristoph Hellwig mv $tmp.out $seq.out.bad 87963ca8406SEric Blake $diff -w "$reference" "$PWD"/$seq.out.bad 880*70ff5b07SAlex Bennée status="fail" 881*70ff5b07SAlex Bennée results="output mismatch (see $seq.out.bad)" 882*70ff5b07SAlex Bennée printdiff=true 8836bf19c94SChristoph Hellwig err=true 8846bf19c94SChristoph Hellwig fi 8856bf19c94SChristoph Hellwig fi 8866bf19c94SChristoph Hellwig fi 88757ed557fSAndrey Shinkevich if [ -f $seq.casenotrun ] 88857ed557fSAndrey Shinkevich then 88957ed557fSAndrey Shinkevich cat $seq.casenotrun 89057ed557fSAndrey Shinkevich casenotrun="$casenotrun $seq" 89157ed557fSAndrey Shinkevich fi 8926bf19c94SChristoph Hellwig fi 8936bf19c94SChristoph Hellwig 8946bf19c94SChristoph Hellwig # come here for each test, except when $showme is true 8956bf19c94SChristoph Hellwig # 896*70ff5b07SAlex Bennée _report_test_result $seq "$status" "$starttime" "$lasttime" "$thistime" "$results" 897*70ff5b07SAlex Bennée case "$status" in 898*70ff5b07SAlex Bennée "pass") 899*70ff5b07SAlex Bennée try=$(expr $try + 1) 900*70ff5b07SAlex Bennée ;; 901*70ff5b07SAlex Bennée "fail") 902*70ff5b07SAlex Bennée try=$(expr $try + 1) 903*70ff5b07SAlex Bennée if $makecheck; then 904*70ff5b07SAlex Bennée _full_env_details 905*70ff5b07SAlex Bennée fi 906*70ff5b07SAlex Bennée if $printdiff; then 907*70ff5b07SAlex Bennée $diff -w "$reference" "$PWD"/$seq.out.bad 908*70ff5b07SAlex Bennée fi 9096bf19c94SChristoph Hellwig bad="$bad $seq" 9104a9e751fSMao Zhongyi n_bad=$(expr $n_bad + 1) 9116bf19c94SChristoph Hellwig quick=false 912*70ff5b07SAlex Bennée ;; 913*70ff5b07SAlex Bennée "not run") 914*70ff5b07SAlex Bennée notrun="$notrun $seq" 915*70ff5b07SAlex Bennée ;; 916*70ff5b07SAlex Bennée esac 9176bf19c94SChristoph Hellwig 9186bf19c94SChristoph Hellwig seq="after_$seq" 9196bf19c94SChristoph Hellwigdone 9206bf19c94SChristoph Hellwig 9216bf19c94SChristoph Hellwiginterrupt=false 9224a9e751fSMao Zhongyistatus=$(expr $n_bad) 9236bf19c94SChristoph Hellwigexit 924