tests: use env and support both unbuffer/stdbuf

Triggered by commit f612c4c67 (tests: fix --unbuffered mode with
ASAN, 2019-08-27), which says:

    Well, this patch sucks. It would be nice to have things in
    the way how it has been original expected by Patrick's patch,
    but ...

So this commit here effectively reverts it and instead tries to
improve the shortcomings of the original patch. First, it uses
env(1) to set ASAN_OPTIONS instead of directly adding it to the
args array to fix execution of "${args[@]}" "$@".

Second, it now supports both unbuffer(1) and stdbuf(1). The
latter uses LD_PRELOAD tricks, which doesn't play nicely with
ASAN, so it will not be used if ASAN has been requested. It's
still valuable to have support for both, as many more systems
will have stdbuf(1) from coreutils installed but not unbuffer(1)
from expect.

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Patrick Steinhardt 2019-08-28 08:56:24 +02:00 committed by Karel Zak
parent 71210f5bab
commit 59a46f36b6
1 changed files with 20 additions and 21 deletions

View File

@ -425,9 +425,7 @@ function ts_run {
while true; do
case "$1" in
--unbuffered)
if type unbuffer >/dev/null 2>&1; then
UNBUFFERED=1
fi
UNBUFFERED=1
shift;;
--)
shift
@ -437,34 +435,35 @@ function ts_run {
esac
done
declare -a args
#
# ASAN mode
#
if [ "$TS_ENABLE_ASAN" == "yes" ]; then
if [ -n "$UNBUFFERED" ]; then
ASAN_OPTIONS='detect_leaks=1' unbuffer "$@"
else
ASAN_OPTIONS='detect_leaks=1' "$@"
args+=(env ASAN_OPTIONS=detect_leaks=1)
fi
#
# Disable buffering of stdout
#
if [ -n "$UNBUFFERED" ]; then
if type unbuffer >/dev/null 2>&1; then
args+=(unbuffer)
elif type stdbuf >/dev/null 2>&1 && [ "$TS_ENABLE_ASAN" != "yes" ]; then
args+=(stdbuf --output=0)
fi
fi
#
# valgrind mode
#
elif [ -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" "$@"
#
# default mode
#
else
if [ -n "$UNBUFFERED" ]; then
unbuffer "$@"
else
"$@"
fi
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 {