mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime, runtime/debug, runtime/race: deflake tests
R=golang-dev, dvyukov, bradfitz CC=golang-dev https://golang.org/cl/8366044
This commit is contained in:
parent
dc7daa550a
commit
4235fa8f2a
3 changed files with 21 additions and 3 deletions
|
|
@ -14,6 +14,22 @@ import (
|
||||||
"text/template"
|
"text/template"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// testEnv excludes GOGCTRACE from the environment
|
||||||
|
// to prevent its output from breaking tests that
|
||||||
|
// are trying to parse other command output.
|
||||||
|
func testEnv(cmd *exec.Cmd) *exec.Cmd {
|
||||||
|
if cmd.Env != nil {
|
||||||
|
panic("environment already set")
|
||||||
|
}
|
||||||
|
for _, env := range os.Environ() {
|
||||||
|
if strings.HasPrefix(env, "GOGCTRACE=") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
cmd.Env = append(cmd.Env, env)
|
||||||
|
}
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
func executeTest(t *testing.T, templ string, data interface{}) string {
|
func executeTest(t *testing.T, templ string, data interface{}) string {
|
||||||
checkStaleRuntime(t)
|
checkStaleRuntime(t)
|
||||||
|
|
||||||
|
|
@ -37,13 +53,13 @@ func executeTest(t *testing.T, templ string, data interface{}) string {
|
||||||
}
|
}
|
||||||
f.Close()
|
f.Close()
|
||||||
|
|
||||||
got, _ := exec.Command("go", "run", src).CombinedOutput()
|
got, _ := testEnv(exec.Command("go", "run", src)).CombinedOutput()
|
||||||
return string(got)
|
return string(got)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkStaleRuntime(t *testing.T) {
|
func checkStaleRuntime(t *testing.T) {
|
||||||
// 'go run' uses the installed copy of runtime.a, which may be out of date.
|
// 'go run' uses the installed copy of runtime.a, which may be out of date.
|
||||||
out, err := exec.Command("go", "list", "-f", "{{.Stale}}", "runtime").CombinedOutput()
|
out, err := testEnv(exec.Command("go", "list", "-f", "{{.Stale}}", "runtime")).CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to execute 'go list': %v\n%v", err, string(out))
|
t.Fatalf("failed to execute 'go list': %v\n%v", err, string(out))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestReadGCStats(t *testing.T) {
|
func TestReadGCStats(t *testing.T) {
|
||||||
|
defer SetGCPercent(SetGCPercent(-1))
|
||||||
|
|
||||||
var stats GCStats
|
var stats GCStats
|
||||||
var mstats runtime.MemStats
|
var mstats runtime.MemStats
|
||||||
var min, max time.Duration
|
var min, max time.Duration
|
||||||
|
|
|
||||||
|
|
@ -147,7 +147,7 @@ func runTests() ([]byte, error) {
|
||||||
// It is required because the tests contain a lot of data races on the same addresses
|
// It is required because the tests contain a lot of data races on the same addresses
|
||||||
// (the tests are simple and the memory is constantly reused).
|
// (the tests are simple and the memory is constantly reused).
|
||||||
for _, env := range os.Environ() {
|
for _, env := range os.Environ() {
|
||||||
if strings.HasPrefix(env, "GOMAXPROCS=") {
|
if strings.HasPrefix(env, "GOMAXPROCS=") || strings.HasPrefix(env, "GOGCTRACE=") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
cmd.Env = append(cmd.Env, env)
|
cmd.Env = append(cmd.Env, env)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue