mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
test: set test flags from within an init to limit maximum test parallelism (#19575)
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
package coderdtest
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"testing"
|
||||
)
|
||||
|
||||
const (
|
||||
// MaxTestParallelism is set to match our MakeFile's `make test` target.
|
||||
MaxTestParallelism = 8
|
||||
)
|
||||
|
||||
// init defines the default parallelism for tests, capping it to MaxTestParallelism.
|
||||
// Any user-provided value for -test.parallel will override this.
|
||||
func init() {
|
||||
// Setup the test flags.
|
||||
testing.Init()
|
||||
|
||||
// info is used for debugging panics in this init function.
|
||||
info := "Resolve the issue in the file initflags.go"
|
||||
_, file, line, ok := runtime.Caller(0)
|
||||
if ok {
|
||||
info = fmt.Sprintf("Resolve the issue in the file %s:%d", file, line)
|
||||
}
|
||||
|
||||
// Lookup the test.parallel flag's value, and cap it to MaxTestParallelism. This
|
||||
// all happens before `flag.Parse()`, so any user-provided value will overwrite
|
||||
// whatever we set here.
|
||||
par := flag.CommandLine.Lookup("test.parallel")
|
||||
if par == nil {
|
||||
// This should never happen. If you are reading this message because of a panic,
|
||||
// just comment out the panic and add a `return` statement instead.
|
||||
msg := "no 'test.parallel' flag found, unable to set default parallelism"
|
||||
panic(msg + "\n" + info)
|
||||
}
|
||||
|
||||
parValue, err := strconv.ParseInt(par.Value.String(), 0, 64)
|
||||
if err != nil {
|
||||
// This should never happen, but if it does, panic with a useful message. If you
|
||||
// are reading this message because of a panic, that means the default value for
|
||||
// -test.parallel is not an integer. A safe fix is to comment out the panic. This
|
||||
// will assume the default value of '0', and replace it with MaxTestParallelism.
|
||||
// Which is not ideal, but at least tests will run.
|
||||
msg := fmt.Sprintf("failed to parse test.parallel: %v", err)
|
||||
|
||||
panic(msg + "\n" + info)
|
||||
}
|
||||
|
||||
if parValue > MaxTestParallelism {
|
||||
_ = par.Value.Set(fmt.Sprintf("%d", MaxTestParallelism))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user