123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- #! /bin/sh
- # Copyright (C) 2011-2017 Free Software Foundation, Inc.
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2, or (at your option)
- # any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
- # Check parallel harness features:
- # - recovery from deleted '.trs' files, in various scenarios
- # This test is complex and tricky, but that's acceptable since we are
- # testing semantics that are potentially complex and tricky.
- . test-init.sh
- cat >> configure.ac <<END
- AC_OUTPUT
- END
- cat > Makefile.am << 'END'
- TESTS = foo.test bar.test baz.test
- TEST_LOG_COMPILER = $(SHELL)
- END
- echo 'exit $TEST_STATUS' > foo.test
- echo 'exit $TEST_STATUS' > bar.test
- : > baz.test
- TEST_STATUS=0; export TEST_STATUS
- # Slower and possible overkill in some situations, but also clearer
- # and safer.
- update_stamp () { $sleep && touch stamp && $sleep; }
- $ACLOCAL
- $AUTOCONF
- $AUTOMAKE -a
- ./configure
- : Create the required log files.
- $MAKE check
- : Recreate by hand.
- rm -f foo.trs bar.trs baz.trs
- $MAKE foo.trs
- test -f foo.trs
- test ! -e bar.trs
- test ! -e baz.trs
- : Recreate by hand, several at the same time.
- rm -f foo.trs bar.trs baz.trs
- $MAKE foo.trs bar.trs
- test -f foo.trs
- test -f bar.trs
- test ! -e baz.trs
- : Recreate by hand, with a failing test.
- rm -f foo.trs bar.trs
- run_make -O TEST_STATUS=1 bar.trs baz.trs
- test ! -e foo.trs
- test -f bar.trs
- test -f baz.trs
- grep '^FAIL: bar\.test' stdout
- $EGREP '^(baz|foo)\.test' stdout && exit 1
- : Recreate with a sweeping "make check", and ensure that also up-to-date
- : '.trs' files are remade.
- update_stamp
- rm -f foo.trs bar.trs
- $MAKE check
- test -f foo.trs
- test -f bar.trs
- is_newest baz.trs stamp
- : Recreate with a sweeping "make check" with failing tests. Again,
- : ensure that also up-to-date '.trs' files are remade -- this time we
- : grep the "make check" output verify that.
- rm -f foo.trs bar.trs
- run_make -O -e FAIL TEST_STATUS=1 check
- test -f foo.trs
- test -f bar.trs
- grep '^FAIL: foo\.test' stdout
- grep '^FAIL: bar\.test' stdout
- grep '^PASS: baz\.test' stdout
- : Recreate with a "make check" with redefined TESTS.
- rm -f foo.trs bar.trs baz.trs
- run_make TESTS=foo.test check
- test -f foo.trs
- test ! -e bar.trs
- test ! -e baz.trs
- : Recreate with a "make check" with redefined TEST_LOGS.
- rm -f foo.trs bar.trs baz.trs
- run_make TEST_LOGS=bar.log check
- test ! -e foo.trs
- test -f bar.trs
- test ! -e baz.trs
- : Interactions with "make recheck" are OK.
- rm -f foo.trs bar.trs baz.log baz.trs
- run_make -O recheck
- test -f foo.trs
- test -f bar.trs
- test ! -e baz.trs
- test ! -e baz.log
- grep '^PASS: foo\.test' stdout
- grep '^PASS: bar\.test' stdout
- grep 'baz\.test' stdout && exit 1
- count_test_results total=2 pass=2 fail=0 xpass=0 xfail=0 skip=0 error=0
- : Setup for the next check.
- $MAKE check
- test -f foo.trs
- test -f bar.trs
- test -f baz.trs
- : Recreate by remaking the global test log, and ensure that up-to-date
- : '.trs' files are *not* remade.
- update_stamp
- rm -f foo.trs bar.trs test-suite.log
- run_make -O test-suite.log
- grep '^PASS: foo\.test' stdout
- grep '^PASS: bar\.test' stdout
- grep 'baz\.test' stdout && exit 1
- stat *.trs *.log stamp || : # For debugging.
- # Check that make has updated what it needed to, but no more.
- test -f foo.trs
- test -f bar.trs
- is_newest stamp baz.trs
- is_newest test-suite.log foo.trs bar.trs
- : Setup for the next check.
- $MAKE check
- test -f foo.trs
- test -f bar.trs
- test -f baz.trs
- : Interactions with lazy test reruns are OK.
- rm -f foo.trs
- update_stamp
- touch bar.test
- run_make -O RECHECK_LOGS= check
- # Check that make has updated what it needed to, but no more.
- test -f foo.trs
- is_newest bar.trs bar.test
- is_newest stamp baz.trs
- grep '^PASS: foo\.test' stdout
- grep '^PASS: bar\.test' stdout
- grep 'baz\.test' stdout && exit 1
- :
|