]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: convert testCDAndGOPATHAreDifferent to the script framework
authorMichael Matloob <matloob@golang.org>
Mon, 13 Jan 2020 20:24:56 +0000 (15:24 -0500)
committerMichael Matloob <matloob@golang.org>
Thu, 27 Feb 2020 21:34:42 +0000 (21:34 +0000)
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 <jayconrod@google.com>
src/cmd/go/go_test.go
src/cmd/go/testdata/script/build_cd_gopath_different.txt [new file with mode: 0644]

index 9d9d898ae3444ffaaab6cf068cb3fcc87014647f..56c8a7474869a5b360207588e9c59a494b52124b 100644 (file)
@@ -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 (file)
index 0000000..698b3d7
--- /dev/null
@@ -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"