X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=tests%2Fcommon.sh;h=ff457457c3dfee76eadead61a7a7d3b536e34a92;hb=e70b5abf4baa2a8780ed26d026a8aae1c241ebc4;hp=87781f2d0e165512a42537987dea03243eb1cdd3;hpb=1eb59c1f5d84e2318b54f56c895f3027d3be208a;p=tlsproxy%2Ftlsproxy.git diff --git a/tests/common.sh b/tests/common.sh index 87781f2..ff45745 100644 --- a/tests/common.sh +++ b/tests/common.sh @@ -16,36 +16,91 @@ # along with this program. If not, see . +set -e + + +# Terminate all running servers when the script terminates. +trap 'stop_servers' 0 +# Same when the user presses Ctrl-C. +trap 'abort SIGINT' INT + + cleanup() { rm -f \ + tmp tlsproxy-log \ certificate-localhost-proxy.pem certificate-localhost-server.pem \ proxy-ca-key.pem proxy-ca.pem proxy-invalid.pem proxy-key.pem } +stop_servers() { + if test -n "$pid_server"; then + kill $pid_server || echo 'failed to kill gnutls-serv' + fi + if test -n "$pid_tlsproxy"; then + kill $pid_tlsproxy || echo 'failed to kill tlsproxy' + fi +} abort() { - echo abort - pkill -n gnutls-serv - pkill -n tlsproxy + echo "abort: $*" + stop_servers exit 1 } +tlsproxy_setup() { + "$srcdir/../src/tlsproxy-setup" >/dev/null 2>&1 +} +tlsproxy_add() { + # `make distcheck` marks the source PEM-file as read-only which is copied + # over when using `cp`. This causes a check failure when tlsproxy_add() is + # called again with the same hostname. Instead use redirection which + # doesn't use `cp`. + "$srcdir/../src/tlsproxy-add" "$1" < "$srcdir/$2" >/dev/null 2>&1 +} +tlsproxy() { + ../src/tlsproxy -d2 "$@" >tlsproxy-log 2>&1 & + pid_tlsproxy=$! +} server() { gnutls-serv --http --port 4712 "$@" >/dev/null 2>&1 & + pid_server=$! } client() { ./client ./proxy-ca.pem "$@" > tmp 2>&1 } +wait_for_ports() { + while :; do + sleep 1 + + # Check if each given port can be reached. + ready=1 + for port in "$@"; do + printf 'invalid request\r\n\r\n' \ + | nc localhost "$port" >/dev/null 2>&1 \ + || ready= + done + + if test -n "$ready"; then + break + fi + + echo "waiting for ports $* ..." + done +} + test_proxy_failure() { - grep 'proxy failure' tmp >/dev/null || abort + grep 'proxy failure' tmp >/dev/null \ + || abort 'test_proxy_failure' grep 'response: HTTP/1.0 503 Forwarding failure' tmp >/dev/null \ - || abort + || abort 'test_proxy_failure 2' } test_proxy_successful() { grep 'response: HTTP/1.0 200 Connection established' tmp >/dev/null \ - || abort + || abort 'test_proxy_successful' } test_invalid_certificate() { - grep 'certificate invalid' tmp >/dev/null || abort + grep 'certificate invalid' tmp >/dev/null \ + || abort 'test_invalid_certificate' } test_no_invalid_certificate() { - grep 'certificate invalid' tmp >/dev/null && abort + grep 'certificate invalid' tmp >/dev/null \ + && abort 'test_no_invalid_certificate' || true }