Annotation of qemu/tests/qemu-iotests/check, revision 1.1.1.1

1.1       root        1: #!/bin/bash
                      2: #
                      3: # Copyright (C) 2009 Red Hat, Inc.
                      4: # Copyright (c) 2000-2002,2006 Silicon Graphics, Inc.  All Rights Reserved.
                      5: #
                      6: # This program is free software; you can redistribute it and/or
                      7: # modify it under the terms of the GNU General Public License as
                      8: # published by the Free Software Foundation.
                      9: #
                     10: # This program is distributed in the hope that it would be useful,
                     11: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     12: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     13: # GNU General Public License for more details.
                     14: #
                     15: # You should have received a copy of the GNU General Public License
                     16: # along with this program.  If not, see <http://www.gnu.org/licenses/>.
                     17: #
                     18: #
                     19: # Control script for QA
                     20: #
                     21: 
                     22: tmp=/tmp/$$
                     23: status=0
                     24: needwrap=true
                     25: try=0
                     26: n_bad=0
                     27: bad=""
                     28: notrun=""
                     29: interrupt=true
                     30: 
                     31: # by default don't output timestamps
                     32: timestamp=${TIMESTAMP:=false}
                     33: 
                     34: # generic initialization
                     35: iam=check
                     36: 
                     37: # we need common.config
                     38: if ! . ./common.config
                     39: then
                     40:     echo "$iam: failed to source common.config"
                     41:     exit 1
                     42: fi
                     43: 
                     44: # we need common.rc
                     45: if ! . ./common.rc
                     46: then
                     47:     echo "check: failed to source common.rc"
                     48:     exit 1
                     49: fi
                     50: 
                     51: # we need common
                     52: . ./common
                     53: 
                     54: #if [ `id -u` -ne 0 ]
                     55: #then
                     56: #    echo "check: QA must be run as root"
                     57: #    exit 1
                     58: #fi
                     59: 
                     60: _wallclock()
                     61: {
                     62:     date "+%H %M %S" | $AWK_PROG '{ print $1*3600 + $2*60 + $3 }'
                     63: }
                     64: 
                     65: _timestamp()
                     66: {
                     67:     now=`date "+%T"`
                     68:     echo -n " [$now]"
                     69: }
                     70: 
                     71: _wrapup()
                     72: {
                     73:     # for hangcheck ...
                     74:     # remove files that were used by hangcheck
                     75:     #
                     76:     [ -f /tmp/check.pid ] && rm -rf /tmp/check.pid
                     77:     [ -f /tmp/check.sts ] && rm -rf /tmp/check.sts
                     78: 
                     79:     if $showme
                     80:     then
                     81:        :
                     82:     elif $needwrap
                     83:     then
                     84:        if [ -f check.time -a -f $tmp.time ]
                     85:        then
                     86:            cat check.time $tmp.time \
                     87:            | $AWK_PROG '
                     88:        { t[$1] = $2 }
                     89: END    { if (NR > 0) {
                     90:            for (i in t) print i " " t[i]
                     91:          }
                     92:        }' \
                     93:            | sort -n >$tmp.out
                     94:            mv $tmp.out check.time
                     95:        fi
                     96: 
                     97:        if [ -f $tmp.expunged ]
                     98:        then
                     99:            notrun=`wc -l <$tmp.expunged | sed -e 's/  *//g'`
                    100:            try=`expr $try - $notrun`
                    101:            list=`echo "$list" | sed -f $tmp.expunged`
                    102:        fi
                    103: 
                    104:        echo "" >>check.log
                    105:        date >>check.log
                    106:        echo $list | fmt | sed -e 's/^/    /' >>check.log
                    107:        $interrupt && echo "Interrupted!" >>check.log
                    108:         
                    109:        if [ ! -z "$notrun" ]
                    110:        then
                    111:            echo "Not run:$notrun"
                    112:            echo "Not run:$notrun" >>check.log
                    113:        fi
                    114:         if [ ! -z "$n_bad" -a $n_bad != 0 ]
                    115:        then
                    116:            echo "Failures:$bad"
                    117:            echo "Failed $n_bad of $try tests"
                    118:            echo "Failures:$bad" | fmt >>check.log
                    119:            echo "Failed $n_bad of $try tests" >>check.log
                    120:        else
                    121:            echo "Passed all $try tests"
                    122:            echo "Passed all $try tests" >>check.log
                    123:        fi
                    124:        needwrap=false
                    125:     fi
                    126: 
                    127:     rm -f /tmp/*.out /tmp/*.err /tmp/*.time
                    128:     rm -f /tmp/check.pid /tmp/check.sts
                    129:     rm -f $tmp.*
                    130: }
                    131: 
                    132: trap "_wrapup; exit \$status" 0 1 2 3 15
                    133: 
                    134: # for hangcheck ...
                    135: # Save pid of check in a well known place, so that hangcheck can be sure it
                    136: # has the right pid (getting the pid from ps output is not reliable enough).
                    137: #
                    138: rm -rf /tmp/check.pid
                    139: echo $$ >/tmp/check.pid
                    140: 
                    141: # for hangcheck ...
                    142: # Save the status of check in a well known place, so that hangcheck can be
                    143: # sure to know where check is up to (getting test number from ps output is
                    144: # not reliable enough since the trace stuff has been introduced).
                    145: #
                    146: rm -rf /tmp/check.sts
                    147: echo "preamble" >/tmp/check.sts
                    148: 
                    149: # don't leave old full output behind on a clean run
                    150: rm -f check.full
                    151: 
                    152: [ -f check.time ] || touch check.time
                    153: 
                    154: FULL_IMGFMT_DETAILS=`_full_imgfmt_details`
                    155: FULL_IMGPROTO_DETAILS=`_full_imgproto_details`
                    156: FULL_HOST_DETAILS=`_full_platform_details`
                    157: #FULL_MKFS_OPTIONS=`_scratch_mkfs_options`
                    158: #FULL_MOUNT_OPTIONS=`_scratch_mount_options`
                    159: 
                    160: cat <<EOF
                    161: QEMU          -- $QEMU
                    162: QEMU_IMG      -- $QEMU_IMG
                    163: QEMU_IO       -- $QEMU_IO
                    164: IMGFMT        -- $FULL_IMGFMT_DETAILS
                    165: IMGPROTO      -- $FULL_IMGPROTO_DETAILS
                    166: PLATFORM      -- $FULL_HOST_DETAILS
                    167: 
                    168: EOF
                    169: #MKFS_OPTIONS  -- $FULL_MKFS_OPTIONS
                    170: #MOUNT_OPTIONS -- $FULL_MOUNT_OPTIONS
                    171: 
                    172: seq="check"
                    173: 
                    174: [ -n "$TESTS_REMAINING_LOG" ] && echo $list > $TESTS_REMAINING_LOG
                    175: 
                    176: for seq in $list
                    177: do
                    178:     err=false
                    179:     echo -n "$seq"
                    180:     if [ -n "$TESTS_REMAINING_LOG" ] ; then
                    181:         sed -e "s/$seq//" -e 's/  / /' -e 's/^ *//' $TESTS_REMAINING_LOG > $TESTS_REMAINING_LOG.tmp
                    182:         mv $TESTS_REMAINING_LOG.tmp $TESTS_REMAINING_LOG
                    183:         sync
                    184:     fi
                    185: 
                    186:     if $showme
                    187:     then
                    188:        echo
                    189:        continue
                    190:     elif [ -f expunged ] && $expunge && egrep "^$seq([         ]|\$)" expunged >/dev/null
                    191:     then
                    192:        echo " - expunged"
                    193:        rm -f $seq.out.bad
                    194:        echo "/^$seq\$/d" >>$tmp.expunged
                    195:     elif [ ! -f $seq ]
                    196:     then
                    197:        echo " - no such test?"
                    198:        echo "/^$seq\$/d" >>$tmp.expunged
                    199:     else
                    200:        # really going to try and run this one
                    201:        #
                    202:        rm -f $seq.out.bad
                    203:        lasttime=`sed -n -e "/^$seq /s/.* //p" <check.time`
                    204:        if [ "X$lasttime" != X ]; then
                    205:                echo -n " ${lasttime}s ..."
                    206:        else
                    207:                echo -n "       "       # prettier output with timestamps.
                    208:        fi
                    209:        rm -f core $seq.notrun
                    210: 
                    211:        # for hangcheck ...
                    212:        echo "$seq" >/tmp/check.sts
                    213: 
                    214:        start=`_wallclock`
                    215:        $timestamp && echo -n " ["`date "+%T"`"]"
                    216:        [ ! -x $seq ] && chmod u+x $seq # ensure we can run it
                    217:        ./$seq >$tmp.out 2>&1
                    218:        sts=$?
                    219:        $timestamp && _timestamp
                    220:        stop=`_wallclock`
                    221: 
                    222:        if [ -f core ]
                    223:        then
                    224:            echo -n " [dumped core]"
                    225:            mv core $seq.core
                    226:            err=true
                    227:        fi
                    228: 
                    229:        if [ -f $seq.notrun ]
                    230:        then
                    231:            $timestamp || echo -n " [not run] "
                    232:            $timestamp && echo " [not run]" && echo -n "        $seq -- "
                    233:            cat $seq.notrun
                    234:            notrun="$notrun $seq"
                    235:        else
                    236:            if [ $sts -ne 0 ]
                    237:            then
                    238:                echo -n " [failed, exit status $sts]"
                    239:                err=true
                    240:            fi
                    241:            if [ ! -f $seq.out ]
                    242:            then
                    243:                echo " - no qualified output"
                    244:                err=true
                    245:            else
                    246:                if diff -w $seq.out $tmp.out >/dev/null 2>&1
                    247:                then
                    248:                    echo ""
                    249:                    if $err
                    250:                    then
                    251:                        :
                    252:                    else
                    253:                        echo "$seq `expr $stop - $start`" >>$tmp.time
                    254:                    fi
                    255:                else
                    256:                    echo " - output mismatch (see $seq.out.bad)"
                    257:                    mv $tmp.out $seq.out.bad
                    258:                    $diff -w $seq.out $seq.out.bad
                    259:                    err=true
                    260:                fi
                    261:            fi
                    262:        fi
                    263: 
                    264:     fi
                    265: 
                    266:     # come here for each test, except when $showme is true
                    267:     #
                    268:     if $err
                    269:     then
                    270:        bad="$bad $seq"
                    271:        n_bad=`expr $n_bad + 1`
                    272:        quick=false
                    273:     fi
                    274:     [ -f $seq.notrun ] || try=`expr $try + 1`
                    275:     
                    276:     seq="after_$seq"
                    277: done
                    278: 
                    279: interrupt=false
                    280: status=`expr $n_bad`
                    281: exit

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.