aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCosmos Nicolaou <cosmos.nicolaou@gmail.com>2023-09-11 11:27:30 -0700
committerGopher Robot <gobot@golang.org>2023-09-14 18:57:54 +0000
commit7d0b611dbee183ada5e16be9884b90c3cf64fe3f (patch)
tree693035976a49c6973aee9e8bf7bd532a36db4151 /src
parent743121c45c0d8d6322046f2b14c1d17b39b612f1 (diff)
downloadgo-7d0b611dbee183ada5e16be9884b90c3cf64fe3f.tar.xz
runtime/pprof: TestVMInfo reworked to avoid test flakiness.
Fixes #62352. Change-Id: Ib137a5f39d4630c4737badfabe8e6740593ecbcf Reviewed-on: https://go-review.googlesource.com/c/go/+/527276 Reviewed-by: Cherry Mui <cherryyz@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Bryan Mills <bcmills@google.com> Run-TryBot: Bryan Mills <bcmills@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/runtime/pprof/vminfo_darwin_test.go31
1 files changed, 21 insertions, 10 deletions
diff --git a/src/runtime/pprof/vminfo_darwin_test.go b/src/runtime/pprof/vminfo_darwin_test.go
index b2b025668e..1a3b67a0bf 100644
--- a/src/runtime/pprof/vminfo_darwin_test.go
+++ b/src/runtime/pprof/vminfo_darwin_test.go
@@ -9,6 +9,7 @@ package pprof
import (
"bufio"
"bytes"
+ "fmt"
"internal/abi"
"internal/testenv"
"os"
@@ -56,19 +57,30 @@ func useVMMap(t *testing.T) (hi, lo uint64) {
pid := strconv.Itoa(os.Getpid())
testenv.MustHaveExecPath(t, "vmmap")
cmd := testenv.Command(t, "vmmap", pid)
- out, err := cmd.Output()
+ out, cmdErr := cmd.Output()
+ if cmdErr != nil {
+ t.Logf("vmmap output: %s", out)
+ if ee, ok := cmdErr.(*exec.ExitError); ok && len(ee.Stderr) > 0 {
+ t.Logf("%v: %v\n%s", cmd, cmdErr, ee.Stderr)
+ }
+ t.Logf("%v: %v", cmd, cmdErr)
+ }
+ // Always parse the output of vmmap since it may return an error
+ // code even if it successfully reports the text segment information
+ // required for this test.
+ hi, lo, err := parseVmmap(out)
if err != nil {
- t.Logf("vmmap failed: %s", out)
- if ee, ok := err.(*exec.ExitError); ok && len(ee.Stderr) > 0 {
- t.Fatalf("%v: %v\n%s", cmd, err, ee.Stderr)
+ if cmdErr != nil {
+ t.Fatalf("failed to parse vmmap output, vmmap reported an error: %v", err)
}
- t.Fatalf("%v: %v", cmd, err)
+ t.Logf("vmmap output: %s", out)
+ t.Fatalf("failed to parse vmmap output, vmmap did not report an error: %v", err)
}
- return parseVmmap(t, out)
+ return hi, lo
}
// parseVmmap parses the output of vmmap and calls addMapping for the first r-x TEXT segment in the output.
-func parseVmmap(t *testing.T, data []byte) (hi, lo uint64) {
+func parseVmmap(data []byte) (hi, lo uint64, err error) {
// vmmap 53799
// Process: gopls [53799]
// Path: /Users/USER/*/gopls
@@ -119,13 +131,12 @@ func parseVmmap(t *testing.T, data []byte) (hi, lo uint64) {
locs := strings.Split(p[1], "-")
start, _ := strconv.ParseUint(locs[0], 16, 64)
end, _ := strconv.ParseUint(locs[1], 16, 64)
- return start, end
+ return start, end, nil
}
}
if strings.HasPrefix(l, banner) {
grabbing = true
}
}
- t.Fatal("vmmap no text segment found")
- return 0, 0
+ return 0, 0, fmt.Errorf("vmmap no text segment found")
}