Skip to content

Commit

Permalink
cmd/go: derive TestExecutableGOROOT environment from tg.env instead o…
Browse files Browse the repository at this point in the history
…f os.Environ()

TestExecutableGOROOT, unlike most other tests in go_test.go, was
running subcommands in a process with an environment derived directly
from os.Environ(), rather than using tg.env on its testgoData object.

Since tg.env is what sets GO111MODULE=off for GOPATH-mode tests, that
caused TestExecutableGOROOT to unexpectedly run in module mode instead
of GOPATH mode. If the user's environment included 'GOFLAGS=-mod=mod',
that would cause the test to spuriously fail due to the inability to
download modules to $HOME (which in this test binary is hard-coded to
"/test-go-home-does-not-exist").

Updates #33848

Change-Id: I2f343008dd9e38cd76b9919eafd5a3181d0cbd6f
Reviewed-on: https://go-review.googlesource.com/c/go/+/205064
Run-TryBot: Bryan C. Mills <[email protected]>
TryBot-Result: Gobot Gobot <[email protected]>
Reviewed-by: Ian Lance Taylor <[email protected]>
  • Loading branch information
Bryan C. Mills committed Nov 5, 2019
1 parent f0390ff commit 414c1d4
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 19 deletions.
27 changes: 10 additions & 17 deletions src/cmd/go/go_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4687,23 +4687,19 @@ func copyFile(src, dst string, perm os.FileMode) error {
return err2
}

// TestExecutableGOROOT verifies that the cmd/go binary itself uses
// os.Executable (when available) to locate GOROOT.
func TestExecutableGOROOT(t *testing.T) {
skipIfGccgo(t, "gccgo has no GOROOT")
if runtime.GOOS == "openbsd" {
t.Skipf("test case does not work on %s, missing os.Executable", runtime.GOOS)
}

// Env with no GOROOT.
var env []string
for _, e := range os.Environ() {
if !strings.HasPrefix(e, "GOROOT=") {
env = append(env, e)
}
}
// Note: Must not call tg methods inside subtests: tg is attached to outer t.
tg := testgo(t)
tg.unsetenv("GOROOT")
defer tg.cleanup()

check := func(t *testing.T, exe, want string) {
cmd := exec.Command(exe, "env", "GOROOT")
cmd.Env = env
cmd.Env = tg.env
out, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("%s env GOROOT: %v, %s", exe, err, out)
Expand All @@ -4723,10 +4719,6 @@ func TestExecutableGOROOT(t *testing.T) {
}
}

// Note: Must not call tg methods inside subtests: tg is attached to outer t.
tg := testgo(t)
defer tg.cleanup()

tg.makeTempdir()
tg.tempDir("new/bin")
newGoTool := tg.path("new/bin/go" + exeSuffix)
Expand Down Expand Up @@ -4773,8 +4765,9 @@ func TestExecutableGOROOT(t *testing.T) {
}

cmd := exec.Command(newGoTool, "run", "testdata/print_goroot.go")
cmd.Env = env
out, err := cmd.CombinedOutput()
cmd.Env = tg.env
cmd.Stderr = os.Stderr
out, err := cmd.Output()
if err != nil {
t.Fatalf("%s run testdata/print_goroot.go: %v, %s", newGoTool, err, out)
}
Expand Down
7 changes: 5 additions & 2 deletions src/cmd/go/testdata/print_goroot.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@

package main

import "runtime"
import (
"fmt"
"runtime"
)

func main() {
println(runtime.GOROOT())
fmt.Println(runtime.GOROOT())
}

0 comments on commit 414c1d4

Please sign in to comment.