mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-04-24 15:02:55 +00:00
Adapt ssl-opt.sh to allow using udp_proxy in tests
This commit is contained in:
parent
cb4137b646
commit
be9eb877f7
107
tests/ssl-opt.sh
107
tests/ssl-opt.sh
@ -13,6 +13,7 @@ set -u
|
|||||||
# default values, can be overriden by the environment
|
# default values, can be overriden by the environment
|
||||||
: ${P_SRV:=../programs/ssl/ssl_server2}
|
: ${P_SRV:=../programs/ssl/ssl_server2}
|
||||||
: ${P_CLI:=../programs/ssl/ssl_client2}
|
: ${P_CLI:=../programs/ssl/ssl_client2}
|
||||||
|
: ${P_PXY:=../programs/test/udp_proxy}
|
||||||
: ${OPENSSL_CMD:=openssl} # OPENSSL would conflict with the build system
|
: ${OPENSSL_CMD:=openssl} # OPENSSL would conflict with the build system
|
||||||
: ${GNUTLS_CLI:=gnutls-cli}
|
: ${GNUTLS_CLI:=gnutls-cli}
|
||||||
: ${GNUTLS_SERV:=gnutls-serv}
|
: ${GNUTLS_SERV:=gnutls-serv}
|
||||||
@ -132,14 +133,23 @@ fail() {
|
|||||||
|
|
||||||
mv $SRV_OUT o-srv-${TESTS}.log
|
mv $SRV_OUT o-srv-${TESTS}.log
|
||||||
mv $CLI_OUT o-cli-${TESTS}.log
|
mv $CLI_OUT o-cli-${TESTS}.log
|
||||||
echo " ! outputs saved to o-srv-${TESTS}.log and o-cli-${TESTS}.log"
|
if [ -n "$PXY_CMD" ]; then
|
||||||
|
mv $PXY_OUT o-pxy-${TESTS}.log
|
||||||
|
fi
|
||||||
|
echo " ! outputs saved to o-XXX-${TESTS}.log"
|
||||||
|
|
||||||
if [ "X${USER:-}" = Xbuildbot -o "X${LOGNAME:-}" = Xbuildbot ]; then
|
if [ "X${USER:-}" = Xbuildbot -o "X${LOGNAME:-}" = Xbuildbot ]; then
|
||||||
echo " ! server output:"
|
echo " ! server output:"
|
||||||
cat o-srv-${TESTS}.log
|
cat o-srv-${TESTS}.log
|
||||||
echo " ! ============================================================"
|
echo " ! ========================================================"
|
||||||
echo " ! client output:"
|
echo " ! client output:"
|
||||||
cat o-cli-${TESTS}.log
|
cat o-cli-${TESTS}.log
|
||||||
|
if [ -n "$PXY_CMD" ]; then
|
||||||
|
echo " ! ========================================================"
|
||||||
|
echo " ! proxy output:"
|
||||||
|
cat o-pxy-${TESTS}.log
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
FAILS=$(( $FAILS + 1 ))
|
FAILS=$(( $FAILS + 1 ))
|
||||||
@ -170,9 +180,9 @@ wait_server_start() {
|
|||||||
|
|
||||||
# make a tight loop, server usually takes less than 1 sec to start
|
# make a tight loop, server usually takes less than 1 sec to start
|
||||||
if [ "$DTLS" -eq 1 ]; then
|
if [ "$DTLS" -eq 1 ]; then
|
||||||
until lsof -nbi UDP:"$PORT" | grep UDP >/dev/null; do :; done
|
until lsof -nbi UDP:"$SRV_PORT" | grep UDP >/dev/null; do :; done
|
||||||
else
|
else
|
||||||
until lsof -nbi TCP:"$PORT" | grep LISTEN >/dev/null; do :; done
|
until lsof -nbi TCP:"$SRV_PORT" | grep LISTEN >/dev/null; do :; done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
kill $WATCHDOG_PID
|
kill $WATCHDOG_PID
|
||||||
@ -201,24 +211,21 @@ wait_client_done() {
|
|||||||
|
|
||||||
# check if the given command uses dtls and sets global variable DTLS
|
# check if the given command uses dtls and sets global variable DTLS
|
||||||
detect_dtls() {
|
detect_dtls() {
|
||||||
if echo "$1" | grep ' dtls=1 \| -dtls1\| -u ' >/dev/null; then
|
if echo "$1" | grep 'dtls=1\|-dtls1\|-u' >/dev/null; then
|
||||||
DTLS=1
|
DTLS=1
|
||||||
else
|
else
|
||||||
DTLS=0
|
DTLS=0
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Usage: run_test name srv_cmd cli_cmd cli_exit [option [...]]
|
# Usage: run_test name [-p proxy_cmd] srv_cmd cli_cmd cli_exit [option [...]]
|
||||||
# Options: -s pattern pattern that must be present in server output
|
# Options: -s pattern pattern that must be present in server output
|
||||||
# -c pattern pattern that must be present in client output
|
# -c pattern pattern that must be present in client output
|
||||||
# -S pattern pattern that must be absent in server output
|
# -S pattern pattern that must be absent in server output
|
||||||
# -C pattern pattern that must be absent in client output
|
# -C pattern pattern that must be absent in client output
|
||||||
run_test() {
|
run_test() {
|
||||||
NAME="$1"
|
NAME="$1"
|
||||||
SRV_CMD="$2"
|
shift 1
|
||||||
CLI_CMD="$3"
|
|
||||||
CLI_EXPECT="$4"
|
|
||||||
shift 4
|
|
||||||
|
|
||||||
if echo "$NAME" | grep "$FILTER" | grep -v "$EXCLUDE" >/dev/null; then :
|
if echo "$NAME" | grep "$FILTER" | grep -v "$EXCLUDE" >/dev/null; then :
|
||||||
else
|
else
|
||||||
@ -235,6 +242,27 @@ run_test() {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# does this test use a proxy?
|
||||||
|
if [ "X$1" = "X-p" ]; then
|
||||||
|
PXY_CMD="$2"
|
||||||
|
shift 2
|
||||||
|
else
|
||||||
|
PXY_CMD=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# get commands and client output
|
||||||
|
SRV_CMD="$1"
|
||||||
|
CLI_CMD="$2"
|
||||||
|
CLI_EXPECT="$3"
|
||||||
|
shift 3
|
||||||
|
|
||||||
|
# fix client port
|
||||||
|
if [ -n "$PXY_CMD" ]; then
|
||||||
|
CLI_CMD=$( echo "$CLI_CMD" | sed s/+SRV_PORT/$PXY_PORT/g )
|
||||||
|
else
|
||||||
|
CLI_CMD=$( echo "$CLI_CMD" | sed s/+SRV_PORT/$SRV_PORT/g )
|
||||||
|
fi
|
||||||
|
|
||||||
# update DTLS variable
|
# update DTLS variable
|
||||||
detect_dtls "$SRV_CMD"
|
detect_dtls "$SRV_CMD"
|
||||||
|
|
||||||
@ -249,8 +277,15 @@ run_test() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# run the commands
|
# run the commands
|
||||||
|
if [ -n "$PXY_CMD" ]; then
|
||||||
|
echo "$PXY_CMD" > $PXY_OUT
|
||||||
|
eval "$PXY_CMD" >> $PXY_OUT 2>&1 &
|
||||||
|
PXY_PID=$!
|
||||||
|
# assume proxy starts faster than server
|
||||||
|
fi
|
||||||
|
|
||||||
echo "$SRV_CMD" > $SRV_OUT
|
echo "$SRV_CMD" > $SRV_OUT
|
||||||
# for servers without -www, eg openssl with DTLS
|
# "yes" is for servers without -www (openssl with DTLS)
|
||||||
yes blabla | $SRV_CMD >> $SRV_OUT 2>&1 &
|
yes blabla | $SRV_CMD >> $SRV_OUT 2>&1 &
|
||||||
SRV_PID=$!
|
SRV_PID=$!
|
||||||
wait_server_start
|
wait_server_start
|
||||||
@ -259,9 +294,13 @@ run_test() {
|
|||||||
eval "$CLI_CMD" >> $CLI_OUT 2>&1 &
|
eval "$CLI_CMD" >> $CLI_OUT 2>&1 &
|
||||||
wait_client_done
|
wait_client_done
|
||||||
|
|
||||||
# kill the server
|
# terminate the server (and the proxy)
|
||||||
kill $SRV_PID
|
kill $SRV_PID
|
||||||
wait $SRV_PID
|
wait $SRV_PID
|
||||||
|
if [ -n "$PXY_CMD" ]; then
|
||||||
|
kill $PXY_PID
|
||||||
|
wait $PXY_PID
|
||||||
|
fi
|
||||||
|
|
||||||
# check if the client and server went at least to the handshake stage
|
# check if the client and server went at least to the handshake stage
|
||||||
# (useful to avoid tests with only negative assertions and non-zero
|
# (useful to avoid tests with only negative assertions and non-zero
|
||||||
@ -292,7 +331,7 @@ run_test() {
|
|||||||
if [ \( "$CLI_EXPECT" = 0 -a "$CLI_EXIT" != 0 \) -o \
|
if [ \( "$CLI_EXPECT" = 0 -a "$CLI_EXIT" != 0 \) -o \
|
||||||
\( "$CLI_EXPECT" != 0 -a "$CLI_EXIT" = 0 \) ]
|
\( "$CLI_EXPECT" != 0 -a "$CLI_EXIT" = 0 \) ]
|
||||||
then
|
then
|
||||||
fail "bad client exit code"
|
fail "bad client exit code (expected $CLI_EXPECT, got $CLI_EXIT)"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -350,13 +389,16 @@ run_test() {
|
|||||||
|
|
||||||
# if we're here, everything is ok
|
# if we're here, everything is ok
|
||||||
echo "PASS"
|
echo "PASS"
|
||||||
rm -f $SRV_OUT $CLI_OUT
|
rm -f $SRV_OUT $CLI_OUT $PXY_OUT
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
rm -f $CLI_OUT $SRV_OUT $SESSION
|
rm -f $CLI_OUT $SRV_OUT $PXY_OUT $SESSION
|
||||||
kill $SRV_PID >/dev/null 2>&1
|
kill $SRV_PID >/dev/null 2>&1
|
||||||
kill $WATCHDOG_PID >/dev/null 2>&1
|
kill $WATCHDOG_PID >/dev/null 2>&1
|
||||||
|
if [ -n "$PXY_CMD" ]; then
|
||||||
|
kill $PXY_PID >/dev/null 2>&1
|
||||||
|
fi
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -375,6 +417,10 @@ if [ ! -x "$P_CLI" ]; then
|
|||||||
echo "Command '$P_CLI' is not an executable file"
|
echo "Command '$P_CLI' is not an executable file"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
if [ ! -x "$P_PXY" ]; then
|
||||||
|
echo "Command '$P_PXY' is not an executable file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
if which $OPENSSL_CMD >/dev/null 2>&1; then :; else
|
if which $OPENSSL_CMD >/dev/null 2>&1; then :; else
|
||||||
echo "Command '$OPENSSL_CMD' not found"
|
echo "Command '$OPENSSL_CMD' not found"
|
||||||
exit 1
|
exit 1
|
||||||
@ -392,21 +438,26 @@ else
|
|||||||
DOG_DELAY=10
|
DOG_DELAY=10
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Pick a "unique" port in the range 10000-19999.
|
# Pick a "unique" server port in the range 10000-19999, and a proxy port
|
||||||
PORT="0000$$"
|
PORT_BASE="0000$$"
|
||||||
PORT="1$(echo $PORT | tail -c 5)"
|
PORT_BASE="$( echo -n $PORT_BASE | tail -c 4 )"
|
||||||
|
SRV_PORT="1$PORT_BASE"
|
||||||
|
PXY_PORT="2$PORT_BASE"
|
||||||
|
unset PORT_BASE
|
||||||
|
|
||||||
# fix commands to use this port, force IPv4 while at it
|
# fix commands to use this port, force IPv4 while at it
|
||||||
P_SRV="$P_SRV server_addr=127.0.0.1 server_port=$PORT"
|
P_SRV="$P_SRV server_addr=127.0.0.1 server_port=$SRV_PORT"
|
||||||
P_CLI="$P_CLI server_addr=127.0.0.1 server_port=$PORT"
|
P_CLI="$P_CLI server_addr=127.0.0.1 server_port=+SRV_PORT"
|
||||||
O_SRV="$O_SRV -accept $PORT"
|
P_PXY="$P_PXY server_addr=127.0.0.1 server_port=$SRV_PORT listen_addr=127.0.0.1 listen_port=$PXY_PORT"
|
||||||
O_CLI="$O_CLI -connect localhost:$PORT"
|
O_SRV="$O_SRV -accept $SRV_PORT"
|
||||||
G_SRV="$G_SRV -p $PORT"
|
O_CLI="$O_CLI -connect localhost:+SRV_PORT"
|
||||||
G_CLI="$G_CLI -p $PORT"
|
G_SRV="$G_SRV -p $SRV_PORT"
|
||||||
|
G_CLI="$G_CLI -p +SRV_PORT"
|
||||||
|
|
||||||
# Also pick a unique name for intermediate files
|
# Also pick a unique name for intermediate files
|
||||||
SRV_OUT="srv_out.$$"
|
SRV_OUT="srv_out.$$"
|
||||||
CLI_OUT="cli_out.$$"
|
CLI_OUT="cli_out.$$"
|
||||||
|
PXY_OUT="pxy_out.$$"
|
||||||
SESSION="session.$$"
|
SESSION="session.$$"
|
||||||
|
|
||||||
SKIP_NEXT="NO"
|
SKIP_NEXT="NO"
|
||||||
@ -2046,6 +2097,14 @@ run_test "DTLS reassembly: fragmentation, nbio (openssl server)" \
|
|||||||
-c "found fragmented DTLS handshake message" \
|
-c "found fragmented DTLS handshake message" \
|
||||||
-C "error"
|
-C "error"
|
||||||
|
|
||||||
|
# Temporary test for ability to use the UDP proxy
|
||||||
|
|
||||||
|
run_test "DTLS proxy usability test" \
|
||||||
|
-p "$P_PXY" \
|
||||||
|
"$P_SRV dtls=1" \
|
||||||
|
"$P_CLI dtls=1" \
|
||||||
|
0
|
||||||
|
|
||||||
# Final report
|
# Final report
|
||||||
|
|
||||||
echo "------------------------------------------------------------------------"
|
echo "------------------------------------------------------------------------"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user