Josh Sorefdocs: spelling: e.g.e4a87f76 years agoHistory
97 lines · 2.1 KB · Shell
RawDownload
#!/bin/bash # defaultsbuildflags=""binary="test.binary"flags=""iterations="100"logprefix="test.out" help="This runs go tests repeatedly logging all the failures to separatefiles. It is very useful for debugging with printf for tests whichdon't fail very often. Syntax: $0 [flags] Note that flags for 'go test' need to be expanded, e.g. '-test.v' insteadof just '-v'. '-race' does not need to be expanded. Flags this script understands -h, --help    show this help-i=N, --iterations=N    do N iterations (default ${iterations})-b=NAME,--binary=NAME    call the output binary NAME (default ${binary})-l=NAME,--logprefix=NAME    the log files generated will start with NAME (default ${logprefix})-race    build the binary with race testing enabled-tags=TAGS    build the binary with the tags supplied Any other flags will be past to go test. Example     $0 flags -race -test.run 'TestRWFileHandleOpenTests' " if [[ "$@" == "" ]]; then    echo "${help}"    exit 1fi for i in "$@"do    case $i in        -h|--help)            echo "${help}"            exit 1            ;;        -b=*|--binary=*)            binary="${i#*=}"            shift # past argument=value            ;;        -l=*|--log-prefix=*)            logprefix="${i#*=}"            shift # past argument=value            ;;        -i=*|--iterations=*)            iterations="${i#*=}"            shift # past argument=value            ;;        -race|--race|-tags=*|--tags=*)            buildflags="${buildflags} $i"            shift # past argument with no value            ;;        *)            # unknown option            flags="${flags} ${i#*=}"            shift            ;;    esacdone echo -n "Compiling ${buildflags} ${binary} ... "go test ${buildflags} -c -o "${binary}" || {    echo "build failed"    exit 1}echo "OK" for i in $(seq -w ${iterations}); do    echo -n "Test ${buildflags} ${flags} ${i} "    log="${logprefix}${i}.log"    ./${binary} ${flags} > ${log} 2>&1    ok=$?    if [[ ${ok} == 0 ]]; then        echo "OK"        rm ${log}    else        echo "FAIL - log in ${log}"    fidone