Files
mgmt/test/test-gotest.sh
Joe Groocock 5af1dcb8b1 test: Add in_ci utility test function
in_ci checks for environment variables set by a selection of CI systems
and returns true if the test appears to be running in CI. Additionally
it can test for specific CI systems, and returns true if the CI system
is listed.

Deduplicate existing environment checks for Travis and Jenkins.

Signed-off-by: Joe Groocock <me@frebib.net>
2021-02-12 16:44:11 +00:00

86 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
echo running "$0" "$@"
#ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )" # dir!
ROOT=$(dirname "${BASH_SOURCE}")/..
cd "${ROOT}"
. test/util.sh
# travis is slow for some reason
if in_ci travis; then
export GO_TEST_TIMEOUT_SCALE=3
fi
# if we want to run this test as root, use build tag -root to ask each test...
XSUDO=''
XTAGS=()
if [[ "$@" = *"--root"* ]]; then
if ! timeout 1s sudo -A true; then
echo "sudo disabled: can't run as root"
exit 1
fi
XSUDO='sudo -E'
XTAGS+=('root')
fi
# As per https://github.com/travis-ci/docs-travis-ci-com/blob/master/user/docker.md
# Docker is not supported on Travis macOS test instances.
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
XTAGS+=('nodocker')
fi
failures=''
function run-test()
{
$XSUDO $@ -tags="${XTAGS[*]}" || failures=$( [ -n "$failures" ] && echo "$failures\\n$@" || echo "$@" )
}
# NOTE: you can run `go test` with the -tags flag to skip certain tests, eg:
# go test -tags nodocker github.com/purpleidea/mgmt/engine/resources -v
base=$(go list .)
if [[ "$@" = *"--integration"* ]]; then
if [[ "$@" = *"--race"* ]]; then
# adding -count=1 replaces the GOCACHE=off fix that was removed
run-test go test -count=1 -race "${base}/integration" -v
else
run-test go test -count=1 "${base}/integration" -v
fi
else
for pkg in `go list -e ./... | grep -v "^${base}/vendor/" | grep -v "^${base}/examples/" | grep -v "^${base}/test/" | grep -v "^${base}/old" | grep -v "^${base}/old/" | grep -v "^${base}/tmp" | grep -v "^${base}/tmp/" | grep -v "^${base}/integration"`; do
echo -e "\ttesting: $pkg"
if [[ "$@" = *"--race"* ]]; then
# split up long tests to avoid CI timeouts
if [ "$pkg" = "${base}/lang" ]; then # pkg lang is big!
for sub in `go test "${base}/lang" -list Test`; do
if [ "$sub" = "ok" ]; then break; fi # skip go test output artifact
echo -e "\t\tsub-testing: $sub"
run-test go test -count=1 -race "$pkg" -run "$sub"
done
else
run-test go test -count=1 -race "$pkg"
fi
else
# split up long tests to avoid CI timeouts
if [ "$pkg" = "${base}/lang" ]; then # pkg lang is big!
for sub in `go test "${base}/lang" -list Test`; do
if [ "$sub" = "ok" ]; then break; fi # skip go test output artifact
echo -e "\t\tsub-testing: $sub"
run-test go test -count=1 "$pkg" -run "$sub"
done
else
run-test go test -count=1 "$pkg"
fi
fi
done
fi
if [[ -n "$failures" ]]; then
echo 'FAIL'
echo 'The following `go test` runs have failed:'
echo -e "$failures"
echo
exit 1
fi
echo 'PASS'