Add a --memcheck option to ssl-opt.sh
diff --git a/tests/ssl-opt.sh b/tests/ssl-opt.sh
index 7af8b9b..3867eee 100755
--- a/tests/ssl-opt.sh
+++ b/tests/ssl-opt.sh
@@ -20,6 +20,34 @@
TESTS=0
FAILS=0
+MEMCHECK=0
+
+print_usage() {
+ echo "Usage: $0 [options]"
+ echo -e " -h, --help\tPrint this help."
+ echo -e " -m, --memcheck\tCheck memory leaks."
+}
+
+get_options() {
+ while [ $# -gt 0 ]; do
+ case "$1" in
+ -m|--memcheck)
+ MEMCHECK=1
+ ;;
+ -h|--help)
+ print_usage
+ exit 0
+ ;;
+ *)
+ echo "Unkown argument: '$1'"
+ print_usage
+ exit 1
+ ;;
+ esac
+ shift
+ done
+}
+
# print_name <name>
print_name() {
echo -n "$1 "
@@ -48,6 +76,17 @@
echo "$1" | grep 'ssl_server2\|ssl_client2' > /dev/null
}
+# has_mem_err <log_file_name>
+has_mem_err() {
+ if ( grep -F 'All heap blocks were freed -- no leaks are possible' "$1" &&
+ grep -F 'ERROR SUMMARY: 0 errors from 0 contexts' "$1" ) > /dev/null
+ then
+ return 1 # false: does not have errors
+ else
+ return 0 # true: has errors
+ fi
+}
+
# Usage: run_test name srv_cmd cli_cmd cli_exit [option [...]]
# Options: -s pattern pattern that must be present in server output
# -c pattern pattern that must be present in client output
@@ -62,6 +101,16 @@
print_name "$NAME"
+ # prepend valgrind to our commands if active
+ if [ "$MEMCHECK" -gt 0 ]; then
+ if is_polar "$SRV_CMD"; then
+ SRV_CMD="valgrind --leak-check=full $SRV_CMD"
+ fi
+ if is_polar "$CLI_CMD"; then
+ CLI_CMD="valgrind --leak-check=full $CLI_CMD"
+ fi
+ fi
+
# run the commands
$SHELL -c "$SRV_CMD" > srv_out 2>&1 &
SRV_PID=$!
@@ -110,7 +159,7 @@
return
fi
- # check options
+ # check other assertions
while [ $# -gt 0 ]
do
case $1 in
@@ -149,16 +198,31 @@
shift 2
done
+ # check valgrind's results
+ if [ "$MEMCHECK" -gt 0 ]; then
+ if is_polar "$SRV_CMD" && has_mem_err srv_out; then
+ fail "Server has memory errors"
+ return
+ fi
+ if is_polar "$CLI_CMD" && has_mem_err cli_out; then
+ fail "Client has memory errors"
+ return
+ fi
+ fi
+
# if we're here, everything is ok
echo "PASS"
rm -f srv_out cli_out
}
cleanup() {
+ rm -f cli_out srv_out sess
kill $SRV_PID
exit 1
}
+get_options "$@"
+
killall -q openssl ssl_server ssl_server2
trap cleanup INT TERM HUP
@@ -237,21 +301,7 @@
-S "a session has been resumed" \
-C "a session has been resumed"
-run_test "Session resume using tickets #4 (no timeout)" \
- "$P_SRV debug_level=4 tickets=1 cache_max=0 ticket_timeout=2" \
- "$P_CLI debug_level=4 tickets=1 reconnect=1 reco_delay=0" \
- 0 \
- -c "client hello, adding session ticket extension" \
- -s "found session ticket extension" \
- -s "server hello, adding session ticket extension" \
- -c "found session_ticket extension" \
- -c "parse new session ticket" \
- -S "session successfully restored from cache" \
- -s "session successfully restored from ticket" \
- -s "a session has been resumed" \
- -c "a session has been resumed"
-
-run_test "Session resume using tickets #5 (openssl server)" \
+run_test "Session resume using tickets #4 (openssl server)" \
"openssl s_server $O_ARGS" \
"$P_CLI debug_level=4 tickets=1 reconnect=1" \
0 \
@@ -260,7 +310,7 @@
-c "parse new session ticket" \
-c "a session has been resumed"
-run_test "Session resume using tickets #6 (openssl client)" \
+run_test "Session resume using tickets #5 (openssl client)" \
"$P_SRV debug_level=4 tickets=1" \
"($O_CLI -sess_out sess; $O_CLI -sess_in sess; rm -f sess)" \
0 \
@@ -319,7 +369,7 @@
-c "a session has been resumed"
run_test "Session resume using cache #5 (timemout > delay)" \
- "$P_SRV debug_level=4 tickets=0 cache_timeout=1" \
+ "$P_SRV debug_level=4 tickets=0" \
"$P_CLI debug_level=4 tickets=0 reconnect=1 reco_delay=0" \
0 \
-s "session successfully restored from cache" \
@@ -403,8 +453,8 @@
-S "found renegotiation extension" \
-s "server hello, secure renegotiation extension" \
-c "found renegotiation extension" \
- -C "renegotiate" \
- -S "renegotiate" \
+ -C "=> renegotiate" \
+ -S "=> renegotiate" \
-S "write hello request"
run_test "Renegotiation #1 (enabled, client-initiated)" \
@@ -416,8 +466,8 @@
-s "found renegotiation extension" \
-s "server hello, secure renegotiation extension" \
-c "found renegotiation extension" \
- -c "renegotiate" \
- -s "renegotiate" \
+ -c "=> renegotiate" \
+ -s "=> renegotiate" \
-S "write hello request"
run_test "Renegotiation #2 (enabled, server-initiated)" \
@@ -429,8 +479,8 @@
-s "found renegotiation extension" \
-s "server hello, secure renegotiation extension" \
-c "found renegotiation extension" \
- -c "renegotiate" \
- -s "renegotiate" \
+ -c "=> renegotiate" \
+ -s "=> renegotiate" \
-s "write hello request"
run_test "Renegotiation #3 (enabled, double)" \
@@ -442,8 +492,8 @@
-s "found renegotiation extension" \
-s "server hello, secure renegotiation extension" \
-c "found renegotiation extension" \
- -c "renegotiate" \
- -s "renegotiate" \
+ -c "=> renegotiate" \
+ -s "=> renegotiate" \
-s "write hello request"
run_test "Renegotiation #4 (client-initiated, server-rejected)" \
@@ -455,8 +505,8 @@
-S "found renegotiation extension" \
-s "server hello, secure renegotiation extension" \
-c "found renegotiation extension" \
- -c "renegotiate" \
- -S "renegotiate" \
+ -c "=> renegotiate" \
+ -S "=> renegotiate" \
-S "write hello request"
run_test "Renegotiation #5 (server-initiated, client-rejected)" \
@@ -468,8 +518,8 @@
-S "found renegotiation extension" \
-s "server hello, secure renegotiation extension" \
-c "found renegotiation extension" \
- -C "renegotiate" \
- -S "renegotiate" \
+ -C "=> renegotiate" \
+ -S "=> renegotiate" \
-s "write hello request" \
-s "SSL - An unexpected message was received from our peer" \
-s "failed"