#!/usr/bin/env bash # From https://unix.stackexchange.com/a/432145 # Return the maximum of one or more integer arguments max() { local max number max="$1" for number in "${@:2}"; do if ((number > max)); then max="$number" fi done printf '%d\n' "$max" } echo '----- ulimits -----' ulimit -a echo '-------------------' echo # Don't use errexit, so coverage report is still generated when tests fail set -o pipefail NOCOVERAGE="${NOCOVERAGE:-}" NOCOVERAGE_ERASE="${NOCOVERAGE_ERASE:-$NOCOVERAGE}" NOCOVERAGE_REPORT="${NOCOVERAGE_REPORT:-$NOCOVERAGE}" if [ ! "$NOCOVERAGE_ERASE" ]; then coverage erase fi # First run overwites coverage output. [ "$SKIP_MITOGEN" ] || { if [ ! "$NOCOVERAGE" ]; then coverage run -a -m unittest discover \ --start-directory "tests" \ --pattern '*_test.py' \ "$@" else python -m unittest discover \ --start-directory "tests" \ --pattern '*_test.py' \ "$@" fi MITOGEN_TEST_STATUS=$? } # Second run appends. This is since 'discover' treats subdirs as packages and # the 'ansible' subdir shadows the real Ansible package when it contains # __init__.py, so hack around it by just running again with 'ansible' as the # start directory. Alternative seems to be renaming tests/ansible/ and making a # mess of Git history. [ "$SKIP_ANSIBLE" ] || { export PYTHONPATH=`pwd`/tests:$PYTHONPATH if [ ! "$NOCOVERAGE" ]; then coverage run -a -m unittest discover \ --start-directory "tests/ansible" \ --pattern '*_test.py' \ "$@" else python -m unittest discover \ --start-directory "tests/ansible" \ --pattern '*_test.py' \ "$@" fi ANSIBLE_TEST_STATUS=$? } if [ ! "$NOCOVERAGE_REPORT" ]; then coverage html echo "coverage report is at file://$(pwd)/htmlcov/index.html" fi # Exit with a non-zero status if any test run did so exit "$(max $MITOGEN_TEST_STATUS $ANSIBLE_TEST_STATUS)"