Commit 8c24e522 authored by Russ Cox's avatar Russ Cox

runtime: check that pprof accepts but doesn't need executable

The profiles are self-contained now.
Check that they work by themselves in the tests that invoke pprof,
but also keep checking that the old command lines work.

Change-Id: I24c74b5456f0b50473883c3640625c6612f72309
Reviewed-on: https://go-review.googlesource.com/37166
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarMichael Matloob <matloob@golang.org>
parent 0b8c983e
...@@ -287,28 +287,34 @@ func testCgoPprof(t *testing.T, buildArg, runArg string) { ...@@ -287,28 +287,34 @@ func testCgoPprof(t *testing.T, buildArg, runArg string) {
fn := strings.TrimSpace(string(got)) fn := strings.TrimSpace(string(got))
defer os.Remove(fn) defer os.Remove(fn)
cmd := testEnv(exec.Command(testenv.GoToolPath(t), "tool", "pprof", "-top", "-nodecount=1", exe, fn)) for try := 0; try < 2; try++ {
cmd := testEnv(exec.Command(testenv.GoToolPath(t), "tool", "pprof", "-top", "-nodecount=1"))
found := false // Check that pprof works both with and without explicit executable on command line.
for i, e := range cmd.Env { if try == 0 {
if strings.HasPrefix(e, "PPROF_TMPDIR=") { cmd.Args = append(cmd.Args, exe, fn)
cmd.Env[i] = "PPROF_TMPDIR=" + os.TempDir() } else {
found = true cmd.Args = append(cmd.Args, fn)
break
} }
}
if !found {
cmd.Env = append(cmd.Env, "PPROF_TMPDIR="+os.TempDir())
}
top, err := cmd.CombinedOutput() found := false
t.Logf("%s", top) for i, e := range cmd.Env {
if err != nil { if strings.HasPrefix(e, "PPROF_TMPDIR=") {
t.Fatal(err) cmd.Env[i] = "PPROF_TMPDIR=" + os.TempDir()
} found = true
break
}
}
if !found {
cmd.Env = append(cmd.Env, "PPROF_TMPDIR="+os.TempDir())
}
if !bytes.Contains(top, []byte("cpuHog")) { top, err := cmd.CombinedOutput()
t.Error("missing cpuHog in pprof output") t.Logf("%s:\n%s", cmd.Args, top)
if err != nil {
t.Error(err)
} else if !bytes.Contains(top, []byte("cpuHog")) {
t.Error("missing cpuHog in pprof output")
}
} }
} }
......
...@@ -476,28 +476,33 @@ func TestMemPprof(t *testing.T) { ...@@ -476,28 +476,33 @@ func TestMemPprof(t *testing.T) {
fn := strings.TrimSpace(string(got)) fn := strings.TrimSpace(string(got))
defer os.Remove(fn) defer os.Remove(fn)
cmd := testEnv(exec.Command(testenv.GoToolPath(t), "tool", "pprof", "-alloc_space", "-top", exe, fn)) for try := 0; try < 2; try++ {
cmd := testEnv(exec.Command(testenv.GoToolPath(t), "tool", "pprof", "-alloc_space", "-top"))
found := false // Check that pprof works both with and without explicit executable on command line.
for i, e := range cmd.Env { if try == 0 {
if strings.HasPrefix(e, "PPROF_TMPDIR=") { cmd.Args = append(cmd.Args, exe, fn)
cmd.Env[i] = "PPROF_TMPDIR=" + os.TempDir() } else {
found = true cmd.Args = append(cmd.Args, fn)
break }
found := false
for i, e := range cmd.Env {
if strings.HasPrefix(e, "PPROF_TMPDIR=") {
cmd.Env[i] = "PPROF_TMPDIR=" + os.TempDir()
found = true
break
}
}
if !found {
cmd.Env = append(cmd.Env, "PPROF_TMPDIR="+os.TempDir())
} }
}
if !found {
cmd.Env = append(cmd.Env, "PPROF_TMPDIR="+os.TempDir())
}
top, err := cmd.CombinedOutput()
t.Logf("%s", top)
if err != nil {
t.Fatal(err)
}
if !bytes.Contains(top, []byte("MemProf")) { top, err := cmd.CombinedOutput()
t.Error("missing MemProf in pprof output") t.Logf("%s:\n%s", cmd.Args, top)
if err != nil {
t.Error(err)
} else if !bytes.Contains(top, []byte("MemProf")) {
t.Error("missing MemProf in pprof output")
}
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment