mirror of https://github.com/status-im/consul.git
debug: improve a couple of the test cases
Use gotest.tools/v3/fs to make better assertions about the files Remove the TestAgent from TestDebugCommand_Prepare_ValidateTiming, since we can test that validation without making any API calls.
This commit is contained in:
parent
bbf6a94c9a
commit
31bcd80528
|
@ -14,19 +14,18 @@ import (
|
|||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/google/pprof/profile"
|
||||
"github.com/mitchellh/cli"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/google/pprof/profile"
|
||||
"gotest.tools/v3/assert"
|
||||
"gotest.tools/v3/fs"
|
||||
|
||||
"github.com/hashicorp/consul/agent"
|
||||
"github.com/hashicorp/consul/sdk/testutil"
|
||||
"github.com/hashicorp/consul/testrpc"
|
||||
)
|
||||
|
||||
func TestDebugCommand_noTabs(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
func TestDebugCommand_Help_TextContainsNoTabs(t *testing.T) {
|
||||
if strings.ContainsRune(New(cli.NewMockUi(), nil).Help(), '\t') {
|
||||
t.Fatal("help has tabs")
|
||||
}
|
||||
|
@ -63,6 +62,16 @@ func TestDebugCommand(t *testing.T) {
|
|||
require.Equal(t, 0, code)
|
||||
require.Equal(t, "", ui.ErrorWriter.String())
|
||||
|
||||
expected := fs.Expected(t,
|
||||
fs.WithDir("debug",
|
||||
fs.WithFile("agent.json", "", fs.MatchAnyFileContent),
|
||||
fs.WithFile("host.json", "", fs.MatchAnyFileContent),
|
||||
fs.WithFile("index.json", "", fs.MatchAnyFileContent),
|
||||
fs.WithFile("members.json", "", fs.MatchAnyFileContent),
|
||||
// TODO: make the sub-directory names predictable)
|
||||
fs.MatchExtraFiles))
|
||||
assert.Assert(t, fs.Equal(testDir, expected))
|
||||
|
||||
metricsFiles, err := filepath.Glob(fmt.Sprintf("%s/*/%s", outputPath, "metrics.json"))
|
||||
require.NoError(t, err)
|
||||
require.Len(t, metricsFiles, 1)
|
||||
|
@ -127,15 +136,10 @@ func TestDebugCommand_Archive(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDebugCommand_ArgsBad(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
ui := cli.NewMockUi()
|
||||
cmd := New(ui, nil)
|
||||
|
||||
args := []string{
|
||||
"foo",
|
||||
"bad",
|
||||
}
|
||||
args := []string{"foo", "bad"}
|
||||
|
||||
if code := cmd.Run(args); code == 0 {
|
||||
t.Fatalf("should exit non-zero, got code: %d", code)
|
||||
|
@ -518,65 +522,44 @@ func TestDebugCommand_ProfilesExist(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestDebugCommand_ValidateTiming(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("too slow for testing.Short")
|
||||
}
|
||||
|
||||
func TestDebugCommand_Prepare_ValidateTiming(t *testing.T) {
|
||||
cases := map[string]struct {
|
||||
duration string
|
||||
interval string
|
||||
output string
|
||||
code int
|
||||
expected string
|
||||
}{
|
||||
"both": {
|
||||
"20ms",
|
||||
"10ms",
|
||||
"duration must be longer",
|
||||
1,
|
||||
duration: "20ms",
|
||||
interval: "10ms",
|
||||
expected: "duration must be longer",
|
||||
},
|
||||
"short interval": {
|
||||
"10s",
|
||||
"10ms",
|
||||
"interval must be longer",
|
||||
1,
|
||||
duration: "10s",
|
||||
interval: "10ms",
|
||||
expected: "interval must be longer",
|
||||
},
|
||||
"lower duration": {
|
||||
"20s",
|
||||
"30s",
|
||||
"must be longer than interval",
|
||||
1,
|
||||
duration: "20s",
|
||||
interval: "30s",
|
||||
expected: "must be longer than interval",
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range cases {
|
||||
// Because we're only testng validation, we want to shut down
|
||||
// the valid duration test to avoid hanging
|
||||
shutdownCh := make(chan struct{})
|
||||
t.Run(name, func(t *testing.T) {
|
||||
ui := cli.NewMockUi()
|
||||
cmd := New(ui, nil)
|
||||
|
||||
a := agent.NewTestAgent(t, "")
|
||||
defer a.Shutdown()
|
||||
testrpc.WaitForLeader(t, a.RPC, "dc1")
|
||||
args := []string{
|
||||
"-duration=" + tc.duration,
|
||||
"-interval=" + tc.interval,
|
||||
}
|
||||
err := cmd.flags.Parse(args)
|
||||
require.NoError(t, err)
|
||||
|
||||
ui := cli.NewMockUi()
|
||||
cmd := New(ui, shutdownCh)
|
||||
|
||||
args := []string{
|
||||
"-http-addr=" + a.HTTPAddr(),
|
||||
"-duration=" + tc.duration,
|
||||
"-interval=" + tc.interval,
|
||||
"-capture=agent",
|
||||
}
|
||||
code := cmd.Run(args)
|
||||
|
||||
if code != tc.code {
|
||||
t.Errorf("%s: should exit %d, got code: %d", name, tc.code, code)
|
||||
}
|
||||
|
||||
errOutput := ui.ErrorWriter.String()
|
||||
if !strings.Contains(errOutput, tc.output) {
|
||||
t.Errorf("%s: expected error output '%s', got '%q'", name, tc.output, errOutput)
|
||||
}
|
||||
_, err = cmd.prepare()
|
||||
testutil.RequireErrorContains(t, err, tc.expected)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
1
go.mod
1
go.mod
|
@ -92,6 +92,7 @@ require (
|
|||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55
|
||||
google.golang.org/grpc v1.25.1
|
||||
gopkg.in/square/go-jose.v2 v2.5.1
|
||||
gotest.tools/v3 v3.0.3
|
||||
k8s.io/api v0.16.9
|
||||
k8s.io/apimachinery v0.16.9
|
||||
k8s.io/client-go v0.16.9
|
||||
|
|
3
go.sum
3
go.sum
|
@ -652,6 +652,7 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3
|
|||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
|
@ -710,6 +711,8 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
|||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0=
|
||||
gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
|
|
Loading…
Reference in New Issue