]> Cypherpunks.ru repositories - gostls13.git/commitdiff
all: use a hermetic "go" tool in standard-library tests
authorBryan C. Mills <bcmills@google.com>
Thu, 21 May 2020 18:16:50 +0000 (14:16 -0400)
committerBryan C. Mills <bcmills@google.com>
Thu, 21 May 2020 21:17:48 +0000 (21:17 +0000)
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 <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alexander Rakoczy <alex@golang.org>
src/go/build/build_test.go
src/go/internal/srcimporter/srcimporter_test.go
src/text/template/link_test.go

index 7151ba11806d671fba7af938d655212089edf9d4..a7f2a3e9028f4b37e9d702a2700f0e6f4ad99dbc 100644 (file)
@@ -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"
index c456b8e26a7823f355213ca2fcc9c4b910789c9d..102ac43f94506903f37a474289aa7421799e7b0d 100644 (file)
@@ -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))
index b7415d29bb6bb27fcac14421ceec52213ca777d5..4eac7e675514b4fd5dc49f8171ba2202be128c13 100644 (file)
@@ -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)