mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
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:
+46
-19
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user