]>
Commit | Line | Data |
---|---|---|
8d876415 DK |
1 | #!/bin/sh |
2 | set -e | |
3 | ||
61e92778 | 4 | TESTTORUN='' |
1290422a DK |
5 | while [ -n "$1" ]; do |
6 | if [ "$1" = "-q" ]; then | |
7 | export MSGLEVEL=2 | |
8 | elif [ "$1" = "-v" ]; then | |
9 | export MSGLEVEL=4 | |
10 | elif [ "$1" = '--color=no' ]; then | |
11 | export MSGCOLOR='NO' | |
61e92778 DK |
12 | elif [ "$1" = '--color=yes' ]; then |
13 | export MSGCOLOR='YES' | |
14 | elif [ "$1" = '--color' ]; then | |
15 | export MSGCOLOR="$(echo "$2" | tr 'a-z' 'A-Z')" | |
16 | shift | |
17 | elif [ "$1" = '--level' ]; then | |
18 | export MSGLEVEL=$2 | |
19 | shift | |
20 | elif [ "$1" = '-j' ]; then | |
21 | APT_TEST_JOBS=$2 | |
22 | shift | |
23 | elif [ -x "$1" ]; then | |
24 | TESTTORUN="$1" | |
1290422a DK |
25 | else |
26 | echo >&2 "WARNING: Unknown parameter »$1« will be ignored" | |
27 | fi | |
28 | shift | |
29 | done | |
30 | export MSGLEVEL="${MSGLEVEL:-3}" | |
682a3bf7 | 31 | |
61e92778 | 32 | if [ "${MSGCOLOR:-YES}" = 'YES' ]; then |
27cb4f6c | 33 | if [ ! -t 1 ]; then # but check that we output to a terminal |
1290422a DK |
34 | export MSGCOLOR='NO' |
35 | fi | |
36 | fi | |
37 | if [ "$MSGCOLOR" != 'NO' ]; then | |
682a3bf7 DK |
38 | CTEST='\033[1;32m' |
39 | CHIGH='\033[1;35m' | |
40 | CRESET='\033[0m' | |
1290422a DK |
41 | else |
42 | CTEST='' | |
43 | CHIGH='' | |
44 | CRESET='' | |
fe268128 DK |
45 | fi |
46 | ||
61e92778 DK |
47 | if [ -n "$TESTTORUN" ]; then |
48 | # collecting the output of one test to have it together | |
49 | OUTPUT="$(mktemp)" | |
3685f84d DK |
50 | CURRENTTRAP="rm -f \"$OUTPUT\"; $CURRENTTRAP" |
51 | trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM | |
61e92778 DK |
52 | { |
53 | if [ "$MSGLEVEL" -le 2 ]; then | |
54 | printf "${CTEST}Testcase ${CHIGH}${TESTTORUN##*/}${CRESET}: " | |
55 | else | |
56 | printf "${CTEST}Run Testcase ${CHIGH}${TESTTORUN##*/}${CRESET}\n" | |
57 | fi | |
58 | if ! "$TESTTORUN"; then | |
59 | FAIL='yes' | |
60 | if [ "$MSGLEVEL" -le 2 ]; then | |
61 | printf >&2 "\n${CHIGH}Running ${TESTTORUN##*/} -> FAILED${CRESET}" | |
62 | else | |
63 | echo >&2 "${CHIGH}Running ${TESTTORUN##*/} -> FAILED${CRESET}" | |
64 | fi | |
65 | fi | |
66 | if [ "$MSGLEVEL" -le 2 ]; then | |
67 | echo | |
68 | fi | |
69 | } >"$OUTPUT" 2>&1 | |
70 | # without we end up getting stepped output 'randomly' | |
71 | stty sane | |
72 | cat >&2 "$OUTPUT" | |
73 | stty sane | |
74 | if [ "$FAIL" = 'yes' ]; then | |
75 | exit 1 | |
76 | else | |
77 | exit 0 | |
78 | fi | |
79 | fi | |
80 | ||
81 | FAIL=0 | |
82 | PASS=0 | |
83 | ALL=0 | |
84 | FAILED_TESTS="" | |
85 | DIR="$(readlink -f "$(dirname "$0")")" | |
80441902 | 86 | TESTLIST="$(find "$DIR" -mindepth 1 -maxdepth 1 -regex '^.*/test-[^/]*$' | sort)" |
61e92778 DK |
87 | if [ -n "$APT_TEST_JOBS" ]; then |
88 | if [ "$MSGCOLOR" != 'NO' ]; then | |
89 | export MSGCOLOR='ALWAYS' | |
90 | fi | |
91 | exec parallel -j "$APT_TEST_JOBS" "$0" -- $(echo "$TESTLIST") | |
92 | fi | |
93 | TOTAL="$(echo "$TESTLIST" | wc -l)" | |
94 | for testcase in $TESTLIST; do | |
682a3bf7 | 95 | if [ "$MSGLEVEL" -le 2 ]; then |
61e92778 | 96 | printf "($(($ALL+1))/${TOTAL}) ${CTEST}Testcase ${CHIGH}${testcase##*/}${CRESET}: " |
39cc8228 | 97 | else |
61e92778 | 98 | printf "${CTEST}Run Testcase ($(($ALL+1))/${TOTAL}) ${CHIGH}${testcase##*/}${CRESET}\n" |
39cc8228 | 99 | fi |
adee3bae | 100 | if ! ${testcase}; then |
0954c58e | 101 | FAIL=$((FAIL+1)) |
61e92778 | 102 | FAILED_TESTS="$FAILED_TESTS ${testcase##*/}" |
e52aad52 | 103 | if [ "$MSGLEVEL" -le 2 ]; then |
61e92778 | 104 | printf >&2 "\n${CHIGH}Running ${testcase##*/} -> FAILED${CRESET}" |
e52aad52 | 105 | else |
61e92778 | 106 | echo >&2 "${CHIGH}Running ${testcase##*/} -> FAILED${CRESET}" |
e52aad52 | 107 | fi |
0954c58e DK |
108 | else |
109 | PASS=$((PASS+1)) | |
110 | fi | |
111 | ALL=$((ALL+1)) | |
682a3bf7 | 112 | if [ "$MSGLEVEL" -le 2 ]; then |
39cc8228 DK |
113 | echo |
114 | fi | |
8d876415 | 115 | done |
adee3bae | 116 | |
0954c58e DK |
117 | echo >&2 "Statistics: $ALL tests were run: $PASS successfully and $FAIL failed" |
118 | if [ -n "$FAILED_TESTS" ]; then | |
119 | echo >&2 "Failed tests: $FAILED_TESTS" | |
120 | else | |
121 | echo >&2 'All tests seem to have been run successfully. What could possibly go wrong?' | |
2b4e2e83 | 122 | fi |
f91bd741 MV |
123 | # ensure we don't overflow |
124 | exit $((FAIL <= 255 ? FAIL : 255)) |