| #!/usr/bin/env bash |
| # |
| # Run unit tests and create report |
| # |
| # TESTFLAGS - add additional test flags. Ex: |
| # |
| # TESTFLAGS='-v -run TestBuild' hack/test/unit |
| # |
| # TESTDIRS - run tests for specified packages. Ex: |
| # |
| # TESTDIRS='./pkg/term' hack/test/unit |
| # |
| set -eux -o pipefail |
| |
| BUILDFLAGS=(-tags 'netgo libdm_no_deferred_remove journald') |
| TESTFLAGS+=" -test.timeout=${TIMEOUT:-5m}" |
| TESTDIRS="${TESTDIRS:-./...}" |
| exclude_paths='/vendor/|/integration' |
| pkg_list=$(go list $TESTDIRS | grep -vE "($exclude_paths)") |
| |
| base_pkg_list=$(echo "${pkg_list}" | grep --fixed-strings -v "/libnetwork" || :) |
| libnetwork_pkg_list=$(echo "${pkg_list}" | grep --fixed-strings "/libnetwork" || :) |
| |
| echo "${libnetwork_pkg_list}" | grep --fixed-strings "libnetwork/drivers/bridge" \ |
| && if ! type docker-proxy; then |
| hack/make.sh binary-proxy install-proxy |
| fi |
| |
| mkdir -p bundles |
| |
| if [ -n "${base_pkg_list}" ]; then |
| gotestsum --format=standard-quiet --jsonfile=bundles/go-test-report.json --junitfile=bundles/junit-report.xml -- \ |
| "${BUILDFLAGS[@]}" \ |
| -cover \ |
| -coverprofile=bundles/coverage.out \ |
| -covermode=atomic \ |
| ${TESTFLAGS} \ |
| ${base_pkg_list} |
| fi |
| if [ -n "${libnetwork_pkg_list}" ]; then |
| # libnetwork tests invoke iptables, and cannot be run in parallel. Execute |
| # tests within /libnetwork with '-p=1' to run them sequentially. See |
| # https://github.com/moby/moby/issues/42458#issuecomment-873216754 for details. |
| gotestsum --format=standard-quiet --jsonfile=bundles/go-test-report-libnetwork.json --junitfile=bundles/junit-report-libnetwork.xml -- \ |
| "${BUILDFLAGS[@]}" \ |
| -cover \ |
| -coverprofile=bundles/coverage-libnetwork.out \ |
| -covermode=atomic \ |
| -p=1 \ |
| ${TESTFLAGS} \ |
| ${libnetwork_pkg_list} |
| fi |