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