1package command
2
3import (
4	"strings"
5	"testing"
6
7	"github.com/mitchellh/cli"
8)
9
10func TestMembersCommandRun(t *testing.T) {
11	a1 := testAgent(t)
12	defer a1.Shutdown()
13	rpcAddr, ipc := testIPC(t, a1)
14	defer ipc.Shutdown()
15
16	ui := new(cli.MockUi)
17	c := &MembersCommand{Ui: ui}
18	args := []string{"-rpc-addr=" + rpcAddr}
19
20	code := c.Run(args)
21	if code != 0 {
22		t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
23	}
24
25	if !strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) {
26		t.Fatalf("bad: %#v", ui.OutputWriter.String())
27	}
28}
29
30func TestMembersCommandRun_statusFilter(t *testing.T) {
31	a1 := testAgent(t)
32	defer a1.Shutdown()
33	rpcAddr, ipc := testIPC(t, a1)
34	defer ipc.Shutdown()
35
36	ui := new(cli.MockUi)
37	c := &MembersCommand{Ui: ui}
38	args := []string{
39		"-rpc-addr=" + rpcAddr,
40		"-status=alive",
41	}
42
43	code := c.Run(args)
44	if code != 0 {
45		t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
46	}
47
48	if !strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) {
49		t.Fatalf("bad: %#v", ui.OutputWriter.String())
50	}
51}
52
53func TestMembersCommandRun_statusFilter_failed(t *testing.T) {
54	a1 := testAgent(t)
55	defer a1.Shutdown()
56	rpcAddr, ipc := testIPC(t, a1)
57	defer ipc.Shutdown()
58
59	ui := new(cli.MockUi)
60	c := &MembersCommand{Ui: ui}
61	args := []string{
62		"-rpc-addr=" + rpcAddr,
63		"-status=(failed|left)",
64	}
65
66	code := c.Run(args)
67	if code != 0 {
68		t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
69	}
70
71	if strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) {
72		t.Fatalf("bad: %#v", ui.OutputWriter.String())
73	}
74}
75
76func TestMembersCommandRun_roleFilter(t *testing.T) {
77	a1 := testAgent(t)
78	defer a1.Shutdown()
79	rpcAddr, ipc := testIPC(t, a1)
80	defer ipc.Shutdown()
81
82	ui := new(cli.MockUi)
83	c := &MembersCommand{Ui: ui}
84	args := []string{
85		"-rpc-addr=" + rpcAddr,
86		"-role=test",
87	}
88
89	code := c.Run(args)
90	if code != 0 {
91		t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
92	}
93
94	if !strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) {
95		t.Fatalf("bad: %#v", ui.OutputWriter.String())
96	}
97}
98
99func TestMembersCommandRun_roleFilter_failed(t *testing.T) {
100	a1 := testAgent(t)
101	defer a1.Shutdown()
102	rpcAddr, ipc := testIPC(t, a1)
103	defer ipc.Shutdown()
104
105	ui := new(cli.MockUi)
106	c := &MembersCommand{Ui: ui}
107	args := []string{
108		"-rpc-addr=" + rpcAddr,
109		"-role=primary",
110	}
111
112	code := c.Run(args)
113	if code != 0 {
114		t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
115	}
116
117	if strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) {
118		t.Fatalf("bad: %#v", ui.OutputWriter.String())
119	}
120}
121
122func TestMembersCommandRun_tagFilter(t *testing.T) {
123	a1 := testAgent(t)
124	defer a1.Shutdown()
125	rpcAddr, ipc := testIPC(t, a1)
126	defer ipc.Shutdown()
127
128	ui := new(cli.MockUi)
129	c := &MembersCommand{Ui: ui}
130	args := []string{
131		"-rpc-addr=" + rpcAddr,
132		"-tag=tag1=foo",
133	}
134
135	code := c.Run(args)
136	if code != 0 {
137		t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
138	}
139
140	if !strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) {
141		t.Fatalf("bad: %#v", ui.OutputWriter.String())
142	}
143}
144
145func TestMembersCommandRun_tagFilter_failed(t *testing.T) {
146	a1 := testAgent(t)
147	defer a1.Shutdown()
148	rpcAddr, ipc := testIPC(t, a1)
149	defer ipc.Shutdown()
150
151	ui := new(cli.MockUi)
152	c := &MembersCommand{Ui: ui}
153	args := []string{
154		"-rpc-addr=" + rpcAddr,
155		"-tag=tag1=nomatch",
156	}
157
158	code := c.Run(args)
159	if code != 0 {
160		t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
161	}
162
163	if strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) {
164		t.Fatalf("bad: %#v", ui.OutputWriter.String())
165	}
166}
167func TestMembersCommandRun_mutliTagFilter(t *testing.T) {
168	a1 := testAgent(t)
169	defer a1.Shutdown()
170	rpcAddr, ipc := testIPC(t, a1)
171	defer ipc.Shutdown()
172
173	ui := new(cli.MockUi)
174	c := &MembersCommand{Ui: ui}
175	args := []string{
176		"-rpc-addr=" + rpcAddr,
177		"-tag=tag1=foo",
178		"-tag=tag2=bar",
179	}
180
181	code := c.Run(args)
182	if code != 0 {
183		t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
184	}
185
186	if !strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) {
187		t.Fatalf("bad: %#v", ui.OutputWriter.String())
188	}
189}
190
191func TestMembersCommandRun_multiTagFilter_failed(t *testing.T) {
192	a1 := testAgent(t)
193	defer a1.Shutdown()
194	rpcAddr, ipc := testIPC(t, a1)
195	defer ipc.Shutdown()
196
197	ui := new(cli.MockUi)
198	c := &MembersCommand{Ui: ui}
199	args := []string{
200		"-rpc-addr=" + rpcAddr,
201		"-tag=tag1=foo",
202		"-tag=tag2=nomatch",
203	}
204
205	code := c.Run(args)
206	if code != 0 {
207		t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
208	}
209
210	if strings.Contains(ui.OutputWriter.String(), a1.SerfConfig().NodeName) {
211		t.Fatalf("bad: %#v", ui.OutputWriter.String())
212	}
213}
214