From 04ac66863a96d0c80bd00cc02bc3ab1e6aa8a620 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Thu, 13 Jun 2013 01:26:25 +0200 Subject: [PATCH] tests: Split run.sh in multiple test files. Allows parallel test runs and simplifies optional tests. --- .gitignore | 16 +++++++++-- tests/Makefile.am | 12 ++++++-- tests/lib.sh | 26 +++++++++++++---- tests/run.sh | 63 ----------------------------------------- tests/test_error.sh | 23 +++++++++++++++ tests/test_example.sh | 23 +++++++++++++++ tests/test_exec.sh | 23 +++++++++++++++ tests/test_noforce.sh | 25 ++++++++++++++++ tests/test_redirects.sh | 23 +++++++++++++++ tests/test_simple.sh | 23 +++++++++++++++ tests/test_vfork.sh | 23 +++++++++++++++ 11 files changed, 207 insertions(+), 73 deletions(-) delete mode 100755 tests/run.sh create mode 100755 tests/test_error.sh create mode 100755 tests/test_example.sh create mode 100755 tests/test_exec.sh create mode 100755 tests/test_noforce.sh create mode 100755 tests/test_redirects.sh create mode 100755 tests/test_simple.sh create mode 100755 tests/test_vfork.sh diff --git a/.gitignore b/.gitignore index a2eff82..6401ebd 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,18 @@ /tests/example_exec.o /tests/example_vfork /tests/example_vfork.o -/tests/run.sh.log -/tests/run.sh.trs +/tests/test_error.sh.log +/tests/test_error.sh.trs +/tests/test_example.sh.log +/tests/test_example.sh.trs +/tests/test_exec.sh.log +/tests/test_exec.sh.trs +/tests/test_noforce.sh.log +/tests/test_noforce.sh.trs +/tests/test_redirects.sh.log +/tests/test_redirects.sh.trs +/tests/test_simple.sh.log +/tests/test_simple.sh.trs +/tests/test_vfork.sh.log +/tests/test_vfork.sh.trs /tests/test-suite.log diff --git a/tests/Makefile.am b/tests/Makefile.am index 32d9ca3..3ccce24 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,18 +1,24 @@ -TESTS = run.sh +TESTS = test_example.sh \ + test_exec.sh \ + test_noforce.sh \ + test_redirects.sh \ + test_simple.sh check_PROGRAMS = example example_exec example_SOURCES = example.c example_exec_SOURCES = example_exec.c if HAVE_ERROR_H + TESTS += test_error.sh check_PROGRAMS += example_error example_error_SOURCES = example_error.c endif if HAVE_VFORK + TESTS += test_vfork.sh check_PROGRAMS += example_vfork example_vfork_SOURCES = example_vfork.c endif -dist_check_SCRIPTS = run.sh lib.sh +dist_check_SCRIPTS = $(TESTS) lib.sh dist_check_DATA = example.expected \ example_error.expected \ example_exec.expected \ @@ -24,5 +30,5 @@ dist_check_DATA = example.expected \ example_simple.sh \ example_simple.sh.expected -# Used by run.sh. +# Used by lib.sh. export EGREP diff --git a/tests/lib.sh b/tests/lib.sh index 3e29a55..b1c8bc0 100644 --- a/tests/lib.sh +++ b/tests/lib.sh @@ -15,13 +15,27 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +set -e + # Allow running the script directly without running `make check`. test "x$builddir" = x && builddir=. test "x$EGREP" = x && EGREP='grep -E' -# In case we are called with LD_PRELOAD already set. -unset LD_PRELOAD +# The tests fail if running under coloredstderr because the tests redirect +# stderr to stdout which is detected by coloredstderr :D (and not colored as a +# result). Therefore remove LD_PRELOAD and re-exec the test. +if test -n "$LD_PRELOAD"; then + unset LD_PRELOAD + exec "$0" +fi + +# Use valgrind to run the tests if it's available. +valgrind_cmd= +if type valgrind >/dev/null 2>&1; then + valgrind_cmd='valgrind --quiet --error-exitcode=1' +fi + # Clean locale for reproducible tests. LC_ALL=C unset LANGUAGE @@ -56,6 +70,8 @@ run_test() { shift shift + output="output-$$" + ( # Standard setup. LD_PRELOAD="$library" @@ -74,12 +90,12 @@ run_test() { export COLORED_STDERR_FORCE_WRITE fi - $valgrind_cmd "$@" "$testcase" > output 2>&1 + $valgrind_cmd "$@" "$testcase" > "$output" 2>&1 ) - diff -u "$expected" output \ + diff -u "$expected" "$output" \ || die 'failed!' - rm output + rm "$output" echo 'passed.' } diff --git a/tests/run.sh b/tests/run.sh deleted file mode 100755 index a203d48..0000000 --- a/tests/run.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/sh - -# Test suite for coloredstderr. - -# Copyright (C) 2013 Simon Ruderich -# -# 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 3 of the License, 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 . - - -set -e - - -# The tests fail if running under coloredstderr because the tests redirect -# stderr to stdout which is detected by coloredstderr :D (and not colored as a -# result). Therefore remove LD_PRELOAD and re-exec the test. -if test -n "$LD_PRELOAD"; then - unset LD_PRELOAD - exec "$0" -fi - -test "x$srcdir" = x && srcdir=. -. "$srcdir/lib.sh" - - -# Use valgrind to run the tests if it's available. -valgrind_cmd= -if type valgrind >/dev/null 2>&1; then - valgrind_cmd='valgrind --quiet --error-exitcode=1' -fi - - -# Make sure we don't write to non-ttys by default. -force_write= -test_script example_noforce.sh -force_write=1 - -test_script example_simple.sh -test_script example_redirects.sh -test_program example -test_program example_exec -test -x "$builddir/example_vfork" && test_program example_vfork -test -x "$builddir/example_error" && test_program example_error - -test_script_subshell example_simple.sh -test_script_subshell example_redirects.sh -test_program_subshell example -test_program_subshell example_exec -test -x "$builddir/example_vfork" && test_program_subshell example_vfork -test -x "$builddir/example_error" && test_program_subshell example_error - -# Necessary in case the test -x evaluates to false. -true diff --git a/tests/test_error.sh b/tests/test_error.sh new file mode 100755 index 0000000..f01c11b --- /dev/null +++ b/tests/test_error.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +# Copyright (C) 2013 Simon Ruderich +# +# 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 3 of the License, 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 . + + +test "x$srcdir" = x && srcdir=. +. "$srcdir/lib.sh" + +test_program example_error +test_program_subshell example_error diff --git a/tests/test_example.sh b/tests/test_example.sh new file mode 100755 index 0000000..5a1470f --- /dev/null +++ b/tests/test_example.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +# Copyright (C) 2013 Simon Ruderich +# +# 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 3 of the License, 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 . + + +test "x$srcdir" = x && srcdir=. +. "$srcdir/lib.sh" + +test_program example +test_program_subshell example diff --git a/tests/test_exec.sh b/tests/test_exec.sh new file mode 100755 index 0000000..7f8e85e --- /dev/null +++ b/tests/test_exec.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +# Copyright (C) 2013 Simon Ruderich +# +# 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 3 of the License, 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 . + + +test "x$srcdir" = x && srcdir=. +. "$srcdir/lib.sh" + +test_program example_exec +test_program_subshell example_exec diff --git a/tests/test_noforce.sh b/tests/test_noforce.sh new file mode 100755 index 0000000..dad525d --- /dev/null +++ b/tests/test_noforce.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +# Copyright (C) 2013 Simon Ruderich +# +# 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 3 of the License, 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 . + + +test "x$srcdir" = x && srcdir=. +. "$srcdir/lib.sh" + +# Make sure we don't write to non-ttys by default. +force_write= +test_script example_noforce.sh +force_write=1 diff --git a/tests/test_redirects.sh b/tests/test_redirects.sh new file mode 100755 index 0000000..1737566 --- /dev/null +++ b/tests/test_redirects.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +# Copyright (C) 2013 Simon Ruderich +# +# 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 3 of the License, 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 . + + +test "x$srcdir" = x && srcdir=. +. "$srcdir/lib.sh" + +test_script example_redirects.sh +test_script_subshell example_redirects.sh diff --git a/tests/test_simple.sh b/tests/test_simple.sh new file mode 100755 index 0000000..b78c88d --- /dev/null +++ b/tests/test_simple.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +# Copyright (C) 2013 Simon Ruderich +# +# 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 3 of the License, 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 . + + +test "x$srcdir" = x && srcdir=. +. "$srcdir/lib.sh" + +test_script example_simple.sh +test_script_subshell example_simple.sh diff --git a/tests/test_vfork.sh b/tests/test_vfork.sh new file mode 100755 index 0000000..7e00d44 --- /dev/null +++ b/tests/test_vfork.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +# Copyright (C) 2013 Simon Ruderich +# +# 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 3 of the License, 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 . + + +test "x$srcdir" = x && srcdir=. +. "$srcdir/lib.sh" + +test_program example_vfork +test_program_subshell example_vfork -- 2.43.2