| #! /bin/sh |
| # Copyright (C) 2011-2024 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 <https://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 |
| |
| : |