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>
tmp=/tmp/$$
status=1 # failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
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
_cleanup()
{
kill $client_pid > /dev/null 2>&1
kill $server_pid > /dev/null 2>&1
}
# get standard environment, filters and checks
}
# get standard environment, filters and checks
_require_test
_require_test_fcntl_advisory_locks
_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
+
+touch $TESTFILE
+
+function dump_logs_fail()
+{
+ fail_str=$1
-rm -f $TEST_DIR/server.out
-touch $TEST_DIR/server.out
+ 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
+}
-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
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
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
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"
-src/locktest -p $PORT -h localhost $TESTFILE 2>&1 > $TEST_DIR/client.out
+
+src/locktest $debug -p $PORT -h localhost $TESTFILE 2> $CLIENT_LOG
+client_result=$?
-result=$?
-if [ $result -eq 0 ]; then
- echo success!
- status=0
-else
- echo "Client reported failure ($result)"
- cat $TEST_DIR/*.out
+if [ $client_result -ne 0 ]; then
+ dump_logs_fail "Client reported failure ($client_result)"
+wait $server_pid
+server_result=$?
+if [ $server_result -ne 0 ]; then
+ dump_logs_fail "Server reported failure ($server_result)"
+fi
+echo success!
+status=0