mirror of
https://github.com/samba-team/samba.git
synced 2025-03-08 04:58:40 +03:00
ctdb-tests: Make try_command_on_node less error-prone
This sometimes fails, apparently due to a cat process in onnode getting EAGAIN. The conclusion is that tests that process large amounts of output should not depend on a sub-shell delivering that output into a shell variable. Change try_command_on_node() to leave all of the output in file $outfile and just put the first 1KB into $out. $outfile is removed after each test completes. Change the implementation of sanity_check_output() to use $outfile instead of $out. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13924 Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com>
This commit is contained in:
parent
7c3819d1ac
commit
9d02452a24
@ -72,7 +72,20 @@ ctdb_test_init ()
|
||||
|
||||
########################################
|
||||
|
||||
# Sets: $out
|
||||
# Sets: $out, $outfile
|
||||
# * The first 1KB of output is put into $out
|
||||
# * Tests should use $outfile for handling large output
|
||||
# * $outfile is removed after each test
|
||||
out=""
|
||||
outfile="${TEST_VAR_DIR}/try_command_on_node.out"
|
||||
|
||||
outfile_cleanup ()
|
||||
{
|
||||
rm -f "$outfile"
|
||||
}
|
||||
|
||||
ctdb_test_exit_hook_add outfile_cleanup
|
||||
|
||||
try_command_on_node ()
|
||||
{
|
||||
local nodespec="$1" ; shift
|
||||
@ -91,17 +104,18 @@ try_command_on_node ()
|
||||
|
||||
local cmd="$*"
|
||||
|
||||
out=$(onnode -q $onnode_opts "$nodespec" "$cmd" 2>&1) || {
|
||||
|
||||
if ! onnode -q $onnode_opts "$nodespec" "$cmd" >"$outfile" 2>&1 ; then
|
||||
echo "Failed to execute \"$cmd\" on node(s) \"$nodespec\""
|
||||
echo "$out"
|
||||
cat "$outfile"
|
||||
return 1
|
||||
}
|
||||
fi
|
||||
|
||||
if $verbose ; then
|
||||
echo "Output of \"$cmd\":"
|
||||
echo "$out"
|
||||
cat "$outfile"
|
||||
fi
|
||||
|
||||
out=$(dd if="$outfile" bs=1k count=1 2>/dev/null)
|
||||
}
|
||||
|
||||
sanity_check_output ()
|
||||
@ -111,7 +125,7 @@ sanity_check_output ()
|
||||
|
||||
local ret=0
|
||||
|
||||
local num_lines=$(echo "$out" | wc -l)
|
||||
local num_lines=$(wc -l <"$outfile")
|
||||
echo "There are $num_lines lines of output"
|
||||
if [ $num_lines -lt $min_lines ] ; then
|
||||
echo "BAD: that's less than the required number (${min_lines})"
|
||||
@ -120,7 +134,7 @@ sanity_check_output ()
|
||||
|
||||
local status=0
|
||||
local unexpected # local doesn't pass through status of command on RHS.
|
||||
unexpected=$(echo "$out" | egrep -v "$regexp") || status=$?
|
||||
unexpected=$(grep -Ev "$regexp" "$outfile") || status=$?
|
||||
|
||||
# Note that this is reversed.
|
||||
if [ $status -eq 0 ] ; then
|
||||
|
Loading…
x
Reference in New Issue
Block a user