| #!/bin/bash |
| |
| DEST=$1 |
| INIT=$DEST/../dynbinary/dockerinit-$VERSION |
| |
| set -e |
| |
| if [ ! -x "$INIT" ]; then |
| echo >&2 'error: dynbinary must be run before dyntest' |
| false |
| fi |
| |
| # Run Docker's test suite, including sub-packages, and store their output as a bundle |
| # If $TESTFLAGS is set in the environment, it is passed as extra arguments to 'go test'. |
| # You can use this to select certain tests to run, eg. |
| # |
| # TESTFLAGS='-run ^TestBuild$' ./hack/make.sh test |
| # |
| bundle_test() { |
| { |
| date |
| |
| TESTS_FAILED=() |
| for test_dir in $(find_test_dirs); do |
| echo |
| |
| if ! ( |
| set -x |
| cd $test_dir |
| |
| # Install packages that are dependencies of the tests. |
| # Note: Does not run the tests. |
| go test -i -ldflags "$LDFLAGS" $BUILDFLAGS |
| |
| # Run the tests with the optional $TESTFLAGS. |
| export TEST_DOCKERINIT_PATH=$DEST/../dynbinary/dockerinit-$VERSION |
| go test -ldflags "$LDFLAGS -X github.com/dotcloud/docker/utils.INITSHA1 \"$DOCKER_INITSHA1\"" $BUILDFLAGS $TESTFLAGS |
| ); then |
| TESTS_FAILED+=("$test_dir") |
| sleep 1 # give it a second, so observers watching can take note |
| fi |
| done |
| |
| # if some tests fail, we want the bundlescript to fail, but we want to |
| # try running ALL the tests first, hence TESTS_FAILED |
| if [ "${#TESTS_FAILED[@]}" -gt 0 ]; then |
| echo |
| echo "Test failures in: ${TESTS_FAILED[@]}" |
| false |
| fi |
| } 2>&1 | tee $DEST/test.log |
| } |
| |
| |
| # This helper function walks the current directory looking for directories |
| # holding Go test files, and prints their paths on standard output, one per |
| # line. |
| find_test_dirs() { |
| find . -name '*_test.go' | grep -v '^./vendor' | |
| { while read f; do dirname $f; done; } | |
| sort -u |
| } |
| |
| bundle_test |