diff --git a/.travis.yml b/.travis.yml index b1c42b58fc07d..23971f603b0d7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ go: install: - if ! go get code.google.com/p/go.tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; fi + - go get github.com/mattn/goveralls - ./hack/travis/install-etcd.sh - ./hack/verify-gofmt.sh - ./hack/verify-boilerplate.sh @@ -14,7 +15,7 @@ install: - ./hack/build-go.sh script: - - KUBE_RACE="-race" KUBE_COVER="-cover -covermode=atomic" KUBE_TIMEOUT='-timeout 60s' ./hack/test-go.sh "" -p=4 + - KUBE_RACE="-race" KUBE_COVER="y" KUBE_GOVERALLS_BIN="$HOME/gopath/bin/goveralls" KUBE_TIMEOUT='-timeout 60s' KUBE_COVERPROCS=8 ./hack/test-go.sh -- -p=2 - PATH=$HOME/gopath/bin:./third_party/etcd:$PATH ./hack/test-cmd.sh - PATH=$HOME/gopath/bin:./third_party/etcd:$PATH ./hack/verify-gendocs.sh - PATH=$HOME/gopath/bin:./third_party/etcd:$PATH ./hack/test-integration.sh diff --git a/hack/benchmark-go.sh b/hack/benchmark-go.sh index 3753f6b6bc5ce..50a7e729bb197 100755 --- a/hack/benchmark-go.sh +++ b/hack/benchmark-go.sh @@ -20,4 +20,4 @@ set -o pipefail KUBE_ROOT=$(dirname "${BASH_SOURCE}")/.. -KUBE_COVER=" " KUBE_RACE=" " "${KUBE_ROOT}/hack/test-go.sh" "" -test.run="^X" -benchtime=1s -bench=. -benchmem +KUBE_COVER="" KUBE_RACE=" " "${KUBE_ROOT}/hack/test-go.sh" -- -test.run="^X" -benchtime=1s -bench=. -benchmem diff --git a/hack/test-go.sh b/hack/test-go.sh index de5c569371463..68c44d9dd6647 100755 --- a/hack/test-go.sh +++ b/hack/test-go.sh @@ -34,20 +34,22 @@ kube::test::find_dirs() { -o -wholename './target' \ -o -wholename '*/third_party/*' \ -o -wholename '*/Godeps/*' \ - -o -wholename '*/contrib/podex/*' \ + -o -wholename '*/contrib/podex/*' \ \) -prune \ \) -name '*_test.go' -print0 | xargs -0n1 dirname | sed 's|^\./||' | sort -u ) } -kube::test::find_pkgs() { - kube::test::find_dirs | xargs -n1 printf "${KUBE_GO_PACKAGE}/%s\n" -} - # -covermode=atomic becomes default with -race in Go >=1.3 KUBE_TIMEOUT=${KUBE_TIMEOUT:--timeout 120s} -KUBE_COVER=${KUBE_COVER:-} # use KUBE_COVER="-cover -covermode=atomic" for full coverage +KUBE_COVER=${KUBE_COVER:-n} # set to 'y' to enable coverage collection +KUBE_COVERMODE=${KUBE_COVERMODE:-atomic} +# How many 'go test' instances to run simultaneously when running tests in +# coverage mode. +KUBE_COVERPROCS=${KUBE_COVERPROCS:-4} KUBE_RACE=${KUBE_RACE:-} # use KUBE_RACE="-race" to enable race testing +# Set to the goveralls binary path to report coverage results to Coveralls.io. +KUBE_GOVERALLS_BIN=${KUBE_GOVERALLS_BIN:-} kube::test::usage() { kube::log::usage_from_stdin <"${combined_cover_profile}" + +coverage_html_file="${cover_report_dir}/combined-coverage.html" +go tool cover -html="${combined_cover_profile}" -o="${coverage_html_file}" +kube::log::status "Combined coverage report: ${coverage_html_file}" + +if [[ -x "${KUBE_GOVERALLS_BIN}" ]]; then + ${KUBE_GOVERALLS_BIN} -coverprofile="${combined_cover_profile}" || true fi - -kube::test::find_pkgs | xargs go test "${goflags[@]:+${goflags[@]}}" \ - ${KUBE_RACE} \ - ${KUBE_TIMEOUT} \ - ${KUBE_COVER}