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() {
- pkill -n gnutls-serv
- pkill -n tlsproxy
+ 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
+ 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() {
+ #valgrind --leak-check=full --error-exitcode=1 --track-fds=yes \
+ ../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() {
+ for x in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; 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_authentication_failure() {
+ grep 'proxy failure' tmp >/dev/null \
+ || abort 'test_proxy_authentication_failure'
+ grep 'response: HTTP/1.0 407 Proxy Authentication Required' tmp >/dev/null \
+ || abort 'test_proxy_authentication_failure 2'
+}
+test_authentication_missing() {
+ grep 'response: HTTP/1.0 407 Proxy Authentication Required' tmp >/dev/null \
+ || abort 'test_authentication_missing'
}
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 || true
+ grep 'certificate invalid' tmp >/dev/null \
+ && abort 'test_no_invalid_certificate' || true
}