mirror of
https://github.com/tailscale/tailscale.git
synced 2025-04-22 08:51:41 +00:00
util/testenv: add func to report whether a testing.TB is in parallel mode
For future in-memory network changes (#15558) to be able to be stricter and do automatic leak detection when it's safe to do so, in non-parallel tests. Updates tailscale/corp#27636 Change-Id: I50f03b16a3f92ce61a7ed88264b49d8c6628f638 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
603a1d3830
commit
6d117d64a2
@ -6,6 +6,7 @@
|
||||
package testenv
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
|
||||
"tailscale.com/types/lazy"
|
||||
@ -19,3 +20,41 @@ func InTest() bool {
|
||||
return flag.Lookup("test.v") != nil
|
||||
})
|
||||
}
|
||||
|
||||
// TB is testing.TB, to avoid importing "testing" in non-test code.
|
||||
type TB interface {
|
||||
Cleanup(func())
|
||||
Error(args ...any)
|
||||
Errorf(format string, args ...any)
|
||||
Fail()
|
||||
FailNow()
|
||||
Failed() bool
|
||||
Fatal(args ...any)
|
||||
Fatalf(format string, args ...any)
|
||||
Helper()
|
||||
Log(args ...any)
|
||||
Logf(format string, args ...any)
|
||||
Name() string
|
||||
Setenv(key, value string)
|
||||
Chdir(dir string)
|
||||
Skip(args ...any)
|
||||
SkipNow()
|
||||
Skipf(format string, args ...any)
|
||||
Skipped() bool
|
||||
TempDir() string
|
||||
Context() context.Context
|
||||
}
|
||||
|
||||
// InParallelTest reports whether t is running as a parallel test.
|
||||
//
|
||||
// Use of this function taints t such that its Parallel method (assuming t is an
|
||||
// actual *testing.T) will panic if called after this function.
|
||||
func InParallelTest(t TB) (isParallel bool) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
isParallel = true
|
||||
}
|
||||
}()
|
||||
t.Chdir(".") // panics in a t.Parallel test
|
||||
return false
|
||||
}
|
||||
|
@ -16,3 +16,16 @@ func TestDeps(t *testing.T) {
|
||||
},
|
||||
}.Check(t)
|
||||
}
|
||||
|
||||
func TestInParallelTestTrue(t *testing.T) {
|
||||
t.Parallel()
|
||||
if !InParallelTest(t) {
|
||||
t.Fatal("InParallelTest should return true once t.Parallel has been called")
|
||||
}
|
||||
}
|
||||
|
||||
func TestInParallelTestFalse(t *testing.T) {
|
||||
if InParallelTest(t) {
|
||||
t.Fatal("InParallelTest should return false before t.Parallel has been called")
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user