From 3eec60402f83ff92cefd30b875eb85d77b579cb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= Date: Thu, 27 Feb 2014 15:37:24 +0100 Subject: [PATCH] Add memcheck support to compat.sh --- tests/compat.sh | 58 +++++++++++++++++++++++++++++++++++++++++++----- tests/ssl-opt.sh | 8 +++---- 2 files changed, 57 insertions(+), 9 deletions(-) diff --git a/tests/compat.sh b/tests/compat.sh index db24d7ca5..1107b717c 100755 --- a/tests/compat.sh +++ b/tests/compat.sh @@ -3,9 +3,12 @@ # Test interop with OpenSSL for each common ciphersuite and version. # Also test selfop for ciphersuites not shared with OpenSSL. +set -u + let "tests = 0" let "failed = 0" let "skipped = 0" +let "srvmem = 0" # default values, can be overriden by the environment : ${P_SRV:=../programs/ssl/ssl_server2} @@ -17,6 +20,7 @@ VERIFIES="NO YES" TYPES="ECDSA RSA PSK" FILTER="" VERBOSE="" +MEMCHECK=0 print_usage() { echo "Usage: $0" @@ -25,6 +29,7 @@ print_usage() { echo -e " -m|--modes\tWhich modes to perform (Default: \"ssl3 tls1 tls1_1 tls1_2\")" echo -e " -t|--types\tWhich key exchange type to perform (Default: \"ECDSA RSA PSK\")" echo -e " -V|--verify\tWhich verification modes to perform (Default: \"NO YES\")" + echo -e " -M, --memcheck\tCheck memory leaks and errors." echo -e " -v|--verbose\t\tSet verbose output." } @@ -46,6 +51,9 @@ get_options() { -v|--verbose) VERBOSE=1 ;; + -M|--memcheck) + MEMCHECK=1 + ;; -h|--help) print_usage exit 0 @@ -455,6 +463,22 @@ setup_arguments() esac } +# is_polar +is_polar() { + echo "$1" | grep 'ssl_server2\|ssl_client2' > /dev/null +} + +# has_mem_err +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 +} + # start_server # also saves name and command start_server() { @@ -464,6 +488,9 @@ start_server() { ;; [Pp]olar*) SERVER_CMD="$P_SRV $P_SERVER_ARGS" + if [ "$MEMCHECK" -gt 0 ]; then + SERVER_CMD="valgrind --leak-check=full $SERVER_CMD" + fi ;; *) echo "error: invalid server name: $1" >&2 @@ -494,6 +521,15 @@ stop_server() { esac wait $PROCESS_ID 2>/dev/null + + if [ "$MEMCHECK" -gt 0 ]; then + if is_polar "$SERVER_CMD" && has_mem_err srv_out; then + echo " ! Server had memory errors" + let "srvmem++" + return + fi + fi + rm -f srv_out } @@ -536,8 +572,11 @@ run_client() { [Pp]olar*) CLIENT_CMD="$P_CLI $P_CLIENT_ARGS force_ciphersuite=$2" + if [ "$MEMCHECK" -gt 0 ]; then + CLIENT_CMD="valgrind --leak-check=full $CLIENT_CMD" + fi log "$CLIENT_CMD" - $CLIENT_CMD > cli_out + $CLIENT_CMD > cli_out 2>&1 EXIT=$? case $EXIT in @@ -545,6 +584,13 @@ run_client() { "2") RESULT=1 ;; *) RESULT=2 ;; esac + + if [ "$MEMCHECK" -gt 0 ]; then + if is_polar "$CLIENT_CMD" && has_mem_err cli_out; then + RESULT=2 + fi + fi + ;; *) @@ -566,8 +612,9 @@ run_client() { echo FAIL echo " ! $SERVER_CMD" echo " ! $CLIENT_CMD" - echo -n " ! end of client output: " - tail -n5 cli_out + cp srv_out c-srv-${tests}.log + cp cli_out c-cli-${tests}.log + echo " ! outputs saved to c-srv-${tests}.log, c-cli-${tests}.log" let "failed++" ;; esac @@ -637,7 +684,7 @@ done echo "------------------------------------------------------------------------" -if (( failed != 0 )); +if (( failed != 0 && srvmem != 0 )); then echo -n "FAILED" else @@ -645,6 +692,7 @@ else fi let "passed = tests - failed" -echo " ($passed / $tests tests ($skipped skipped))" +echo " ($passed / $tests tests ($skipped skipped, $srvmem server memory errors)" +let "failed += srvmem" exit $failed diff --git a/tests/ssl-opt.sh b/tests/ssl-opt.sh index 72b740181..6950ec304 100755 --- a/tests/ssl-opt.sh +++ b/tests/ssl-opt.sh @@ -63,11 +63,11 @@ print_name() { # fail fail() { echo "FAIL" - echo " $1" + echo " ! $1" - cp srv_out srv-${TESTS}.log - cp cli_out cli-${TESTS}.log - echo " outputs saved to srv-${TESTS}.log and cli-${TESTS}.log" + cp srv_out o-srv-${TESTS}.log + cp cli_out o-cli-${TESTS}.log + echo " ! outputs saved to o-srv-${TESTS}.log and o-cli-${TESTS}.log" FAILS=`echo $FAILS + 1 | bc` }