From: Bryan C. Mills Date: Thu, 21 May 2020 18:16:50 +0000 (-0400) Subject: all: use a hermetic "go" tool in standard-library tests X-Git-Tag: go1.15beta1~117 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9f4aeb36e22f5c7eda76111b4c49c0434b4d2897;p=gostls13.git all: use a hermetic "go" tool in standard-library tests The go/build package uses the "go" tool from the user's environment, but its tests should not assume that that tool is in any particular state, let alone appropriate for running the test. Instead, explicitly use testenv.GoTool, adding it to $PATH in a TestMain when necessary. Fixes #39199 Fixes #39198 Change-Id: I56618a55ced473e75dd96eeb3a8f7084e2e64d02 Reviewed-on: https://go-review.googlesource.com/c/go/+/234880 Run-TryBot: Bryan C. Mills TryBot-Result: Gobot Gobot Reviewed-by: Alexander Rakoczy --- diff --git a/src/go/build/build_test.go b/src/go/build/build_test.go index 7151ba1180..a7f2a3e902 100644 --- a/src/go/build/build_test.go +++ b/src/go/build/build_test.go @@ -5,6 +5,7 @@ package build import ( + "flag" "internal/testenv" "io" "io/ioutil" @@ -16,6 +17,14 @@ import ( "testing" ) +func TestMain(m *testing.M) { + flag.Parse() + if goTool, err := testenv.GoTool(); err == nil { + os.Setenv("PATH", filepath.Dir(goTool)+string(os.PathListSeparator)+os.Getenv("PATH")) + } + os.Exit(m.Run()) +} + func TestMatch(t *testing.T) { ctxt := Default what := "default" diff --git a/src/go/internal/srcimporter/srcimporter_test.go b/src/go/internal/srcimporter/srcimporter_test.go index c456b8e26a..102ac43f94 100644 --- a/src/go/internal/srcimporter/srcimporter_test.go +++ b/src/go/internal/srcimporter/srcimporter_test.go @@ -5,11 +5,13 @@ package srcimporter import ( + "flag" "go/build" "go/token" "go/types" "internal/testenv" "io/ioutil" + "os" "path" "path/filepath" "runtime" @@ -18,6 +20,14 @@ import ( "time" ) +func TestMain(m *testing.M) { + flag.Parse() + if goTool, err := testenv.GoTool(); err == nil { + os.Setenv("PATH", filepath.Dir(goTool)+string(os.PathListSeparator)+os.Getenv("PATH")) + } + os.Exit(m.Run()) +} + const maxTime = 2 * time.Second var importer = New(&build.Default, token.NewFileSet(), make(map[string]*types.Package)) diff --git a/src/text/template/link_test.go b/src/text/template/link_test.go index b7415d29bb..4eac7e6755 100644 --- a/src/text/template/link_test.go +++ b/src/text/template/link_test.go @@ -49,7 +49,7 @@ func main() { if err := ioutil.WriteFile(filepath.Join(td, "x.go"), []byte(prog), 0644); err != nil { t.Fatal(err) } - cmd := exec.Command("go", "build", "-o", "x.exe", "x.go") + cmd := exec.Command(testenv.GoToolPath(t), "build", "-o", "x.exe", "x.go") cmd.Dir = td if out, err := cmd.CombinedOutput(); err != nil { t.Fatalf("go build: %v, %s", err, out)