#!/bin/bash # Author: Daniel Kahn Gillmor set -e tests="${1##t-}" BADVARS=0 for v in TEST_HOST TEST_IP TEST_PORT TEST_QUERY_DELAY TEST_GAP MSVA_PORT; do if [ ! -v "$v" ]; then printf "You need to set the %s environment variable\n" "$v" >&2 BADVARS=1 fi done if [ 0 != "$BADVARS" ]; then exit 1 fi if [ . != "$(dirname "$0")" ]; then printf "You should only run this mod-gnutls test suite from the t/ directory of the mod_gnutls source.\n" >&2 exit 1 fi function stop_msva() { kill %1 } function apache_down_err() { printf "FAILURE: %s\n" "$TEST_NAME" /usr/sbin/apache2 -f "$(pwd)/apache.conf" -k stop || true if [ -e output ]; then printf "\ngnutls-cli outputs:\n" diff -u output <( tail -n "$(wc -l < output)" "$output" ) || true fi printf "\nApache error logs:\n" tail "../../logs/${TEST_NAME}.error.log" stop_msva } if [ -z "$tests" ] ; then tests=./tests/* else tests=./tests/"$(printf "%02d" "$tests")"_* fi GNUPGHOME=$(pwd)/msva.gnupghome MSVA_KEYSERVER_POLICY=never monkeysphere-validation-agent & trap stop_msva EXIT sleep "$TEST_GAP" printf "TESTING: initial MSVA verification\n" MONKEYSPHERE_VALIDATION_AGENT_SOCKET="http://127.0.0.1:$MSVA_PORT" msva-query-agent https "$(cat client.uid)" x509pem client < client/x509.pem printf "\nSUCCESS: initial MSVA verification\n" for t in $tests; do sleep "$TEST_GAP" export TEST_NAME="$(basename "$t")" output="../../outputs/${TEST_NAME}.output" rm -f "$output" cd "$t" if [ -e fail.* ]; then EXPECTED_FAILURE="$(printf " (expected: %s)" fail.*)" else unset EXPECTED_FAILURE fi printf "TESTING: %s%s\n" "$TEST_NAME" "$EXPECTED_FAILURE" trap apache_down_err EXIT MONKEYSPHERE_VALIDATION_AGENT_SOCKET="http://127.0.0.1:$MSVA_PORT" /usr/sbin/apache2 -f "$(pwd)/apache.conf" -k start || [ -e fail.server ] if (sed "s/__HOSTNAME__/${TEST_HOST}/" < ./input && sleep "$TEST_QUERY_DELAY") | \ gnutls-cli -p "${TEST_PORT}" $(cat ./gnutls-cli.args) "${TEST_HOST}" > \ "$output" ; then if [ -e fail* ]; then printf "%s should have failed but succeeded\n" "$(basename "$t")" >&2 exit 1 fi else if [ ! -e fail* ]; then printf "%s should have succeeded but failed\n" "$(basename "$t")" >&2 exit 1 fi fi if [ -e output ] ; then diff -q -u output <( tail -n "$(wc -l < output)" "$output" ) fi /usr/sbin/apache2 -f "$(pwd)/apache.conf" -k stop || [ -e fail.server ] trap stop_msva EXIT printf "SUCCESS: %s\n" "$TEST_NAME" cd ../.. done stop_msva