From: Patrick Steinhardt Date: Fri, 23 Aug 2019 13:32:53 +0000 (+0200) Subject: tests: remove reliance on buffer behaviour of stderr/stdout streams X-Git-Tag: v2.35-rc1~267 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=801d689e47095f7ecf6c57a8cdf0c8b6108279e3;p=thirdparty%2Futil-linux.git tests: remove reliance on buffer behaviour of stderr/stdout streams In the test cases "rename::exit_codes" and "rename::exit_codes", we rely on the flushing behaviour of stderr and stdout streams relative to each other. Streams in glibc will not flush on newlines if stdout is pointing to a non-TTY file descriptor, but relying on this is fragile and may break on systems with a different behaviour like musl libc. Fix this by introducing a new parameter "--unbuffered" to `ts_run`. If this parameter is passed and stdbuf(1) from coreutils is available, then it will use it to disable buffering of standard output completely. Like this, we can selectively run tests with this if ordering of messages from stdout and stderr is being checked. Signed-off-by: Patrick Steinhardt x --- diff --git a/tests/expected/misc/swaplabel b/tests/expected/misc/swaplabel index 172f876afa..790a28c6cf 100644 --- a/tests/expected/misc/swaplabel +++ b/tests/expected/misc/swaplabel @@ -1,7 +1,7 @@ mkswap: error: swap area needs to be at least 10 pages mkswap: : insecure permissions , 0600 suggested. -mkswap: Label was truncated. Setting up swapspace version 1, size = 9 pages (9xPGSZ bytes) +mkswap: Label was truncated. LABEL=1234567890abcde, UUID=12345678-abcd-abcd-abcd-1234567890ab LABEL: 1234567890abcde UUID: 12345678-abcd-abcd-abcd-1234567890ab diff --git a/tests/expected/rename/exit_codes b/tests/expected/rename/exit_codes index c577817883..3d53010b2d 100644 --- a/tests/expected/rename/exit_codes +++ b/tests/expected/rename/exit_codes @@ -2,6 +2,6 @@ RENAME_EXIT_NOTHING: 4 `rename_exit_codes.1' -> `rename_exit_values.1' `rename_exit_codes.2' -> `rename_exit_values.2' EXIT_SUCCESS: 0 -rename: rename_exit_values.2: rename to rename_exit_codes.2 failed: Is a directory `rename_exit_values.1' -> `rename_exit_codes.1' +rename: rename_exit_values.2: rename to rename_exit_codes.2 failed: Is a directory RENAME_EXIT_SOMEOK: 2 diff --git a/tests/functions.sh b/tests/functions.sh index 0605a1320a..3d7bb89bc9 100644 --- a/tests/functions.sh +++ b/tests/functions.sh @@ -420,26 +420,48 @@ function ts_init_py { } function ts_run { + local UNBUFFERED= + + while true; do + case "$1" in + --unbuffered) + UNBUFFERED=1 + shift;; + --) + shift + break;; + *) + break;; + esac + done + + declare -a args + # - # valgrind mode + # ASAN mode # - if [ -n "$TS_VALGRIND_CMD" ]; then - libtool --mode=execute \ - $TS_VALGRIND_CMD --tool=memcheck --leak-check=full \ - --leak-resolution=high --num-callers=20 \ - --log-file="$TS_VGDUMP" "$@" + if [ "$TS_ENABLE_ASAN" == "yes" ]; then + args+=(ASAN_OPTIONS='detect_leaks=1') + fi + # - # ASAN mode + # Disable buffering of stdout # - elif [ "$TS_ENABLE_ASAN" == "yes" ]; then - ASAN_OPTIONS='detect_leaks=1' "$@" + if [ -n "$UNBUFFERED" ]; then + if type stdbuf >/dev/null 2>&1; then + args+=(stdbuf --output=0) + fi + fi # - # Default mode + # valgrind mode # - else - "$@" + if [ -n "$TS_VALGRIND_CMD" ]; then + args+=(libtool --mode=execute "$TS_VALGRIND_CMD" --tool=memcheck --leak-check=full) + args+=(--leak-resolution=high --num-callers=20 --log-file="$TS_VGDUMP") fi + + "${args[@]}" "$@" } function ts_gen_diff { @@ -977,4 +999,3 @@ function ts_has_ncurses_support { echo "no" fi } - diff --git a/tests/ts/misc/swaplabel b/tests/ts/misc/swaplabel index 22858b0ac2..106cb7d213 100755 --- a/tests/ts/misc/swaplabel +++ b/tests/ts/misc/swaplabel @@ -39,7 +39,7 @@ MIN_SWAP_SIZE_KB=$(( MIN_SWAP_SIZE / 1024 )) rm -f $IMAGE fallocate_or_skip $(( $MIN_SWAP_SIZE - 1 )) $IMAGE -$TS_CMD_MKSWAP \ +ts_run --unbuffered $TS_CMD_MKSWAP \ --label 1234567890abcdef \ --uuid 12345678-abcd-abcd-abcd-1234567890ab \ $IMAGE 2>&1 |\ @@ -50,7 +50,7 @@ $TS_CMD_MKSWAP \ rm -f $IMAGE fallocate_or_skip $MIN_SWAP_SIZE $IMAGE -$TS_CMD_MKSWAP \ +ts_run --unbuffered $TS_CMD_MKSWAP \ --label 1234567890abcdef \ --uuid 12345678-abcd-abcd-abcd-1234567890ab \ $IMAGE 2>&1 |\ diff --git a/tests/ts/rename/exit_codes b/tests/ts/rename/exit_codes index 37028162b0..d3012ae59d 100755 --- a/tests/ts/rename/exit_codes +++ b/tests/ts/rename/exit_codes @@ -32,7 +32,7 @@ $TS_CMD_RENAME -v codes values rename_exit_codes.? >> $TS_OUTPUT 2>&1 echo "EXIT_SUCCESS: $?" >> $TS_OUTPUT mkdir rename_exit_codes.2 -$TS_CMD_RENAME -v values codes rename_exit_values.? >> $TS_OUTPUT 2>&1 +ts_run --unbuffered $TS_CMD_RENAME -v values codes rename_exit_values.? >> $TS_OUTPUT 2>&1 echo "RENAME_EXIT_SOMEOK: $?" >> $TS_OUTPUT rmdir rename_exit_codes.2