Files
apfstests/common/locktest
T
Zhihao Cheng b7cecbea22 fstests: Add path $here before src/<file>
Calling src/<file> without path '$here' may cause the problem that
the file cannot be found.

For example, Running generic/192 with overlayfs(Let ubifs as base
fs) yields the following output:

  generic/192 - output mismatch
     QA output created by 192
     sleep for 5 seconds
     test
    +./common/rc: line 316: src/t_dir_type: No such file or directory
     delta1 is in range
     delta2 is in range
    ...

When the use case fails, the call stack in generic/192 is:

  local unknowns=$(src/t_dir_type $dir u | wc -l)	common/rc
  _supports_filetype					common/rc
  _overlay_mount					common/overlay
  _overlay_test_mount					common/overlay
  _test_mount						common/rc
  _test_cycle_mount					generic/192

Before _test_cycle_mount() being invoked, generic/192 executed 'cd
/' to change work dir from 'xfstests-dev' to '/', so src/t_dir_type
was not found.

[Eryu: some tests run src/<file> as regular user, don't add $here
prefix in such case, as a regular user may have no search permission
on $here]

Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2019-10-23 23:12:42 +08:00

96 lines
1.8 KiB
Plaintext

##/bin/bash
# SPDX-License-Identifier: GPL-2.0+
# Copyright (c) 2019 Intel Corp, All Rights Reserved
SERVER_LOG=$TEST_DIR/server.out
SERVER_PORT=$TEST_DIR/server.port
CLIENT_LOG=$TEST_DIR/client.out
TESTFILE=$TEST_DIR/lock_file
client_pid=""
server_pid=""
_cleanup()
{
kill $client_pid > /dev/null 2>&1
kill $server_pid > /dev/null 2>&1
rm -f $TESTFILE
}
_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
}
_run_generic() {
mode=$1
# set up log files
rm -f $SERVER_LOG
touch $SERVER_LOG
rm -f $SERVER_PORT
touch $SERVER_PORT
rm -f $CLIENT_LOG
touch $CLIENT_LOG
touch $TESTFILE
# Start the server
$here/src/locktest $mode $TESTFILE 2> $SERVER_LOG 1> $SERVER_PORT &
server_pid=$!
timeout=30
while [ $timeout -gt 0 ]; do
sleep 1
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
_dump_logs_fail "Server died abnormally"
fi
let timeout=timeout-1
done
if [ -z "$PORT" ]; then
_dump_logs_fail "Could not get server port"
fi
# Start the client
$here/src/locktest $mode -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
}
_run_locktest() {
_run_generic ""
}
_run_leasetest() {
_run_generic "-L"
}