From: Michael Matloob Date: Mon, 13 Jan 2020 20:24:56 +0000 (-0500) Subject: cmd/go: convert testCDAndGOPATHAreDifferent to the script framework X-Git-Tag: go1.15beta1~1013 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6ef25c2ad3e1051629e78de0a8cd3553d48c832e;p=gostls13.git cmd/go: convert testCDAndGOPATHAreDifferent to the script framework This is a bit complex. There's a driver program to run go with modifications to the GOPATH used to test Windows. Also remove the cd method on testgoData, because this was the last function that used it. Part of converting all tests to script framework to improve test parallelism. Updates #36320 Updates #17751 Change-Id: I3e8e27f37fd3701bd36b6365b128dd73b69181c0 Reviewed-on: https://go-review.googlesource.com/c/go/+/214578 Reviewed-by: Jay Conrod --- diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index 9d9d898ae3..56c8a74748 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -388,24 +388,6 @@ func (tg *testgoData) pwd() string { return wd } -// cd changes the current directory to the named directory. Note that -// using this means that the test must not be run in parallel with any -// other tests. -func (tg *testgoData) cd(dir string) { - tg.t.Helper() - if tg.inParallel { - tg.t.Fatal("internal testsuite error: changing directory when running in parallel") - } - if tg.wd == "" { - tg.wd = tg.pwd() - } - abs, err := filepath.Abs(dir) - tg.must(os.Chdir(dir)) - if err == nil { - tg.setenv("PWD", abs) - } -} - // sleep sleeps for one tick, where a tick is a conservative estimate // of how long it takes for a file modification to get a different // mtime. @@ -2872,40 +2854,6 @@ func TestLinkerTmpDirIsDeleted(t *testing.T) { } } -func testCDAndGOPATHAreDifferent(tg *testgoData, cd, gopath string) { - skipIfGccgo(tg.t, "gccgo does not support -ldflags -X") - tg.setenv("GOPATH", gopath) - - tg.tempDir("dir") - exe := tg.path("dir/a.exe") - - tg.cd(cd) - - tg.run("build", "-o", exe, "-ldflags", "-X=my.pkg.Text=linkXworked") - out, err := exec.Command(exe).CombinedOutput() - if err != nil { - tg.t.Fatal(err) - } - if string(out) != "linkXworked\n" { - tg.t.Errorf(`incorrect output with GOPATH=%q and CD=%q: expected "linkXworked\n", but have %q`, gopath, cd, string(out)) - } -} - -func TestCDAndGOPATHAreDifferent(t *testing.T) { - tg := testgo(t) - defer tg.cleanup() - - gopath := filepath.Join(tg.pwd(), "testdata") - cd := filepath.Join(gopath, "src/my.pkg/main") - - testCDAndGOPATHAreDifferent(tg, cd, gopath) - if runtime.GOOS == "windows" { - testCDAndGOPATHAreDifferent(tg, cd, strings.ReplaceAll(gopath, `\`, `/`)) - testCDAndGOPATHAreDifferent(tg, cd, strings.ToUpper(gopath)) - testCDAndGOPATHAreDifferent(tg, cd, strings.ToLower(gopath)) - } -} - // Issue 25093. func TestCoverpkgTestOnly(t *testing.T) { skipIfGccgo(t, "gccgo has no cover tool") diff --git a/src/cmd/go/testdata/script/build_cd_gopath_different.txt b/src/cmd/go/testdata/script/build_cd_gopath_different.txt new file mode 100644 index 0000000000..698b3d70f4 --- /dev/null +++ b/src/cmd/go/testdata/script/build_cd_gopath_different.txt @@ -0,0 +1,72 @@ +[gccgo] skip 'gccgo does not support -ldflags -X' +go build run_go.go + +# Apply identity function to GOPATH +exec ./run_go$GOEXE $GOPATH/src/my.pkg/main $GOPATH IDENTITY build -o $WORK/tmp/a.exe -ldflags -X=my.pkg.Text=linkXworked +exec $WORK/tmp/a.exe +stderr 'linkXworked' +rm $WORK/tmp/a.exe + +[!windows] stop 'rest of the tests only apply to Windows' + +# Replace '\' with '/' in GOPATH +exec ./run_go$GOEXE $GOPATH/src/my.pkg/main $GOPATH REPLACE_SLASH build -o $WORK/tmp/a.exe -ldflags -X=my.pkg.Text=linkXworked +exec $WORK/tmp/a.exe +stderr 'linkXworked' +rm $WORK/tmp/a.exe + +# Apply identity function to GOPATH +exec ./run_go$GOEXE $GOPATH/src/my.pkg/main $GOPATH UPPER build -o $WORK/tmp/a.exe -ldflags -X=my.pkg.Text=linkXworked +exec $WORK/tmp/a.exe +stderr 'linkXworked' +rm $WORK/tmp/a.exe + +# Apply identity function to GOPATH +exec ./run_go$GOEXE $GOPATH/src/my.pkg/main $GOPATH LOWER build -o $WORK/tmp/a.exe -ldflags -X=my.pkg.Text=linkXworked +exec $WORK/tmp/a.exe +stderr 'linkXworked' +rm $WORK/tmp/a.exe + +-- run_go.go -- +package main + +import ( + "fmt" + "os" + "os/exec" + "strings" +) + +func main() { + dir := os.Args[1] + gopath := os.Args[2] + switch os.Args[3] { + case "IDENTITY": + case "REPLACE_SLASH": gopath = strings.ReplaceAll(gopath, `\`, `/`) + case "UPPER": gopath = strings.ToUpper(gopath) + case "LOWER": gopath = strings.ToLower(gopath) + default: fmt.Fprintln(os.Stderr, "bad op"); os.Exit(1) + } + cmd := exec.Command("go", os.Args[4:]...) + cmd.Dir = dir + cmd.Env = append(os.Environ(), "GOPATH="+gopath) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} + +-- my.pkg/main/main.go -- +package main + +import "my.pkg" + +func main() { + println(pkg.Text) +} +-- my.pkg/pkg.go -- +package pkg + +var Text = "unset"