Skip to content

Commit

Permalink
cmd/api: move support checks into individual tests
Browse files Browse the repository at this point in the history
This makes 'go test -list cmd/api' work, and fixes an infinite
recursion via testenv.HasExec that would otherwise occur.
As of CL 488076, testenv.HasExec tries to re-exec the test
executable using -list to suppress running the tests, which
produces a fork bomb if TestMain itself calls HasExec.

For this test, it turns out that the HasExec check is redundant
anyway: if we can exec 'go build', we can certainly exec programs in
general too.

Change-Id: I165f98315c181098c8be8b7525b9dfa3f98e14f6
Reviewed-on: https://go-review.googlesource.com/c/go/+/491656
TryBot-Result: Gopher Robot <[email protected]>
Reviewed-by: Austin Clements <[email protected]>
Run-TryBot: Bryan Mills <[email protected]>
Auto-Submit: Bryan Mills <[email protected]>
  • Loading branch information
Bryan C. Mills authored and gopherbot committed May 3, 2023
1 parent 5e349ac commit 968ebb2
Showing 1 changed file with 20 additions and 21 deletions.
41 changes: 20 additions & 21 deletions src/cmd/api/api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,33 +20,12 @@ import (
var flagCheck = flag.Bool("check", false, "run API checks")

func TestMain(m *testing.M) {
if !testenv.HasExec() {
os.Stdout.WriteString("skipping test: platform cannot exec")
os.Exit(0)
}
if !testenv.HasGoBuild() {
os.Stdout.WriteString("skipping test: platform cannot 'go build' to import std packages")
os.Exit(0)
}

flag.Parse()
for _, c := range contexts {
c.Compiler = build.Default.Compiler
}
build.Default.GOROOT = testenv.GOROOT(nil)

// Warm up the import cache in parallel.
var wg sync.WaitGroup
for _, context := range contexts {
context := context
wg.Add(1)
go func() {
defer wg.Done()
_ = NewWalker(context, filepath.Join(testenv.GOROOT(nil), "src"))
}()
}
wg.Wait()

os.Exit(m.Run())
}

Expand All @@ -59,6 +38,9 @@ func TestGolden(t *testing.T) {
// slow, not worth repeating in -check
t.Skip("skipping with -check set")
}

testenv.MustHaveGoBuild(t)

td, err := os.Open("testdata/src/pkg")
if err != nil {
t.Fatal(err)
Expand Down Expand Up @@ -232,6 +214,20 @@ func TestIssue21181(t *testing.T) {
// slow, not worth repeating in -check
t.Skip("skipping with -check set")
}
testenv.MustHaveGoBuild(t)

// Warm up the import cache in parallel.
var wg sync.WaitGroup
for _, context := range contexts {
context := context
wg.Add(1)
go func() {
defer wg.Done()
_ = NewWalker(context, filepath.Join(testenv.GOROOT(nil), "src"))
}()
}
wg.Wait()

for _, context := range contexts {
w := NewWalker(context, "testdata/src/issue21181")
pkg, err := w.import_("p")
Expand All @@ -248,6 +244,7 @@ func TestIssue29837(t *testing.T) {
// slow, not worth repeating in -check
t.Skip("skipping with -check set")
}
testenv.MustHaveGoBuild(t)
for _, context := range contexts {
w := NewWalker(context, "testdata/src/issue29837")
_, err := w.ImportFrom("p", "", 0)
Expand All @@ -262,6 +259,7 @@ func TestIssue41358(t *testing.T) {
// slow, not worth repeating in -check
t.Skip("skipping with -check set")
}
testenv.MustHaveGoBuild(t)
context := new(build.Context)
*context = build.Default
context.Dir = filepath.Join(testenv.GOROOT(t), "src")
Expand All @@ -278,5 +276,6 @@ func TestCheck(t *testing.T) {
if !*flagCheck {
t.Skip("-check not specified")
}
testenv.MustHaveGoBuild(t)
Check(t)
}

0 comments on commit 968ebb2

Please sign in to comment.