tests: Split run.sh in multiple test files.

Allows parallel test runs and simplifies optional tests.
This commit is contained in:
Simon Ruderich
2013-06-13 01:26:25 +02:00
parent 05aefe25ba
commit 04ac66863a
11 changed files with 207 additions and 73 deletions

16
.gitignore vendored
View File

@@ -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

View File

@@ -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

View File

@@ -15,13 +15,27 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
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.'
}

View File

@@ -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 <http://www.gnu.org/licenses/>.
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

23
tests/test_error.sh Executable file
View File

@@ -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 <http://www.gnu.org/licenses/>.
test "x$srcdir" = x && srcdir=.
. "$srcdir/lib.sh"
test_program example_error
test_program_subshell example_error

23
tests/test_example.sh Executable file
View File

@@ -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 <http://www.gnu.org/licenses/>.
test "x$srcdir" = x && srcdir=.
. "$srcdir/lib.sh"
test_program example
test_program_subshell example

23
tests/test_exec.sh Executable file
View File

@@ -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 <http://www.gnu.org/licenses/>.
test "x$srcdir" = x && srcdir=.
. "$srcdir/lib.sh"
test_program example_exec
test_program_subshell example_exec

25
tests/test_noforce.sh Executable file
View File

@@ -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 <http://www.gnu.org/licenses/>.
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

23
tests/test_redirects.sh Executable file
View File

@@ -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 <http://www.gnu.org/licenses/>.
test "x$srcdir" = x && srcdir=.
. "$srcdir/lib.sh"
test_script example_redirects.sh
test_script_subshell example_redirects.sh

23
tests/test_simple.sh Executable file
View File

@@ -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 <http://www.gnu.org/licenses/>.
test "x$srcdir" = x && srcdir=.
. "$srcdir/lib.sh"
test_script example_simple.sh
test_script_subshell example_simple.sh

23
tests/test_vfork.sh Executable file
View File

@@ -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 <http://www.gnu.org/licenses/>.
test "x$srcdir" = x && srcdir=.
. "$srcdir/lib.sh"
test_program example_vfork
test_program_subshell example_vfork