tailcfg: add MapResponse.Debug mechanism to trigger logging heap pprof

Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick
2020-04-07 22:24:06 -07:00
committed by Brad Fitzpatrick
parent b0c10fa610
commit 703d789005
4 changed files with 102 additions and 0 deletions

View File

@ -0,0 +1,40 @@
// Copyright (c) 2020 Tailscale Inc & 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 logheap
import (
"bytes"
"compress/gzip"
"encoding/json"
"io/ioutil"
"testing"
)
func TestLogHeap(t *testing.T) {
var buf bytes.Buffer
if err := logHeap(&buf); err != nil {
t.Fatal(err)
}
t.Logf("Got line: %s", buf.Bytes())
var ll logLine
if err := json.Unmarshal(buf.Bytes(), &ll); err != nil {
t.Fatal(err)
}
zr, err := gzip.NewReader(bytes.NewReader(ll.Pprof.Heap))
if err != nil {
t.Fatal(err)
}
rawProto, err := ioutil.ReadAll(zr)
if err != nil {
t.Fatal(err)
}
// Just sanity check it. Too lazy to properly decode the protobuf. But see that
// it contains an expected sample name.
if !bytes.Contains(rawProto, []byte("alloc_objects")) {
t.Errorf("raw proto didn't contain `alloc_objects`: %q", rawProto)
}
}