|
|
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.