@@ -71,4 +71,10 @@
# pre and post ifconfig output does not match.
wait
-exit $retval
+. ./t_server_null_default.rc
+
+if [ -e $SERVER_KILL_FAIL_FILE ]; then
+ exit 1
+else
+ exit $retval
+fi
@@ -53,11 +53,11 @@
echo "PASS ${test_name} (test failure)"
elif [ $exit_code -eq 0 ] && [ "${should_pass}" = "no" ]; then
echo "FAIL ${test_name} (test failure)"
- cat "${log}"
+ cat "${t_server_null_logdir}/${log}"
retval=1
elif [ $exit_code -eq 1 ] && [ "${should_pass}" = "yes" ]; then
echo "FAIL ${test_name}"
- cat "${log}"
+ cat "${t_server_null_logdir}/${log}"
retval=1
fi
}
@@ -20,6 +20,10 @@
SERVER_KEY="${sample_keys}/server.key"
TA="${sample_keys}/ta.key"
+# Used to detect if graceful kill of any server instance failed during the test
+# run
+SERVER_KILL_FAIL_FILE=".t_server_null_server.kill_failed"
+
# Test server configurations
MAX_CLIENTS="10"
CLIENT_MATCH="Test-Client"
@@ -8,6 +8,9 @@
status="${server_name}.status"
pid="${server_name}.pid"
+ # Allow reading this file even umask values are strict
+ touch "$log"
+
if [ -z "${RUN_SUDO}" ]; then
"${server_exec}" \
$server_conf \
@@ -34,6 +37,9 @@
# Load local configuration, if any
test -r ./t_server_null.rc && . ./t_server_null.rc
+# Remove server kill failure marker file, if any
+rm -f $SERVER_KILL_FAIL_FILE
+
# Launch test servers
for SUF in $TEST_SERVER_LIST
do
@@ -75,6 +81,7 @@
# Make sure that the server processes are truly dead before exiting. If a
# server process does not exit in 15 seconds assume it never will, move on and
# hope for the best.
+
echo "Waiting for servers to exit"
for PID_FILE in $server_pid_files
do
@@ -85,22 +92,25 @@
continue
fi
- if [ -z "${RUN_SUDO}" ]; then
- $KILL_EXEC "${SERVER_PID}"
- else
- $RUN_SUDO $KILL_EXEC "${SERVER_PID}"
- fi
+ # Attempt to kill the OpenVPN server gracefully with SIGTERM
+ $RUN_SUDO $KILL_EXEC "${SERVER_PID}"
count=0
maxcount=75
while [ $count -le $maxcount ]
do
- ps -p "${SERVER_PID}" > /dev/null || break
+ $RUN_SUDO kill -0 "${SERVER_PID}" 2> /dev/null || break
count=$(( count + 1))
sleep 0.2
done
+ # If server is still up send a SIGKILL
if [ $count -ge $maxcount ]; then
- echo "WARNING: could not kill server with pid ${SERVER_PID}!"
+ $RUN_SUDO $KILL_EXEC -9 "${SERVER_PID}"
+ SERVER_NAME=$(basename $PID_FILE|cut -d . -f 1)
+ echo "ERROR: had to send SIGKILL to server ${SERVER_NAME} with pid ${SERVER_PID}!"
+ echo "Tail of server log:"
+ tail -n 20 "${t_server_null_logdir}/${SERVER_NAME}.log"
+ touch $SERVER_KILL_FAIL_FILE
fi
done