|
@@ -2,6 +2,7 @@
|
|
|
set -e
|
|
|
|
|
|
DEST=$1
|
|
|
+: ${PARALLEL_JOBS:=$(nproc)}
|
|
|
|
|
|
RED=$'\033[31m'
|
|
|
GREEN=$'\033[32m'
|
|
@@ -22,34 +23,62 @@ bundle_test_unit() {
|
|
|
TESTDIRS=$(find_dirs '*_test.go')
|
|
|
fi
|
|
|
|
|
|
- TESTS_FAILED=()
|
|
|
- for test_dir in $TESTDIRS; do
|
|
|
- echo
|
|
|
+ if command -v parallel &> /dev/null; then (
|
|
|
+ # accomodate parallel to be able to access variables
|
|
|
+ export SHELL="$BASH"
|
|
|
+ export HOME="$(mktemp -d)"
|
|
|
+ mkdir -p "$HOME/.parallel"
|
|
|
+ touch "$HOME/.parallel/ignored_vars"
|
|
|
+ export -f go_compile_test_dir
|
|
|
+ export LDFLAGS="$LDFLAGS $LDFLAGS_STATIC_DOCKER"
|
|
|
+ export TESTFLAGS
|
|
|
+ export HAVE_GO_TEST_COVER
|
|
|
+ export DEST
|
|
|
+ # some hack to export array variables
|
|
|
+ export BUILDFLAGS_FILE="$HOME/buildflags_file"
|
|
|
+ ( IFS=$'\n'; echo "${BUILDFLAGS[*]}" ) > "$BUILDFLAGS_FILE"
|
|
|
|
|
|
- if ! LDFLAGS="$LDFLAGS $LDFLAGS_STATIC_DOCKER" go_test_dir "$test_dir"; then
|
|
|
- TESTS_FAILED+=("$test_dir")
|
|
|
- echo
|
|
|
- echo "${RED}Tests failed: $test_dir${TEXTRESET}"
|
|
|
- sleep 1 # give it a second, so observers watching can take note
|
|
|
- fi
|
|
|
- done
|
|
|
+ echo "$TESTDIRS" | parallel --jobs "$PARALLEL_JOBS" --halt 2 --env _ go_compile_test_dir
|
|
|
+ rm -rf "$HOME"
|
|
|
+ ) else
|
|
|
+ # aww, no "parallel" available - fall back to boring
|
|
|
+ for test_dir in $TESTDIRS; do
|
|
|
+ go_compile_test_dir "$test_dir"
|
|
|
+ done
|
|
|
+ fi
|
|
|
+ echo "$TESTDIRS" | go_run_test_dir
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
+go_run_test_dir() {
|
|
|
+ TESTS_FAILED=()
|
|
|
+ while read dir; do
|
|
|
echo
|
|
|
- echo
|
|
|
- echo
|
|
|
-
|
|
|
- # 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 "${RED}Test failures in: ${TESTS_FAILED[@]}${TEXTRESET}"
|
|
|
+ echo '+ go test' $TESTFLAGS "github.com/dotcloud/docker${dir#.}"
|
|
|
+ precompiled="$DEST/precompiled/$dir.test"
|
|
|
+ if ! ( cd "$dir" && "$precompiled" ); then
|
|
|
+ TESTS_FAILED+=("$dir")
|
|
|
echo
|
|
|
- false
|
|
|
- else
|
|
|
- echo "${GREEN}Test success${TEXTRESET}"
|
|
|
- echo
|
|
|
- true
|
|
|
+ echo "${RED}Tests failed: $dir${TEXTRESET}"
|
|
|
+ sleep 1 # give it a second, so observers watching can take note
|
|
|
fi
|
|
|
- }
|
|
|
+ done
|
|
|
+
|
|
|
+ echo
|
|
|
+ echo
|
|
|
+ echo
|
|
|
+
|
|
|
+ # 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 "${RED}Test failures in: ${TESTS_FAILED[@]}${TEXTRESET}"
|
|
|
+ echo
|
|
|
+ false
|
|
|
+ else
|
|
|
+ echo "${GREEN}Test success${TEXTRESET}"
|
|
|
+ echo
|
|
|
+ true
|
|
|
+ fi
|
|
|
}
|
|
|
|
|
|
exec > >(tee -a $DEST/test.log) 2>&1
|