daac24626e
This modifies the goclean.sh to execute all the tests amongst the packages serially. The default behavior of the `go test` command is to execute all tests in parallel amongst the listed packages. This behavior can at times cause tests which use the `rpctest` package to fail due to multiple `btcd` nodes attempting to bind to the same port simultaneously. As only one node can successfully bind to the port, the btcd processes for the other concurrent harness instances exit silently causing the RPC clients to fail with connection timeouts as their target process no longer exists. Executing all tests serially eliminates such a race condition which can cause non-deterministic test failures.
38 lines
1.4 KiB
Bash
Executable file
38 lines
1.4 KiB
Bash
Executable file
#!/bin/bash
|
|
# The script does automatic checking on a Go package and its sub-packages, including:
|
|
# 1. gofmt (http://golang.org/cmd/gofmt/)
|
|
# 2. golint (https://github.com/golang/lint)
|
|
# 3. go vet (http://golang.org/cmd/vet)
|
|
# 4. race detector (http://blog.golang.org/race-detector)
|
|
# 5. test coverage (http://blog.golang.org/cover)
|
|
|
|
set -ex
|
|
|
|
# Automatic checks
|
|
test -z "$(go fmt $(glide novendor) | tee /dev/stderr)"
|
|
test -z "$(for package in $(glide novendor); do golint $package; done | grep -v 'ALL_CAPS\|OP_\|NewFieldVal' | tee /dev/stderr)"
|
|
test -z "$(go vet $(glide novendor) 2>&1 | tee /dev/stderr)"
|
|
env GORACE="halt_on_error=1" go test -p 1 -v -race $(glide novendor)
|
|
|
|
# Run test coverage on each subdirectories and merge the coverage profile.
|
|
|
|
set +x
|
|
echo "mode: count" > profile.cov
|
|
|
|
# Standard go tooling behavior is to ignore dirs with leading underscores.
|
|
for dir in $(find . -maxdepth 10 -not -path '.' -not -path './.git*' \
|
|
-not -path '*/_*' -not -path './cmd*' -not -path './release*' \
|
|
-not -path './vendor*' -type d)
|
|
do
|
|
if ls $dir/*.go &> /dev/null; then
|
|
go test -covermode=count -coverprofile=$dir/profile.tmp $dir
|
|
if [ -f $dir/profile.tmp ]; then
|
|
cat $dir/profile.tmp | tail -n +2 >> profile.cov
|
|
rm $dir/profile.tmp
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# To submit the test coverage result to coveralls.io,
|
|
# use goveralls (https://github.com/mattn/goveralls)
|
|
# goveralls -coverprofile=profile.cov -service=travis-ci
|