open-consul/api/debug_test.go
Jack Pearkes 197d62c6ca New command: consul debug (#4754)
* agent/debug: add package for debugging, host info

* api: add v1/agent/host endpoint

* agent: add v1/agent/host endpoint

* command/debug: implementation of static capture

* command/debug: tests and only configured targets

* agent/debug: add basic test for host metrics

* command/debug: add methods for dynamic data capture

* api: add debug/pprof endpoints

* command/debug: add pprof

* command/debug: timing, wg, logs to disk

* vendor: add gopsutil/disk

* command/debug: add a usage section

* website: add docs for consul debug

* agent/host: require operator:read

* api/host: improve docs and no retry timing

* command/debug: fail on extra arguments

* command/debug: fixup file permissions to 0644

* command/debug: remove server flags

* command/debug: improve clarity of usage section

* api/debug: add Trace for profiling, fix profile

* command/debug: capture profile and trace at the same time

* command/debug: add index document

* command/debug: use "clusters" in place of members

* command/debug: remove address in output

* command/debug: improve comment on metrics sleep

* command/debug: clarify usage

* agent: always register pprof handlers and protect

This will allow us to avoid a restart of a target agent
for profiling by always registering the pprof handlers.

Given this is a potentially sensitive path, it is protected
with an operator:read ACL and enable debug being
set to true on the target agent. enable_debug still requires
a restart.

If ACLs are disabled, enable_debug is sufficient.

* command/debug: use trace.out instead of .prof

More in line with golang docs.

* agent: fix comment wording

* agent: wrap table driven tests in t.run()
2018-10-19 08:41:03 -07:00

84 lines
1.4 KiB
Go

package api
import (
"testing"
"github.com/hashicorp/consul/testutil"
)
func TestAPI_DebugHeap(t *testing.T) {
t.Parallel()
c, s := makeClientWithConfig(t, nil, func(conf *testutil.TestServerConfig) {
conf.EnableDebug = true
})
defer s.Stop()
debug := c.Debug()
raw, err := debug.Heap()
if err != nil {
t.Fatalf("err: %v", err)
}
if len(raw) <= 0 {
t.Fatalf("no response: %#v", raw)
}
}
func TestAPI_DebugProfile(t *testing.T) {
t.Parallel()
c, s := makeClientWithConfig(t, nil, func(conf *testutil.TestServerConfig) {
conf.EnableDebug = true
})
defer s.Stop()
debug := c.Debug()
raw, err := debug.Profile(1)
if err != nil {
t.Fatalf("err: %v", err)
}
if len(raw) <= 0 {
t.Fatalf("no response: %#v", raw)
}
}
func TestAPI_DebugGoroutine(t *testing.T) {
t.Parallel()
c, s := makeClientWithConfig(t, nil, func(conf *testutil.TestServerConfig) {
conf.EnableDebug = true
})
defer s.Stop()
debug := c.Debug()
raw, err := debug.Goroutine()
if err != nil {
t.Fatalf("err: %v", err)
}
if len(raw) <= 0 {
t.Fatalf("no response: %#v", raw)
}
}
func TestAPI_DebugTrace(t *testing.T) {
t.Parallel()
c, s := makeClientWithConfig(t, nil, func(conf *testutil.TestServerConfig) {
conf.EnableDebug = true
})
defer s.Stop()
debug := c.Debug()
raw, err := debug.Trace(1)
if err != nil {
t.Fatalf("err: %v", err)
}
if len(raw) <= 0 {
t.Fatalf("no response: %#v", raw)
}
}