From 96eb62f47aed6b15ee99720cfd5ea7a3fe79f5b3 Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Wed, 20 Jul 2016 15:50:28 +0800 Subject: [PATCH] add coverage script. Signed-off-by: Bo-Yi Wu --- .gitignore | 7 +--- .travis.yml | 2 +- Makefile | 25 ++++++------ go.test.sh | 26 ------------- script/coverage.sh | 94 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 108 insertions(+), 46 deletions(-) delete mode 100755 go.test.sh create mode 100755 script/coverage.sh diff --git a/.gitignore b/.gitignore index 140c705..2c4ffdb 100644 --- a/.gitignore +++ b/.gitignore @@ -28,15 +28,10 @@ key.pem config.yml bin/* .DS_Store -coverage.txt -coverage.xml -report.xml gorush/log/*.log build.tar.gz gorush.tar.gz gorush.db vendor -lint.txt -vet.txt Dockerfile.tmp -junit.txt +.cover diff --git a/.travis.yml b/.travis.yml index ea802cb..d411d82 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,4 +41,4 @@ after_success: && test "$TRAVIS_PULL_REQUEST" == "false" && cd $TRAVIS_BUILD_DIR && make docker_build - test "$TRAVIS_BRANCH" == "master" && test "$TRAVIS_GO_VERSION" == "1.6.2" && test "$TRAVIS_PULL_REQUEST" == "false" && cd $TRAVIS_BUILD_DIR && make deploy tag=latest - - bash <(curl -s https://codecov.io/bash) + - bash <(curl -s https://codecov.io/bash) -f .cover/coverage.txt diff --git a/Makefile b/Makefile index c20eea6..8e2ccec 100644 --- a/Makefile +++ b/Makefile @@ -25,25 +25,25 @@ build: clean sh script/build.sh $(VERSION) coverage: - @sh go.test.sh atomic | tee junit.txt + sh ./script/coverage.sh testing atomic test: redis_test boltdb_test memory_test config_test - go test -v -cover -covermode=count -coverprofile=coverage.txt ./gorush/... + go test -v -cover ./gorush/... redis_test: init - go test -v -cover -covermode=count -coverprofile=coverage.txt ./storage/redis/... + go test -v -cover ./storage/redis/... boltdb_test: init - go test -v -cover -covermode=count -coverprofile=coverage.txt ./storage/boltdb/... + go test -v -cover ./storage/boltdb/... memory_test: init - go test -v -cover -covermode=count -coverprofile=coverage.txt ./storage/memory/... + go test -v -cover ./storage/memory/... config_test: init - go test -v -cover -covermode=count -coverprofile=coverage.txt ./config/... + go test -v -cover ./config/... html: - go tool cover -html=coverage.txt + go tool cover -html=.cover/coverage.txt docker_build: clean tar -zcvf build.tar.gz gorush.go gorush config storage Makefile glide.lock glide.yaml @@ -87,16 +87,16 @@ vet: @go vet -n -x ./... junit_report: - cat junit.txt | go-junit-report > report.xml + sh ./script/coverage.sh junit coverage_report: - gocov convert coverage.txt | gocov-xml > coverage.xml + sh ./script/coverage.sh coverage lint_report: - golint ./... > lint.txt + sh ./script/coverage.sh lint vet_report: - go vet -n -x ./... > vet.txt + sh ./script/coverage.sh vet report: junit_report coverage_report lint_report vet_report @@ -106,5 +106,4 @@ clean: gorush.tar.gz \ gorush/gorush.db \ storage/boltdb/gorush.db \ - *.txt \ - *.xml + .cover diff --git a/go.test.sh b/go.test.sh deleted file mode 100755 index eae93e0..0000000 --- a/go.test.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -set -e - -output() { - printf "\033[32m" - echo $1 - printf "\033[0m" - exit 1 -} - -coverage_mode=$1 - -test -z $coverage_mode && output "Usage: $0 coverage_mode" -test -z $(which glide) && output "glide command not found" - -test -f coverage.txt && rm -rf coverage.txt -echo "mode: ${coverage_mode}" > coverage.txt - -for d in $(go list ./... | grep -v vendor); do - go test -v -cover -coverprofile=profile.out -covermode=${coverage_mode} $d - if [ -f profile.out ]; then - sed '1d' profile.out >> coverage.txt - rm profile.out - fi -done diff --git a/script/coverage.sh b/script/coverage.sh new file mode 100755 index 0000000..2c1dbd8 --- /dev/null +++ b/script/coverage.sh @@ -0,0 +1,94 @@ +#!/bin/sh +# +# Generate test coverage statistics for Go packages. +# + +set -e + +output() { + printf "\033[32m" + echo $1 + printf "\033[0m" + + if [ "$2" = 1 ]; then + exit 1 + fi +} + +workdir=".cover" +coverage_report="$workdir/coverage.txt" +coverage_xml_report="$workdir/coverage.xml" +junit_report="$workdir/junit.txt" +junit_xml_report="$workdir/report.xml" +lint_report="$workdir/lint.txt" +vet_report="$workdir/vet.txt" +packages=$(go list ./... | grep -v vendor) + +test -d $workdir || mkdir -p $workdir + +show_help() { +cat << EOF +Generate test coverage statistics for Go packages. + + testing [set|count|atomic] Run go testing for all packages + coverage Generate coverage report for all packages + junit Generate coverage xml report for junit plugin + lint Generate Lint report for all packages + vet Generate Vet report for all packages +EOF +} + +testing() { + test -f ${junit_report} && rm -f ${junit_report} + coverage_mode=$@ + for pkg in $packages; do + f="$workdir/$(echo $pkg | tr / -).cover" + output "Testing coverage report for ${pkg}" + go test -v -cover -coverprofile=${f} -covermode=${coverage_mode} $pkg | tee -a ${junit_report} + done + + output "Convert all packages coverage report to $coverage_report" + echo "mode: $coverage_mode" > "$coverage_report" + grep -h -v "^mode:" "$workdir"/*.cover >> "$coverage_report" +} + +generate_cover_report() { + gocov convert ${coverage_report} | gocov-xml > ${coverage_xml_report} +} + +generate_junit_report() { + cat $junit_report | go-junit-report > ${junit_xml_report} +} + +generate_lint_report() { + for pkg in $packages; do + output "Go Lint report for ${pkg}" + golint ${pkg} | tee -a ${lint_report} + done +} + +generate_vet_report() { + for pkg in $packages; do + output "Go Vet report for ${pkg}" + go vet -n -x ${pkg} | tee -a ${vet_report} + done +} + +case "$1" in + "") + show_help ;; + testing) + mode=$2 + test -z $mode && mode="set" + testing $mode ;; + coverage) + generate_cover_report ;; + junit) + generate_junit_report ;; + lint) + generate_lint_report ;; + vet) + generate_vet_report ;; + *) + show_help ;; +esac