#!/bin/bash # -*- indent-tabs-mode: t; tab-width: 4; -*- # # Runner for test suites # # operate from the runner's directory cd "$(dirname $0)" # load global functions and variables . suites/_init.sh runner_suites=( ldap-connection ldap-access mail-basic mail-from mail-aliases mail-access management-users ) usage() { echo "" echo "Usage: $(basename $0) [-failfatal] [suite-name ...]" echo "Valid suite names:" for runner_suite in ${runner_suites[@]}; do echo " $runner_suite" done echo "If no suite-name(s) given, all suites are run" echo "" echo "Options:" echo " -failfatal The runner will stop if any test fails" echo " -dumpoutput After all tests have run, dump all failed test output" echo " -no-smtp-remote Skip tests requiring a remote SMTP server" echo "" echo "Output directory: $(dirname $0)/${base_outputdir}" echo "" exit 1 } # process command line while [ $# -gt 0 ]; do case "$1" in -failfatal ) # failure is fatal (via global option, see _init.sh) FAILURE_IS_FATAL=yes ;; -dumpoutput ) DUMP_FAILED_TESTS_OUTPUT="yes" ;; -no-smtp-remote ) SKIP_REMOTE_SMTP_TESTS="yes" ;; -* ) echo "Invalid argument $1" 1>&2 usage ;; * ) # run named suite if array_contains "$1" ${runner_suites[@]}; then . "suites/$1.sh" else echo "Unknown suite '$1'" 1>&2 usage fi ;; esac shift done # if no suites specified on command line, run all suites if [ $OVERALL_COUNT_SUITES -eq 0 ]; then rm -rf "${base_outputdir}" for runner_suite in ${runner_suites[@]}; do . suites/$runner_suite.sh done fi echo "" echo "Done" echo "$OVERALL_COUNT tests ($OVERALL_SUCCESSES success/$OVERALL_FAILURES failures/$OVERALL_SKIPPED skipped) in $OVERALL_COUNT_SUITES test suites" if [ $OVERALL_FAILURES -gt 0 ]; then dump_failed_tests_output exit 1 else exit 0 fi