0
0
mirror of https://github.com/OpenVPN/openvpn.git synced 2024-09-19 19:42:30 +02:00
openvpn/tests/t_server_null_server.sh
Samuli Seppänen f8f4771398 t_server_null: multiple improvements and fixes
- exit after a timeout if unable to kill servers
- use sudo or equivalent only for server stop/start
- use /bin/sh directly instead of through /usr/bin/env
- simplify sudo call in the sample rc file
- remove misleading and outdated documentation
- make it work on OpenBSD 7.5
- make it work on NetBSD 10.0
- make server logs readable by normal users

Change-Id: I2cce8ad4e0d262e1404ab1eb6ff673d8590b6b3a
Signed-off-by: Samuli Seppänen <samuli.seppanen@gmail.com>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Message-Id: <20240704133337.26595-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg28871.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2024-07-04 22:26:32 +02:00

104 lines
2.6 KiB
Bash
Executable File

#!/bin/sh
launch_server() {
server_name=$1
server_exec=$2
server_conf=$3
log="${server_name}.log"
status="${server_name}.status"
pid="${server_name}.pid"
if [ -z "${RUN_SUDO}" ]; then
rm -f "${status}" "${log}" "${pid}"
"${server_exec}" \
$server_conf \
--status "${status}" 1 \
--log "${log}" \
--writepid "${pid}" \
--explicit-exit-notify 3
else
$RUN_SUDO rm -f "${status}" "${log}" "${pid}"
$RUN_SUDO "${server_exec}" \
$server_conf \
--status "${status}" 1 \
--log "${log}" \
--writepid "${pid}" \
--explicit-exit-notify 3
fi
}
# Make server log files readable by normal users
umask 022
# Load base/default configuration
. "${srcdir}/t_server_null_default.rc" || exit 1
# Load local configuration, if any
test -r ./t_server_null.rc && . ./t_server_null.rc
# Launch test servers
for SUF in $TEST_SERVER_LIST
do
eval server_name=\"\$SERVER_NAME_$SUF\"
eval server_exec=\"\$SERVER_EXEC_$SUF\"
eval server_conf=\"\$SERVER_CONF_$SUF\"
(launch_server "${server_name}" "${server_exec}" "${server_conf}")
done
# Create a list of server pid files so that servers can be killed at the end of
# the test run.
#
export server_pid_files=""
for SUF in $TEST_SERVER_LIST
do
eval server_name=\"\$SERVER_NAME_$SUF\"
server_pid_files="${server_pid_files} ./${server_name}.pid"
done
# Wait until clients are no more, based on the presence of their pid files.
# Based on practical testing we have to wait at least four seconds to avoid
# accidentally exiting too early.
count=0
maxcount=4
while [ $count -le $maxcount ]; do
if ls t_server_null_client.sh*.pid > /dev/null 2>&1
then
count=0
sleep 1
else
count=$(( count + 1))
sleep 1
fi
done
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
SERVER_PID=$(cat "${PID_FILE}")
if [ -z "${RUN_SUDO}" ]; then
$KILL_EXEC "${SERVER_PID}"
else
$RUN_SUDO $KILL_EXEC "${SERVER_PID}"
fi
count=0
maxcount=75
while [ $count -le $maxcount ]
do
ps -p "${SERVER_PID}" > /dev/null || break
count=$(( count + 1))
sleep 0.2
done
if [ $count -ge $maxcount ]; then
echo "WARNING: could not kill server with pid ${SERVER_PID}!"
fi
done