diff options
| -rw-r--r-- | tools/testing/selftests/Makefile | 1 | ||||
| -rw-r--r-- | tools/testing/selftests/kselftest.h | 2 | ||||
| -rwxr-xr-x | tools/testing/selftests/kselftest/prefix.pl | 23 | ||||
| -rw-r--r-- | tools/testing/selftests/kselftest/runner.sh | 37 | ||||
| -rw-r--r-- | tools/testing/selftests/lib.mk | 3 |
5 files changed, 60 insertions, 6 deletions
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile index 4ac1d1c7ce5b..64699f59b95f 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile | |||
| @@ -178,6 +178,7 @@ ifdef INSTALL_PATH | |||
| 178 | @# Ask all targets to install their files | 178 | @# Ask all targets to install their files |
| 179 | mkdir -p $(INSTALL_PATH)/kselftest | 179 | mkdir -p $(INSTALL_PATH)/kselftest |
| 180 | install -m 744 kselftest/runner.sh $(INSTALL_PATH)/kselftest/ | 180 | install -m 744 kselftest/runner.sh $(INSTALL_PATH)/kselftest/ |
| 181 | install -m 744 kselftest/prefix.pl $(INSTALL_PATH)/kselftest/ | ||
| 181 | @for TARGET in $(TARGETS); do \ | 182 | @for TARGET in $(TARGETS); do \ |
| 182 | BUILD_TARGET=$$BUILD/$$TARGET; \ | 183 | BUILD_TARGET=$$BUILD/$$TARGET; \ |
| 183 | make OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \ | 184 | make OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \ |
diff --git a/tools/testing/selftests/kselftest.h b/tools/testing/selftests/kselftest.h index 9f4147a6fdbc..7f078e79a9fa 100644 --- a/tools/testing/selftests/kselftest.h +++ b/tools/testing/selftests/kselftest.h | |||
| @@ -63,7 +63,7 @@ static inline void ksft_print_header(void) | |||
| 63 | 63 | ||
| 64 | static inline void ksft_print_cnts(void) | 64 | static inline void ksft_print_cnts(void) |
| 65 | { | 65 | { |
| 66 | printf("Pass %d Fail %d Xfail %d Xpass %d Skip %d Error %d\n", | 66 | printf("# Pass %d Fail %d Xfail %d Xpass %d Skip %d Error %d\n", |
| 67 | ksft_cnt.ksft_pass, ksft_cnt.ksft_fail, | 67 | ksft_cnt.ksft_pass, ksft_cnt.ksft_fail, |
| 68 | ksft_cnt.ksft_xfail, ksft_cnt.ksft_xpass, | 68 | ksft_cnt.ksft_xfail, ksft_cnt.ksft_xpass, |
| 69 | ksft_cnt.ksft_xskip, ksft_cnt.ksft_error); | 69 | ksft_cnt.ksft_xskip, ksft_cnt.ksft_error); |
diff --git a/tools/testing/selftests/kselftest/prefix.pl b/tools/testing/selftests/kselftest/prefix.pl new file mode 100755 index 000000000000..ec7e48118183 --- /dev/null +++ b/tools/testing/selftests/kselftest/prefix.pl | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | #!/usr/bin/perl | ||
| 2 | # SPDX-License-Identifier: GPL-2.0 | ||
| 3 | # Prefix all lines with "# ", unbuffered. Command being piped in may need | ||
| 4 | # to have unbuffering forced with "stdbuf -i0 -o0 -e0 $cmd". | ||
| 5 | use strict; | ||
| 6 | |||
| 7 | binmode STDIN; | ||
| 8 | binmode STDOUT; | ||
| 9 | |||
| 10 | STDOUT->autoflush(1); | ||
| 11 | |||
| 12 | my $needed = 1; | ||
| 13 | while (1) { | ||
| 14 | my $char; | ||
| 15 | my $bytes = sysread(STDIN, $char, 1); | ||
| 16 | exit 0 if ($bytes == 0); | ||
| 17 | if ($needed) { | ||
| 18 | print "# "; | ||
| 19 | $needed = 0; | ||
| 20 | } | ||
| 21 | print $char; | ||
| 22 | $needed = 1 if ($char eq "\n"); | ||
| 23 | } | ||
diff --git a/tools/testing/selftests/kselftest/runner.sh b/tools/testing/selftests/kselftest/runner.sh index a66fb64e61e9..b9f74e5a2ee5 100644 --- a/tools/testing/selftests/kselftest/runner.sh +++ b/tools/testing/selftests/kselftest/runner.sh | |||
| @@ -7,6 +7,34 @@ export skip_rc=4 | |||
| 7 | export logfile=/dev/stdout | 7 | export logfile=/dev/stdout |
| 8 | export per_test_logging= | 8 | export per_test_logging= |
| 9 | 9 | ||
| 10 | # There isn't a shell-agnostic way to find the path of a sourced file, | ||
| 11 | # so we must rely on BASE_DIR being set to find other tools. | ||
| 12 | if [ -z "$BASE_DIR" ]; then | ||
| 13 | echo "Error: BASE_DIR must be set before sourcing." >&2 | ||
| 14 | exit 1 | ||
| 15 | fi | ||
| 16 | |||
| 17 | # If Perl is unavailable, we must fall back to line-at-a-time prefixing | ||
| 18 | # with sed instead of unbuffered output. | ||
| 19 | tap_prefix() | ||
| 20 | { | ||
| 21 | if [ ! -x /usr/bin/perl ]; then | ||
| 22 | sed -e 's/^/# /' | ||
| 23 | else | ||
| 24 | "$BASE_DIR"/kselftest/prefix.pl | ||
| 25 | fi | ||
| 26 | } | ||
| 27 | |||
| 28 | # If stdbuf is unavailable, we must fall back to line-at-a-time piping. | ||
| 29 | tap_unbuffer() | ||
| 30 | { | ||
| 31 | if ! which stdbuf >/dev/null ; then | ||
| 32 | "$@" | ||
| 33 | else | ||
| 34 | stdbuf -i0 -o0 -e0 "$@" | ||
| 35 | fi | ||
| 36 | } | ||
| 37 | |||
| 10 | run_one() | 38 | run_one() |
| 11 | { | 39 | { |
| 12 | DIR="$1" | 40 | DIR="$1" |
| @@ -16,10 +44,9 @@ run_one() | |||
| 16 | BASENAME_TEST=$(basename $TEST) | 44 | BASENAME_TEST=$(basename $TEST) |
| 17 | 45 | ||
| 18 | TEST_HDR_MSG="selftests: $DIR: $BASENAME_TEST" | 46 | TEST_HDR_MSG="selftests: $DIR: $BASENAME_TEST" |
| 19 | echo "$TEST_HDR_MSG" | 47 | echo "# $TEST_HDR_MSG" |
| 20 | echo "========================================" | ||
| 21 | if [ ! -x "$TEST" ]; then | 48 | if [ ! -x "$TEST" ]; then |
| 22 | echo -n "$TEST_HDR_MSG: Warning: file $TEST is " | 49 | echo -n "# Warning: file $TEST is " |
| 23 | if [ ! -e "$TEST" ]; then | 50 | if [ ! -e "$TEST" ]; then |
| 24 | echo "missing!" | 51 | echo "missing!" |
| 25 | else | 52 | else |
| @@ -28,7 +55,9 @@ run_one() | |||
| 28 | echo "not ok $test_num $TEST_HDR_MSG" | 55 | echo "not ok $test_num $TEST_HDR_MSG" |
| 29 | else | 56 | else |
| 30 | cd `dirname $TEST` > /dev/null | 57 | cd `dirname $TEST` > /dev/null |
| 31 | (./$BASENAME_TEST >> "$logfile" 2>&1 && | 58 | (((((tap_unbuffer ./$BASENAME_TEST 2>&1; echo $? >&3) | |
| 59 | tap_prefix >&4) 3>&1) | | ||
| 60 | (read xs; exit $xs)) 4>>"$logfile" && | ||
| 32 | echo "ok $test_num $TEST_HDR_MSG") || | 61 | echo "ok $test_num $TEST_HDR_MSG") || |
| 33 | (if [ $? -eq $skip_rc ]; then \ | 62 | (if [ $? -eq $skip_rc ]; then \ |
| 34 | echo "not ok $test_num $TEST_HDR_MSG # SKIP" | 63 | echo "not ok $test_num $TEST_HDR_MSG # SKIP" |
diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk index 28b8ffedfdf1..098dd0065fb1 100644 --- a/tools/testing/selftests/lib.mk +++ b/tools/testing/selftests/lib.mk | |||
| @@ -67,7 +67,8 @@ endif | |||
| 67 | 67 | ||
| 68 | .ONESHELL: | 68 | .ONESHELL: |
| 69 | define RUN_TESTS | 69 | define RUN_TESTS |
| 70 | @. $(selfdir)/kselftest/runner.sh; \ | 70 | @BASE_DIR="$(selfdir)"; \ |
| 71 | . $(selfdir)/kselftest/runner.sh; \ | ||
| 71 | if [ "X$(summary)" != "X" ]; then \ | 72 | if [ "X$(summary)" != "X" ]; then \ |
| 72 | per_test_logging=1; \ | 73 | per_test_logging=1; \ |
| 73 | fi; \ | 74 | fi; \ |
