cli common tests
This commit is contained in:
parent
369c5e86c5
commit
5695ba178c
|
@ -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]),
|
||||
|
|
|
@ -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([]).
|
||||
|
||||
|
|
Loading…
Reference in New Issue