]> Git Repo - qemu.git/blame - tests/qemu-iotests/check
iotests/055: refactor compressed backup to vmdk
[qemu.git] / tests / qemu-iotests / check
CommitLineData
11a82d14 1#!/usr/bin/env bash
6bf19c94
CH
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
e8c212d6 16# along with this program. If not, see <http://www.gnu.org/licenses/>.
6bf19c94
CH
17#
18#
19# Control script for QA
20#
21
6bf19c94
CH
22status=0
23needwrap=true
24try=0
25n_bad=0
26bad=""
27notrun=""
57ed557f 28casenotrun=""
6bf19c94 29interrupt=true
70ff5b07 30makecheck=false
6bf19c94 31
e8f8624d
HR
32_init_error()
33{
4e670492 34 echo "check: $1" >&2
e8f8624d
HR
35 exit 1
36}
37
38if [ -L "$0" ]
39then
40 # called from the build tree
41 source_iotests=$(dirname "$(readlink "$0")")
42 if [ -z "$source_iotests" ]
43 then
44 _init_error "failed to obtain source tree name from check symlink"
45 fi
46 source_iotests=$(cd "$source_iotests"; pwd) || _init_error "failed to enter source tree"
47 build_iotests=$PWD
48else
49 # called from the source tree
50 source_iotests=$PWD
51 # this may be an in-tree build (note that in the following code we may not
52 # assume that it truly is and have to test whether the build results
53 # actually exist)
54 build_iotests=$PWD
55fi
56
57build_root="$build_iotests/../.."
58
7fed1a49
HR
59# we need common.env
60if ! . "$build_iotests/common.env"
61then
62 _init_error "failed to source common.env (make sure the qemu-iotests are run from tests/qemu-iotests in the build tree)"
63fi
64
6bf19c94 65# we need common.config
e8f8624d 66if ! . "$source_iotests/common.config"
6bf19c94 67then
e8f8624d 68 _init_error "failed to source common.config"
6bf19c94
CH
69fi
70
09d653e6
PB
71_full_imgfmt_details()
72{
73 if [ -n "$IMGOPTS" ]; then
74 echo "$IMGFMT ($IMGOPTS)"
75 else
76 echo "$IMGFMT"
77 fi
78}
79
80_full_platform_details()
81{
4a9e751f
MZ
82 os=$(uname -s)
83 host=$(hostname -s)
84 kernel=$(uname -r)
85 platform=$(uname -m)
09d653e6
PB
86 echo "$os/$platform $host $kernel"
87}
88
70ff5b07
AB
89_full_env_details()
90{
91 cat <<EOF
92QEMU -- "$QEMU_PROG" $QEMU_OPTIONS
93QEMU_IMG -- "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS
94QEMU_IO -- "$QEMU_IO_PROG" $QEMU_IO_OPTIONS
95QEMU_NBD -- "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS
96IMGFMT -- $FULL_IMGFMT_DETAILS
97IMGPROTO -- $IMGPROTO
98PLATFORM -- $FULL_HOST_DETAILS
99TEST_DIR -- $TEST_DIR
c7df3f19 100SOCK_DIR -- $SOCK_DIR
70ff5b07
AB
101SOCKET_SCM_HELPER -- $SOCKET_SCM_HELPER
102
103EOF
104}
105
09d653e6
PB
106# $1 = prog to look for
107set_prog_path()
108{
4a9e751f 109 p=$(command -v $1 2> /dev/null)
09d653e6 110 if [ -n "$p" -a -x "$p" ]; then
63ca8406 111 type -p "$p"
09d653e6
PB
112 else
113 return 1
114 fi
115}
116
117if [ -z "$TEST_DIR" ]; then
e8d81a61 118 TEST_DIR=$PWD/scratch
09d653e6 119fi
c7df3f19 120mkdir -p "$TEST_DIR" || _init_error 'Failed to create TEST_DIR'
09d653e6 121
c7df3f19
HR
122tmp_sock_dir=false
123if [ -z "$SOCK_DIR" ]; then
124 SOCK_DIR=$(mktemp -d)
125 tmp_sock_dir=true
09d653e6 126fi
c7df3f19 127mkdir -p "$SOCK_DIR" || _init_error 'Failed to create SOCK_DIR'
09d653e6
PB
128
129diff="diff -u"
130verbose=false
131debug=false
132group=false
133xgroup=false
134imgopts=false
135showme=false
136sortme=false
137expunge=true
138have_test_arg=false
139cachemode=false
7156ca48 140aiomode=false
09d653e6
PB
141
142tmp="${TEST_DIR}"/$$
143rm -f $tmp.list $tmp.tmp $tmp.sed
144
145export IMGFMT=raw
146export IMGFMT_GENERIC=true
147export IMGPROTO=file
148export IMGOPTS=""
149export CACHEMODE="writeback"
7156ca48 150export AIOMODE="threads"
09d653e6
PB
151export QEMU_IO_OPTIONS=""
152export QEMU_IO_OPTIONS_NO_FMT=""
153export CACHEMODE_IS_DEFAULT=true
09d653e6
PB
154export VALGRIND_QEMU=
155export IMGKEYSECRET=
156export IMGOPTSSYNTAX=false
157
8803714b
EB
158# Save current tty settings, since an aborting qemu call may leave things
159# screwed up
160STTY_RESTORE=
161if test -t 0; then
162 STTY_RESTORE=$(stty -g)
163fi
164
09d653e6
PB
165for r
166do
167
168 if $group
169 then
170 # arg after -g
4a9e751f 171 group_list=$(sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
09d653e6 172s/ .*//p
4a9e751f 173}')
09d653e6
PB
174 if [ -z "$group_list" ]
175 then
176 echo "Group \"$r\" is empty or not defined?"
177 exit 1
178 fi
179 [ ! -s $tmp.list ] && touch $tmp.list
180 for t in $group_list
181 do
182 if grep -s "^$t\$" $tmp.list >/dev/null
183 then
184 :
185 else
186 echo "$t" >>$tmp.list
187 fi
188 done
189 group=false
190 continue
191
192 elif $xgroup
193 then
194 # arg after -x
195 # Populate $tmp.list with all tests
196 awk '/^[0-9]{3,}/ {print $1}' "${source_iotests}/group" > $tmp.list 2>/dev/null
4a9e751f 197 group_list=$(sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
09d653e6 198s/ .*//p
4a9e751f 199}')
09d653e6
PB
200 if [ -z "$group_list" ]
201 then
202 echo "Group \"$r\" is empty or not defined?"
203 exit 1
204 fi
205 numsed=0
206 rm -f $tmp.sed
207 for t in $group_list
208 do
209 if [ $numsed -gt 100 ]
210 then
211 sed -f $tmp.sed <$tmp.list >$tmp.tmp
212 mv $tmp.tmp $tmp.list
213 numsed=0
214 rm -f $tmp.sed
215 fi
216 echo "/^$t\$/d" >>$tmp.sed
4a9e751f 217 numsed=$(expr $numsed + 1)
09d653e6
PB
218 done
219 sed -f $tmp.sed <$tmp.list >$tmp.tmp
220 mv $tmp.tmp $tmp.list
221 xgroup=false
222 continue
223
224 elif $imgopts
225 then
226 IMGOPTS="$r"
227 imgopts=false
228 continue
229 elif $cachemode
230 then
231 CACHEMODE="$r"
232 CACHEMODE_IS_DEFAULT=false
233 cachemode=false
234 continue
7156ca48
AM
235 elif $aiomode
236 then
237 AIOMODE="$r"
238 aiomode=false
239 continue
09d653e6
PB
240 fi
241
242 xpand=true
243 case "$r"
244 in
245
246 -\? | -h | --help) # usage
247 echo "Usage: $0 [options] [testlist]"'
248
249common options
250 -v verbose
251 -d debug
252
253image format options
254 -raw test raw (default)
255 -bochs test bochs
256 -cloop test cloop
257 -parallels test parallels
258 -qcow test qcow
259 -qcow2 test qcow2
260 -qed test qed
261 -vdi test vdi
262 -vpc test vpc
263 -vhdx test vhdx
264 -vmdk test vmdk
265 -luks test luks
76f1cf0a 266 -dmg test dmg
09d653e6
PB
267
268image protocol options
269 -file test file (default)
270 -rbd test rbd
271 -sheepdog test sheepdog
272 -nbd test nbd
273 -ssh test ssh
274 -nfs test nfs
275 -vxhs test vxhs
276
277other options
278 -xdiff graphical mode diff
279 -nocache use O_DIRECT on backing file
280 -misalign misalign memory allocations
281 -n show me, do not run tests
282 -o options -o options to pass to qemu-img create/convert
09d653e6 283 -c mode cache mode
7156ca48 284 -i mode AIO mode
70ff5b07 285 -makecheck pretty print output for make check
09d653e6
PB
286
287testlist options
288 -g group[,group...] include tests from these groups
289 -x group[,group...] exclude tests from these groups
290 NNN include test NNN
291 NNN-NNN include test range (eg. 012-021)
292'
293 exit 0
294 ;;
295
296 -raw)
297 IMGFMT=raw
298 xpand=false
299 ;;
300
301 -bochs)
302 IMGFMT=bochs
303 IMGFMT_GENERIC=false
304 xpand=false
305 ;;
306
307 -cloop)
308 IMGFMT=cloop
309 IMGFMT_GENERIC=false
310 xpand=false
311 ;;
312
313 -parallels)
314 IMGFMT=parallels
09d653e6
PB
315 xpand=false
316 ;;
317
318 -qcow)
319 IMGFMT=qcow
320 xpand=false
321 ;;
322
323 -qcow2)
324 IMGFMT=qcow2
325 xpand=false
326 ;;
327
328 -luks)
329 IMGOPTSSYNTAX=true
330 IMGFMT=luks
331 IMGKEYSECRET=123456
332 xpand=false
333 ;;
334
76f1cf0a
YCL
335 -dmg)
336 IMGFMT=dmg
337 IMGFMT_GENERIC=false
338 xpand=false
339 ;;
340
09d653e6
PB
341 -qed)
342 IMGFMT=qed
343 xpand=false
344 ;;
345
346 -vdi)
347 IMGFMT=vdi
348 xpand=false
349 ;;
350
351 -vmdk)
352 IMGFMT=vmdk
353 xpand=false
354 ;;
355
356 -vpc)
357 IMGFMT=vpc
358 xpand=false
359 ;;
360
361 -vhdx)
362 IMGFMT=vhdx
363 xpand=false
364 ;;
365
366 -file)
367 IMGPROTO=file
368 xpand=false
369 ;;
370
371 -rbd)
372 IMGPROTO=rbd
373 xpand=false
374 ;;
375
376 -sheepdog)
377 IMGPROTO=sheepdog
378 xpand=false
379 ;;
380
381 -nbd)
382 IMGPROTO=nbd
383 xpand=false
384 ;;
385
386 -vxhs)
387 IMGPROTO=vxhs
388 xpand=false
389 ;;
390
391 -ssh)
392 IMGPROTO=ssh
393 xpand=false
394 ;;
395
396 -nfs)
397 IMGPROTO=nfs
398 xpand=false
399 ;;
400
401 -nocache)
402 CACHEMODE="none"
403 CACHEMODE_IS_DEFAULT=false
404 xpand=false
405 ;;
406
407 -misalign)
408 QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --misalign"
409 xpand=false
410 ;;
411
412 -valgrind)
413 VALGRIND_QEMU='y'
414 xpand=false
415 ;;
416
417 -g) # -g group ... pick from group file
418 group=true
419 xpand=false
420 ;;
421
422 -xdiff) # graphical diff mode
423 xpand=false
424
425 if [ ! -z "$DISPLAY" ]
426 then
427 command -v xdiff >/dev/null 2>&1 && diff=xdiff
428 command -v gdiff >/dev/null 2>&1 && diff=gdiff
429 command -v tkdiff >/dev/null 2>&1 && diff=tkdiff
430 command -v xxdiff >/dev/null 2>&1 && diff=xxdiff
431 fi
432 ;;
70ff5b07
AB
433 -makecheck) # makecheck friendly output
434 makecheck=true
435 xpand=false
436 ;;
09d653e6
PB
437 -n) # show me, don't do it
438 showme=true
439 xpand=false
440 ;;
441 -o)
442 imgopts=true
443 xpand=false
444 ;;
445 -c)
446 cachemode=true
447 xpand=false
448 ;;
7156ca48
AM
449 -i)
450 aiomode=true
451 xpand=false
452 ;;
70ff5b07 453 -T) # deprecated timestamp option
09d653e6
PB
454 xpand=false
455 ;;
09d653e6
PB
456 -v)
457 verbose=true
458 xpand=false
459 ;;
460 -d)
461 debug=true
462 xpand=false
463 ;;
464 -x) # -x group ... exclude from group file
465 xgroup=true
466 xpand=false
467 ;;
468 '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]')
469 echo "No tests?"
470 status=1
471 exit $status
472 ;;
473
474 [0-9]*-[0-9]*)
4a9e751f 475 eval $(echo $r | sed -e 's/^/start=/' -e 's/-/ end=/')
09d653e6
PB
476 ;;
477
478 [0-9]*-)
4a9e751f
MZ
479 eval $(echo $r | sed -e 's/^/start=/' -e 's/-//')
480 end=$(echo [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] | sed -e 's/\[0-9]//g' -e 's/ *$//' -e 's/.* //')
09d653e6
PB
481 if [ -z "$end" ]
482 then
483 echo "No tests in range \"$r\"?"
484 status=1
485 exit $status
486 fi
487 ;;
488
489 *)
490 start=$r
491 end=$r
492 ;;
493
494 esac
495
496 # get rid of leading 0s as can be interpreted as octal
4a9e751f
MZ
497 start=$(echo $start | sed 's/^0*//')
498 end=$(echo $end | sed 's/^0*//')
09d653e6
PB
499
500 if $xpand
501 then
502 have_test_arg=true
503 awk </dev/null '
504BEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \
505 | while read id
506 do
bf75d752 507 if grep -s "^$id\( \|\$\)" "$source_iotests/group" >/dev/null
09d653e6
PB
508 then
509 # in group file ... OK
510 echo $id >>$tmp.list
511 else
512 if [ -f expunged ] && $expunge && egrep "^$id([ ]|\$)" expunged >/dev/null
513 then
514 # expunged ... will be reported, but not run, later
515 echo $id >>$tmp.list
516 else
517 # oops
518 if [ "$start" == "$end" -a "$id" == "$end" ]
519 then
520 echo "$id - unknown test"
521 exit 1
522 else
523 echo "$id - unknown test, ignored"
524 fi
525 fi
526 fi
527 done || exit 1
528 fi
529
530done
531
532# Set qemu-io cache mode with $CACHEMODE we have
533QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --cache $CACHEMODE"
7156ca48
AM
534# Set qemu-io aio mode with $AIOMODE we have
535QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --aio $AIOMODE"
09d653e6
PB
536
537QEMU_IO_OPTIONS_NO_FMT="$QEMU_IO_OPTIONS"
538if [ "$IMGOPTSSYNTAX" != "true" ]; then
539 QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS -f $IMGFMT"
540fi
541
542# Set default options for qemu-img create -o if they were not specified
543if [ "$IMGFMT" == "qcow2" ] && ! (echo "$IMGOPTS" | grep "compat=" > /dev/null); then
544 IMGOPTS=$(_optstr_add "$IMGOPTS" "compat=1.1")
545fi
546if [ "$IMGFMT" == "luks" ] && ! (echo "$IMGOPTS" | grep "iter-time=" > /dev/null); then
547 IMGOPTS=$(_optstr_add "$IMGOPTS" "iter-time=10")
548fi
549
550if [ -z "$SAMPLE_IMG_DIR" ]; then
551 SAMPLE_IMG_DIR="$source_iotests/sample_images"
552fi
553
554export TEST_DIR
c7df3f19 555export SOCK_DIR
09d653e6
PB
556export SAMPLE_IMG_DIR
557
558if [ -s $tmp.list ]
559then
560 # found some valid test numbers ... this is good
561 :
562else
563 if $have_test_arg
564 then
565 # had test numbers, but none in group file ... do nothing
566 touch $tmp.list
567 else
568 # no test numbers, do everything from group file
bf75d752 569 sed -n -e '/^[0-9][0-9][0-9]*/s/^\([0-9]*\).*/\1/p' <"$source_iotests/group" >$tmp.list
09d653e6
PB
570 fi
571fi
572
573# should be sort -n, but this did not work for Linux when this
574# was ported from IRIX
575#
4a9e751f 576list=$(sort $tmp.list)
09d653e6
PB
577rm -f $tmp.list $tmp.tmp $tmp.sed
578
579if [ -z "$QEMU_PROG" ]
580then
581 if [ -x "$build_iotests/qemu" ]; then
582 export QEMU_PROG="$build_iotests/qemu"
96914159
LD
583 elif [ -x "$build_root/${qemu_arch}-softmmu/qemu-system-${qemu_arch}" ]; then
584 export QEMU_PROG="$build_root/${qemu_arch}-softmmu/qemu-system-${qemu_arch}"
09d653e6
PB
585 else
586 pushd "$build_root" > /dev/null
587 for binary in *-softmmu/qemu-system-*
588 do
589 if [ -x "$binary" ]
590 then
591 export QEMU_PROG="$build_root/$binary"
592 break
593 fi
594 done
595 popd > /dev/null
596 [ "$QEMU_PROG" = "" ] && _init_error "qemu not found"
597 fi
598fi
63ca8406 599export QEMU_PROG="$(type -p "$QEMU_PROG")"
09d653e6 600
4a715461
TH
601case "$QEMU_PROG" in
602 *qemu-system-arm|*qemu-system-aarch64)
75ab574b 603 export QEMU_OPTIONS="-nodefaults -display none -machine virt -accel qtest"
4a715461
TH
604 ;;
605 *qemu-system-tricore)
75ab574b 606 export QEMU_OPTIONS="-nodefaults -display none -machine tricore_testboard -accel qtest"
4a715461
TH
607 ;;
608 *)
75ab574b 609 export QEMU_OPTIONS="-nodefaults -display none -accel qtest"
4a715461
TH
610 ;;
611esac
612
09d653e6
PB
613if [ -z "$QEMU_IMG_PROG" ]; then
614 if [ -x "$build_iotests/qemu-img" ]; then
615 export QEMU_IMG_PROG="$build_iotests/qemu-img"
616 elif [ -x "$build_root/qemu-img" ]; then
617 export QEMU_IMG_PROG="$build_root/qemu-img"
618 else
619 _init_error "qemu-img not found"
620 fi
621fi
63ca8406 622export QEMU_IMG_PROG="$(type -p "$QEMU_IMG_PROG")"
09d653e6
PB
623
624if [ -z "$QEMU_IO_PROG" ]; then
625 if [ -x "$build_iotests/qemu-io" ]; then
626 export QEMU_IO_PROG="$build_iotests/qemu-io"
627 elif [ -x "$build_root/qemu-io" ]; then
628 export QEMU_IO_PROG="$build_root/qemu-io"
629 else
630 _init_error "qemu-io not found"
631 fi
632fi
63ca8406 633export QEMU_IO_PROG="$(type -p "$QEMU_IO_PROG")"
09d653e6
PB
634
635if [ -z $QEMU_NBD_PROG ]; then
636 if [ -x "$build_iotests/qemu-nbd" ]; then
637 export QEMU_NBD_PROG="$build_iotests/qemu-nbd"
638 elif [ -x "$build_root/qemu-nbd" ]; then
639 export QEMU_NBD_PROG="$build_root/qemu-nbd"
640 else
641 _init_error "qemu-nbd not found"
642 fi
643fi
63ca8406 644export QEMU_NBD_PROG="$(type -p "$QEMU_NBD_PROG")"
09d653e6
PB
645
646if [ -z "$QEMU_VXHS_PROG" ]; then
4a9e751f 647 export QEMU_VXHS_PROG="$(set_prog_path qnio_server)"
09d653e6
PB
648fi
649
650if [ -x "$build_iotests/socket_scm_helper" ]
651then
652 export SOCKET_SCM_HELPER="$build_iotests/socket_scm_helper"
653fi
654
c69719fc
KW
655python_usable=false
656if $PYTHON -c 'import sys; sys.exit(0 if sys.version_info >= (3,6) else 1)'
657then
cd205828
TH
658 # Our python framework also requires virtio-blk
659 if "$QEMU_PROG" -M none -device help | grep -q virtio-blk >/dev/null 2>&1
660 then
661 python_usable=true
662 else
663 python_unusable_because="Missing virtio-blk in QEMU binary"
664 fi
665else
666 python_unusable_because="Unsupported Python version"
c69719fc
KW
667fi
668
09d653e6
PB
669default_machine=$($QEMU_PROG -machine help | sed -n '/(default)/ s/ .*//p')
670default_alias_machine=$($QEMU_PROG -machine help | \
671 sed -n "/(alias of $default_machine)/ { s/ .*//p; q; }")
672if [[ "$default_alias_machine" ]]; then
673 default_machine="$default_alias_machine"
674fi
675
676export QEMU_DEFAULT_MACHINE="$default_machine"
89004368 677
36bd4228
DB
678TIMESTAMP_FILE=check.time-$IMGPROTO-$IMGFMT
679
6bf19c94
CH
680_wallclock()
681{
9ee4b6f8 682 date "+%H %M %S" | awk '{ print $1*3600 + $2*60 + $3 }'
6bf19c94
CH
683}
684
6bf19c94
CH
685_wrapup()
686{
6bf19c94
CH
687 if $showme
688 then
79e40ab1 689 :
6bf19c94
CH
690 elif $needwrap
691 then
36bd4228 692 if [ -f $TIMESTAMP_FILE -a -f $tmp.time ]
79e40ab1 693 then
36bd4228 694 cat $TIMESTAMP_FILE $tmp.time \
9ee4b6f8 695 | awk '
79e40ab1
KW
696 { t[$1] = $2 }
697END { if (NR > 0) {
698 for (i in t) print i " " t[i]
699 }
700 }' \
701 | sort -n >$tmp.out
36bd4228 702 mv $tmp.out $TIMESTAMP_FILE
79e40ab1
KW
703 fi
704
705 if [ -f $tmp.expunged ]
706 then
4a9e751f
MZ
707 notrun=$(wc -l <$tmp.expunged | sed -e 's/ *//g')
708 try=$(expr $try - $notrun)
709 list=$(echo "$list" | sed -f $tmp.expunged)
79e40ab1
KW
710 fi
711
712 echo "" >>check.log
713 date >>check.log
714 echo $list | fmt | sed -e 's/^/ /' >>check.log
715 $interrupt && echo "Interrupted!" >>check.log
716
717 if [ ! -z "$notrun" ]
718 then
719 echo "Not run:$notrun"
720 echo "Not run:$notrun" >>check.log
721 fi
57ed557f
AS
722 if [ ! -z "$casenotrun" ]
723 then
724 echo "Some cases not run in:$casenotrun"
725 echo "Some cases not run in:$casenotrun" >>check.log
726 fi
6bf19c94 727 if [ ! -z "$n_bad" -a $n_bad != 0 ]
79e40ab1
KW
728 then
729 echo "Failures:$bad"
4ee5f4be 730 echo "Failed $n_bad of $try iotests"
79e40ab1 731 echo "Failures:$bad" | fmt >>check.log
4ee5f4be 732 echo "Failed $n_bad of $try iotests" >>check.log
79e40ab1 733 else
4ee5f4be
TH
734 echo "Passed all $try iotests"
735 echo "Passed all $try iotests" >>check.log
79e40ab1
KW
736 fi
737 needwrap=false
6bf19c94
CH
738 fi
739
8803714b
EB
740 if test -n "$STTY_RESTORE"; then
741 stty $STTY_RESTORE
742 fi
0145b4e1
SS
743 rm -f "${TEST_DIR}"/*.out "${TEST_DIR}"/*.err "${TEST_DIR}"/*.time
744 rm -f "${TEST_DIR}"/check.pid "${TEST_DIR}"/check.sts
6bf19c94 745 rm -f $tmp.*
c7df3f19
HR
746
747 if $tmp_sock_dir
748 then
749 rm -rf "$SOCK_DIR"
750 fi
6bf19c94
CH
751}
752
753trap "_wrapup; exit \$status" 0 1 2 3 15
754
70ff5b07
AB
755# Report the test start and results. For makecheck we want to pretty
756# print the whole report at the end of the execution.
757# args: $seq, $starttime, $lasttime
758_report_test_start()
759{
760 if ! $makecheck; then
761 if [ -n "$3" ]; then
762 local lasttime=" (last: $3s)"
763 fi
764 printf "%-8s %-10s [%s] %4s%-14s\r" "$1" "..." "$2" "..." "$lasttime"
765 fi
766}
767# args:$seq $status $starttime $lasttime $thistime $details
768_report_test_result()
769{
770 local status lasttime thistime
771 if $makecheck; then
772 if [ -n "$2" ] && [ "$2" != "pass" ]; then
773 status=" [$2]"
774 fi
775 printf " TEST iotest-$IMGFMT: %s%s\n" "$1" "$status"
776 return
777 fi
778
779 if [ -n "$4" ]; then
780 lasttime=" (last: $4s)"
781 fi
782 if [ -n "$5" ]; then
783 thistime=" $5s"
784 fi
785 case "$2" in
786 "pass") status=$(printf "\e[32m%-10s\e[0m" "$2") ;;
787 "fail") status=$(printf "\e[1m\e[31m%-10s\e[0m" "$2") ;;
788 "not run") status=$(printf "\e[33m%-10s\e[0m" "$2") ;;
789 *) status=$(printf "%-10s" "$2") ;;
790 esac
791
792 printf "%-8s %s [%s] [%s] %4s%-14s %s\n" "$1" "$status" "$3" "$(date '+%T')" "$thistime" "$lasttime" "$6"
793}
794
36bd4228 795[ -f $TIMESTAMP_FILE ] || touch $TIMESTAMP_FILE
6bf19c94 796
4a9e751f
MZ
797FULL_IMGFMT_DETAILS=$(_full_imgfmt_details)
798FULL_HOST_DETAILS=$(_full_platform_details)
6bf19c94 799
70ff5b07
AB
800if ! $makecheck; then
801 _full_env_details
802fi
6bf19c94
CH
803
804seq="check"
805
806[ -n "$TESTS_REMAINING_LOG" ] && echo $list > $TESTS_REMAINING_LOG
807
808for seq in $list
809do
70ff5b07
AB
810 err=false # error flag
811 printdiff=false # show diff to reference output?
812 status="" # test result summary
813 results="" # test result details
835d689d 814 thistime="" # time the test took
70ff5b07 815
6bf19c94
CH
816 if [ -n "$TESTS_REMAINING_LOG" ] ; then
817 sed -e "s/$seq//" -e 's/ / /' -e 's/^ *//' $TESTS_REMAINING_LOG > $TESTS_REMAINING_LOG.tmp
818 mv $TESTS_REMAINING_LOG.tmp $TESTS_REMAINING_LOG
819 sync
820 fi
821
70ff5b07
AB
822 lasttime=$(sed -n -e "/^$seq /s/.* //p" <$TIMESTAMP_FILE)
823 starttime=$(date "+%T")
824 _report_test_start $seq $starttime $lasttime
825
6bf19c94
CH
826 if $showme
827 then
70ff5b07 828 status="not run"
79e40ab1 829 elif [ -f expunged ] && $expunge && egrep "^$seq([ ]|\$)" expunged >/dev/null
6bf19c94 830 then
70ff5b07
AB
831 status="not run"
832 results="expunged"
79e40ab1
KW
833 rm -f $seq.out.bad
834 echo "/^$seq\$/d" >>$tmp.expunged
e8f8624d 835 elif [ ! -f "$source_iotests/$seq" ]
6bf19c94 836 then
70ff5b07
AB
837 status="not run"
838 results="no such test?"
79e40ab1 839 echo "/^$seq\$/d" >>$tmp.expunged
6bf19c94 840 else
79e40ab1
KW
841 # really going to try and run this one
842 #
843 rm -f $seq.out.bad
79e40ab1 844 rm -f core $seq.notrun
57ed557f 845 rm -f $seq.casenotrun
79e40ab1 846
4a9e751f 847 start=$(_wallclock)
ea81ca9d 848
351aa270 849 if [ "$(head -n 1 "$source_iotests/$seq")" == "#!/usr/bin/env python3" ]; then
c69719fc
KW
850 if $python_usable; then
851 run_command="$PYTHON $seq"
852 else
853 run_command="false"
cd205828 854 echo "$python_unusable_because" > $seq.notrun
c69719fc 855 fi
ea81ca9d
HR
856 else
857 run_command="./$seq"
858 fi
e8f8624d 859 export OUTPUT_DIR=$PWD
aa4f592a
FZ
860 if $debug; then
861 (cd "$source_iotests";
862 MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \
863 $run_command -d 2>&1 | tee $tmp.out)
864 else
865 (cd "$source_iotests";
866 MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \
867 $run_command >$tmp.out 2>&1)
868 fi
79e40ab1 869 sts=$?
4a9e751f 870 stop=$(_wallclock)
79e40ab1
KW
871
872 if [ -f core ]
873 then
79e40ab1 874 mv core $seq.core
70ff5b07
AB
875 status="fail"
876 results="[dumped core] $seq.core"
79e40ab1
KW
877 err=true
878 fi
879
880 if [ -f $seq.notrun ]
881 then
70ff5b07
AB
882 # overwrites timestamp output
883 status="not run"
884 results="$(cat $seq.notrun)"
79e40ab1
KW
885 else
886 if [ $sts -ne 0 ]
887 then
70ff5b07
AB
888 status="fail"
889 results=$(printf %s "[failed, exit status $sts]")
79e40ab1
KW
890 err=true
891 fi
8f94b077 892
e8f8624d 893 reference="$source_iotests/$seq.out"
e166b414
BT
894 reference_machine="$source_iotests/$seq.$QEMU_DEFAULT_MACHINE.out"
895 if [ -f "$reference_machine" ]; then
896 reference="$reference_machine"
897 fi
898
217a0683
SH
899 reference_format="$source_iotests/$seq.out.$IMGFMT"
900 if [ -f "$reference_format" ]; then
901 reference="$reference_format"
902 fi
903
3baa8449 904 if [ "$CACHEMODE" = "none" ]; then
e8f8624d 905 [ -f "$source_iotests/$seq.out.nocache" ] && reference="$source_iotests/$seq.out.nocache"
8f94b077
KW
906 fi
907
e8f8624d 908 if [ ! -f "$reference" ]
79e40ab1 909 then
70ff5b07 910 status="fail"
d44abcc0 911 results="no qualified output"
79e40ab1
KW
912 err=true
913 else
e8f8624d 914 if diff -w "$reference" $tmp.out >/dev/null 2>&1
79e40ab1 915 then
70ff5b07
AB
916 if ! $err; then
917 status="pass"
918 thistime=$(expr $stop - $start)
919 echo "$seq $thistime" >>$tmp.time
79e40ab1
KW
920 fi
921 else
79e40ab1 922 mv $tmp.out $seq.out.bad
70ff5b07
AB
923 status="fail"
924 results="output mismatch (see $seq.out.bad)"
925 printdiff=true
79e40ab1
KW
926 err=true
927 fi
928 fi
929 fi
57ed557f
AS
930 if [ -f $seq.casenotrun ]
931 then
932 cat $seq.casenotrun
933 casenotrun="$casenotrun $seq"
934 fi
6bf19c94
CH
935 fi
936
937 # come here for each test, except when $showme is true
938 #
70ff5b07
AB
939 _report_test_result $seq "$status" "$starttime" "$lasttime" "$thistime" "$results"
940 case "$status" in
941 "pass")
942 try=$(expr $try + 1)
943 ;;
944 "fail")
945 try=$(expr $try + 1)
946 if $makecheck; then
947 _full_env_details
948 fi
949 if $printdiff; then
950 $diff -w "$reference" "$PWD"/$seq.out.bad
951 fi
952 bad="$bad $seq"
953 n_bad=$(expr $n_bad + 1)
954 quick=false
955 ;;
956 "not run")
957 notrun="$notrun $seq"
958 ;;
959 esac
79e40ab1 960
6bf19c94
CH
961 seq="after_$seq"
962done
963
964interrupt=false
4a9e751f 965status=$(expr $n_bad)
6bf19c94 966exit
This page took 0.652369 seconds and 4 git commands to generate.