package members import ( "fmt" "strings" "testing" "github.com/mitchellh/cli" "github.com/hashicorp/consul/agent" ) // TODO(partitions): split these tests func TestMembersCommand_noTabs(t *testing.T) { t.Parallel() if strings.ContainsRune(New(cli.NewMockUi()).Help(), '\t') { t.Fatal("help has tabs") } } func TestMembersCommand(t *testing.T) { if testing.Short() { t.Skip("too slow for testing.Short") } t.Parallel() a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() c := New(ui) c.flags.SetOutput(ui.ErrorWriter) args := []string{"-http-addr=" + a.HTTPAddr()} code := c.Run(args) if code != 0 { t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) } // Name if !strings.Contains(ui.OutputWriter.String(), a.Config.NodeName) { t.Fatalf("bad: %#v", ui.OutputWriter.String()) } // Agent type if !strings.Contains(ui.OutputWriter.String(), "server") { t.Fatalf("bad: %#v", ui.OutputWriter.String()) } // Datacenter if !strings.Contains(ui.OutputWriter.String(), "dc1") { t.Fatalf("bad: %#v", ui.OutputWriter.String()) } } func TestMembersCommand_WAN(t *testing.T) { if testing.Short() { t.Skip("too slow for testing.Short") } t.Parallel() a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() c := New(ui) c.flags.SetOutput(ui.ErrorWriter) args := []string{"-http-addr=" + a.HTTPAddr(), "-wan"} code := c.Run(args) if code != 0 { t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) } if !strings.Contains(ui.OutputWriter.String(), fmt.Sprintf("%d", a.Config.SerfPortWAN)) { t.Fatalf("bad: %#v", ui.OutputWriter.String()) } } func TestMembersCommand_statusFilter(t *testing.T) { if testing.Short() { t.Skip("too slow for testing.Short") } t.Parallel() a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() c := New(ui) c.flags.SetOutput(ui.ErrorWriter) args := []string{ "-http-addr=" + a.HTTPAddr(), "-status=a.*e", } code := c.Run(args) if code != 0 { t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) } if !strings.Contains(ui.OutputWriter.String(), a.Config.NodeName) { t.Fatalf("bad: %#v", ui.OutputWriter.String()) } } func TestMembersCommand_statusFilter_failed(t *testing.T) { if testing.Short() { t.Skip("too slow for testing.Short") } t.Parallel() a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() c := New(ui) c.flags.SetOutput(ui.ErrorWriter) args := []string{ "-http-addr=" + a.HTTPAddr(), "-status=(fail|left)", } code := c.Run(args) if code == 1 { t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) } if strings.Contains(ui.OutputWriter.String(), a.Config.NodeName) { t.Fatalf("bad: %#v", ui.OutputWriter.String()) } if code != 2 { t.Fatalf("bad: %d", code) } } func TestMembersCommand_verticalBar(t *testing.T) { if testing.Short() { t.Skip("too slow for testing.Short") } t.Parallel() nodeName := "name|with|bars" a := agent.NewTestAgent(t, `node_name = "`+nodeName+`"`) defer a.Shutdown() ui := cli.NewMockUi() c := New(ui) c.flags.SetOutput(ui.ErrorWriter) args := []string{ "-http-addr=" + a.HTTPAddr(), } code := c.Run(args) if code == 1 { t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) } // Check for nodeName presense because it should not be parsed by columnize if !strings.Contains(ui.OutputWriter.String(), nodeName) { t.Fatalf("bad: %#v", ui.OutputWriter.String()) } }