This is a short post on stress testing your Go packages. Concurrency or memory correctness errors are more likely to show up at higher concurrency levels (higher values of
GOMAXPROCS). I use this script when testing my packages, or when reviewing code that goes into the standard library.
#!/usr/bin/env bash -e go test -c # comment above and uncomment below to enable the race builder # go test -c -race PKG=$(basename $(pwd)) while true ; do export GOMAXPROCS=$[ 1 + $[ RANDOM % 128 ]] ./$PKG.test $@ 2>&1 done
I keep this script in
$HOME/bin so usage is
$ cd $SOMEPACKAGE $ stress.bash PASS PASS PASS
You can pass additional arguments to your test binary on the command line,
stress.bash -test.v -test.run=ThisTestOnly
The goal is to be able to run the stress test for as long as you want without a test failure. Once you achieve that, uncomment
go test -c -race and try again.