#!/bin/bash set -e if [[ $# -lt 1 || $# -gt 2 ]] ; then echo "Usage: $0 [1]" 1>&2 exit 1 fi # Obtain the absolute path to the tests directory pushd "$(dirname "$0")" &> /dev/null readonly T=$(pwd) popd &> /dev/null export T # Same for the nginx prefix directory pushd "$1" &> /dev/null readonly prefix=$(pwd) popd &> /dev/null dynamic=false if [[ $# -gt 1 && $2 -eq 1 ]] ; then dynamic=true fi readonly dynamic declare -a t_pass=( ) declare -a t_fail=( ) declare -a t_skip=( ) for t in `ls "$T"/*.test | sort -R` ; do name="t/${t##*/}" name=${name%.test} printf "${name} ... " errfile="${name}.err" outfile="${name}.out" shfile="${name}.sh" cat > "${shfile}" <<-EOF readonly DYNAMIC=${dynamic} readonly TESTDIR='$T' readonly PREFIX='${prefix}' $(< "$T/preamble") $(< "$t") EOF if bash -e "${shfile}" > "${outfile}" 2> "${errfile}" ; then t_pass+=( "${name}" ) printf 'passed\n' elif [[ $? -eq 111 ]] ; then t_skip+=( "${name}" ) printf 'skipped\n' else t_fail+=( "${name}" ) printf 'failed\n' fi done for name in "${t_fail[@]}" ; do echo printf '=== %s.out\n' "${name}" cat "${name}.out" echo printf '=== %s.err\n' "${name}" cat "${name}.err" echo done if [[ ${#t_skip[@]} -gt 0 ]] ; then echo printf 'Skipped tests:\n' for name in "${t_skip[@]}" ; do reason=$(grep '^(\-\-) ' "${name}.err" | head -1) if [[ -z ${reason} ]] ; then reason='No reason given' else reason=${reason:5} fi printf ' - %s: %s\n' "${name}" "${reason:-No reason given}" done echo fi printf '=== passed/skipped/failed/total: %d/%d/%d/%d\n' \ ${#t_pass[@]} ${#t_skip[@]} ${#t_fail[@]} $(( ${#t_pass[@]} + ${#t_fail[@]} )) if [[ ${#t_fail[@]} -gt 0 ]] ; then exit 1 fi