From 60469c0ef9b49953771e5aac3280a0ccf3a2dd4b Mon Sep 17 00:00:00 2001 From: Abhishek Chanda Date: Tue, 28 Apr 2015 19:02:46 -0700 Subject: [PATCH 1/3] Add a script to handle coverage go test cannot gather coverage numbers for multiple packages https://github.com/golang/go/issues/6909 This script wraps go test to generate report for each package and then combine them in one file --- Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 970e87da70..47ff0b32f0 100644 --- a/Makefile +++ b/Makefile @@ -32,9 +32,7 @@ cover: @go tool cover 2>/dev/null; if [ $$? -eq 3 ]; then \ go get -u golang.org/x/tools/cmd/cover; \ fi - godep go test $(TEST) -coverprofile=coverage.out - godep go tool cover -html=coverage.out - rm coverage.out + ./scripts/coverage.sh --html # vet runs the Go source code static analysis tool `vet` to find # any common errors. From 313fdc227120af0759f097f8b2c4ffce7525c142 Mon Sep 17 00:00:00 2001 From: Abhishek Chanda Date: Tue, 28 Apr 2015 19:04:47 -0700 Subject: [PATCH 2/3] Ignore coverage directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 7e6e0eef97..1082145ac2 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ # Folders _obj _test +.cover # Architecture specific extensions/prefixes *.[568vq] From aa90d268bfaefd3d7af4f3d56f9165c04ae4e45d Mon Sep 17 00:00:00 2001 From: Abhishek Chanda Date: Tue, 28 Apr 2015 19:05:11 -0700 Subject: [PATCH 3/3] Actually add the coverage script Shamelessly copied from https://github.com/mlafeldt/chef-runner/blob/v0.7.0/script/coverage --- scripts/coverage.sh | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100755 scripts/coverage.sh diff --git a/scripts/coverage.sh b/scripts/coverage.sh new file mode 100755 index 0000000000..1d64f1fe53 --- /dev/null +++ b/scripts/coverage.sh @@ -0,0 +1,52 @@ +#!/bin/sh +# Generate test coverage statistics for Go packages. +# +# Works around the fact that `go test -coverprofile` currently does not work +# with multiple packages, see https://code.google.com/p/go/issues/detail?id=6909 +# +# Usage: script/coverage [--html|--coveralls] +# +# --html Additionally create HTML report and open it in browser +# --coveralls Push coverage statistics to coveralls.io +# + +set -e + +workdir=.cover +profile="$workdir/cover.out" +mode=count + +generate_cover_data() { + rm -rf "$workdir" + mkdir "$workdir" + + for pkg in "$@"; do + f="$workdir/$(echo $pkg | tr / -).cover" + go test -covermode="$mode" -coverprofile="$f" "$pkg" + done + + echo "mode: $mode" >"$profile" + grep -h -v "^mode:" "$workdir"/*.cover >>"$profile" +} + +show_cover_report() { + go tool cover -${1}="$profile" +} + +push_to_coveralls() { + echo "Pushing coverage statistics to coveralls.io" + goveralls -coverprofile="$profile" +} + +generate_cover_data $(go list ./...) +show_cover_report func +case "$1" in +"") + ;; +--html) + show_cover_report html ;; +--coveralls) + push_to_coveralls ;; +*) + echo >&2 "error: invalid option: $1"; exit 1 ;; +esac