-
Notifications
You must be signed in to change notification settings - Fork 72
/
riak_admin_console_tests.erl
248 lines (233 loc) · 12.3 KB
/
riak_admin_console_tests.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
%% -------------------------------------------------------------------
%%
%% Copyright (c) 2014 Basho Technologies, Inc.
%%
%% This file is provided to you under the Apache License,
%% Version 2.0 (the "License"); you may not use this file
%% except in compliance with the License. You may obtain
%% a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing,
%% software distributed under the License is distributed on an
%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
%% KIND, either express or implied. See the License for the
%% specific language governing permissions and limitations
%% under the License.
%%
%% -------------------------------------------------------------------
-module(riak_admin_console_tests).
-include_lib("eunit/include/eunit.hrl").
-export([confirm/0]).
%% This test passes params to the riak admin shell script on to intercepts
%% that either return ?PASS or ?FAIL (which print out "pass" or "fail" to
%% the console). If an unexpected input is received in Erlang, ?FAIL is
%% returned. This test should (will?) make sure we don't implement
%% any unportable shell code. For example, `riak repl cascades foo`
%% didn't work on Ubuntu due to an invalid call to shift. Since this test
%% will be run on giddyup and hence many platforms, we should be able
%% to catch these types of bugs earlier.
%% See also: replication2_console_tests.erl for a more detailed
%% description.
%% UNTESTED, as they don't use rpc, or have a non-trivial impl
%% test
%% diag
%% top
%% wait-for-services
%% js-reload
%% reip
%% riak admin cluster
cluster_tests(Node) ->
check_admin_cmd(Node, "cluster join dev99@127.0.0.1"),
check_admin_cmd(Node, "cluster leave"),
check_admin_cmd(Node, "cluster leave dev99@127.0.0.1"),
check_admin_cmd(Node, "cluster force-remove dev99@127.0.0.1"),
check_admin_cmd(Node, "cluster replace dev98@127.0.0.1 dev99@127.0.0.1"),
check_admin_cmd(Node, "cluster force-replace dev98@127.0.0.1 dev99@127.0.0.1"),
check_admin_cmd(Node, "cluster resize-ring 42"),
check_admin_cmd(Node, "cluster resize-ring abort"),
check_admin_cmd(Node, "cluster plan"),
check_admin_cmd(Node, "cluster commit"),
check_admin_cmd(Node, "cluster clear").
%% riak admin bucket_type
bucket_tests(Node) ->
check_admin_cmd(Node, "bucket-type status foo"),
check_admin_cmd(Node, "bucket-type activate foo"),
% The following tests may fail on OSX post Riak 3.2, please test on a
% supported OS (e.g. debian)
check_admin_cmd(Node, "bucket-type create foo {\"props\":{[]}}"),
check_admin_cmd(Node, "bucket-type update foo {\"props\":{[]}}"),
check_admin_cmd(Node, "bucket-type list").
%% riak admin security
security_tests(Node) ->
check_admin_cmd_2x(Node, "security add-user foo"),
check_admin_cmd_2x(Node, "security add-user foo x1=y1 x2=y2"),
check_admin_cmd_2x(Node, "security add-group group"),
check_admin_cmd_2x(Node, "security add-group group x1=y1 x2=y2"),
check_admin_cmd_2x(Node, "security alter-user foo x1=y1"),
check_admin_cmd_2x(Node, "security alter-user foo x1=y1 x2=y2"),
check_admin_cmd_2x(Node, "security alter-group group x1=y1 x2=y2"),
check_admin_cmd(Node, "security del-user foo"),
check_admin_cmd(Node, "security del-group group"),
check_admin_cmd(Node, "security add-source all 192.168.100.0/22 y"),
check_admin_cmd(Node, "security add-source all 192.168.100.0/22 x x1=y1"),
check_admin_cmd(Node, "security add-source foo,bar 192.168.100.0/22 x x1=y1"),
check_admin_cmd(Node, "security add-source foo,bar,baz 192.168.100.0/22 x x1=y1 x2=y2"),
check_admin_cmd(Node, "security del-source all 192.168.100.0/22"),
check_admin_cmd(Node, "security del-source x 192.168.100.0/22"),
check_admin_cmd(Node, "security del-source x,y,z 192.168.100.0/22"),
check_admin_cmd(Node, "security grant foo on any my_bucket to x"),
check_admin_cmd(Node, "security grant foo,bar on any my_bucket to x"),
check_admin_cmd(Node, "security grant foo on any my_bucket to x,y,z"),
check_admin_cmd(Node, "security grant foo,bar,baz on any my_bucket to y"),
check_admin_cmd(Node, "security grant foo,bar,baz on foo my_bucket to y"),
check_admin_cmd(Node, "security revoke foo on any my_bucket from x"),
check_admin_cmd(Node, "security revoke foo,bar on any my_bucket from x"),
check_admin_cmd(Node, "security revoke foo on any my_bucket from x,y,z"),
check_admin_cmd(Node, "security revoke foo,bar,baz on any my_bucket from y"),
check_admin_cmd(Node, "security revoke foo,bar,baz on foo my_bucket from y"),
check_admin_cmd(Node, "security print-users"),
check_admin_cmd(Node, "security print-sources"),
check_admin_cmd_2x(Node, "security enable"),
check_admin_cmd_2x(Node, "security disable"),
check_admin_cmd(Node, "security status"),
check_admin_cmd(Node, "security print-user foo"),
check_admin_cmd(Node, "security print-group group"),
check_admin_cmd(Node, "security print-grants foo"),
check_admin_cmd(Node, "security ciphers foo").
%% "top level" riak admin COMMANDS
riak_admin_tests(Node) ->
check_admin_cmd(Node, "join -f dev99@127.0.0.1"),
check_admin_cmd(Node, "leave -f"),
check_admin_cmd(Node, "force-remove -f dev99@127.0.0.1"),
check_admin_cmd(Node, "force_remove -f dev99@127.0.0.1"),
check_admin_cmd(Node, "down dev98@127.0.0.1"),
check_admin_cmd(Node, "status"),
check_admin_cmd(Node, "vnode-status"),
check_admin_cmd(Node, "vnode_status"),
check_admin_cmd(Node, "ringready"),
check_admin_cmd(Node, "transfers"),
check_admin_cmd(Node, "member-status"),
check_admin_cmd(Node, "member_status"),
check_admin_cmd(Node, "ring-status"),
check_admin_cmd(Node, "ring_status"),
check_admin_cmd(Node, "aae-status"),
check_admin_cmd(Node, "aae_status"),
check_admin_cmd(Node, "repair_2i status"),
check_admin_cmd(Node, "repair_2i kill"),
check_admin_cmd(Node, "repair_2i --speed 5 foo bar baz"),
check_admin_cmd(Node, "repair-2i status"),
check_admin_cmd(Node, "repair-2i kill"),
check_admin_cmd(Node, "repair-2i --speed 5 foo bar baz"),
check_admin_cmd(Node, "cluster_info foo local"),
check_admin_cmd(Node, "cluster_info foo local dev99@127.0.0.1"),
check_admin_cmd(Node, "erl-reload"),
check_admin_cmd(Node, "erl_reload"),
check_admin_cmd(Node, "transfer-limit 1"),
check_admin_cmd(Node, "transfer-limit dev55@127.0.0.1 1"),
check_admin_cmd(Node, "transfer_limit 1"),
check_admin_cmd(Node, "transfer_limit dev55@127.0.0.1 1"),
check_admin_cmd(Node, "reformat-indexes --downgrade"),
check_admin_cmd(Node, "reformat-indexes 5"),
check_admin_cmd(Node, "reformat-indexes 6 7"),
check_admin_cmd(Node, "reformat-indexes 5 --downgrade"),
check_admin_cmd(Node, "reformat-indexes 6 7 --downgrade"),
check_admin_cmd(Node, "reformat_indexes --downgrade"),
check_admin_cmd(Node, "reformat_indexes 5"),
check_admin_cmd(Node, "reformat_indexes 6 7"),
check_admin_cmd(Node, "reformat_indexes 5 --downgrade"),
check_admin_cmd(Node, "reformat_indexes 6 7 --downgrade"),
check_admin_cmd(Node, "downgrade_objects true"),
check_admin_cmd(Node, "downgrade_objects true 1"),
check_admin_cmd(Node, "downgrade_objects true"),
check_admin_cmd(Node, "downgrade_objects true 1"),
%% check_admin_cmd(Node, "js-reload foo bar baz"),
ok.
confirm() ->
%% Deploy a node to test against
lager:info("Deploy node to test riak command line"),
[Node] = rt:deploy_nodes(1),
?assertEqual(ok, rt:wait_until_nodes_ready([Node])),
rt_intercept:add(Node,
{riak_core_console,
[
{{transfers,1}, verify_console_transfers},
{{member_status,1}, verify_console_member_status},
{{ring_status,1}, verify_console_ring_status},
{{stage_remove,1}, verify_console_stage_remove},
{{stage_leave,1}, verify_console_stage_leave},
{{stage_replace, 1}, verify_console_stage_replace},
{{stage_force_replace, 1}, verify_console_stage_force_replace},
{{stage_resize_ring, 1}, verify_console_stage_resize_ring},
{{print_staged, 1}, verify_console_print_staged},
{{commit_staged, 1}, verify_console_commit_staged},
{{clear_staged, 1}, verify_console_clear_staged},
{{transfer_limit, 1}, verify_console_transfer_limit},
{{add_user, 1}, verify_console_add_user},
{{alter_user, 1}, verify_console_alter_user},
{{del_user, 1}, verify_console_del_user},
{{add_group, 1}, verify_console_add_group},
{{alter_group, 1}, verify_console_alter_group},
{{del_group, 1}, verify_console_del_group},
{{add_source, 1}, verify_console_add_source},
{{del_source, 1}, verify_console_del_source},
{{grant, 1}, verify_console_grant},
{{revoke, 1}, verify_console_revoke},
{{print_user,1}, verify_console_print_user},
{{print_users,1}, verify_console_print_users},
{{print_group,1}, verify_console_print_group},
{{print_groups,1}, verify_console_print_groups},
{{print_grants,1}, verify_console_print_grants},
{{print_sources, 1}, verify_console_print_sources},
{{security_enable,1}, verify_console_security_enable},
{{security_disable,1}, verify_console_security_disable},
{{security_status,1}, verify_console_security_stats},
{{ciphers,1}, verify_console_ciphers} ]}),
rt_intercept:add(Node,
{riak_kv_console,
[
{{join,1}, verify_console_join},
{{leave,1}, verify_console_leave},
{{remove,1}, verify_console_remove},
{{staged_join,1}, verify_console_staged_join},
{{down,1}, verify_console_down},
{{status,1}, verify_console_status},
{{vnode_status,1}, verify_console_vnode_status},
{{ringready,1}, verify_console_ringready},
{{aae_status,1}, verify_console_aae_status},
{{cluster_info, 1}, verify_console_cluster_info},
{{reload_code, 1}, verify_console_reload_code},
{{repair_2i, 1}, verify_console_repair_2i},
{{reformat_indexes, 1}, verify_console_reformat_indexes},
{{reformat_objects, 1}, verify_console_reformat_objects},
{{bucket_type_status,1}, verify_console_bucket_type_status},
{{bucket_type_activate,1}, verify_console_bucket_type_activate},
{{bucket_type_create,1}, verify_console_bucket_type_create},
{{bucket_type_update,1}, verify_console_bucket_type_update},
{{bucket_type_list,1}, verify_console_bucket_type_list}
]}),
%% rt_intercept:add(Node,
%% {riak_kv_js_manager,
%% [
%% {{reload,1}, verify_console_reload}
%% ]}),
rt_intercept:wait_until_loaded(Node),
riak_admin_tests(Node),
cluster_tests(Node),
bucket_tests(Node),
security_tests(Node),
pass.
check_admin_cmd(Node, Cmd) ->
S = string:tokens(Cmd, " "),
lager:info("Testing riak admin ~s on ~s", [Cmd, Node]),
{ok, Out} = rt:admin(Node, S),
?assertEqual("passok\n", Out).
%% Recently we've started calling riak_core_console twice from the
%% same riak admin invocation; this will result in "passpass" as a
%% return instead of a simple "pass"
check_admin_cmd_2x(Node, Cmd) ->
S = string:tokens(Cmd, " "),
lager:info("Testing riak admin ~s on ~s", [Cmd, Node]),
{ok, Out} = rt:admin(Node, S),
?assertEqual("passok\npassok\n", Out).