mirror of
https://github.com/golang/go
synced 2024-11-12 13:20:31 -07:00
632162ccbc
Android tests are built on the host and run on the device. To do that, the exec wrapper copies the test binary and testdata to the device. To enable many more tests, make the copied environment more like the host: - Copy all of pkg from GOROOT, not just the android pkg directory. - Copy any parent testdata directories as well as the package's own. - Copy *.go files from the package directory. This enables misc/cgo/stdio and misc/cgo/life tests that were invisible before so disable them explicitly. - Always copy the GOROOT, even for tests outside GOROOT. This is expensive but only done once per make.bash. - Build the go tool for the device and put it in PATH. Set GOCACHE to a writable directory and disable cgo. While here, use a single directory for all the exec wrapper files and delete that once per make.bash as well. In total, this CL enables many tests in the subrepos that would need skips without it, in particular the x/tools tests. Fixes #11452 Updates #23824 Updates #11811 Change-Id: I2e50d8b57db9bc4637f25272a5360c8b2cf4e627 Reviewed-on: https://go-review.googlesource.com/c/go/+/165797 Reviewed-by: Bryan C. Mills <bcmills@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
// Copyright 2019 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package stdio_test
|
|
|
|
import (
|
|
"bytes"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
log.SetFlags(log.Lshortfile)
|
|
os.Exit(testMain(m))
|
|
}
|
|
|
|
func testMain(m *testing.M) int {
|
|
GOPATH, err := ioutil.TempDir("", "cgostdio")
|
|
if err != nil {
|
|
log.Panic(err)
|
|
}
|
|
defer os.RemoveAll(GOPATH)
|
|
os.Setenv("GOPATH", GOPATH)
|
|
|
|
// Copy testdata into GOPATH/src/cgostdio, along with a go.mod file
|
|
// declaring the same path.
|
|
modRoot := filepath.Join(GOPATH, "src", "cgostdio")
|
|
if err := overlayDir(modRoot, "testdata"); err != nil {
|
|
log.Panic(err)
|
|
}
|
|
if err := os.Chdir(modRoot); err != nil {
|
|
log.Panic(err)
|
|
}
|
|
os.Setenv("PWD", modRoot)
|
|
if err := ioutil.WriteFile("go.mod", []byte("module cgostdio\n"), 0666); err != nil {
|
|
log.Panic(err)
|
|
}
|
|
|
|
return m.Run()
|
|
}
|
|
|
|
func TestTestRun(t *testing.T) {
|
|
if os.Getenv("GOOS") == "android" {
|
|
t.Skip("subpackage stdio is not available on android")
|
|
}
|
|
out, err := exec.Command("go", "env", "GOROOT").Output()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
GOROOT := string(bytes.TrimSpace(out))
|
|
|
|
cmd := exec.Command("go", "run", filepath.Join(GOROOT, "test", "run.go"), "-", ".")
|
|
out, err = cmd.CombinedOutput()
|
|
if err != nil {
|
|
t.Fatalf("%s: %s\n%s", strings.Join(cmd.Args, " "), err, out)
|
|
}
|
|
t.Logf("%s:\n%s", strings.Join(cmd.Args, " "), out)
|
|
}
|