cli common tests

This commit is contained in:
Feng Lee 2016-02-17 23:52:04 +08:00
parent 369c5e86c5
commit 5695ba178c
2 changed files with 95 additions and 7 deletions

View File

@ -25,7 +25,8 @@
-define(SERVER, ?MODULE).
%% API Function Exports
-export([start_link/0, register_cmd/3, unregister_cmd/1, run/1]).
-export([start_link/0, register_cmd/2, register_cmd/3, unregister_cmd/1,
lookup/1, run/1]).
%% gen_server Function Exports
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
@ -43,6 +44,11 @@ start_link() ->
gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
%% @doc Register a command
-spec register_cmd(atom(), {module(), atom()}) -> ok.
register_cmd(Cmd, MF) ->
register_cmd(Cmd, MF, []).
%% @doc Register a command with opts
-spec register_cmd(atom(), {module(), atom()}, list()) -> ok.
register_cmd(Cmd, MF, Opts) ->
cast({register_cmd, Cmd, MF, Opts}).
@ -55,17 +61,25 @@ unregister_cmd(Cmd) ->
cast(Msg) -> gen_server:cast(?SERVER, Msg).
%% @doc Run a command
-spec run([string()]) -> any().
run([]) -> usage();
run(["help"]) -> usage();
run([CmdS|Args]) ->
Cmd = list_to_atom(CmdS),
case ets:match(?CMD_TAB, {{'_', Cmd}, '$1', '_'}) of
[[{Mod, Fun}]] -> Mod:Fun(Args);
case lookup(list_to_atom(CmdS)) of
[{Mod, Fun}] -> Mod:Fun(Args);
[] -> usage()
end.
%% @doc Lookup a command
-spec lookup(atom()) -> [{module(), atom()}].
lookup(Cmd) ->
case ets:match(?CMD_TAB, {{'_', Cmd}, '$1', '_'}) of
[El] -> El;
[] -> []
end.
%% @doc Usage
usage() ->
?PRINT("Usage: ~s~n", [?MODULE]),

View File

@ -27,7 +27,8 @@ all() ->
{group, retainer},
{group, broker},
{group, metrics},
{group, stats}].
{group, stats},
{group, cli}].
groups() ->
[{pubsub, [sequence],
@ -48,7 +49,18 @@ groups() ->
{metrics, [sequence],
[inc_dec_metric]},
{stats, [sequence],
[set_get_stat]}].
[set_get_stat]},
{cli, [sequence],
[ctl_register_cmd,
cli_status,
cli_broker,
cli_clients,
cli_sessions,
cli_topics,
cli_subscriptions,
cli_bridges,
cli_plugins,
cli_listeners]}].
init_per_suite(Config) ->
application:start(lager),
@ -212,3 +224,65 @@ inc_dec_metric(_) ->
set_get_stat(_) ->
emqttd_stats:setstat('retained/max', 99),
99 = emqttd_stats:getstat('retained/max').
%%--------------------------------------------------------------------
%% CLI Group
%%--------------------------------------------------------------------
ctl_register_cmd(_) ->
emqttd_ctl:register_cmd(test_cmd, {?MODULE, test_cmd}),
erlang:yield(),
timer:sleep(5),
[{?MODULE, test_cmd}] = emqttd_ctl:lookup(test_cmd),
emqttd_ctl:run(["test_cmd", "arg1", "arg2"]),
emqttd_ctl:unregister_cmd(test_cmd).
test_cmd(["arg1", "arg2"]) ->
ct:print("test_cmd is called");
test_cmd([]) ->
io:format("test command").
cli_status(_) ->
emqttd_cli:status([]).
cli_broker(_) ->
emqttd_cli:broker([]),
emqttd_cli:broker(["stats"]),
emqttd_cli:broker(["metrics"]),
emqttd_cli:broker(["pubsub"]).
cli_clients(_) ->
emqttd_cli:clients(["list"]),
emqttd_cli:clients(["show", "clientId"]),
emqttd_cli:clients(["kick", "clientId"]).
cli_sessions(_) ->
emqttd_cli:sessions(["list"]),
emqttd_cli:sessions(["list", "persistent"]),
emqttd_cli:sessions(["list", "transient"]),
emqttd_cli:sessions(["show", "clientId"]).
cli_topics(_) ->
emqttd_cli:topics(["list"]),
emqttd_cli:topics(["show", "topic"]).
cli_subscriptions(_) ->
emqttd_cli:subscriptions(["list"]),
emqttd_cli:subscriptions(["show", "clientId"]),
emqttd_cli:subscriptions(["add", "clientId", "topic", "2"]),
emqttd_cli:subscriptions(["del", "clientId", "topic"]).
cli_plugins(_) ->
emqttd_cli:plugins(["list"]),
emqttd_cli:plugins(["load", "emqttd_plugin_template"]),
emqttd_cli:plugins(["unload", "emqttd_plugin_template"]).
cli_bridges(_) ->
emqttd_cli:bridges(["list"]),
emqttd_cli:bridges(["start", "a@127.0.0.1", "topic"]),
emqttd_cli:bridges(["stop", "a@127.0.0.1", "topic"]).
cli_listeners(_) ->
emqttd_cli:listeners([]).