Statistics
| Branch: | Revision:

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