Skip to content

Commit

Permalink
cmd/go: in TestScript, set $GOEXE instead of $exe
Browse files Browse the repository at this point in the history
$GOEXE exists and is documented in 'go env', so $exe is redundant and
a bit confusing. Notably, mod_modinfo.txt already assumes that GOEXE
is set (even though it isn't), and thus fails on Windows.

After this CL, `go test cmd/go/...` passes on a windows-amd64-2016
builder. However, given that the $PATH on the builder is very minimal
(#32430) and network access is limited, tests that rely on binaries
(such as 'git') or external networking may still be broken.

Updates #25300

Change-Id: I9d80f2a0fbaa8bc35fa2205b6898aeccecda4e94
Reviewed-on: https://go-review.googlesource.com/c/go/+/181542
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 Jun 10, 2019
1 parent 5ce1819 commit bff0ae6
Show file tree
Hide file tree
Showing 7 changed files with 19 additions and 23 deletions.
7 changes: 2 additions & 5 deletions src/cmd/go/script_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"testing"
"time"

"cmd/go/internal/cfg"
"cmd/go/internal/imports"
"cmd/go/internal/par"
"cmd/go/internal/txtar"
Expand Down Expand Up @@ -106,6 +107,7 @@ func (ts *testScript) setup() {
"CCACHE_DISABLE=1", // ccache breaks with non-existent HOME
"GOARCH=" + runtime.GOARCH,
"GOCACHE=" + testGOCACHE,
"GOEXE=" + cfg.ExeSuffix,
"GOOS=" + runtime.GOOS,
"GOPATH=" + filepath.Join(ts.workdir, "gopath"),
"GOPROXY=" + proxyURL,
Expand All @@ -123,11 +125,6 @@ func (ts *testScript) setup() {
ts.env = append(ts.env, "path="+testBin+string(filepath.ListSeparator)+os.Getenv("path"))
}

if runtime.GOOS == "windows" {
ts.env = append(ts.env, "exe=.exe")
} else {
ts.env = append(ts.env, "exe=")
}
for _, key := range extraEnvKeys {
if val := os.Getenv(key); val != "" {
ts.env = append(ts.env, key+"="+val)
Expand Down
3 changes: 1 addition & 2 deletions src/cmd/go/testdata/script/README
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ Scripts also have access to these other environment variables:

GOARCH=<target GOARCH>
GOCACHE=<actual GOCACHE being used outside the test>
GOEXE=<executable file suffix: .exe on Windows, empty on other systems>
GOOS=<target GOOS>
GOPATH=$WORK/gopath
GOPROXY=<local module proxy serving from cmd/go/testdata/mod>
Expand All @@ -38,8 +39,6 @@ Scripts also have access to these other environment variables:
devnull=<value of os.DevNull>
goversion=<current Go version; for example, 1.12>

The environment variable $exe (lowercase) is an empty string on most systems, ".exe" on Windows.

The scripts supporting files are unpacked relative to $GOPATH/src (aka $WORK/gopath/src)
and then the script begins execution in that directory as well. Thus the example above runs
in $WORK/gopath/src with GOPATH=$WORK/gopath and $WORK/gopath/src/hello.go
Expand Down
4 changes: 2 additions & 2 deletions src/cmd/go/testdata/script/build_cache_link.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ go build -o $devnull -x main.go
stderr '(link|gccgo)( |\.exe)'

# ... but the output binary can serve as a cache.
go build -o main$exe -x main.go
go build -o main$GOEXE -x main.go
stderr '(link|gccgo)( |\.exe)'
go build -o main$exe -x main.go
go build -o main$GOEXE -x main.go
! stderr '(link|gccgo)( |\.exe)'

-- main.go --
Expand Down
2 changes: 1 addition & 1 deletion src/cmd/go/testdata/script/build_multi_main.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@ package pkg1
-- pkg2/pkg2.go --
package pkg2

-- c1$exe/keep.txt --
-- c1$GOEXE/keep.txt --
Create c1 directory.
12 changes: 6 additions & 6 deletions src/cmd/go/testdata/script/install_cleans_build.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@ env GO111MODULE=off
# 'go install' with no arguments should clean up after go build
cd mycmd
go build
exists mycmd$exe
exists mycmd$GOEXE
go install
! exists mycmd$exe
! exists mycmd$GOEXE

# 'go install mycmd' does not clean up, even in the mycmd directory
go build
exists mycmd$exe
exists mycmd$GOEXE
go install mycmd
exists mycmd$exe
exists mycmd$GOEXE

# 'go install mycmd' should not clean up in an unrelated current directory either
cd ..
cp mycmd/mycmd$exe mycmd$exe
cp mycmd/mycmd$GOEXE mycmd$GOEXE
go install mycmd
exists mycmd$exe
exists mycmd$GOEXE

-- mycmd/main.go --
package main
Expand Down
12 changes: 6 additions & 6 deletions src/cmd/go/testdata/script/mod_build_versioned.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ env GO111MODULE=on

go get -d rsc.io/fortune/v2

# The default executable name shouldn't be v2$exe
# The default executable name shouldn't be v2$GOEXE
go build rsc.io/fortune/v2
! exists v2$exe
exists fortune$exe
! exists v2$GOEXE
exists fortune$GOEXE

# The default test binary name shouldn't be v2.test$exe
# The default test binary name shouldn't be v2.test$GOEXE
go test -c rsc.io/fortune/v2
! exists v2.test$exe
exists fortune.test$exe
! exists v2.test$GOEXE
exists fortune.test$GOEXE

-- go.mod --
module scratch
2 changes: 1 addition & 1 deletion src/cmd/go/testdata/script/test_devnull.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ env GO111MODULE=off
# should work (see golang.org/issue/28035).
cd x
go test -o=$devnull -c
! exists x.test$exe
! exists x.test$GOEXE

-- x/x_test.go --
package x_test
Expand Down

0 comments on commit bff0ae6

Please sign in to comment.