#!/usr/bin/env bash
set -e

# 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, e.g.
#
#   TESTFLAGS='-test.run ^TestBuild$' ./hack/make.sh test-unit
#
bundle_test_unit() {
	TESTFLAGS+=" -test.timeout=${TIMEOUT}"
	INCBUILD="-i"
	count=0
	for flag in "${BUILDFLAGS[@]}"; do
		if [ "${flag}" == ${INCBUILD} ]; then
			unset BUILDFLAGS[${count}]
			break
		fi
		count=$[ ${count} + 1 ]
	done

	date
	if [ -z "$TESTDIRS" ]; then
		TEST_PATH=./...
	else
		TEST_PATH=./${TESTDIRS}
	fi

	if [ "$(go env GOHOSTOS)" = 'solaris' ]; then
		pkg_list=$(go list -e \
			-f '{{if ne .Name "github.com/docker/docker"}}
				{{.ImportPath}}
			    {{end}}' \
			"${BUILDFLAGS[@]}" $TEST_PATH \
			| grep github.com/docker/docker \
			| grep -v github.com/docker/docker/vendor \
			| grep -v github.com/docker/docker/daemon/graphdriver \
			| grep -v github.com/docker/docker/man \
			| grep -v github.com/docker/docker/integration-cli)
	else
		pkg_list=$(go list -e \
			-f '{{if ne .Name "github.com/docker/docker"}}
				{{.ImportPath}}
			    {{end}}' \
			"${BUILDFLAGS[@]}" $TEST_PATH \
			| grep github.com/docker/docker \
			| grep -v github.com/docker/docker/vendor \
			| grep -v github.com/docker/docker/man \
			| grep -v github.com/docker/docker/integration-cli)
	fi

	go test -cover -ldflags "$LDFLAGS" "${BUILDFLAGS[@]}" $TESTFLAGS $pkg_list
}

bundle_test_unit 2>&1 | tee -a "$DEST/test.log"