]>
Commit | Line | Data |
---|---|---|
1 | #!/bin/sh | |
2 | set -e | |
3 | ||
4 | TESTTORUN='' | |
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' | |
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" | |
25 | else | |
26 | echo >&2 "WARNING: Unknown parameter »$1« will be ignored" | |
27 | fi | |
28 | shift | |
29 | done | |
30 | export MSGLEVEL="${MSGLEVEL:-3}" | |
31 | ||
32 | if [ "${MSGCOLOR:-YES}" = 'YES' ]; then | |
33 | if [ ! -t 1 ]; then # but check that we output to a terminal | |
34 | export MSGCOLOR='NO' | |
35 | fi | |
36 | fi | |
37 | if [ "$MSGCOLOR" != 'NO' ]; then | |
38 | CTEST='\033[1;32m' | |
39 | CHIGH='\033[1;35m' | |
40 | CRESET='\033[0m' | |
41 | else | |
42 | CTEST='' | |
43 | CHIGH='' | |
44 | CRESET='' | |
45 | fi | |
46 | ||
47 | if [ -n "$TESTTORUN" ]; then | |
48 | # collecting the output of one test to have it together | |
49 | OUTPUT="$(mktemp)" | |
50 | CURRENTTRAP="rm -f \"$OUTPUT\"; $CURRENTTRAP" | |
51 | trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM | |
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")")" | |
86 | TESTLIST="$(run-parts --list "$DIR" --regex '^test-.*$')" | |
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 | |
95 | if [ "$MSGLEVEL" -le 2 ]; then | |
96 | printf "($(($ALL+1))/${TOTAL}) ${CTEST}Testcase ${CHIGH}${testcase##*/}${CRESET}: " | |
97 | else | |
98 | printf "${CTEST}Run Testcase ($(($ALL+1))/${TOTAL}) ${CHIGH}${testcase##*/}${CRESET}\n" | |
99 | fi | |
100 | if ! ${testcase}; then | |
101 | FAIL=$((FAIL+1)) | |
102 | FAILED_TESTS="$FAILED_TESTS ${testcase##*/}" | |
103 | if [ "$MSGLEVEL" -le 2 ]; then | |
104 | printf >&2 "\n${CHIGH}Running ${testcase##*/} -> FAILED${CRESET}" | |
105 | else | |
106 | echo >&2 "${CHIGH}Running ${testcase##*/} -> FAILED${CRESET}" | |
107 | fi | |
108 | else | |
109 | PASS=$((PASS+1)) | |
110 | fi | |
111 | ALL=$((ALL+1)) | |
112 | if [ "$MSGLEVEL" -le 2 ]; then | |
113 | echo | |
114 | fi | |
115 | done | |
116 | ||
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?' | |
122 | fi | |
123 | # ensure we don't overflow | |
124 | exit $((FAIL <= 255 ? FAIL : 255)) |