#!/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