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 72*09d653e6SPaolo Bonzini_full_imgfmt_details() 73*09d653e6SPaolo Bonzini{ 74*09d653e6SPaolo Bonzini if [ -n "$IMGOPTS" ]; then 75*09d653e6SPaolo Bonzini echo "$IMGFMT ($IMGOPTS)" 76*09d653e6SPaolo Bonzini else 77*09d653e6SPaolo Bonzini echo "$IMGFMT" 78*09d653e6SPaolo Bonzini fi 79*09d653e6SPaolo Bonzini} 80*09d653e6SPaolo Bonzini 81*09d653e6SPaolo Bonzini_full_platform_details() 82*09d653e6SPaolo Bonzini{ 83*09d653e6SPaolo Bonzini os=`uname -s` 84*09d653e6SPaolo Bonzini host=`hostname -s` 85*09d653e6SPaolo Bonzini kernel=`uname -r` 86*09d653e6SPaolo Bonzini platform=`uname -m` 87*09d653e6SPaolo Bonzini echo "$os/$platform $host $kernel" 88*09d653e6SPaolo Bonzini} 89*09d653e6SPaolo Bonzini 90*09d653e6SPaolo Bonzini# $1 = prog to look for 91*09d653e6SPaolo Bonziniset_prog_path() 92*09d653e6SPaolo Bonzini{ 93*09d653e6SPaolo Bonzini p=`command -v $1 2> /dev/null` 94*09d653e6SPaolo Bonzini if [ -n "$p" -a -x "$p" ]; then 95*09d653e6SPaolo Bonzini realpath -- "$(type -p "$p")" 96*09d653e6SPaolo Bonzini else 97*09d653e6SPaolo Bonzini return 1 98*09d653e6SPaolo Bonzini fi 99*09d653e6SPaolo Bonzini} 100*09d653e6SPaolo Bonzini 101*09d653e6SPaolo Bonziniif [ -z "$TEST_DIR" ]; then 102*09d653e6SPaolo Bonzini TEST_DIR=`pwd`/scratch 103*09d653e6SPaolo Bonzinifi 104*09d653e6SPaolo Bonzini 105*09d653e6SPaolo Bonziniif [ ! -e "$TEST_DIR" ]; then 106*09d653e6SPaolo Bonzini mkdir "$TEST_DIR" 107*09d653e6SPaolo Bonzinifi 108*09d653e6SPaolo Bonzini 109*09d653e6SPaolo Bonzinidiff="diff -u" 110*09d653e6SPaolo Bonziniverbose=false 111*09d653e6SPaolo Bonzinidebug=false 112*09d653e6SPaolo Bonzinigroup=false 113*09d653e6SPaolo Bonzinixgroup=false 114*09d653e6SPaolo Bonziniimgopts=false 115*09d653e6SPaolo Bonzinishowme=false 116*09d653e6SPaolo Bonzinisortme=false 117*09d653e6SPaolo Bonziniexpunge=true 118*09d653e6SPaolo Bonzinihave_test_arg=false 119*09d653e6SPaolo Bonzinicachemode=false 120*09d653e6SPaolo Bonzini 121*09d653e6SPaolo Bonzinitmp="${TEST_DIR}"/$$ 122*09d653e6SPaolo Bonzinirm -f $tmp.list $tmp.tmp $tmp.sed 123*09d653e6SPaolo Bonzini 124*09d653e6SPaolo Bonziniexport IMGFMT=raw 125*09d653e6SPaolo Bonziniexport IMGFMT_GENERIC=true 126*09d653e6SPaolo Bonziniexport IMGPROTO=file 127*09d653e6SPaolo Bonziniexport IMGOPTS="" 128*09d653e6SPaolo Bonziniexport CACHEMODE="writeback" 129*09d653e6SPaolo Bonziniexport QEMU_IO_OPTIONS="" 130*09d653e6SPaolo Bonziniexport QEMU_IO_OPTIONS_NO_FMT="" 131*09d653e6SPaolo Bonziniexport CACHEMODE_IS_DEFAULT=true 132*09d653e6SPaolo Bonziniexport QEMU_OPTIONS="-nodefaults -machine accel=qtest" 133*09d653e6SPaolo Bonziniexport VALGRIND_QEMU= 134*09d653e6SPaolo Bonziniexport IMGKEYSECRET= 135*09d653e6SPaolo Bonziniexport IMGOPTSSYNTAX=false 136*09d653e6SPaolo Bonzini 137*09d653e6SPaolo Bonzinifor r 138*09d653e6SPaolo Bonzinido 139*09d653e6SPaolo Bonzini 140*09d653e6SPaolo Bonzini if $group 141*09d653e6SPaolo Bonzini then 142*09d653e6SPaolo Bonzini # arg after -g 143*09d653e6SPaolo Bonzini group_list=`sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{ 144*09d653e6SPaolo Bonzinis/ .*//p 145*09d653e6SPaolo Bonzini}'` 146*09d653e6SPaolo Bonzini if [ -z "$group_list" ] 147*09d653e6SPaolo Bonzini then 148*09d653e6SPaolo Bonzini echo "Group \"$r\" is empty or not defined?" 149*09d653e6SPaolo Bonzini exit 1 150*09d653e6SPaolo Bonzini fi 151*09d653e6SPaolo Bonzini [ ! -s $tmp.list ] && touch $tmp.list 152*09d653e6SPaolo Bonzini for t in $group_list 153*09d653e6SPaolo Bonzini do 154*09d653e6SPaolo Bonzini if grep -s "^$t\$" $tmp.list >/dev/null 155*09d653e6SPaolo Bonzini then 156*09d653e6SPaolo Bonzini : 157*09d653e6SPaolo Bonzini else 158*09d653e6SPaolo Bonzini echo "$t" >>$tmp.list 159*09d653e6SPaolo Bonzini fi 160*09d653e6SPaolo Bonzini done 161*09d653e6SPaolo Bonzini group=false 162*09d653e6SPaolo Bonzini continue 163*09d653e6SPaolo Bonzini 164*09d653e6SPaolo Bonzini elif $xgroup 165*09d653e6SPaolo Bonzini then 166*09d653e6SPaolo Bonzini # arg after -x 167*09d653e6SPaolo Bonzini # Populate $tmp.list with all tests 168*09d653e6SPaolo Bonzini awk '/^[0-9]{3,}/ {print $1}' "${source_iotests}/group" > $tmp.list 2>/dev/null 169*09d653e6SPaolo Bonzini group_list=`sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{ 170*09d653e6SPaolo Bonzinis/ .*//p 171*09d653e6SPaolo Bonzini}'` 172*09d653e6SPaolo Bonzini if [ -z "$group_list" ] 173*09d653e6SPaolo Bonzini then 174*09d653e6SPaolo Bonzini echo "Group \"$r\" is empty or not defined?" 175*09d653e6SPaolo Bonzini exit 1 176*09d653e6SPaolo Bonzini fi 177*09d653e6SPaolo Bonzini numsed=0 178*09d653e6SPaolo Bonzini rm -f $tmp.sed 179*09d653e6SPaolo Bonzini for t in $group_list 180*09d653e6SPaolo Bonzini do 181*09d653e6SPaolo Bonzini if [ $numsed -gt 100 ] 182*09d653e6SPaolo Bonzini then 183*09d653e6SPaolo Bonzini sed -f $tmp.sed <$tmp.list >$tmp.tmp 184*09d653e6SPaolo Bonzini mv $tmp.tmp $tmp.list 185*09d653e6SPaolo Bonzini numsed=0 186*09d653e6SPaolo Bonzini rm -f $tmp.sed 187*09d653e6SPaolo Bonzini fi 188*09d653e6SPaolo Bonzini echo "/^$t\$/d" >>$tmp.sed 189*09d653e6SPaolo Bonzini numsed=`expr $numsed + 1` 190*09d653e6SPaolo Bonzini done 191*09d653e6SPaolo Bonzini sed -f $tmp.sed <$tmp.list >$tmp.tmp 192*09d653e6SPaolo Bonzini mv $tmp.tmp $tmp.list 193*09d653e6SPaolo Bonzini xgroup=false 194*09d653e6SPaolo Bonzini continue 195*09d653e6SPaolo Bonzini 196*09d653e6SPaolo Bonzini elif $imgopts 197*09d653e6SPaolo Bonzini then 198*09d653e6SPaolo Bonzini IMGOPTS="$r" 199*09d653e6SPaolo Bonzini imgopts=false 200*09d653e6SPaolo Bonzini continue 201*09d653e6SPaolo Bonzini elif $cachemode 202*09d653e6SPaolo Bonzini then 203*09d653e6SPaolo Bonzini CACHEMODE="$r" 204*09d653e6SPaolo Bonzini CACHEMODE_IS_DEFAULT=false 205*09d653e6SPaolo Bonzini cachemode=false 206*09d653e6SPaolo Bonzini continue 207*09d653e6SPaolo Bonzini fi 208*09d653e6SPaolo Bonzini 209*09d653e6SPaolo Bonzini xpand=true 210*09d653e6SPaolo Bonzini case "$r" 211*09d653e6SPaolo Bonzini in 212*09d653e6SPaolo Bonzini 213*09d653e6SPaolo Bonzini -\? | -h | --help) # usage 214*09d653e6SPaolo Bonzini echo "Usage: $0 [options] [testlist]"' 215*09d653e6SPaolo Bonzini 216*09d653e6SPaolo Bonzinicommon options 217*09d653e6SPaolo Bonzini -v verbose 218*09d653e6SPaolo Bonzini -d debug 219*09d653e6SPaolo Bonzini 220*09d653e6SPaolo Bonziniimage format options 221*09d653e6SPaolo Bonzini -raw test raw (default) 222*09d653e6SPaolo Bonzini -bochs test bochs 223*09d653e6SPaolo Bonzini -cloop test cloop 224*09d653e6SPaolo Bonzini -parallels test parallels 225*09d653e6SPaolo Bonzini -qcow test qcow 226*09d653e6SPaolo Bonzini -qcow2 test qcow2 227*09d653e6SPaolo Bonzini -qed test qed 228*09d653e6SPaolo Bonzini -vdi test vdi 229*09d653e6SPaolo Bonzini -vpc test vpc 230*09d653e6SPaolo Bonzini -vhdx test vhdx 231*09d653e6SPaolo Bonzini -vmdk test vmdk 232*09d653e6SPaolo Bonzini -luks test luks 233*09d653e6SPaolo Bonzini 234*09d653e6SPaolo Bonziniimage protocol options 235*09d653e6SPaolo Bonzini -file test file (default) 236*09d653e6SPaolo Bonzini -rbd test rbd 237*09d653e6SPaolo Bonzini -sheepdog test sheepdog 238*09d653e6SPaolo Bonzini -nbd test nbd 239*09d653e6SPaolo Bonzini -ssh test ssh 240*09d653e6SPaolo Bonzini -nfs test nfs 241*09d653e6SPaolo Bonzini -vxhs test vxhs 242*09d653e6SPaolo Bonzini 243*09d653e6SPaolo Bonziniother options 244*09d653e6SPaolo Bonzini -xdiff graphical mode diff 245*09d653e6SPaolo Bonzini -nocache use O_DIRECT on backing file 246*09d653e6SPaolo Bonzini -misalign misalign memory allocations 247*09d653e6SPaolo Bonzini -n show me, do not run tests 248*09d653e6SPaolo Bonzini -o options -o options to pass to qemu-img create/convert 249*09d653e6SPaolo Bonzini -T output timestamps 250*09d653e6SPaolo Bonzini -c mode cache mode 251*09d653e6SPaolo Bonzini 252*09d653e6SPaolo Bonzinitestlist options 253*09d653e6SPaolo Bonzini -g group[,group...] include tests from these groups 254*09d653e6SPaolo Bonzini -x group[,group...] exclude tests from these groups 255*09d653e6SPaolo Bonzini NNN include test NNN 256*09d653e6SPaolo Bonzini NNN-NNN include test range (eg. 012-021) 257*09d653e6SPaolo Bonzini' 258*09d653e6SPaolo Bonzini exit 0 259*09d653e6SPaolo Bonzini ;; 260*09d653e6SPaolo Bonzini 261*09d653e6SPaolo Bonzini -raw) 262*09d653e6SPaolo Bonzini IMGFMT=raw 263*09d653e6SPaolo Bonzini xpand=false 264*09d653e6SPaolo Bonzini ;; 265*09d653e6SPaolo Bonzini 266*09d653e6SPaolo Bonzini -bochs) 267*09d653e6SPaolo Bonzini IMGFMT=bochs 268*09d653e6SPaolo Bonzini IMGFMT_GENERIC=false 269*09d653e6SPaolo Bonzini xpand=false 270*09d653e6SPaolo Bonzini ;; 271*09d653e6SPaolo Bonzini 272*09d653e6SPaolo Bonzini -cloop) 273*09d653e6SPaolo Bonzini IMGFMT=cloop 274*09d653e6SPaolo Bonzini IMGFMT_GENERIC=false 275*09d653e6SPaolo Bonzini xpand=false 276*09d653e6SPaolo Bonzini ;; 277*09d653e6SPaolo Bonzini 278*09d653e6SPaolo Bonzini -parallels) 279*09d653e6SPaolo Bonzini IMGFMT=parallels 280*09d653e6SPaolo Bonzini IMGFMT_GENERIC=false 281*09d653e6SPaolo Bonzini xpand=false 282*09d653e6SPaolo Bonzini ;; 283*09d653e6SPaolo Bonzini 284*09d653e6SPaolo Bonzini -qcow) 285*09d653e6SPaolo Bonzini IMGFMT=qcow 286*09d653e6SPaolo Bonzini xpand=false 287*09d653e6SPaolo Bonzini ;; 288*09d653e6SPaolo Bonzini 289*09d653e6SPaolo Bonzini -qcow2) 290*09d653e6SPaolo Bonzini IMGFMT=qcow2 291*09d653e6SPaolo Bonzini xpand=false 292*09d653e6SPaolo Bonzini ;; 293*09d653e6SPaolo Bonzini 294*09d653e6SPaolo Bonzini -luks) 295*09d653e6SPaolo Bonzini IMGOPTSSYNTAX=true 296*09d653e6SPaolo Bonzini IMGFMT=luks 297*09d653e6SPaolo Bonzini IMGKEYSECRET=123456 298*09d653e6SPaolo Bonzini xpand=false 299*09d653e6SPaolo Bonzini ;; 300*09d653e6SPaolo Bonzini 301*09d653e6SPaolo Bonzini -qed) 302*09d653e6SPaolo Bonzini IMGFMT=qed 303*09d653e6SPaolo Bonzini xpand=false 304*09d653e6SPaolo Bonzini ;; 305*09d653e6SPaolo Bonzini 306*09d653e6SPaolo Bonzini -vdi) 307*09d653e6SPaolo Bonzini IMGFMT=vdi 308*09d653e6SPaolo Bonzini xpand=false 309*09d653e6SPaolo Bonzini ;; 310*09d653e6SPaolo Bonzini 311*09d653e6SPaolo Bonzini -vmdk) 312*09d653e6SPaolo Bonzini IMGFMT=vmdk 313*09d653e6SPaolo Bonzini xpand=false 314*09d653e6SPaolo Bonzini ;; 315*09d653e6SPaolo Bonzini 316*09d653e6SPaolo Bonzini -vpc) 317*09d653e6SPaolo Bonzini IMGFMT=vpc 318*09d653e6SPaolo Bonzini xpand=false 319*09d653e6SPaolo Bonzini ;; 320*09d653e6SPaolo Bonzini 321*09d653e6SPaolo Bonzini -vhdx) 322*09d653e6SPaolo Bonzini IMGFMT=vhdx 323*09d653e6SPaolo Bonzini xpand=false 324*09d653e6SPaolo Bonzini ;; 325*09d653e6SPaolo Bonzini 326*09d653e6SPaolo Bonzini -file) 327*09d653e6SPaolo Bonzini IMGPROTO=file 328*09d653e6SPaolo Bonzini xpand=false 329*09d653e6SPaolo Bonzini ;; 330*09d653e6SPaolo Bonzini 331*09d653e6SPaolo Bonzini -rbd) 332*09d653e6SPaolo Bonzini IMGPROTO=rbd 333*09d653e6SPaolo Bonzini xpand=false 334*09d653e6SPaolo Bonzini ;; 335*09d653e6SPaolo Bonzini 336*09d653e6SPaolo Bonzini -sheepdog) 337*09d653e6SPaolo Bonzini IMGPROTO=sheepdog 338*09d653e6SPaolo Bonzini xpand=false 339*09d653e6SPaolo Bonzini ;; 340*09d653e6SPaolo Bonzini 341*09d653e6SPaolo Bonzini -nbd) 342*09d653e6SPaolo Bonzini IMGPROTO=nbd 343*09d653e6SPaolo Bonzini xpand=false 344*09d653e6SPaolo Bonzini ;; 345*09d653e6SPaolo Bonzini 346*09d653e6SPaolo Bonzini -vxhs) 347*09d653e6SPaolo Bonzini IMGPROTO=vxhs 348*09d653e6SPaolo Bonzini xpand=false 349*09d653e6SPaolo Bonzini ;; 350*09d653e6SPaolo Bonzini 351*09d653e6SPaolo Bonzini -ssh) 352*09d653e6SPaolo Bonzini IMGPROTO=ssh 353*09d653e6SPaolo Bonzini xpand=false 354*09d653e6SPaolo Bonzini ;; 355*09d653e6SPaolo Bonzini 356*09d653e6SPaolo Bonzini -nfs) 357*09d653e6SPaolo Bonzini IMGPROTO=nfs 358*09d653e6SPaolo Bonzini xpand=false 359*09d653e6SPaolo Bonzini ;; 360*09d653e6SPaolo Bonzini 361*09d653e6SPaolo Bonzini -nocache) 362*09d653e6SPaolo Bonzini CACHEMODE="none" 363*09d653e6SPaolo Bonzini CACHEMODE_IS_DEFAULT=false 364*09d653e6SPaolo Bonzini xpand=false 365*09d653e6SPaolo Bonzini ;; 366*09d653e6SPaolo Bonzini 367*09d653e6SPaolo Bonzini -misalign) 368*09d653e6SPaolo Bonzini QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --misalign" 369*09d653e6SPaolo Bonzini xpand=false 370*09d653e6SPaolo Bonzini ;; 371*09d653e6SPaolo Bonzini 372*09d653e6SPaolo Bonzini -valgrind) 373*09d653e6SPaolo Bonzini VALGRIND_QEMU='y' 374*09d653e6SPaolo Bonzini xpand=false 375*09d653e6SPaolo Bonzini ;; 376*09d653e6SPaolo Bonzini 377*09d653e6SPaolo Bonzini -g) # -g group ... pick from group file 378*09d653e6SPaolo Bonzini group=true 379*09d653e6SPaolo Bonzini xpand=false 380*09d653e6SPaolo Bonzini ;; 381*09d653e6SPaolo Bonzini 382*09d653e6SPaolo Bonzini -xdiff) # graphical diff mode 383*09d653e6SPaolo Bonzini xpand=false 384*09d653e6SPaolo Bonzini 385*09d653e6SPaolo Bonzini if [ ! -z "$DISPLAY" ] 386*09d653e6SPaolo Bonzini then 387*09d653e6SPaolo Bonzini command -v xdiff >/dev/null 2>&1 && diff=xdiff 388*09d653e6SPaolo Bonzini command -v gdiff >/dev/null 2>&1 && diff=gdiff 389*09d653e6SPaolo Bonzini command -v tkdiff >/dev/null 2>&1 && diff=tkdiff 390*09d653e6SPaolo Bonzini command -v xxdiff >/dev/null 2>&1 && diff=xxdiff 391*09d653e6SPaolo Bonzini fi 392*09d653e6SPaolo Bonzini ;; 393*09d653e6SPaolo Bonzini 394*09d653e6SPaolo Bonzini -n) # show me, don't do it 395*09d653e6SPaolo Bonzini showme=true 396*09d653e6SPaolo Bonzini xpand=false 397*09d653e6SPaolo Bonzini ;; 398*09d653e6SPaolo Bonzini -o) 399*09d653e6SPaolo Bonzini imgopts=true 400*09d653e6SPaolo Bonzini xpand=false 401*09d653e6SPaolo Bonzini ;; 402*09d653e6SPaolo Bonzini -c) 403*09d653e6SPaolo Bonzini cachemode=true 404*09d653e6SPaolo Bonzini xpand=false 405*09d653e6SPaolo Bonzini ;; 406*09d653e6SPaolo Bonzini -T) # turn on timestamp output 407*09d653e6SPaolo Bonzini timestamp=true 408*09d653e6SPaolo Bonzini xpand=false 409*09d653e6SPaolo Bonzini ;; 410*09d653e6SPaolo Bonzini 411*09d653e6SPaolo Bonzini -v) 412*09d653e6SPaolo Bonzini verbose=true 413*09d653e6SPaolo Bonzini xpand=false 414*09d653e6SPaolo Bonzini ;; 415*09d653e6SPaolo Bonzini -d) 416*09d653e6SPaolo Bonzini debug=true 417*09d653e6SPaolo Bonzini xpand=false 418*09d653e6SPaolo Bonzini ;; 419*09d653e6SPaolo Bonzini -x) # -x group ... exclude from group file 420*09d653e6SPaolo Bonzini xgroup=true 421*09d653e6SPaolo Bonzini xpand=false 422*09d653e6SPaolo Bonzini ;; 423*09d653e6SPaolo Bonzini '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]') 424*09d653e6SPaolo Bonzini echo "No tests?" 425*09d653e6SPaolo Bonzini status=1 426*09d653e6SPaolo Bonzini exit $status 427*09d653e6SPaolo Bonzini ;; 428*09d653e6SPaolo Bonzini 429*09d653e6SPaolo Bonzini [0-9]*-[0-9]*) 430*09d653e6SPaolo Bonzini eval `echo $r | sed -e 's/^/start=/' -e 's/-/ end=/'` 431*09d653e6SPaolo Bonzini ;; 432*09d653e6SPaolo Bonzini 433*09d653e6SPaolo Bonzini [0-9]*-) 434*09d653e6SPaolo Bonzini eval `echo $r | sed -e 's/^/start=/' -e 's/-//'` 435*09d653e6SPaolo 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/.* //'` 436*09d653e6SPaolo Bonzini if [ -z "$end" ] 437*09d653e6SPaolo Bonzini then 438*09d653e6SPaolo Bonzini echo "No tests in range \"$r\"?" 439*09d653e6SPaolo Bonzini status=1 440*09d653e6SPaolo Bonzini exit $status 441*09d653e6SPaolo Bonzini fi 442*09d653e6SPaolo Bonzini ;; 443*09d653e6SPaolo Bonzini 444*09d653e6SPaolo Bonzini *) 445*09d653e6SPaolo Bonzini start=$r 446*09d653e6SPaolo Bonzini end=$r 447*09d653e6SPaolo Bonzini ;; 448*09d653e6SPaolo Bonzini 449*09d653e6SPaolo Bonzini esac 450*09d653e6SPaolo Bonzini 451*09d653e6SPaolo Bonzini # get rid of leading 0s as can be interpreted as octal 452*09d653e6SPaolo Bonzini start=`echo $start | sed 's/^0*//'` 453*09d653e6SPaolo Bonzini end=`echo $end | sed 's/^0*//'` 454*09d653e6SPaolo Bonzini 455*09d653e6SPaolo Bonzini if $xpand 456*09d653e6SPaolo Bonzini then 457*09d653e6SPaolo Bonzini have_test_arg=true 458*09d653e6SPaolo Bonzini awk </dev/null ' 459*09d653e6SPaolo BonziniBEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \ 460*09d653e6SPaolo Bonzini | while read id 461*09d653e6SPaolo Bonzini do 462*09d653e6SPaolo Bonzini if grep -s "^$id " "$source_iotests/group" >/dev/null 463*09d653e6SPaolo Bonzini then 464*09d653e6SPaolo Bonzini # in group file ... OK 465*09d653e6SPaolo Bonzini echo $id >>$tmp.list 466*09d653e6SPaolo Bonzini else 467*09d653e6SPaolo Bonzini if [ -f expunged ] && $expunge && egrep "^$id([ ]|\$)" expunged >/dev/null 468*09d653e6SPaolo Bonzini then 469*09d653e6SPaolo Bonzini # expunged ... will be reported, but not run, later 470*09d653e6SPaolo Bonzini echo $id >>$tmp.list 471*09d653e6SPaolo Bonzini else 472*09d653e6SPaolo Bonzini # oops 473*09d653e6SPaolo Bonzini if [ "$start" == "$end" -a "$id" == "$end" ] 474*09d653e6SPaolo Bonzini then 475*09d653e6SPaolo Bonzini echo "$id - unknown test" 476*09d653e6SPaolo Bonzini exit 1 477*09d653e6SPaolo Bonzini else 478*09d653e6SPaolo Bonzini echo "$id - unknown test, ignored" 479*09d653e6SPaolo Bonzini fi 480*09d653e6SPaolo Bonzini fi 481*09d653e6SPaolo Bonzini fi 482*09d653e6SPaolo Bonzini done || exit 1 483*09d653e6SPaolo Bonzini fi 484*09d653e6SPaolo Bonzini 485*09d653e6SPaolo Bonzinidone 486*09d653e6SPaolo Bonzini 487*09d653e6SPaolo Bonzini# Set qemu-io cache mode with $CACHEMODE we have 488*09d653e6SPaolo BonziniQEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --cache $CACHEMODE" 489*09d653e6SPaolo Bonzini 490*09d653e6SPaolo BonziniQEMU_IO_OPTIONS_NO_FMT="$QEMU_IO_OPTIONS" 491*09d653e6SPaolo Bonziniif [ "$IMGOPTSSYNTAX" != "true" ]; then 492*09d653e6SPaolo Bonzini QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS -f $IMGFMT" 493*09d653e6SPaolo Bonzinifi 494*09d653e6SPaolo Bonzini 495*09d653e6SPaolo Bonzini# Set default options for qemu-img create -o if they were not specified 496*09d653e6SPaolo Bonziniif [ "$IMGFMT" == "qcow2" ] && ! (echo "$IMGOPTS" | grep "compat=" > /dev/null); then 497*09d653e6SPaolo Bonzini IMGOPTS=$(_optstr_add "$IMGOPTS" "compat=1.1") 498*09d653e6SPaolo Bonzinifi 499*09d653e6SPaolo Bonziniif [ "$IMGFMT" == "luks" ] && ! (echo "$IMGOPTS" | grep "iter-time=" > /dev/null); then 500*09d653e6SPaolo Bonzini IMGOPTS=$(_optstr_add "$IMGOPTS" "iter-time=10") 501*09d653e6SPaolo Bonzinifi 502*09d653e6SPaolo Bonzini 503*09d653e6SPaolo Bonziniif [ -z "$SAMPLE_IMG_DIR" ]; then 504*09d653e6SPaolo Bonzini SAMPLE_IMG_DIR="$source_iotests/sample_images" 505*09d653e6SPaolo Bonzinifi 506*09d653e6SPaolo Bonzini 507*09d653e6SPaolo Bonziniexport TEST_DIR 508*09d653e6SPaolo Bonziniexport SAMPLE_IMG_DIR 509*09d653e6SPaolo Bonzini 510*09d653e6SPaolo Bonziniif [ -s $tmp.list ] 511*09d653e6SPaolo Bonzinithen 512*09d653e6SPaolo Bonzini # found some valid test numbers ... this is good 513*09d653e6SPaolo Bonzini : 514*09d653e6SPaolo Bonzinielse 515*09d653e6SPaolo Bonzini if $have_test_arg 516*09d653e6SPaolo Bonzini then 517*09d653e6SPaolo Bonzini # had test numbers, but none in group file ... do nothing 518*09d653e6SPaolo Bonzini touch $tmp.list 519*09d653e6SPaolo Bonzini else 520*09d653e6SPaolo Bonzini # no test numbers, do everything from group file 521*09d653e6SPaolo Bonzini sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' <"$source_iotests/group" >$tmp.list 522*09d653e6SPaolo Bonzini fi 523*09d653e6SPaolo Bonzinifi 524*09d653e6SPaolo Bonzini 525*09d653e6SPaolo Bonzini# should be sort -n, but this did not work for Linux when this 526*09d653e6SPaolo Bonzini# was ported from IRIX 527*09d653e6SPaolo Bonzini# 528*09d653e6SPaolo Bonzinilist=`sort $tmp.list` 529*09d653e6SPaolo Bonzinirm -f $tmp.list $tmp.tmp $tmp.sed 530*09d653e6SPaolo Bonzini 531*09d653e6SPaolo Bonziniif [ -z "$QEMU_PROG" ] 532*09d653e6SPaolo Bonzinithen 533*09d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu" ]; then 534*09d653e6SPaolo Bonzini export QEMU_PROG="$build_iotests/qemu" 535*09d653e6SPaolo Bonzini elif [ -x "$build_root/$arch-softmmu/qemu-system-$arch" ]; then 536*09d653e6SPaolo Bonzini export QEMU_PROG="$build_root/$arch-softmmu/qemu-system-$arch" 537*09d653e6SPaolo Bonzini else 538*09d653e6SPaolo Bonzini pushd "$build_root" > /dev/null 539*09d653e6SPaolo Bonzini for binary in *-softmmu/qemu-system-* 540*09d653e6SPaolo Bonzini do 541*09d653e6SPaolo Bonzini if [ -x "$binary" ] 542*09d653e6SPaolo Bonzini then 543*09d653e6SPaolo Bonzini export QEMU_PROG="$build_root/$binary" 544*09d653e6SPaolo Bonzini break 545*09d653e6SPaolo Bonzini fi 546*09d653e6SPaolo Bonzini done 547*09d653e6SPaolo Bonzini popd > /dev/null 548*09d653e6SPaolo Bonzini [ "$QEMU_PROG" = "" ] && _init_error "qemu not found" 549*09d653e6SPaolo Bonzini fi 550*09d653e6SPaolo Bonzinifi 551*09d653e6SPaolo Bonziniexport QEMU_PROG=$(realpath -- "$(type -p "$QEMU_PROG")") 552*09d653e6SPaolo Bonzini 553*09d653e6SPaolo Bonziniif [ -z "$QEMU_IMG_PROG" ]; then 554*09d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-img" ]; then 555*09d653e6SPaolo Bonzini export QEMU_IMG_PROG="$build_iotests/qemu-img" 556*09d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-img" ]; then 557*09d653e6SPaolo Bonzini export QEMU_IMG_PROG="$build_root/qemu-img" 558*09d653e6SPaolo Bonzini else 559*09d653e6SPaolo Bonzini _init_error "qemu-img not found" 560*09d653e6SPaolo Bonzini fi 561*09d653e6SPaolo Bonzinifi 562*09d653e6SPaolo Bonziniexport QEMU_IMG_PROG=$(realpath -- "$(type -p "$QEMU_IMG_PROG")") 563*09d653e6SPaolo Bonzini 564*09d653e6SPaolo Bonziniif [ -z "$QEMU_IO_PROG" ]; then 565*09d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-io" ]; then 566*09d653e6SPaolo Bonzini export QEMU_IO_PROG="$build_iotests/qemu-io" 567*09d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-io" ]; then 568*09d653e6SPaolo Bonzini export QEMU_IO_PROG="$build_root/qemu-io" 569*09d653e6SPaolo Bonzini else 570*09d653e6SPaolo Bonzini _init_error "qemu-io not found" 571*09d653e6SPaolo Bonzini fi 572*09d653e6SPaolo Bonzinifi 573*09d653e6SPaolo Bonziniexport QEMU_IO_PROG=$(realpath -- "$(type -p "$QEMU_IO_PROG")") 574*09d653e6SPaolo Bonzini 575*09d653e6SPaolo Bonziniif [ -z $QEMU_NBD_PROG ]; then 576*09d653e6SPaolo Bonzini if [ -x "$build_iotests/qemu-nbd" ]; then 577*09d653e6SPaolo Bonzini export QEMU_NBD_PROG="$build_iotests/qemu-nbd" 578*09d653e6SPaolo Bonzini elif [ -x "$build_root/qemu-nbd" ]; then 579*09d653e6SPaolo Bonzini export QEMU_NBD_PROG="$build_root/qemu-nbd" 580*09d653e6SPaolo Bonzini else 581*09d653e6SPaolo Bonzini _init_error "qemu-nbd not found" 582*09d653e6SPaolo Bonzini fi 583*09d653e6SPaolo Bonzinifi 584*09d653e6SPaolo Bonziniexport QEMU_NBD_PROG=$(realpath -- "$(type -p "$QEMU_NBD_PROG")") 585*09d653e6SPaolo Bonzini 586*09d653e6SPaolo Bonziniif [ -z "$QEMU_VXHS_PROG" ]; then 587*09d653e6SPaolo Bonzini export QEMU_VXHS_PROG="`set_prog_path qnio_server`" 588*09d653e6SPaolo Bonzinifi 589*09d653e6SPaolo Bonzini 590*09d653e6SPaolo Bonziniif [ -x "$build_iotests/socket_scm_helper" ] 591*09d653e6SPaolo Bonzinithen 592*09d653e6SPaolo Bonzini export SOCKET_SCM_HELPER="$build_iotests/socket_scm_helper" 593*09d653e6SPaolo Bonzinifi 594*09d653e6SPaolo Bonzini 595*09d653e6SPaolo Bonzinidefault_machine=$($QEMU_PROG -machine help | sed -n '/(default)/ s/ .*//p') 596*09d653e6SPaolo Bonzinidefault_alias_machine=$($QEMU_PROG -machine help | \ 597*09d653e6SPaolo Bonzini sed -n "/(alias of $default_machine)/ { s/ .*//p; q; }") 598*09d653e6SPaolo Bonziniif [[ "$default_alias_machine" ]]; then 599*09d653e6SPaolo Bonzini default_machine="$default_alias_machine" 600*09d653e6SPaolo Bonzinifi 601*09d653e6SPaolo Bonzini 602*09d653e6SPaolo Bonziniexport QEMU_DEFAULT_MACHINE="$default_machine" 60389004368SKevin Wolf 60436bd4228SDaniel P. BerrangeTIMESTAMP_FILE=check.time-$IMGPROTO-$IMGFMT 60536bd4228SDaniel P. Berrange 6066bf19c94SChristoph Hellwig_wallclock() 6076bf19c94SChristoph Hellwig{ 6089ee4b6f8SPaolo Bonzini date "+%H %M %S" | awk '{ print $1*3600 + $2*60 + $3 }' 6096bf19c94SChristoph Hellwig} 6106bf19c94SChristoph Hellwig 6116bf19c94SChristoph Hellwig_timestamp() 6126bf19c94SChristoph Hellwig{ 6136bf19c94SChristoph Hellwig now=`date "+%T"` 614b43671f8SEric Blake printf %s " [$now]" 6156bf19c94SChristoph Hellwig} 6166bf19c94SChristoph Hellwig 6176bf19c94SChristoph Hellwig_wrapup() 6186bf19c94SChristoph Hellwig{ 6196bf19c94SChristoph Hellwig if $showme 6206bf19c94SChristoph Hellwig then 6216bf19c94SChristoph Hellwig : 6226bf19c94SChristoph Hellwig elif $needwrap 6236bf19c94SChristoph Hellwig then 62436bd4228SDaniel P. Berrange if [ -f $TIMESTAMP_FILE -a -f $tmp.time ] 6256bf19c94SChristoph Hellwig then 62636bd4228SDaniel P. Berrange cat $TIMESTAMP_FILE $tmp.time \ 6279ee4b6f8SPaolo Bonzini | awk ' 6286bf19c94SChristoph Hellwig { t[$1] = $2 } 6296bf19c94SChristoph HellwigEND { if (NR > 0) { 6306bf19c94SChristoph Hellwig for (i in t) print i " " t[i] 6316bf19c94SChristoph Hellwig } 6326bf19c94SChristoph Hellwig }' \ 6336bf19c94SChristoph Hellwig | sort -n >$tmp.out 63436bd4228SDaniel P. Berrange mv $tmp.out $TIMESTAMP_FILE 6356bf19c94SChristoph Hellwig fi 6366bf19c94SChristoph Hellwig 6376bf19c94SChristoph Hellwig if [ -f $tmp.expunged ] 6386bf19c94SChristoph Hellwig then 6396bf19c94SChristoph Hellwig notrun=`wc -l <$tmp.expunged | sed -e 's/ *//g'` 6406bf19c94SChristoph Hellwig try=`expr $try - $notrun` 6416bf19c94SChristoph Hellwig list=`echo "$list" | sed -f $tmp.expunged` 6426bf19c94SChristoph Hellwig fi 6436bf19c94SChristoph Hellwig 6446bf19c94SChristoph Hellwig echo "" >>check.log 6456bf19c94SChristoph Hellwig date >>check.log 6466bf19c94SChristoph Hellwig echo $list | fmt | sed -e 's/^/ /' >>check.log 6476bf19c94SChristoph Hellwig $interrupt && echo "Interrupted!" >>check.log 6486bf19c94SChristoph Hellwig 6496bf19c94SChristoph Hellwig if [ ! -z "$notrun" ] 6506bf19c94SChristoph Hellwig then 6516bf19c94SChristoph Hellwig echo "Not run:$notrun" 6526bf19c94SChristoph Hellwig echo "Not run:$notrun" >>check.log 6536bf19c94SChristoph Hellwig fi 6546bf19c94SChristoph Hellwig if [ ! -z "$n_bad" -a $n_bad != 0 ] 6556bf19c94SChristoph Hellwig then 6566bf19c94SChristoph Hellwig echo "Failures:$bad" 6576bf19c94SChristoph Hellwig echo "Failed $n_bad of $try tests" 6586bf19c94SChristoph Hellwig echo "Failures:$bad" | fmt >>check.log 6596bf19c94SChristoph Hellwig echo "Failed $n_bad of $try tests" >>check.log 6606bf19c94SChristoph Hellwig else 6616bf19c94SChristoph Hellwig echo "Passed all $try tests" 6626bf19c94SChristoph Hellwig echo "Passed all $try tests" >>check.log 6636bf19c94SChristoph Hellwig fi 6646bf19c94SChristoph Hellwig needwrap=false 6656bf19c94SChristoph Hellwig fi 6666bf19c94SChristoph Hellwig 6670145b4e1SSascha Silbe rm -f "${TEST_DIR}"/*.out "${TEST_DIR}"/*.err "${TEST_DIR}"/*.time 6680145b4e1SSascha Silbe rm -f "${TEST_DIR}"/check.pid "${TEST_DIR}"/check.sts 6696bf19c94SChristoph Hellwig rm -f $tmp.* 6706bf19c94SChristoph Hellwig} 6716bf19c94SChristoph Hellwig 6726bf19c94SChristoph Hellwigtrap "_wrapup; exit \$status" 0 1 2 3 15 6736bf19c94SChristoph Hellwig 67436bd4228SDaniel P. Berrange[ -f $TIMESTAMP_FILE ] || touch $TIMESTAMP_FILE 6756bf19c94SChristoph Hellwig 6766bf19c94SChristoph HellwigFULL_IMGFMT_DETAILS=`_full_imgfmt_details` 6776bf19c94SChristoph HellwigFULL_HOST_DETAILS=`_full_platform_details` 6786bf19c94SChristoph Hellwig 6796bf19c94SChristoph Hellwigcat <<EOF 680934659c4SMax ReitzQEMU -- "$QEMU_PROG" $QEMU_OPTIONS 681934659c4SMax ReitzQEMU_IMG -- "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS 682934659c4SMax ReitzQEMU_IO -- "$QEMU_IO_PROG" $QEMU_IO_OPTIONS 683934659c4SMax ReitzQEMU_NBD -- "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS 6846bf19c94SChristoph HellwigIMGFMT -- $FULL_IMGFMT_DETAILS 685657c572aSCleber RosaIMGPROTO -- $IMGPROTO 6866bf19c94SChristoph HellwigPLATFORM -- $FULL_HOST_DETAILS 687b8aff7d6SFam ZhengTEST_DIR -- $TEST_DIR 68830b005d9SWenchao XiaSOCKET_SCM_HELPER -- $SOCKET_SCM_HELPER 6896bf19c94SChristoph Hellwig 6906bf19c94SChristoph HellwigEOF 6916bf19c94SChristoph Hellwig 6926bf19c94SChristoph Hellwigseq="check" 6936bf19c94SChristoph Hellwig 6946bf19c94SChristoph Hellwig[ -n "$TESTS_REMAINING_LOG" ] && echo $list > $TESTS_REMAINING_LOG 6956bf19c94SChristoph Hellwig 6966bf19c94SChristoph Hellwigfor seq in $list 6976bf19c94SChristoph Hellwigdo 6986bf19c94SChristoph Hellwig err=false 699b43671f8SEric Blake printf %s "$seq" 7006bf19c94SChristoph Hellwig if [ -n "$TESTS_REMAINING_LOG" ] ; then 7016bf19c94SChristoph Hellwig sed -e "s/$seq//" -e 's/ / /' -e 's/^ *//' $TESTS_REMAINING_LOG > $TESTS_REMAINING_LOG.tmp 7026bf19c94SChristoph Hellwig mv $TESTS_REMAINING_LOG.tmp $TESTS_REMAINING_LOG 7036bf19c94SChristoph Hellwig sync 7046bf19c94SChristoph Hellwig fi 7056bf19c94SChristoph Hellwig 7066bf19c94SChristoph Hellwig if $showme 7076bf19c94SChristoph Hellwig then 7086bf19c94SChristoph Hellwig echo 7096bf19c94SChristoph Hellwig continue 7106bf19c94SChristoph Hellwig elif [ -f expunged ] && $expunge && egrep "^$seq([ ]|\$)" expunged >/dev/null 7116bf19c94SChristoph Hellwig then 7126bf19c94SChristoph Hellwig echo " - expunged" 7136bf19c94SChristoph Hellwig rm -f $seq.out.bad 7146bf19c94SChristoph Hellwig echo "/^$seq\$/d" >>$tmp.expunged 715e8f8624dSMax Reitz elif [ ! -f "$source_iotests/$seq" ] 7166bf19c94SChristoph Hellwig then 7176bf19c94SChristoph Hellwig echo " - no such test?" 7186bf19c94SChristoph Hellwig echo "/^$seq\$/d" >>$tmp.expunged 7196bf19c94SChristoph Hellwig else 7206bf19c94SChristoph Hellwig # really going to try and run this one 7216bf19c94SChristoph Hellwig # 7226bf19c94SChristoph Hellwig rm -f $seq.out.bad 72336bd4228SDaniel P. Berrange lasttime=`sed -n -e "/^$seq /s/.* //p" <$TIMESTAMP_FILE` 7246bf19c94SChristoph Hellwig if [ "X$lasttime" != X ]; then 725b43671f8SEric Blake printf %s " ${lasttime}s ..." 7266bf19c94SChristoph Hellwig else 727b43671f8SEric Blake printf " " # prettier output with timestamps. 7286bf19c94SChristoph Hellwig fi 7296bf19c94SChristoph Hellwig rm -f core $seq.notrun 7306bf19c94SChristoph Hellwig 7316bf19c94SChristoph Hellwig start=`_wallclock` 732b43671f8SEric Blake $timestamp && printf %s " [$(date "+%T")]" 733ea81ca9dSMax Reitz 734ea81ca9dSMax Reitz if [ "$(head -n 1 "$source_iotests/$seq")" == "#!/usr/bin/env python" ]; then 735ea81ca9dSMax Reitz run_command="$PYTHON $seq" 736ea81ca9dSMax Reitz else 737ea81ca9dSMax Reitz run_command="./$seq" 738ea81ca9dSMax Reitz fi 739e8f8624dSMax Reitz export OUTPUT_DIR=$PWD 740aa4f592aSFam Zheng if $debug; then 741aa4f592aSFam Zheng (cd "$source_iotests"; 742aa4f592aSFam Zheng MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ 743aa4f592aSFam Zheng $run_command -d 2>&1 | tee $tmp.out) 744aa4f592aSFam Zheng else 745e8f8624dSMax Reitz (cd "$source_iotests"; 74604129606SStefan Hajnoczi MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ 747ea81ca9dSMax Reitz $run_command >$tmp.out 2>&1) 748aa4f592aSFam Zheng fi 7496bf19c94SChristoph Hellwig sts=$? 7506bf19c94SChristoph Hellwig $timestamp && _timestamp 7516bf19c94SChristoph Hellwig stop=`_wallclock` 7526bf19c94SChristoph Hellwig 7536bf19c94SChristoph Hellwig if [ -f core ] 7546bf19c94SChristoph Hellwig then 755b43671f8SEric Blake printf " [dumped core]" 7566bf19c94SChristoph Hellwig mv core $seq.core 7576bf19c94SChristoph Hellwig err=true 7586bf19c94SChristoph Hellwig fi 7596bf19c94SChristoph Hellwig 7606bf19c94SChristoph Hellwig if [ -f $seq.notrun ] 7616bf19c94SChristoph Hellwig then 762b43671f8SEric Blake $timestamp || printf " [not run] " 763b43671f8SEric Blake $timestamp && echo " [not run]" && printf %s " $seq -- " 7646bf19c94SChristoph Hellwig cat $seq.notrun 7656bf19c94SChristoph Hellwig notrun="$notrun $seq" 7666bf19c94SChristoph Hellwig else 7676bf19c94SChristoph Hellwig if [ $sts -ne 0 ] 7686bf19c94SChristoph Hellwig then 769b43671f8SEric Blake printf %s " [failed, exit status $sts]" 7706bf19c94SChristoph Hellwig err=true 7716bf19c94SChristoph Hellwig fi 7728f94b077SKevin Wolf 773e8f8624dSMax Reitz reference="$source_iotests/$seq.out" 774e166b414SBo Tu reference_machine="$source_iotests/$seq.$QEMU_DEFAULT_MACHINE.out" 775e166b414SBo Tu if [ -f "$reference_machine" ]; then 776e166b414SBo Tu reference="$reference_machine" 777e166b414SBo Tu fi 778e166b414SBo Tu 779217a0683SStefan Hajnoczi reference_format="$source_iotests/$seq.out.$IMGFMT" 780217a0683SStefan Hajnoczi if [ -f "$reference_format" ]; then 781217a0683SStefan Hajnoczi reference="$reference_format" 782217a0683SStefan Hajnoczi fi 783217a0683SStefan Hajnoczi 7843baa8449SFam Zheng if [ "$CACHEMODE" = "none" ]; then 785e8f8624dSMax Reitz [ -f "$source_iotests/$seq.out.nocache" ] && reference="$source_iotests/$seq.out.nocache" 7868f94b077SKevin Wolf fi 7878f94b077SKevin Wolf 788e8f8624dSMax Reitz if [ ! -f "$reference" ] 7896bf19c94SChristoph Hellwig then 7906bf19c94SChristoph Hellwig echo " - no qualified output" 7916bf19c94SChristoph Hellwig err=true 7926bf19c94SChristoph Hellwig else 793e8f8624dSMax Reitz if diff -w "$reference" $tmp.out >/dev/null 2>&1 7946bf19c94SChristoph Hellwig then 7956bf19c94SChristoph Hellwig echo "" 7966bf19c94SChristoph Hellwig if $err 7976bf19c94SChristoph Hellwig then 7986bf19c94SChristoph Hellwig : 7996bf19c94SChristoph Hellwig else 8006bf19c94SChristoph Hellwig echo "$seq `expr $stop - $start`" >>$tmp.time 8016bf19c94SChristoph Hellwig fi 8026bf19c94SChristoph Hellwig else 8036bf19c94SChristoph Hellwig echo " - output mismatch (see $seq.out.bad)" 8046bf19c94SChristoph Hellwig mv $tmp.out $seq.out.bad 80593e53fb6SFam Zheng $diff -w "$reference" $(realpath $seq.out.bad) 8066bf19c94SChristoph Hellwig err=true 8076bf19c94SChristoph Hellwig fi 8086bf19c94SChristoph Hellwig fi 8096bf19c94SChristoph Hellwig fi 8106bf19c94SChristoph Hellwig 8116bf19c94SChristoph Hellwig fi 8126bf19c94SChristoph Hellwig 8136bf19c94SChristoph Hellwig # come here for each test, except when $showme is true 8146bf19c94SChristoph Hellwig # 8156bf19c94SChristoph Hellwig if $err 8166bf19c94SChristoph Hellwig then 8176bf19c94SChristoph Hellwig bad="$bad $seq" 8186bf19c94SChristoph Hellwig n_bad=`expr $n_bad + 1` 8196bf19c94SChristoph Hellwig quick=false 8206bf19c94SChristoph Hellwig fi 8216bf19c94SChristoph Hellwig [ -f $seq.notrun ] || try=`expr $try + 1` 8226bf19c94SChristoph Hellwig 8236bf19c94SChristoph Hellwig seq="after_$seq" 8246bf19c94SChristoph Hellwigdone 8256bf19c94SChristoph Hellwig 8266bf19c94SChristoph Hellwiginterrupt=false 8276bf19c94SChristoph Hellwigstatus=`expr $n_bad` 8286bf19c94SChristoph Hellwigexit 829