aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2019-03-05 08:51:44 -0500
committerBryan C. Mills <bcmills@google.com>2019-03-05 18:21:29 +0000
commit9670e81c2e776b4781bc4cecddf45052ebf0afe6 (patch)
tree39085167c8c83b96e423334cfa67c62d973e96ab /src
parente44a031651d042107d446b4038a70c6da763e2d5 (diff)
downloadgo-9670e81c2e776b4781bc4cecddf45052ebf0afe6.tar.xz
all: add -mod=vendor to GOFLAGS in tests that execute 'go' commands within std or cmd
Updates #30228 Updates #30240 Updates #30241 Change-Id: Idc311ba77e99909318b5b86f8ef82d4878f73e47 Reviewed-on: https://go-review.googlesource.com/c/go/+/165378 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/addr2line/addr2line_test.go2
-rw-r--r--src/cmd/compile/internal/gc/scope_test.go2
-rw-r--r--src/cmd/cover/cover_test.go2
-rw-r--r--src/cmd/go/go_test.go4
-rw-r--r--src/cmd/internal/obj/x86/obj6_test.go2
-rw-r--r--src/cmd/link/internal/ld/ld_test.go2
-rw-r--r--src/cmd/link/link_test.go2
-rw-r--r--src/cmd/nm/nm_test.go2
-rw-r--r--src/cmd/objdump/objdump_test.go2
-rw-r--r--src/cmd/vet/all/main.go1
-rw-r--r--src/cmd/vet/vet_test.go2
-rw-r--r--src/crypto/x509/x509_test.go2
-rw-r--r--src/debug/gosym/pclntab_test.go2
-rw-r--r--src/go/importer/importer_test.go2
-rw-r--r--src/go/internal/srcimporter/srcimporter_test.go18
-rw-r--r--src/internal/testenv/testenv.go26
-rw-r--r--src/runtime/crash_test.go2
-rw-r--r--src/runtime/pprof/proto_test.go2
18 files changed, 59 insertions, 18 deletions
diff --git a/src/cmd/addr2line/addr2line_test.go b/src/cmd/addr2line/addr2line_test.go
index 22bf1379bb..183a22f8f3 100644
--- a/src/cmd/addr2line/addr2line_test.go
+++ b/src/cmd/addr2line/addr2line_test.go
@@ -115,3 +115,5 @@ func TestAddr2Line(t *testing.T) {
testAddr2Line(t, exepath, syms[symName])
testAddr2Line(t, exepath, "0x"+syms[symName])
}
+
+func init() { testenv.SetModVendor() }
diff --git a/src/cmd/compile/internal/gc/scope_test.go b/src/cmd/compile/internal/gc/scope_test.go
index e327dc02af..e4861c686c 100644
--- a/src/cmd/compile/internal/gc/scope_test.go
+++ b/src/cmd/compile/internal/gc/scope_test.go
@@ -202,6 +202,8 @@ var testfile = []testline{
const detailOutput = false
+func init() { testenv.SetModVendor() }
+
// Compiles testfile checks that the description of lexical blocks emitted
// by the linker in debug_info, for each function in the main package,
// corresponds to what we expect it to be.
diff --git a/src/cmd/cover/cover_test.go b/src/cmd/cover/cover_test.go
index f002442b63..d7e6ca99b7 100644
--- a/src/cmd/cover/cover_test.go
+++ b/src/cmd/cover/cover_test.go
@@ -77,6 +77,8 @@ var debug = flag.Bool("debug", false, "keep rewritten files for debugging")
// We use TestMain to set up a temporary directory and remove it when
// the tests are done.
func TestMain(m *testing.M) {
+ testenv.SetModVendor()
+
dir, err := ioutil.TempDir("", "gotestcover")
if err != nil {
fmt.Fprintln(os.Stderr, err)
diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go
index dfada6c806..9ba52e609e 100644
--- a/src/cmd/go/go_test.go
+++ b/src/cmd/go/go_test.go
@@ -212,7 +212,9 @@ func TestMain(m *testing.M) {
return
}
- out, err := exec.Command(gotool, args...).CombinedOutput()
+ buildCmd := exec.Command(gotool, args...)
+ buildCmd.Env = append(os.Environ(), "GOFLAGS=-mod=vendor")
+ out, err := buildCmd.CombinedOutput()
if err != nil {
fmt.Fprintf(os.Stderr, "building testgo failed: %v\n%s", err, out)
os.Exit(2)
diff --git a/src/cmd/internal/obj/x86/obj6_test.go b/src/cmd/internal/obj/x86/obj6_test.go
index c5399744f2..2b1a729c8f 100644
--- a/src/cmd/internal/obj/x86/obj6_test.go
+++ b/src/cmd/internal/obj/x86/obj6_test.go
@@ -134,6 +134,8 @@ func parseOutput(t *testing.T, td *ParsedTestData, asmout []byte) {
}
}
+func init() { testenv.SetModVendor() }
+
func TestDynlink(t *testing.T) {
testenv.MustHaveGoBuild(t)
diff --git a/src/cmd/link/internal/ld/ld_test.go b/src/cmd/link/internal/ld/ld_test.go
index 0816429316..219b2a63ca 100644
--- a/src/cmd/link/internal/ld/ld_test.go
+++ b/src/cmd/link/internal/ld/ld_test.go
@@ -13,6 +13,8 @@ import (
"testing"
)
+func init() { testenv.SetModVendor() }
+
func TestUndefinedRelocErrors(t *testing.T) {
t.Parallel()
testenv.MustHaveGoBuild(t)
diff --git a/src/cmd/link/link_test.go b/src/cmd/link/link_test.go
index 5200c3a6f0..5043a778ca 100644
--- a/src/cmd/link/link_test.go
+++ b/src/cmd/link/link_test.go
@@ -38,6 +38,8 @@ func TestLargeSymName(t *testing.T) {
_ = AuthorPaidByTheColumnInch
}
+func init() { testenv.SetModVendor() }
+
func TestIssue21703(t *testing.T) {
t.Parallel()
diff --git a/src/cmd/nm/nm_test.go b/src/cmd/nm/nm_test.go
index 8176ddd7f4..82f4235510 100644
--- a/src/cmd/nm/nm_test.go
+++ b/src/cmd/nm/nm_test.go
@@ -30,6 +30,8 @@ func testMain(m *testing.M) int {
return 0
}
+ testenv.SetModVendor()
+
tmpDir, err := ioutil.TempDir("", "TestNM")
if err != nil {
fmt.Println("TempDir failed:", err)
diff --git a/src/cmd/objdump/objdump_test.go b/src/cmd/objdump/objdump_test.go
index a2ca329609..7c874e853b 100644
--- a/src/cmd/objdump/objdump_test.go
+++ b/src/cmd/objdump/objdump_test.go
@@ -24,6 +24,8 @@ func TestMain(m *testing.M) {
if !testenv.HasGoBuild() {
return
}
+ testenv.SetModVendor()
+
var exitcode int
if err := buildObjdump(); err == nil {
exitcode = m.Run()
diff --git a/src/cmd/vet/all/main.go b/src/cmd/vet/all/main.go
index 2500c690bf..8cc4140e6e 100644
--- a/src/cmd/vet/all/main.go
+++ b/src/cmd/vet/all/main.go
@@ -44,6 +44,7 @@ func main() {
log.SetPrefix("vet/all: ")
log.SetFlags(0)
+ testenv.SetModVendor()
var err error
cmdGoPath, err = testenv.GoTool()
if err != nil {
diff --git a/src/cmd/vet/vet_test.go b/src/cmd/vet/vet_test.go
index 5d8139d977..62c28fb9a2 100644
--- a/src/cmd/vet/vet_test.go
+++ b/src/cmd/vet/vet_test.go
@@ -32,6 +32,8 @@ func TestMain(m *testing.M) {
}
func testMain(m *testing.M) int {
+ testenv.SetModVendor()
+
dir, err := ioutil.TempDir("", "vet_test")
if err != nil {
fmt.Fprintln(os.Stderr, err)
diff --git a/src/crypto/x509/x509_test.go b/src/crypto/x509/x509_test.go
index f5851f1f11..fbcdb7b58e 100644
--- a/src/crypto/x509/x509_test.go
+++ b/src/crypto/x509/x509_test.go
@@ -1146,6 +1146,8 @@ func TestParsePEMCRL(t *testing.T) {
// Can't check the signature here without a package cycle.
}
+func init() { testenv.SetModVendor() }
+
func TestImports(t *testing.T) {
testenv.MustHaveGoRun(t)
diff --git a/src/debug/gosym/pclntab_test.go b/src/debug/gosym/pclntab_test.go
index d21f0e24a8..c67fb66f0d 100644
--- a/src/debug/gosym/pclntab_test.go
+++ b/src/debug/gosym/pclntab_test.go
@@ -21,6 +21,8 @@ var (
pclinetestBinary string
)
+func init() { testenv.SetModVendor() }
+
func dotest(t *testing.T) {
testenv.MustHaveGoBuild(t)
// For now, only works on amd64 platforms.
diff --git a/src/go/importer/importer_test.go b/src/go/importer/importer_test.go
index ff6e12c0da..2887ec6ea5 100644
--- a/src/go/importer/importer_test.go
+++ b/src/go/importer/importer_test.go
@@ -16,6 +16,8 @@ import (
"testing"
)
+func init() { testenv.SetModVendor() }
+
func TestForCompiler(t *testing.T) {
testenv.MustHaveGoBuild(t)
diff --git a/src/go/internal/srcimporter/srcimporter_test.go b/src/go/internal/srcimporter/srcimporter_test.go
index f8e1c323b3..06472447a6 100644
--- a/src/go/internal/srcimporter/srcimporter_test.go
+++ b/src/go/internal/srcimporter/srcimporter_test.go
@@ -10,7 +10,6 @@ import (
"go/types"
"internal/testenv"
"io/ioutil"
- "os"
"path"
"path/filepath"
"runtime"
@@ -19,22 +18,7 @@ import (
"time"
)
-func TestMain(m *testing.M) {
- // Add -mod=vendor to GOFLAGS to ensure that we don't fetch modules while importing std or cmd.
- //
- // TODO(golang.org/issue/30240): If we load go.mod files from vendor/
- // automatically, this will probably no longer be necessary.
- var goflags []string
- for _, f := range strings.Fields(os.Getenv("GOFLAGS")) {
- if !strings.HasPrefix(f, "-mod=") && !strings.HasPrefix(f, "--mod=") {
- goflags = append(goflags, f)
- }
- }
- goflags = append(goflags, "-mod=vendor")
- os.Setenv("GOFLAGS", strings.Join(goflags, " "))
-
- os.Exit(m.Run())
-}
+func init() { testenv.SetModVendor() }
const maxTime = 2 * time.Second
diff --git a/src/internal/testenv/testenv.go b/src/internal/testenv/testenv.go
index 8f69fe0da5..72e4d803cb 100644
--- a/src/internal/testenv/testenv.go
+++ b/src/internal/testenv/testenv.go
@@ -19,6 +19,7 @@ import (
"runtime"
"strconv"
"strings"
+ "sync"
"testing"
)
@@ -77,6 +78,31 @@ func MustHaveGoRun(t testing.TB) {
}
}
+var modVendorOnce sync.Once
+
+// SetModVendor adds the "-mod=vendor" flag to the GOFLAGS environment variable.
+// This allows tests whose working directories are within the cmd and std
+// modules to run ``go'' commands without accessing the network to load
+// dependencies modules.
+//
+// SetModVendor must be called before any test may read the GOFLAGS environment
+// variable.
+//
+// TODO(golang.org/issue/30240): If we load go.mod files from vendor/
+// automatically, this will probably no longer be necessary.
+func SetModVendor() {
+ modVendorOnce.Do(func() {
+ var goflags []string
+ for _, f := range strings.Fields(os.Getenv("GOFLAGS")) {
+ if !strings.HasPrefix(f, "-mod=") && !strings.HasPrefix(f, "--mod=") {
+ goflags = append(goflags, f)
+ }
+ }
+ goflags = append(goflags, "-mod=vendor")
+ os.Setenv("GOFLAGS", strings.Join(goflags, " "))
+ })
+}
+
// GoToolPath reports the path to the Go tool.
// It is a convenience wrapper around GoTool.
// If the tool is unavailable GoToolPath calls t.Skip.
diff --git a/src/runtime/crash_test.go b/src/runtime/crash_test.go
index 03ebf022a6..3a27b269a1 100644
--- a/src/runtime/crash_test.go
+++ b/src/runtime/crash_test.go
@@ -25,6 +25,8 @@ import (
var toRemove []string
func TestMain(m *testing.M) {
+ testenv.SetModVendor()
+
status := m.Run()
for _, file := range toRemove {
os.RemoveAll(file)
diff --git a/src/runtime/pprof/proto_test.go b/src/runtime/pprof/proto_test.go
index 4452d51231..a276d81c49 100644
--- a/src/runtime/pprof/proto_test.go
+++ b/src/runtime/pprof/proto_test.go
@@ -301,6 +301,8 @@ func TestProcSelfMaps(t *testing.T) {
})
}
+func init() { testenv.SetModVendor() }
+
// TestMapping checkes the mapping section of CPU profiles
// has the HasFunctions field set correctly. If all PCs included
// in the samples are successfully symbolized, the corresponding