1
0
mirror of https://github.com/golang/go synced 2024-11-25 03:17:58 -07:00

Revert "testing: add TB.SetGOMAXPROCS function"

This reverts CL 519235.

Reason for revert: Proposal is still in incoming.

For #62020

Change-Id: Icccb930209f36097f5d930c01eda6b5042bdddc1
Reviewed-on: https://go-review.googlesource.com/c/go/+/573516
Reviewed-by: Than McIntosh <thanm@google.com>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
This commit is contained in:
Ian Lance Taylor 2024-03-21 21:42:52 +00:00 committed by Gopher Robot
parent b5e377cedc
commit 27f41bb153
4 changed files with 2 additions and 149 deletions

View File

@ -1,4 +0,0 @@
pkg testing, type TB interface, SetGOMAXPROCS(int) #62020
pkg testing, method (*T) SetGOMAXPROCS(int) #62020
pkg testing, method (*B) SetGOMAXPROCS(int) #62020
pkg testing, method (*F) SetGOMAXPROCS(int) #62020

View File

@ -1 +0,0 @@
The [`SetGOMAXPROCS`](/pkg/testing#T.SetGOMAXPROCS) method changes GOMAXPROCS for the duration of a single test.

View File

@ -890,7 +890,6 @@ type TB interface {
Logf(format string, args ...any) Logf(format string, args ...any)
Name() string Name() string
Setenv(key, value string) Setenv(key, value string)
SetGOMAXPROCS(n int)
Skip(args ...any) Skip(args ...any)
SkipNow() SkipNow()
Skipf(format string, args ...any) Skipf(format string, args ...any)
@ -917,9 +916,8 @@ var _ TB = (*B)(nil)
// may be called simultaneously from multiple goroutines. // may be called simultaneously from multiple goroutines.
type T struct { type T struct {
common common
isEnvSet bool isEnvSet bool
isGOMAXPROCSSet bool context *testContext // For running tests and subtests.
context *testContext // For running tests and subtests.
} }
func (c *common) private() {} func (c *common) private() {}
@ -1308,19 +1306,6 @@ func (c *common) Setenv(key, value string) {
} }
} }
// SetGOMAXPROCS calls runtime.GOMAXPROCS(n) and uses Cleanup to
// restore the value of GOMAXPROCS after the test.
//
// Because GOMAXPROCS affects the whole process, it cannot be used
// in parallel tests or tests with parallel ancestors.
func (c *common) SetGOMAXPROCS(n int) {
c.checkFuzzFn("SetGOMAXPROCS")
prev := runtime.GOMAXPROCS(n)
c.Cleanup(func() {
runtime.GOMAXPROCS(prev)
})
}
// panicHanding controls the panic handling used by runCleanup. // panicHanding controls the panic handling used by runCleanup.
type panicHandling int type panicHandling int
@ -1461,9 +1446,6 @@ func (t *T) Parallel() {
if t.isEnvSet { if t.isEnvSet {
panic("testing: t.Parallel called after t.Setenv; cannot set environment variables in parallel tests") panic("testing: t.Parallel called after t.Setenv; cannot set environment variables in parallel tests")
} }
if t.isGOMAXPROCSSet {
panic("testing: t.Parallel called after t.SetGOMAXPROCS; cannot set GOMAXPROCS in parallel tests")
}
t.isParallel = true t.isParallel = true
if t.parent.barrier == nil { if t.parent.barrier == nil {
// T.Parallel has no effect when fuzzing. // T.Parallel has no effect when fuzzing.
@ -1545,33 +1527,6 @@ func (t *T) Setenv(key, value string) {
t.common.Setenv(key, value) t.common.Setenv(key, value)
} }
// SetGOMAXPROCS calls runtime.GOMAXPROCS(n) and uses Cleanup to
// restore the value of GOMAXPROCS after the test.
//
// Because GOMAXPROCS affects the whole process, it cannot be used
// in parallel tests or tests with parallel ancestors.
func (t *T) SetGOMAXPROCS(n int) {
// Non-parallel subtests that have parallel ancestors may still
// run in parallel with other tests: they are only non-parallel
// with respect to the other subtests of the same parent.
// Since SetGOMAXPROCS affects the whole process, we need to disallow it
// if the current test or any parent is parallel.
isParallel := false
for c := &t.common; c != nil; c = c.parent {
if c.isParallel {
isParallel = true
break
}
}
if isParallel {
panic("testing: t.SetGOMAXPROCS called after t.Parallel; cannot set GOMAXPROCS in parallel tests")
}
t.isGOMAXPROCSSet = true
t.common.SetGOMAXPROCS(n)
}
// InternalTest is an internal type but exported because it is cross-package; // InternalTest is an internal type but exported because it is cross-package;
// it is part of the implementation of the "go test" command. // it is part of the implementation of the "go test" command.
type InternalTest struct { type InternalTest struct {

View File

@ -13,7 +13,6 @@ import (
"os/exec" "os/exec"
"path/filepath" "path/filepath"
"regexp" "regexp"
"runtime"
"slices" "slices"
"strings" "strings"
"sync" "sync"
@ -259,102 +258,6 @@ func TestSetenvWithParallelGrandParentBeforeSetenv(t *testing.T) {
}) })
} }
func TestSetGOMAXPROCS(t *testing.T) {
if runtime.GOARCH == "wasm" {
t.Skip("not supported on wasm yet")
}
tests := []struct {
name string
newP int
}{
{
name: "overriding value",
newP: 1,
},
}
for _, test := range tests {
p := runtime.GOMAXPROCS(0)
t.Run(test.name, func(t *testing.T) {
t.SetGOMAXPROCS(test.newP + 1)
if runtime.GOMAXPROCS(0) != test.newP+1 {
t.Fatalf("unexpected value after t.SetGOMAXPROCS: got %d, want %d", runtime.GOMAXPROCS(0), test.newP+1)
}
})
if runtime.GOMAXPROCS(0) != p {
t.Fatalf("unexpected value after t.SetGOMAXPROCS cleanup: got %d, want %d", runtime.GOMAXPROCS(0), p)
}
}
}
func TestSetGOMAXPROCSWithParallelAfterSetGOMAXPROCS(t *testing.T) {
if runtime.GOARCH == "wasm" {
t.Skip("not supported on wasm yet")
}
defer func() {
want := "testing: t.Parallel called after t.SetGOMAXPROCS; cannot set GOMAXPROCS in parallel tests"
if got := recover(); got != want {
t.Fatalf("expected panic; got %#v want %q", got, want)
}
}()
p := runtime.GOMAXPROCS(0)
t.SetGOMAXPROCS(p + 1)
t.Parallel()
}
func TestSetGOMAXPROCSWithParallelBeforeSetGOMAXPROCS(t *testing.T) {
if runtime.GOARCH == "wasm" {
t.Skip("not supported on wasm yet")
}
defer func() {
want := "testing: t.SetGOMAXPROCS called after t.Parallel; cannot set GOMAXPROCS in parallel tests"
if got := recover(); got != want {
t.Fatalf("expected panic; got %#v want %q", got, want)
}
}()
t.Parallel()
p := runtime.GOMAXPROCS(0)
t.SetGOMAXPROCS(p + 1)
}
func TestSetGOMAXPROCSWithParallelParentBeforeSetGOMAXPROCS(t *testing.T) {
if runtime.GOARCH == "wasm" {
t.Skip("not supported on wasm yet")
}
t.Parallel()
t.Run("child", func(t *testing.T) {
defer func() {
want := "testing: t.SetGOMAXPROCS called after t.Parallel; cannot set GOMAXPROCS in parallel tests"
if got := recover(); got != want {
t.Fatalf("expected panic; got %#v want %q", got, want)
}
}()
p := runtime.GOMAXPROCS(0)
t.SetGOMAXPROCS(p + 1)
})
}
func TestSetGOMAXPROCSWithParallelGrandParentBeforeSetGOMAXPROCS(t *testing.T) {
if runtime.GOARCH == "wasm" {
t.Skip("not supported on wasm yet")
}
t.Parallel()
t.Run("child", func(t *testing.T) {
t.Run("grand-child", func(t *testing.T) {
defer func() {
want := "testing: t.SetGOMAXPROCS called after t.Parallel; cannot set GOMAXPROCS in parallel tests"
if got := recover(); got != want {
t.Fatalf("expected panic; got %#v want %q", got, want)
}
}()
p := runtime.GOMAXPROCS(0)
t.SetGOMAXPROCS(p + 1)
})
})
}
// testingTrueInInit is part of TestTesting. // testingTrueInInit is part of TestTesting.
var testingTrueInInit = false var testingTrueInInit = false