mirror of
https://github.com/OpenVPN/openvpn.git
synced 2024-11-23 09:43:45 +08:00
t_server_null: forcibly kill misbehaving servers
Change-Id: Ic0f98cd3b87a7b86e032e63167ac9036f7c08fcb Signed-off-by: Samuli Seppänen <samuli.seppanen@gmail.com> Acked-by: Gert Doering <gert@greenie.muc.de> Message-Id: <20241025103632.4413-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg29655.html Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
parent
a3a4844a3c
commit
37db7fe37a
@ -71,4 +71,10 @@ retval=$?
|
||||
# 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 @@ get_client_test_result() {
|
||||
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_CERT="${sample_keys}/server.crt"
|
||||
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 @@ launch_server() {
|
||||
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 @@ umask 022
|
||||
# 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 @@ echo "All clients have disconnected from all servers"
|
||||
# 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 @@ do
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user