mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-11-04 07:49:35 +00:00 
			
		
		
		
	Merge pull request #4574 from ixdy/travis-coveralls
Produce a combined coverage report when running Go unit tests, and use goveralls to report coverage results from Travis to Coveralls.io.
This commit is contained in:
		@@ -6,6 +6,7 @@ go:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
install:
 | 
					install:
 | 
				
			||||||
  - if ! go get code.google.com/p/go.tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; fi
 | 
					  - 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/travis/install-etcd.sh
 | 
				
			||||||
  - ./hack/verify-gofmt.sh
 | 
					  - ./hack/verify-gofmt.sh
 | 
				
			||||||
  - ./hack/verify-boilerplate.sh
 | 
					  - ./hack/verify-boilerplate.sh
 | 
				
			||||||
@@ -14,7 +15,7 @@ install:
 | 
				
			|||||||
  - ./hack/build-go.sh
 | 
					  - ./hack/build-go.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
script:
 | 
					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' ./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/test-cmd.sh
 | 
				
			||||||
  - PATH=$HOME/gopath/bin:./third_party/etcd:$PATH ./hack/verify-gendocs.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
 | 
					  - PATH=$HOME/gopath/bin:./third_party/etcd:$PATH ./hack/test-integration.sh
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# Kubernetes
 | 
					# Kubernetes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://godoc.org/github.com/GoogleCloudPlatform/kubernetes) [](https://travis-ci.org/GoogleCloudPlatform/kubernetes)
 | 
					[](https://godoc.org/github.com/GoogleCloudPlatform/kubernetes) [](https://travis-ci.org/GoogleCloudPlatform/kubernetes) [](https://coveralls.io/r/GoogleCloudPlatform/kubernetes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Kubernetes is an open source system for managing containerized applications across multiple hosts,
 | 
					Kubernetes is an open source system for managing containerized applications across multiple hosts,
 | 
				
			||||||
providing basic mechanisms for deployment, maintenance, and scaling of applications.
 | 
					providing basic mechanisms for deployment, maintenance, and scaling of applications.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,4 +20,4 @@ set -o pipefail
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 | 
					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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,14 +40,13 @@ 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
 | 
					# -covermode=atomic becomes default with -race in Go >=1.3
 | 
				
			||||||
KUBE_TIMEOUT=${KUBE_TIMEOUT:--timeout 120s}
 | 
					KUBE_TIMEOUT=${KUBE_TIMEOUT:--timeout 120s}
 | 
				
			||||||
KUBE_COVER=${KUBE_COVER:-} # use KUBE_COVER="-cover -covermode=atomic" for full coverage
 | 
					KUBE_COVER=${KUBE_COVER:-} # set to nonempty string to enable coverage collection
 | 
				
			||||||
 | 
					KUBE_COVERMODE=${KUBE_COVERMODE:-atomic}
 | 
				
			||||||
KUBE_RACE=${KUBE_RACE:-}   # use KUBE_RACE="-race" to enable race testing
 | 
					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::test::usage() {
 | 
				
			||||||
  kube::log::usage_from_stdin <<EOF
 | 
					  kube::log::usage_from_stdin <<EOF
 | 
				
			||||||
@@ -104,6 +103,8 @@ for arg; do
 | 
				
			|||||||
done
 | 
					done
 | 
				
			||||||
set -- "${testcases[@]+${testcases[@]}}"
 | 
					set -- "${testcases[@]+${testcases[@]}}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TODO: this should probably be refactored to avoid code duplication with the
 | 
				
			||||||
 | 
					# coverage version.
 | 
				
			||||||
if [[ $iterations -gt 1 ]]; then
 | 
					if [[ $iterations -gt 1 ]]; then
 | 
				
			||||||
  if [[ $# -eq 0 ]]; then
 | 
					  if [[ $# -eq 0 ]]; then
 | 
				
			||||||
    set -- $(kube::test::find_dirs)
 | 
					    set -- $(kube::test::find_dirs)
 | 
				
			||||||
@@ -135,33 +136,56 @@ if [[ $iterations -gt 1 ]]; then
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [[ -n "${1-}" ]]; then
 | 
					cover_report_dir=""
 | 
				
			||||||
  cover_report_dir=""
 | 
					combined_cover_profile=""
 | 
				
			||||||
  if [[ -n "${KUBE_COVER}" ]]; then
 | 
					if [[ -n "${KUBE_COVER}" ]]; then
 | 
				
			||||||
    cover_report_dir="/tmp/k8s_coverage/$(kube::util::sortable_date)"
 | 
					  cover_report_dir="/tmp/k8s_coverage/$(kube::util::sortable_date)"
 | 
				
			||||||
    kube::log::status "Saving coverage output in '${cover_report_dir}'"
 | 
					  combined_cover_profile="${cover_report_dir}/combined-coverage.out"
 | 
				
			||||||
  fi
 | 
					  kube::log::status "Saving coverage output in '${cover_report_dir}'"
 | 
				
			||||||
 | 
					  mkdir -p ${cover_report_dir}
 | 
				
			||||||
  for arg; do
 | 
					  # The combined coverage profile needs to start with a line indicating which
 | 
				
			||||||
    trap 'exit 1' SIGINT
 | 
					  # coverage mode was used (set, count, or atomic). This line is included in
 | 
				
			||||||
    pkg=${KUBE_GO_PACKAGE}/${arg}
 | 
					  # each of the coverage profiles generated when running 'go test -cover', but
 | 
				
			||||||
 | 
					  # we strip these lines out when combining so that there's only one.
 | 
				
			||||||
    cover_params=()
 | 
					  echo "mode: ${KUBE_COVERMODE}" >${combined_cover_profile}
 | 
				
			||||||
    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
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
kube::test::find_pkgs | xargs go test "${goflags[@]:+${goflags[@]}}" \
 | 
					if [[ -n "${1-}" ]]; then
 | 
				
			||||||
    ${KUBE_RACE} \
 | 
					  test_dirs=$@
 | 
				
			||||||
    ${KUBE_TIMEOUT} \
 | 
					else
 | 
				
			||||||
    ${KUBE_COVER}
 | 
					  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=""
 | 
				
			||||||
 | 
					  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}")
 | 
				
			||||||
 | 
					  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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user