|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.