mirror of
https://github.com/golang/go
synced 2024-10-14 03:43:28 +00:00
test: avoid writing temporary files to GOROOT
This reverts CL 207477, restoring CL 207352 with a fix for the regression observed in the Windows builders. cmd/compile evidently does not fully support NUL as an output on Windows, so this time we write ignored 'compile' outputs to temporary files (instead of os.DevNull as in CL 207352). Updates #28387 Fixes #35619 Change-Id: I2edc5727c3738fa1bccb4b74e50d114cf2a7fcff Reviewed-on: https://go-review.googlesource.com/c/go/+/207602 Run-TryBot: Bryan C. Mills <bcmills@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
2bde3c13f6
commit
afac2c0508
14
src/cmd/dist/test.go
vendored
14
src/cmd/dist/test.go
vendored
|
@ -1358,17 +1358,21 @@ var runtest struct {
|
||||||
|
|
||||||
func (t *tester) testDirTest(dt *distTest, shard, shards int) error {
|
func (t *tester) testDirTest(dt *distTest, shard, shards int) error {
|
||||||
runtest.Do(func() {
|
runtest.Do(func() {
|
||||||
const exe = "runtest.exe" // named exe for Windows, but harmless elsewhere
|
f, err := ioutil.TempFile("", "runtest-*.exe") // named exe for Windows, but harmless elsewhere
|
||||||
cmd := t.dirCmd("test", "go", "build", "-o", exe, "run.go")
|
if err != nil {
|
||||||
cmd.Env = append(os.Environ(), "GOOS="+gohostos, "GOARCH="+gohostarch)
|
|
||||||
runtest.exe = filepath.Join(cmd.Dir, exe)
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
runtest.err = err
|
runtest.err = err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
f.Close()
|
||||||
|
|
||||||
|
runtest.exe = f.Name()
|
||||||
xatexit(func() {
|
xatexit(func() {
|
||||||
os.Remove(runtest.exe)
|
os.Remove(runtest.exe)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
cmd := t.dirCmd("test", "go", "build", "-o", runtest.exe, "run.go")
|
||||||
|
cmd.Env = append(os.Environ(), "GOOS="+gohostos, "GOARCH="+gohostarch)
|
||||||
|
runtest.err = cmd.Run()
|
||||||
})
|
})
|
||||||
if runtest.err != nil {
|
if runtest.err != nil {
|
||||||
return runtest.err
|
return runtest.err
|
||||||
|
|
|
@ -9,22 +9,34 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var tmpDir string
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
run("go", "tool", "compile", filepath.Join("fixedbugs", "bug302.dir", "p.go"))
|
fb, err := filepath.Abs("fixedbugs")
|
||||||
|
if err == nil {
|
||||||
|
tmpDir, err = ioutil.TempDir("", "bug302")
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(tmpDir)
|
||||||
|
|
||||||
|
run("go", "tool", "compile", filepath.Join(fb, "bug302.dir", "p.go"))
|
||||||
run("go", "tool", "pack", "grc", "pp.a", "p.o")
|
run("go", "tool", "pack", "grc", "pp.a", "p.o")
|
||||||
run("go", "tool", "compile", "-I", ".", filepath.Join("fixedbugs", "bug302.dir", "main.go"))
|
run("go", "tool", "compile", "-I", ".", filepath.Join(fb, "bug302.dir", "main.go"))
|
||||||
os.Remove("p.o")
|
|
||||||
os.Remove("pp.a")
|
|
||||||
os.Remove("main.o")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func run(cmd string, args ...string) {
|
func run(cmd string, args ...string) {
|
||||||
out, err := exec.Command(cmd, args...).CombinedOutput()
|
c := exec.Command(cmd, args...)
|
||||||
|
c.Dir = tmpDir
|
||||||
|
out, err := c.CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(string(out))
|
fmt.Println(string(out))
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
|
|
|
@ -11,6 +11,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
@ -20,16 +21,19 @@ func main() {
|
||||||
err := os.Chdir(filepath.Join(".", "fixedbugs", "bug369.dir"))
|
err := os.Chdir(filepath.Join(".", "fixedbugs", "bug369.dir"))
|
||||||
check(err)
|
check(err)
|
||||||
|
|
||||||
run("go", "tool", "compile", "-N", "-o", "slow.o", "pkg.go")
|
tmpDir, err := ioutil.TempDir("", "bug369")
|
||||||
run("go", "tool", "compile", "-o", "fast.o", "pkg.go")
|
check(err)
|
||||||
run("go", "tool", "compile", "-o", "main.o", "main.go")
|
defer os.RemoveAll(tmpDir)
|
||||||
run("go", "tool", "link", "-o", "a.exe", "main.o")
|
|
||||||
run("." + string(filepath.Separator) + "a.exe")
|
|
||||||
|
|
||||||
os.Remove("slow.o")
|
tmp := func(name string) string {
|
||||||
os.Remove("fast.o")
|
return filepath.Join(tmpDir, name)
|
||||||
os.Remove("main.o")
|
}
|
||||||
os.Remove("a.exe")
|
|
||||||
|
run("go", "tool", "compile", "-N", "-o", tmp("slow.o"), "pkg.go")
|
||||||
|
run("go", "tool", "compile", "-o", tmp("fast.o"), "pkg.go")
|
||||||
|
run("go", "tool", "compile", "-D", tmpDir, "-o", tmp("main.o"), "main.go")
|
||||||
|
run("go", "tool", "link", "-o", tmp("a.exe"), tmp("main.o"))
|
||||||
|
run(tmp("a.exe"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func run(name string, args ...string) {
|
func run(name string, args ...string) {
|
||||||
|
|
|
@ -8,6 +8,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
@ -23,8 +24,15 @@ func main() {
|
||||||
err := os.Chdir(filepath.Join("fixedbugs", "issue9355.dir"))
|
err := os.Chdir(filepath.Join("fixedbugs", "issue9355.dir"))
|
||||||
check(err)
|
check(err)
|
||||||
|
|
||||||
out := run("go", "tool", "compile", "-S", "a.go")
|
f, err := ioutil.TempFile("", "issue9355-*.o")
|
||||||
os.Remove("a.o")
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
f.Close()
|
||||||
|
|
||||||
|
out := run("go", "tool", "compile", "-o", f.Name(), "-S", "a.go")
|
||||||
|
os.Remove(f.Name())
|
||||||
|
|
||||||
// 6g/8g print the offset as dec, but 5g/9g print the offset as hex.
|
// 6g/8g print the offset as dec, but 5g/9g print the offset as hex.
|
||||||
patterns := []string{
|
patterns := []string{
|
||||||
|
|
|
@ -11,21 +11,21 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var tmpDir string
|
||||||
|
|
||||||
func cleanup() {
|
func cleanup() {
|
||||||
os.Remove("linkmain.o")
|
os.RemoveAll(tmpDir)
|
||||||
os.Remove("linkmain.a")
|
|
||||||
os.Remove("linkmain1.o")
|
|
||||||
os.Remove("linkmain1.a")
|
|
||||||
os.Remove("linkmain.exe")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func run(cmdline string) {
|
func run(cmdline ...string) {
|
||||||
args := strings.Fields(cmdline)
|
args := strings.Fields(strings.Join(cmdline, " "))
|
||||||
cmd := exec.Command(args[0], args[1:]...)
|
cmd := exec.Command(args[0], args[1:]...)
|
||||||
out, err := cmd.CombinedOutput()
|
out, err := cmd.CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -37,8 +37,8 @@ func run(cmdline string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func runFail(cmdline string) {
|
func runFail(cmdline ...string) {
|
||||||
args := strings.Fields(cmdline)
|
args := strings.Fields(strings.Join(cmdline, " "))
|
||||||
cmd := exec.Command(args[0], args[1:]...)
|
cmd := exec.Command(args[0], args[1:]...)
|
||||||
out, err := cmd.CombinedOutput()
|
out, err := cmd.CombinedOutput()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@ -51,16 +51,26 @@ func runFail(cmdline string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
var err error
|
||||||
|
tmpDir, err = ioutil.TempDir("", "")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
tmp := func(name string) string {
|
||||||
|
return filepath.Join(tmpDir, name)
|
||||||
|
}
|
||||||
|
|
||||||
// helloworld.go is package main
|
// helloworld.go is package main
|
||||||
run("go tool compile -o linkmain.o helloworld.go")
|
run("go tool compile -o", tmp("linkmain.o"), "helloworld.go")
|
||||||
run("go tool compile -pack -o linkmain.a helloworld.go")
|
run("go tool compile -pack -o", tmp("linkmain.a"), "helloworld.go")
|
||||||
run("go tool link -o linkmain.exe linkmain.o")
|
run("go tool link -o", tmp("linkmain.exe"), tmp("linkmain.o"))
|
||||||
run("go tool link -o linkmain.exe linkmain.a")
|
run("go tool link -o", tmp("linkmain.exe"), tmp("linkmain.a"))
|
||||||
|
|
||||||
// linkmain.go is not
|
// linkmain.go is not
|
||||||
run("go tool compile -o linkmain1.o linkmain.go")
|
run("go tool compile -o", tmp("linkmain1.o"), "linkmain.go")
|
||||||
run("go tool compile -pack -o linkmain1.a linkmain.go")
|
run("go tool compile -pack -o", tmp("linkmain1.a"), "linkmain.go")
|
||||||
runFail("go tool link -o linkmain.exe linkmain1.o")
|
runFail("go tool link -o", tmp("linkmain.exe"), tmp("linkmain1.o"))
|
||||||
runFail("go tool link -o linkmain.exe linkmain1.a")
|
runFail("go tool link -o", tmp("linkmain.exe"), tmp("linkmain1.a"))
|
||||||
cleanup()
|
cleanup()
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,20 +12,32 @@ package main
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
cmd := exec.Command("go", "tool", "compile", "-S", "sinit.go")
|
f, err := ioutil.TempFile("", "sinit-*.o")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
f.Close()
|
||||||
|
|
||||||
|
cmd := exec.Command("go", "tool", "compile", "-o", f.Name(), "-S", "sinit.go")
|
||||||
out, err := cmd.CombinedOutput()
|
out, err := cmd.CombinedOutput()
|
||||||
|
os.Remove(f.Name())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(string(out))
|
fmt.Println(string(out))
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
os.Remove("sinit.o")
|
|
||||||
|
|
||||||
|
if len(bytes.TrimSpace(out)) == 0 {
|
||||||
|
fmt.Println("'go tool compile -S sinit.go' printed no output")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
if bytes.Contains(out, []byte("initdone")) {
|
if bytes.Contains(out, []byte("initdone")) {
|
||||||
fmt.Println("sinit generated an init function")
|
fmt.Println("sinit generated an init function")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|
Loading…
Reference in a new issue