package command import ( "encoding/json" "strings" "testing" "github.com/mitchellh/cli" ) func TestQueryCommandRun_noName(t *testing.T) { ui := new(cli.MockUi) c := &QueryCommand{Ui: ui} args := []string{"-rpc-addr=foo"} code := c.Run(args) if code != 1 { t.Fatalf("bad: %d", code) } if !strings.Contains(ui.ErrorWriter.String(), "query name") { t.Fatalf("bad: %#v", ui.ErrorWriter.String()) } } func TestQueryCommandRun_tooMany(t *testing.T) { ui := new(cli.MockUi) c := &QueryCommand{Ui: ui} args := []string{"-rpc-addr=foo", "foo", "bar", "baz"} code := c.Run(args) if code != 1 { t.Fatalf("bad: %d", code) } if !strings.Contains(ui.ErrorWriter.String(), "Too many") { t.Fatalf("bad: %#v", ui.ErrorWriter.String()) } } func TestQueryCommandRun(t *testing.T) { a1 := testAgent(t) defer a1.Shutdown() rpcAddr, ipc := testIPC(t, a1) defer ipc.Shutdown() ui := new(cli.MockUi) c := &QueryCommand{Ui: ui} args := []string{"-rpc-addr=" + rpcAddr, "-timeout=500ms", "deploy", "abcd1234"} code := c.Run(args) if code != 0 { t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) } if !strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) { t.Fatalf("bad: %#v", ui.OutputWriter.String()) } } func TestQueryCommandRun_tagFilter(t *testing.T) { a1 := testAgent(t) defer a1.Shutdown() rpcAddr, ipc := testIPC(t, a1) defer ipc.Shutdown() ui := new(cli.MockUi) c := &QueryCommand{Ui: ui} args := []string{ "-rpc-addr=" + rpcAddr, "-tag=tag1=foo", "foo", } code := c.Run(args) if code != 0 { t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) } if !strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) { t.Fatalf("bad: %#v", ui.OutputWriter.String()) } } func TestQueryCommandRun_tagFilter_failed(t *testing.T) { a1 := testAgent(t) defer a1.Shutdown() rpcAddr, ipc := testIPC(t, a1) defer ipc.Shutdown() ui := new(cli.MockUi) c := &QueryCommand{Ui: ui} args := []string{ "-rpc-addr=" + rpcAddr, "-tag=tag1=nomatch", "foo", } code := c.Run(args) if code != 0 { t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) } if strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) { t.Fatalf("bad: %#v", ui.OutputWriter.String()) } } func TestQueryCommandRun_nodeFilter(t *testing.T) { a1 := testAgent(t) defer a1.Shutdown() rpcAddr, ipc := testIPC(t, a1) defer ipc.Shutdown() ui := new(cli.MockUi) c := &QueryCommand{Ui: ui} args := []string{ "-rpc-addr=" + rpcAddr, "-node", a1.SerfConfig().NodeName, "foo", } code := c.Run(args) if code != 0 { t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) } if !strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) { t.Fatalf("bad: %#v", ui.OutputWriter.String()) } } func TestQueryCommandRun_nodeFilter_failed(t *testing.T) { a1 := testAgent(t) defer a1.Shutdown() rpcAddr, ipc := testIPC(t, a1) defer ipc.Shutdown() ui := new(cli.MockUi) c := &QueryCommand{Ui: ui} args := []string{ "-rpc-addr=" + rpcAddr, "-node=whoisthis", "foo", } code := c.Run(args) if code != 0 { t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) } if strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) { t.Fatalf("bad: %#v", ui.OutputWriter.String()) } } func TestQueryCommandRun_formatJSON(t *testing.T) { type output struct { Acks []string Responses map[string]string } a1 := testAgent(t) defer a1.Shutdown() rpcAddr, ipc := testIPC(t, a1) defer ipc.Shutdown() ui := new(cli.MockUi) c := &QueryCommand{Ui: ui} args := []string{"-rpc-addr=" + rpcAddr, "-format=json", "-timeout=500ms", "deploy", "abcd1234"} code := c.Run(args) if code != 0 { t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) } // Decode the output dec := json.NewDecoder(ui.OutputWriter) var out output if err := dec.Decode(&out); err != nil { t.Fatalf("Decode err: %v", err) } if out.Acks[0] != a1.SerfConfig().NodeName { t.Fatalf("bad: %#v", out) } } func TestQueryCommandRun_invalidRelayFactor(t *testing.T) { ui := new(cli.MockUi) { c := &QueryCommand{Ui: ui} args := []string{"-rpc-addr=foo", "-relay-factor=9999", "foo"} code := c.Run(args) if code != 1 { t.Fatalf("bad: %d", code) } if !strings.Contains(ui.ErrorWriter.String(), "Relay factor must be") { t.Fatalf("bad: %#v", ui.ErrorWriter.String()) } } { c := &QueryCommand{Ui: ui} args := []string{"-rpc-addr=foo", "-relay-factor=-1", "foo"} code := c.Run(args) if code != 1 { t.Fatalf("bad: %d", code) } if !strings.Contains(ui.ErrorWriter.String(), "Relay factor must be") { t.Fatalf("bad: %#v", ui.ErrorWriter.String()) } } }