btrfs-progs: test/common: Introduce run_mustfail_stdout

For later test case which needs info from stderr.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Qu Wenruo 2017-11-01 09:30:41 +08:00 committed by David Sterba
parent c12a6e4dca
commit 2bf30fb3b1
1 changed files with 52 additions and 0 deletions

View File

@ -236,6 +236,58 @@ run_mustfail()
fi
}
# The first parameter is error message to print if it fails, just like
# run_must_fail().
# NOTE: we don't use pipefail to avoid disturbing other script, so here we
# use a temporary output file.
# So it doesn't support pipeline in the @cmd
run_mustfail_stdout()
{
local spec
local ins
local cmd
local msg
local ret
local tmp_output
tmp_output=$(mktemp --tmpdir btrfs-progs-test--mustfail-stdtout.XXXXXX)
msg="$1"
shift
if _is_file_or_command "$msg"; then
echo "ASSERTION FAIL: 1st argument of run_mustfail_stdout must be a message"
exit 1
fi
ins=$(_get_spec_ins "$@")
spec=$(($ins-1))
cmd=$(eval echo "\${$spec}")
spec=$(_cmd_spec "${@:$spec}")
set -- "${@:1:$(($ins-1))}" $spec "${@: $ins}"
echo "############### $@" >> "$RESULTS" 2>&1
if [[ $TEST_LOG =~ tty ]]; then echo "CMD(mustfail): $@" > /dev/tty; fi
if [ "$1" = 'root_helper' ]; then
"$@" 2>&1 > "$tmp_output"
else
$INSTRUMENT "$@" 2>&1 > "$tmp_output"
fi
ret=$?
cat "$tmp_output" >> "$RESULTS"
cat "$tmp_output"
rm "$tmp_output"
if [ "$ret" != 0 ]; then
echo "failed (expected): $@" >> "$RESULTS"
return 0
else
echo "succeeded (unexpected!): $@" >> "$RESULTS"
_fail "unexpected success: $msg"
return 1
fi
}
check_prereq()
{
if ! [ -f "$TOP/$1" ]; then