diff --git a/.travis.yml b/.travis.yml index dc07b2590760a..b1c42b58fc07d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,6 @@ 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 @@ -15,7 +14,7 @@ install: - ./hack/build-go.sh script: - - KUBE_RACE="-race" KUBE_COVER="y" KUBE_GOVERALLS_BIN="$HOME/gopath/bin/goveralls" KUBE_TIMEOUT='-timeout 60s' ./hack/test-go.sh "" -p=4 + - KUBE_RACE="-race" KUBE_COVER="-cover -covermode=atomic" KUBE_TIMEOUT='-timeout 60s' ./hack/test-go.sh "" -p=4 - 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 842cfeb6c61b1..3753f6b6bc5ce 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 dfc0f62d3bf6c..de5c569371463 100755 --- a/hack/test-go.sh +++ b/hack/test-go.sh @@ -40,13 +40,14 @@ kube::test::find_dirs() { ) } +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:-} # set to nonempty string to enable coverage collection -KUBE_COVERMODE=${KUBE_COVERMODE:-atomic} +KUBE_COVER=${KUBE_COVER:-} # use KUBE_COVER="-cover -covermode=atomic" for full coverage 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} -fi - if [[ -n "${1-}" ]]; then - test_dirs=$@ -else - test_dirs=$(kube::test::find_dirs) -fi - -# Run all specified tests, optionally collecting coverage if KUBE_COVER is set. -for arg in ${test_dirs}; do - trap 'exit 1' SIGINT - pkg=${KUBE_GO_PACKAGE}/${arg} - - cover_params=() - cover_profile="" + cover_report_dir="" if [[ -n "${KUBE_COVER}" ]]; then - cover_profile=${cover_report_dir}/${arg}/coverage.out - mkdir -p "${cover_report_dir}/${arg}" - cover_params=(-cover -covermode="${KUBE_COVERMODE}" -coverprofile="${cover_profile}") + cover_report_dir="/tmp/k8s_coverage/$(kube::util::sortable_date)" + kube::log::status "Saving coverage output in '${cover_report_dir}'" fi - go test "${goflags[@]:+${goflags[@]}}" \ - ${KUBE_RACE} \ - ${KUBE_TIMEOUT} \ - "${cover_params[@]+${cover_params[@]}}" \ - "${pkg}" - if [[ -f "${cover_profile}" ]]; then - # Include all coverage reach data in the combined profile, but exclude the - # 'mode' lines, as there should be only one. - grep -h -v "^mode:" ${cover_profile} >>${combined_cover_profile} || true - fi -done + for arg; do + trap 'exit 1' SIGINT + pkg=${KUBE_GO_PACKAGE}/${arg} -if [[ -f ${combined_cover_profile} ]]; then - 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 + cover_params=() + if [[ -n "${KUBE_COVER}" ]]; then + mkdir -p "${cover_report_dir}/${arg}" + cover_params=(${KUBE_COVER} -coverprofile="${cover_report_dir}/${arg}/coverage.out") + fi + + go test "${goflags[@]:+${goflags[@]}}" \ + ${KUBE_RACE} \ + ${KUBE_TIMEOUT} \ + "${cover_params[@]+${cover_params[@]}}" \ + "${pkg}" + done + exit 0 fi + +kube::test::find_pkgs | xargs go test "${goflags[@]:+${goflags[@]}}" \ + ${KUBE_RACE} \ + ${KUBE_TIMEOUT} \ + ${KUBE_COVER}