generic/131: Save stderr for debugging

Details of which internal step failed within a test are lost without
additional debugging output.  Save that output by separating stdout and
stderr.

This allows the server port to be written solely to stdout for
consumption by the script.  Then all error output can be sent to the
seqres.full file in the event of a failure.  Then, depend on the return
code of the server _and_ the client to detect failure and save the error
output for inspection.

Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
Ira Weiny
2019-09-23 10:53:28 -07:00
committed by Eryu Guan
parent f10a6b4a4e
commit 450873c962
+46 -19
View File
@@ -14,11 +14,15 @@ here=`pwd`
tmp=/tmp/$$
status=1 # failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
debug="-d"
TESTFILE=$TEST_DIR/lock_file
_cleanup()
{
kill $client_pid > /dev/null 2>&1
kill $server_pid > /dev/null 2>&1
rm -f $TESTFILE
}
# get standard environment, filters and checks
@@ -31,48 +35,71 @@ _supported_os Linux
_require_test
_require_test_fcntl_advisory_locks
TESTFILE=$TEST_DIR/lock_file
# set up log files
SERVER_LOG=$TEST_DIR/server.out
rm -f $SERVER_LOG
touch $SERVER_LOG
SERVER_PORT=$TEST_DIR/server.port
rm -f $SERVER_PORT
touch $SERVER_PORT
CLIENT_LOG=$TEST_DIR/client.out
rm -f $CLIENT_LOG
touch $CLIENT_LOG
rm -f $TEST_DIR/server.out
touch $TEST_DIR/server.out
touch $TESTFILE
function dump_logs_fail()
{
fail_str=$1
echo " ***** Client log *****" >> $seqres.full
cat $CLIENT_LOG >> $seqres.full
echo " ***** Server log *****" >> $seqres.full
cat $SERVER_LOG >> $seqres.full
echo " ***** End file details *****" >> $seqres.full
ls -la $TESTFILE >> $seqres.full
_fail $fail_str
exit 1
}
# Start the server
src/locktest $TESTFILE 2>&1 > $TEST_DIR/server.out &
src/locktest $debug $TESTFILE 2> $SERVER_LOG 1> $SERVER_PORT &
server_pid=$!
timeout=30
while [ $timeout -gt 0 ]; do
sleep 1
PORT=$(cat $TEST_DIR/server.out | grep "^server port: " | awk '{print $3}')
PORT=$(cat $SERVER_PORT | grep "^server port: " | awk '{print $3}')
if [ -n "$PORT" ]; then
break
fi
# check the existence of server process
if ! kill -s 0 $server_pid >/dev/null 2>&1; then
echo "Server died abnormally"
exit 1
dump_logs_fail "Server died abnormally"
fi
let timeout=timeout-1
done
if [ -z "$PORT" ]; then
echo "Could not get server port"
exit 1
dump_logs_fail "Could not get server port"
fi
# Start the client
src/locktest -p $PORT -h localhost $TESTFILE 2>&1 > $TEST_DIR/client.out
client_pid=$!
result=$?
if [ $result -eq 0 ]; then
echo success!
status=0
else
echo "Client reported failure ($result)"
cat $TEST_DIR/*.out
fi
src/locktest $debug -p $PORT -h localhost $TESTFILE 2> $CLIENT_LOG
client_result=$?
client_pid=$!
if [ $client_result -ne 0 ]; then
dump_logs_fail "Client reported failure ($client_result)"
fi
wait $server_pid
server_result=$?
if [ $server_result -ne 0 ]; then
dump_logs_fail "Server reported failure ($server_result)"
fi
echo success!
status=0
exit