test: generate coverage report even if some tests fail

The coverage data is still useful even if some tests fail. Instead of
terminating the coverage pass on any test failure, collect and pass
the failed tests, generate the coverage report, then report the failed
packages and exit with an error.
This commit is contained in:
Anthony Romano 2017-04-04 10:44:29 -07:00
parent d9069120bb
commit 23e952ccfd

20
test
View File

@ -109,25 +109,35 @@ function cov_pass {
mkdir -p "$COVERDIR"
# run code coverage for unit and integration tests
GOCOVFLAGS="-covermode=set -coverpkg $PKGS_COMMA -v -timeout 15m"
failed=""
for t in `echo "${TEST_PKGS}" | egrep -v "(e2e|functional-tester)"`; do
tf=`echo $t | tr / _`
# cache package compilation data for faster repeated builds
go test -covermode=set -coverpkg $PKGS_COMMA -i -v ${REPO_PATH}/$t
go test $GOCOVFLAGS -i ${REPO_PATH}/$t || true
# uses -run=Test to skip examples because clientv3/ example tests will leak goroutines
go test -covermode=set -coverpkg $PKGS_COMMA -timeout 15m -run=Test -v -coverprofile "$COVERDIR/${tf}.coverprofile" ${REPO_PATH}/$t
go test $GOCOVFLAGS -run=Test -coverprofile "$COVERDIR/${tf}.coverprofile" ${REPO_PATH}/$t || failed="$failed $t"
done
# proxy tests
go test -tags cluster_proxy -covermode=set -coverpkg $PKGS_COMMA -timeout 15m -v -coverprofile "$COVERDIR/proxy_integration.coverprofile" ${REPO_PATH}/integration
go test -tags cluster_proxy -covermode=set -coverpkg $PKGS_COMMA -timeout 15m -v -coverprofile "$COVERDIR/proxy_clientv3.coverprofile" ${REPO_PATH}/clientv3/integration
go test -tags cluster_proxy $GOCOVFLAGS -coverprofile "$COVERDIR/proxy_integration.coverprofile" ${REPO_PATH}/integration || failed="$failed proxy-integration"
go test -tags cluster_proxy $GOCOVFLAGS -coverprofile "$COVERDIR/proxy_clientv3.coverprofile" ${REPO_PATH}/clientv3/integration || failed="$failed proxy-clientv3/integration"
# run code coverage for e2e tests
# use 30m timeout because e2e coverage takes longer
# due to many tests cause etcd process to wait
# on leadership transfer timeout during gracefully shutdown
go test -tags cov -timeout 30m -v ${REPO_PATH}"/e2e"
go test -tags cov -timeout 30m -v ${REPO_PATH}"/e2e" || failed="$failed e2e"
gocovmerge "$COVERDIR"/*.coverprofile >"$COVERDIR"/cover.out
# held failures to generate the full coverage file, now fail
if [ -n "$failed" ]; then
for f in $failed; do
echo FAIL $f
done
exit 255
fi
}
function e2e_pass {