Skip to content

Commit

Permalink
tests: tls test without sleep
Browse files Browse the repository at this point in the history
Synchronizing server and client command using a fifo instead of sleep.

Signed-off-by: Florian Wernli <[email protected]>
  • Loading branch information
fw0test0copilot authored and Florian Wernli committed Dec 5, 2023
1 parent c741dc1 commit db66a33
Showing 1 changed file with 43 additions and 46 deletions.
89 changes: 43 additions & 46 deletions tests/ttls
Original file line number Diff line number Diff line change
Expand Up @@ -4,60 +4,57 @@

source "${TESTSSRCDIR}/helpers.sh"

SLEEP=0.5
# with valgrind/asan, it might take a bit longer
if [ -n "$CHECKER" ]; then
SLEEP=10
fi

title PARA "Test SSL_CTX creation"
$CHECKER ./tlsctx

title PARA "Test an actual TLS connection"
rm -f "${TMPPDIR}/s_server_input"
rm -f "${TMPPDIR}/s_server_output"

# Set up command fifo
mkfifo "${TMPPDIR}/s_server_input"
exec 3<>"${TMPPDIR}/s_server_input"
rm -f "${TMPPDIR}/s_server_output"
rm -f "${TMPPDIR}/s_server_ready"
mkfifo "${TMPPDIR}/s_server_ready"

# Make sure we terminate programs if test fails in the middle
# shellcheck disable=SC2317 # Shellcheck for some reason does not follow trap
kill_children_print() {
kill_children
SERVER_PID=-1
wait_for_server_at_exit() {
wait "$1"
echo "Server output:"
cat "${TMPPDIR}/s_server_output"
}
trap kill_children_print EXIT
PORT=23456
$CHECKER openssl s_server -accept "${PORT}" -key "${PRIURI}" -cert "${CRTURI}" <&3 &

sleep $SLEEP

# The client will error when the server drops the connection
set +e
$CHECKER openssl s_client -connect "localhost:${PORT}" -quiet > "${TMPPDIR}/s_server_output" &
set -e

# Wait to make sure client is connected
sleep $SLEEP
trap 'wait_for_server_at_exit $SERVER_PID;' EXIT

# Send command to the client
echo " TLS SUCCESSFUL " >&3

# s_server seem to be confused if Q comes in too early
sleep $SLEEP

echo "Q" >&3

# Tear down command fifo
exec 3>&-
rm -f "${TMPPDIR}/s_server_input"

echo "Check message was successfully delivered over TLS"
grep " TLS SUCCESSFUL " "${TMPPDIR}/s_server_output"

title PARA "Kill any remaining children and wait for them"
kill_children
PORT=23456

exit 0
expect -c "spawn $CHECKER openssl s_server -accept \"${PORT}\" -naccept 1 -key \"${PRIURI}\" -cert \"${CRTURI}\";
set timeout 60;
expect {
\"ACCEPT\" {};
default {exit 1;};
}
set server_ready [open \"${TMPPDIR}/s_server_ready\" w+];
puts \$server_ready \"READY\n\";
close \$server_ready;
expect {
\"END SSL SESSION PARAMETERS\" {};
default {exit 1;};
}
send \" TLS SUCCESSFUL \n\"
send \"Q\n\"
expect {
eof {exit 0;};
default {exit 1;};
}" > "${TMPPDIR}/s_server_output" &
SERVER_PID=$!

read -r < "${TMPPDIR}/s_server_ready"

expect -c "spawn $CHECKER openssl s_client -connect \"localhost:${PORT}\";
set timeout 60;
expect {
\" TLS SUCCESSFUL \" {};
default {exit 1;};
}
expect {
eof {exit 0;};
default {exit 1;};
}"

exit 0;

0 comments on commit db66a33

Please sign in to comment.