Merge pull request #6957 from thalesmg/fix-ctl-print-43
fix(ctl): fix formatting when printing messages without arguments (4.3)
This commit is contained in:
commit
992e7e66cf
|
@ -1,45 +1,38 @@
|
||||||
%% -*- mode: erlang -*-
|
%% -*- mode: erlang -*-
|
||||||
{VSN,
|
{VSN,
|
||||||
[
|
[{<<"4.3.[0-3]">>,
|
||||||
{<<"4.3.[0-3]">>, [
|
[{load_module,emqx_auth_mnesia_cli,brutal_purge,soft_purge,[]},
|
||||||
{add_module,emqx_acl_mnesia_db},
|
{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
|
||||||
{add_module,emqx_acl_mnesia_migrator, [emqx_acl_mnesia_db]},
|
{add_module,emqx_acl_mnesia_db},
|
||||||
{update, emqx_auth_mnesia_sup, supervisor},
|
{add_module,emqx_acl_mnesia_migrator,[emqx_acl_mnesia_db]},
|
||||||
{apply, {emqx_acl_mnesia_migrator, start_supervised, []}},
|
{update,emqx_auth_mnesia_sup,supervisor},
|
||||||
{load_module,emqx_auth_mnesia_api, brutal_purge,soft_purge,[]},
|
{apply,{emqx_acl_mnesia_migrator,start_supervised,[]}},
|
||||||
{load_module,emqx_acl_mnesia, brutal_purge,soft_purge,[]},
|
{load_module,emqx_auth_mnesia_api,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_auth_mnesia_app, brutal_purge,soft_purge,[]},
|
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_acl_mnesia_api, brutal_purge,soft_purge,[]},
|
{load_module,emqx_auth_mnesia_app,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_acl_mnesia_cli, brutal_purge,soft_purge,[]}
|
{load_module,emqx_acl_mnesia_api,brutal_purge,soft_purge,[]},
|
||||||
]},
|
{load_module,emqx_acl_mnesia_cli,brutal_purge,soft_purge,[]}]},
|
||||||
{<<"4.3.4">>, [
|
{<<"4.3.4">>,
|
||||||
{load_module,emqx_auth_mnesia, brutal_purge,soft_purge,[]},
|
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_auth_mnesia_cli, brutal_purge,soft_purge,[]},
|
{load_module,emqx_auth_mnesia_cli,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_acl_mnesia, brutal_purge,soft_purge,[]},
|
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_auth_mnesia_app, brutal_purge,soft_purge,[]}
|
{load_module,emqx_auth_mnesia_app,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
{<<".*">>,[]}],
|
||||||
{<<".*">>, [
|
[{<<"4.3.[0-3]">>,
|
||||||
]}
|
[{load_module,emqx_auth_mnesia_cli,brutal_purge,soft_purge,[]},
|
||||||
],
|
{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
|
||||||
[
|
{apply,{emqx_acl_mnesia_migrator,stop_supervised,[]}},
|
||||||
{<<"4.3.[0-3]">>, [
|
{update,emqx_auth_mnesia_sup,supervisor},
|
||||||
{apply, {emqx_acl_mnesia_migrator, stop_supervised, []}},
|
{load_module,emqx_acl_mnesia_cli,brutal_purge,soft_purge,[]},
|
||||||
{update, emqx_auth_mnesia_sup, supervisor},
|
{load_module,emqx_acl_mnesia_api,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_acl_mnesia_cli, brutal_purge,soft_purge,[]},
|
{load_module,emqx_auth_mnesia_api,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_acl_mnesia_api, brutal_purge,soft_purge,[]},
|
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_auth_mnesia_api, brutal_purge,soft_purge,[]},
|
{load_module,emqx_auth_mnesia_app,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_acl_mnesia, brutal_purge,soft_purge,[]},
|
{delete_module,emqx_acl_mnesia_migrator},
|
||||||
{load_module,emqx_auth_mnesia_app, brutal_purge,soft_purge,[]},
|
{delete_module,emqx_acl_mnesia_db}]},
|
||||||
{delete_module,emqx_acl_mnesia_migrator},
|
{<<"4.3.4">>,
|
||||||
{delete_module,emqx_acl_mnesia_db}
|
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
|
||||||
]},
|
{load_module,emqx_auth_mnesia_cli,brutal_purge,soft_purge,[]},
|
||||||
{<<"4.3.4">>, [
|
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_auth_mnesia, brutal_purge,soft_purge,[]},
|
{load_module,emqx_auth_mnesia_app,brutal_purge,soft_purge,[]}]},
|
||||||
{load_module,emqx_auth_mnesia_cli, brutal_purge,soft_purge,[]},
|
{<<".*">>,[]}]}.
|
||||||
{load_module,emqx_acl_mnesia, brutal_purge,soft_purge,[]},
|
|
||||||
{load_module,emqx_auth_mnesia_app, brutal_purge,soft_purge,[]}
|
|
||||||
]},
|
|
||||||
{<<".*">>, [
|
|
||||||
]}
|
|
||||||
]
|
|
||||||
}.
|
|
||||||
|
|
|
@ -47,7 +47,9 @@ groups() ->
|
||||||
]}].
|
]}].
|
||||||
|
|
||||||
init_per_suite(Config) ->
|
init_per_suite(Config) ->
|
||||||
emqx_ct_helpers:start_apps([emqx_modules, emqx_management, emqx_auth_mnesia], fun set_special_configs/1),
|
emqx_ct_helpers:start_apps( [emqx_modules, emqx_management, emqx_auth_mnesia]
|
||||||
|
, fun set_special_configs/1
|
||||||
|
),
|
||||||
supervisor:terminate_child(emqx_auth_mnesia_sup, emqx_acl_mnesia_migrator),
|
supervisor:terminate_child(emqx_auth_mnesia_sup, emqx_acl_mnesia_migrator),
|
||||||
create_default_app(),
|
create_default_app(),
|
||||||
Config.
|
Config.
|
||||||
|
@ -151,7 +153,9 @@ run_acl_tests() ->
|
||||||
timer:sleep(100),
|
timer:sleep(100),
|
||||||
deny = emqx_access_control:check_acl(User1, subscribe, <<"topic/mix">>),
|
deny = emqx_access_control:check_acl(User1, subscribe, <<"topic/mix">>),
|
||||||
allow = emqx_access_control:check_acl(User1, publish, <<"topic/mix">>),
|
allow = emqx_access_control:check_acl(User1, publish, <<"topic/mix">>),
|
||||||
ok = emqx_acl_mnesia_db:add_acl({clientid, <<"test_clientid">>}, <<"topic/mix">>, pubsub, allow),
|
ok = emqx_acl_mnesia_db:add_acl( {clientid, <<"test_clientid">>}
|
||||||
|
, <<"topic/mix">>, pubsub, allow
|
||||||
|
),
|
||||||
timer:sleep(100),
|
timer:sleep(100),
|
||||||
allow = emqx_access_control:check_acl(User1, subscribe, <<"topic/mix">>),
|
allow = emqx_access_control:check_acl(User1, subscribe, <<"topic/mix">>),
|
||||||
allow = emqx_access_control:check_acl(User1, publish, <<"topic/mix">>),
|
allow = emqx_access_control:check_acl(User1, publish, <<"topic/mix">>),
|
||||||
|
@ -302,7 +306,7 @@ t_start_stop_supervised(_Config) ->
|
||||||
|
|
||||||
t_acl_cli(_Config) ->
|
t_acl_cli(_Config) ->
|
||||||
meck:new(emqx_ctl, [non_strict, passthrough]),
|
meck:new(emqx_ctl, [non_strict, passthrough]),
|
||||||
meck:expect(emqx_ctl, print, fun(Arg) -> emqx_ctl:format(Arg) end),
|
meck:expect(emqx_ctl, print, fun(Arg) -> emqx_ctl:format(Arg, []) end),
|
||||||
meck:expect(emqx_ctl, print, fun(Msg, Arg) -> emqx_ctl:format(Msg, Arg) end),
|
meck:expect(emqx_ctl, print, fun(Msg, Arg) -> emqx_ctl:format(Msg, Arg) end),
|
||||||
meck:expect(emqx_ctl, usage, fun(Usages) -> emqx_ctl:format_usage(Usages) end),
|
meck:expect(emqx_ctl, usage, fun(Usages) -> emqx_ctl:format_usage(Usages) end),
|
||||||
meck:expect(emqx_ctl, usage, fun(Cmd, Descr) -> emqx_ctl:format_usage(Cmd, Descr) end),
|
meck:expect(emqx_ctl, usage, fun(Cmd, Descr) -> emqx_ctl:format_usage(Cmd, Descr) end),
|
||||||
|
@ -411,8 +415,12 @@ t_rest_api(_Config) ->
|
||||||
|
|
||||||
create_conflicting_records() ->
|
create_conflicting_records() ->
|
||||||
Records = [
|
Records = [
|
||||||
#?ACL_TABLE{filter = {{clientid,<<"client6">>}, <<"t">>}, action = pubsub, access = deny, created_at = 0},
|
#?ACL_TABLE{ filter = {{clientid,<<"client6">>}, <<"t">>}
|
||||||
#?ACL_TABLE{filter = {{clientid,<<"client5">>}, <<"t">>}, action = pubsub, access = deny, created_at = 1},
|
, action = pubsub, access = deny, created_at = 0
|
||||||
|
},
|
||||||
|
#?ACL_TABLE{ filter = {{clientid,<<"client5">>}, <<"t">>}
|
||||||
|
, action = pubsub, access = deny, created_at = 1
|
||||||
|
},
|
||||||
#?ACL_TABLE2{who = {clientid,<<"client5">>}, rules = [{allow, sub, <<"t">>, 2}]}
|
#?ACL_TABLE2{who = {clientid,<<"client5">>}, rules = [{allow, sub, <<"t">>, 2}]}
|
||||||
],
|
],
|
||||||
mnesia:transaction(fun() -> lists:foreach(fun mnesia:write/1, Records) end).
|
mnesia:transaction(fun() -> lists:foreach(fun mnesia:write/1, Records) end).
|
||||||
|
|
|
@ -158,9 +158,9 @@ t_clients_cmd(_) ->
|
||||||
timer:sleep(300),
|
timer:sleep(300),
|
||||||
emqx_mgmt_cli:clients(["list"]),
|
emqx_mgmt_cli:clients(["list"]),
|
||||||
?assertMatch({match, _}, re:run(emqx_mgmt_cli:clients(["show", "client12"]), "client12")),
|
?assertMatch({match, _}, re:run(emqx_mgmt_cli:clients(["show", "client12"]), "client12")),
|
||||||
?assertEqual("ok~n", emqx_mgmt_cli:clients(["kick", "client12"])),
|
?assertEqual("ok\n", emqx_mgmt_cli:clients(["kick", "client12"])),
|
||||||
timer:sleep(500),
|
timer:sleep(500),
|
||||||
?assertEqual("ok~n", emqx_mgmt_cli:clients(["kick", "client12"])),
|
?assertEqual("ok\n", emqx_mgmt_cli:clients(["kick", "client12"])),
|
||||||
receive
|
receive
|
||||||
{'EXIT', T, _} ->
|
{'EXIT', T, _} ->
|
||||||
ok
|
ok
|
||||||
|
@ -272,8 +272,8 @@ t_subscriptions_cmd(_) ->
|
||||||
timer:sleep(300),
|
timer:sleep(300),
|
||||||
[?assertMatch({match, _} , re:run(Result, "b/b/c"))
|
[?assertMatch({match, _} , re:run(Result, "b/b/c"))
|
||||||
|| Result <- emqx_mgmt_cli:subscriptions(["show", <<"client">>])],
|
|| Result <- emqx_mgmt_cli:subscriptions(["show", <<"client">>])],
|
||||||
?assertEqual(emqx_mgmt_cli:subscriptions(["add", "client", "b/b/c", "0"]), "ok~n"),
|
?assertEqual(emqx_mgmt_cli:subscriptions(["add", "client", "b/b/c", "0"]), "ok\n"),
|
||||||
?assertEqual(emqx_mgmt_cli:subscriptions(["del", "client", "b/b/c"]), "ok~n"),
|
?assertEqual(emqx_mgmt_cli:subscriptions(["del", "client", "b/b/c"]), "ok\n"),
|
||||||
unmock_print().
|
unmock_print().
|
||||||
|
|
||||||
t_listeners_cmd_old(_) ->
|
t_listeners_cmd_old(_) ->
|
||||||
|
@ -304,7 +304,8 @@ t_listeners_cmd_new(_) ->
|
||||||
),
|
),
|
||||||
?assertEqual(
|
?assertEqual(
|
||||||
emqx_mgmt_cli:listeners(["restart", "bad:listener:identifier"]),
|
emqx_mgmt_cli:listeners(["restart", "bad:listener:identifier"]),
|
||||||
"Failed to restart bad:listener:identifier listener: {no_such_listener,\"bad:listener:identifier\"}\n"
|
"Failed to restart bad:listener:identifier listener:"
|
||||||
|
" {no_such_listener,\"bad:listener:identifier\"}\n"
|
||||||
),
|
),
|
||||||
unmock_print().
|
unmock_print().
|
||||||
|
|
||||||
|
@ -325,7 +326,7 @@ t_plugins_cmd(_) ->
|
||||||
),
|
),
|
||||||
?assertEqual(
|
?assertEqual(
|
||||||
emqx_mgmt_cli:plugins(["unload", "emqx_management"]),
|
emqx_mgmt_cli:plugins(["unload", "emqx_management"]),
|
||||||
"Plugin emqx_management can not be unloaded.~n"
|
"Plugin emqx_management can not be unloaded.\n"
|
||||||
),
|
),
|
||||||
unmock_print().
|
unmock_print().
|
||||||
|
|
||||||
|
@ -359,7 +360,7 @@ t_cli(_) ->
|
||||||
mock_print() ->
|
mock_print() ->
|
||||||
catch meck:unload(emqx_ctl),
|
catch meck:unload(emqx_ctl),
|
||||||
meck:new(emqx_ctl, [non_strict, passthrough]),
|
meck:new(emqx_ctl, [non_strict, passthrough]),
|
||||||
meck:expect(emqx_ctl, print, fun(Arg) -> emqx_ctl:format(Arg) end),
|
meck:expect(emqx_ctl, print, fun(Arg) -> emqx_ctl:format(Arg, []) end),
|
||||||
meck:expect(emqx_ctl, print, fun(Msg, Arg) -> emqx_ctl:format(Msg, Arg) end),
|
meck:expect(emqx_ctl, print, fun(Msg, Arg) -> emqx_ctl:format(Msg, Arg) end),
|
||||||
meck:expect(emqx_ctl, usage, fun(Usages) -> emqx_ctl:format_usage(Usages) end),
|
meck:expect(emqx_ctl, usage, fun(Usages) -> emqx_ctl:format_usage(Usages) end),
|
||||||
meck:expect(emqx_ctl, usage, fun(Cmd, Descr) -> emqx_ctl:format_usage(Cmd, Descr) end).
|
meck:expect(emqx_ctl, usage, fun(Cmd, Descr) -> emqx_ctl:format_usage(Cmd, Descr) end).
|
||||||
|
|
|
@ -105,10 +105,9 @@ cli_usage(_) ->
|
||||||
mock_print() ->
|
mock_print() ->
|
||||||
catch meck:unload(emqx_ctl),
|
catch meck:unload(emqx_ctl),
|
||||||
meck:new(emqx_ctl, [non_strict, passthrough]),
|
meck:new(emqx_ctl, [non_strict, passthrough]),
|
||||||
meck:expect(emqx_ctl, print, fun(Arg) -> emqx_ctl:format(Arg) end),
|
meck:expect(emqx_ctl, print, fun(Arg) -> emqx_ctl:format(Arg, []) end),
|
||||||
meck:expect(emqx_ctl, print, fun(Msg, Arg) -> emqx_ctl:format(Msg, Arg) end),
|
meck:expect(emqx_ctl, print, fun(Msg, Arg) -> emqx_ctl:format(Msg, Arg) end),
|
||||||
meck:expect(emqx_ctl, usage, fun(Usages) -> emqx_ctl:format_usage(Usages) end).
|
meck:expect(emqx_ctl, usage, fun(Usages) -> emqx_ctl:format_usage(Usages) end).
|
||||||
|
|
||||||
unmock_print() ->
|
unmock_print() ->
|
||||||
meck:unload().
|
meck:unload().
|
||||||
|
|
||||||
|
|
|
@ -1,135 +1,116 @@
|
||||||
%% -*- mode: erlang -*-
|
%% -*- mode: erlang -*-
|
||||||
{VSN,
|
{VSN,
|
||||||
[
|
[{"4.3.6",
|
||||||
{"4.3.6",
|
[{update,emqx_rule_metrics,{advanced,["4.3.6"]}},
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.6"]}}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
|
||||||
]},
|
|
||||||
{"4.3.5",
|
{"4.3.5",
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.5"]}}
|
[{update,emqx_rule_metrics,{advanced,["4.3.5"]}},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
|
||||||
{"4.3.4",
|
{"4.3.4",
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.4"]}}
|
[{update,emqx_rule_metrics,{advanced,["4.3.4"]}},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
|
||||||
{"4.3.3",
|
{"4.3.3",
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.3"]}}
|
[{update,emqx_rule_metrics,{advanced,["4.3.3"]}},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
|
||||||
{"4.3.2",
|
{"4.3.2",
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.2"]}}
|
[{update,emqx_rule_metrics,{advanced,["4.3.2"]}},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
, {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}
|
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
|
||||||
{"4.3.1",
|
{"4.3.1",
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.1"]}}
|
[{update,emqx_rule_metrics,{advanced,["4.3.1"]}},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
, {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}
|
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
||||||
, {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
|
||||||
{"4.3.0",
|
{"4.3.0",
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.0"]}}
|
[{update,emqx_rule_metrics,{advanced,["4.3.0"]}},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
, {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}
|
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
||||||
, {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
{<<".*">>,[]}],
|
||||||
{<<".*">>, []}
|
[{"4.3.6",
|
||||||
],
|
[{update,emqx_rule_metrics,{advanced,["4.3.6"]}},
|
||||||
[
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
{"4.3.6",
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.6"]}}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
|
||||||
]},
|
|
||||||
{"4.3.5",
|
{"4.3.5",
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.5"]}}
|
[{update,emqx_rule_metrics,{advanced,["4.3.5"]}},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
|
||||||
{"4.3.4",
|
{"4.3.4",
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.4"]}}
|
[{update,emqx_rule_metrics,{advanced,["4.3.4"]}},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
|
||||||
{"4.3.3",
|
{"4.3.3",
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.3"]}}
|
[{update,emqx_rule_metrics,{advanced,["4.3.3"]}},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
|
||||||
{"4.3.2",
|
{"4.3.2",
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.2"]}}
|
[{update,emqx_rule_metrics,{advanced,["4.3.2"]}},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
, {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}
|
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
|
||||||
{"4.3.1",
|
{"4.3.1",
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.1"]}}
|
[{update,emqx_rule_metrics,{advanced,["4.3.1"]}},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
, {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}
|
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
||||||
, {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
|
||||||
{"4.3.0",
|
{"4.3.0",
|
||||||
[ {update, emqx_rule_metrics, {advanced, ["4.3.0"]}}
|
[{update,emqx_rule_metrics,{advanced,["4.3.0"]}},
|
||||||
, {load_module,emqx_rule_events,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
, {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}
|
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
||||||
, {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
]},
|
{<<".*">>,[]}]}.
|
||||||
{<<".*">>, []}
|
|
||||||
]
|
|
||||||
}.
|
|
||||||
|
|
|
@ -187,7 +187,8 @@ end_per_group(_Groupname, _Config) ->
|
||||||
init_per_testcase(t_events, Config) ->
|
init_per_testcase(t_events, Config) ->
|
||||||
ok = emqx_rule_engine:load_providers(),
|
ok = emqx_rule_engine:load_providers(),
|
||||||
init_events_counters(),
|
init_events_counters(),
|
||||||
ok = emqx_rule_registry:register_resource_types([make_simple_resource_type(simple_resource_type)]),
|
ok = emqx_rule_registry:register_resource_types(
|
||||||
|
[make_simple_resource_type(simple_resource_type)]),
|
||||||
ok = emqx_rule_registry:add_action(
|
ok = emqx_rule_registry:add_action(
|
||||||
#action{name = 'hook-metrics-action', app = ?APP,
|
#action{name = 'hook-metrics-action', app = ?APP,
|
||||||
module = ?MODULE, on_create = hook_metrics_action,
|
module = ?MODULE, on_create = hook_metrics_action,
|
||||||
|
@ -206,7 +207,10 @@ init_per_testcase(t_events, Config) ->
|
||||||
#{id => <<"rule:t_events">>,
|
#{id => <<"rule:t_events">>,
|
||||||
rawsql => SQL,
|
rawsql => SQL,
|
||||||
actions => [#{id => <<"action:inspect">>, name => 'inspect', args => #{}},
|
actions => [#{id => <<"action:inspect">>, name => 'inspect', args => #{}},
|
||||||
#{id => <<"action:hook-metrics-action">>, name => 'hook-metrics-action', args => #{}}],
|
#{ id => <<"action:hook-metrics-action">>
|
||||||
|
, name => 'hook-metrics-action'
|
||||||
|
, args => #{}
|
||||||
|
}],
|
||||||
description => <<"Debug rule">>}),
|
description => <<"Debug rule">>}),
|
||||||
?assertMatch(#rule{id = <<"rule:t_events">>}, Rule),
|
?assertMatch(#rule{id = <<"rule:t_events">>}, Rule),
|
||||||
[{hook_points_rules, Rule} | Config];
|
[{hook_points_rules, Rule} | Config];
|
||||||
|
@ -439,7 +443,8 @@ t_list_actions_api(_Config) ->
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
t_show_action_api(_Config) ->
|
t_show_action_api(_Config) ->
|
||||||
{ok, #{code := 0, data := Actions}} = emqx_rule_engine_api:show_action(#{name => 'inspect'}, []),
|
{ok, #{code := 0, data := Actions}} =
|
||||||
|
emqx_rule_engine_api:show_action(#{name => 'inspect'}, []),
|
||||||
?assertEqual('inspect', maps:get(name, Actions)),
|
?assertEqual('inspect', maps:get(name, Actions)),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
@ -503,7 +508,8 @@ t_list_resource_types_api(_Config) ->
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
t_show_resource_type_api(_Config) ->
|
t_show_resource_type_api(_Config) ->
|
||||||
{ok, #{code := 0, data := RShow}} = emqx_rule_engine_api:show_resource_type(#{name => 'built_in'}, []),
|
{ok, #{code := 0, data := RShow}} =
|
||||||
|
emqx_rule_engine_api:show_resource_type(#{name => 'built_in'}, []),
|
||||||
%ct:pal("RShow : ~p", [RShow]),
|
%ct:pal("RShow : ~p", [RShow]),
|
||||||
?assertEqual(built_in, maps:get(name, RShow)),
|
?assertEqual(built_in, maps:get(name, RShow)),
|
||||||
ok.
|
ok.
|
||||||
|
@ -521,7 +527,15 @@ t_rules_cli(_Config) ->
|
||||||
%ct:pal("Result : ~p", [RCreate]),
|
%ct:pal("Result : ~p", [RCreate]),
|
||||||
?assertMatch({match, _}, re:run(RCreate, "created")),
|
?assertMatch({match, _}, re:run(RCreate, "created")),
|
||||||
|
|
||||||
RuleId = re:replace(re:replace(RCreate, "Rule\s", "", [{return, list}]), "\screated\n", "", [{return, list}]),
|
RuleId = re:replace(
|
||||||
|
re:replace( RCreate
|
||||||
|
, "Rule\s"
|
||||||
|
, ""
|
||||||
|
, [{return, list}]
|
||||||
|
),
|
||||||
|
"\screated\n",
|
||||||
|
"",
|
||||||
|
[{return, list}]),
|
||||||
|
|
||||||
RList = emqx_rule_engine_cli:rules(["list"]),
|
RList = emqx_rule_engine_cli:rules(["list"]),
|
||||||
?assertMatch({match, _}, re:run(RList, RuleId)),
|
?assertMatch({match, _}, re:run(RList, RuleId)),
|
||||||
|
@ -538,7 +552,7 @@ t_rules_cli(_Config) ->
|
||||||
?assertMatch({match, _}, re:run(RUpdate, "updated")),
|
?assertMatch({match, _}, re:run(RUpdate, "updated")),
|
||||||
|
|
||||||
RDelete = emqx_rule_engine_cli:rules(["delete", RuleId]),
|
RDelete = emqx_rule_engine_cli:rules(["delete", RuleId]),
|
||||||
?assertEqual("ok~n", RDelete),
|
?assertEqual("ok\n", RDelete),
|
||||||
%ct:pal("RDelete : ~p", [RDelete]),
|
%ct:pal("RDelete : ~p", [RDelete]),
|
||||||
%ct:pal("table action params after deleted: ~p", [ets:tab2list(emqx_action_instance_params)]),
|
%ct:pal("table action params after deleted: ~p", [ets:tab2list(emqx_action_instance_params)]),
|
||||||
|
|
||||||
|
@ -562,8 +576,17 @@ t_actions_cli(_Config) ->
|
||||||
|
|
||||||
t_resources_cli(_Config) ->
|
t_resources_cli(_Config) ->
|
||||||
mock_print(),
|
mock_print(),
|
||||||
RCreate = emqx_rule_engine_cli:resources(["create", "built_in", "{\"a\" : 1}", "-d", "test resource"]),
|
RCreate = emqx_rule_engine_cli:resources(
|
||||||
ResId = re:replace(re:replace(RCreate, "Resource\s", "", [{return, list}]), "\screated\n", "", [{return, list}]),
|
["create", "built_in", "{\"a\" : 1}", "-d", "test resource"]),
|
||||||
|
ResId = re:replace(
|
||||||
|
re:replace( RCreate
|
||||||
|
, "Resource\s"
|
||||||
|
, ""
|
||||||
|
, [{return, list}]
|
||||||
|
),
|
||||||
|
"\screated\n",
|
||||||
|
"",
|
||||||
|
[{return, list}]),
|
||||||
|
|
||||||
RList = emqx_rule_engine_cli:resources(["list"]),
|
RList = emqx_rule_engine_cli:resources(["list"]),
|
||||||
?assertMatch({match, _}, re:run(RList, "test resource")),
|
?assertMatch({match, _}, re:run(RList, "test resource")),
|
||||||
|
@ -578,7 +601,7 @@ t_resources_cli(_Config) ->
|
||||||
%ct:pal("RShow : ~p", [RShow]),
|
%ct:pal("RShow : ~p", [RShow]),
|
||||||
|
|
||||||
RDelete = emqx_rule_engine_cli:resources(["delete", ResId]),
|
RDelete = emqx_rule_engine_cli:resources(["delete", ResId]),
|
||||||
?assertEqual("ok~n", RDelete),
|
?assertEqual("ok\n", RDelete),
|
||||||
|
|
||||||
RShow2 = emqx_rule_engine_cli:resources(["show", ResId]),
|
RShow2 = emqx_rule_engine_cli:resources(["show", ResId]),
|
||||||
?assertMatch({match, _}, re:run(RShow2, "Cannot found")),
|
?assertMatch({match, _}, re:run(RShow2, "Cannot found")),
|
||||||
|
@ -765,48 +788,121 @@ t_get_rules_ordered_by_ts(_Config) ->
|
||||||
t_get_rules_for_2(_Config) ->
|
t_get_rules_for_2(_Config) ->
|
||||||
Len0 = length(emqx_rule_registry:get_rules_for(<<"simple/1">>)),
|
Len0 = length(emqx_rule_registry:get_rules_for(<<"simple/1">>)),
|
||||||
ok = emqx_rule_registry:add_rules(
|
ok = emqx_rule_registry:add_rules(
|
||||||
[make_simple_rule(<<"rule-debug-1">>, <<"select * from \"simple/#\"">>, [<<"simple/#">>]),
|
[make_simple_rule(
|
||||||
make_simple_rule(<<"rule-debug-2">>, <<"select * from \"simple/+\"">>, [<<"simple/+">>]),
|
<<"rule-debug-1">>,
|
||||||
make_simple_rule(<<"rule-debug-3">>, <<"select * from \"simple/+/1\"">>, [<<"simple/+/1">>]),
|
<<"select * from \"simple/#\"">>,
|
||||||
make_simple_rule(<<"rule-debug-4">>, <<"select * from \"simple/1\"">>, [<<"simple/1">>]),
|
[<<"simple/#">>]),
|
||||||
make_simple_rule(<<"rule-debug-5">>, <<"select * from \"simple/2,simple/+,simple/3\"">>, [<<"simple/2">>,<<"simple/+">>, <<"simple/3">>]),
|
make_simple_rule(
|
||||||
make_simple_rule(<<"rule-debug-6">>, <<"select * from \"simple/2,simple/3,simple/4\"">>, [<<"simple/2">>,<<"simple/3">>, <<"simple/4">>])
|
<<"rule-debug-2">>,
|
||||||
|
<<"select * from \"simple/+\"">>,
|
||||||
|
[<<"simple/+">>]),
|
||||||
|
make_simple_rule(
|
||||||
|
<<"rule-debug-3">>,
|
||||||
|
<<"select * from \"simple/+/1\"">>,
|
||||||
|
[<<"simple/+/1">>]),
|
||||||
|
make_simple_rule(
|
||||||
|
<<"rule-debug-4">>,
|
||||||
|
<<"select * from \"simple/1\"">>,
|
||||||
|
[<<"simple/1">>]),
|
||||||
|
make_simple_rule(
|
||||||
|
<<"rule-debug-5">>,
|
||||||
|
<<"select * from \"simple/2,simple/+,simple/3\"">>,
|
||||||
|
[<<"simple/2">>,<<"simple/+">>, <<"simple/3">>]),
|
||||||
|
make_simple_rule(
|
||||||
|
<<"rule-debug-6">>,
|
||||||
|
<<"select * from \"simple/2,simple/3,simple/4\"">>,
|
||||||
|
[<<"simple/2">>,<<"simple/3">>, <<"simple/4">>])
|
||||||
]),
|
]),
|
||||||
?assertEqual(Len0+4, length(emqx_rule_registry:get_rules_for(<<"simple/1">>))),
|
?assertEqual(Len0+4, length(emqx_rule_registry:get_rules_for(<<"simple/1">>))),
|
||||||
ok = emqx_rule_registry:remove_rules([<<"rule-debug-1">>, <<"rule-debug-2">>,<<"rule-debug-3">>, <<"rule-debug-4">>,<<"rule-debug-5">>, <<"rule-debug-6">>]),
|
ok = emqx_rule_registry:remove_rules(
|
||||||
|
[ <<"rule-debug-1">>
|
||||||
|
, <<"rule-debug-2">>
|
||||||
|
, <<"rule-debug-3">>
|
||||||
|
, <<"rule-debug-4">>
|
||||||
|
, <<"rule-debug-5">>
|
||||||
|
, <<"rule-debug-6">>
|
||||||
|
]),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
t_get_rules_with_same_event(_Config) ->
|
t_get_rules_with_same_event(_Config) ->
|
||||||
PubT = <<"simple/1">>,
|
PubT = <<"simple/1">>,
|
||||||
PubN = length(emqx_rule_registry:get_rules_with_same_event(PubT)),
|
PubN = length(emqx_rule_registry:get_rules_with_same_event(PubT)),
|
||||||
?assertEqual([], emqx_rule_registry:get_rules_with_same_event(<<"$events/client_connected">>)),
|
?assertEqual([], emqx_rule_registry:get_rules_with_same_event(<<"$events/client_connected">>)),
|
||||||
?assertEqual([], emqx_rule_registry:get_rules_with_same_event(<<"$events/client_disconnected">>)),
|
?assertEqual(
|
||||||
?assertEqual([], emqx_rule_registry:get_rules_with_same_event(<<"$events/session_subscribed">>)),
|
[],
|
||||||
?assertEqual([], emqx_rule_registry:get_rules_with_same_event(<<"$events/session_unsubscribed">>)),
|
emqx_rule_registry:get_rules_with_same_event(<<"$events/client_disconnected">>)),
|
||||||
|
?assertEqual(
|
||||||
|
[],
|
||||||
|
emqx_rule_registry:get_rules_with_same_event(<<"$events/session_subscribed">>)),
|
||||||
|
?assertEqual(
|
||||||
|
[],
|
||||||
|
emqx_rule_registry:get_rules_with_same_event(<<"$events/session_unsubscribed">>)),
|
||||||
?assertEqual([], emqx_rule_registry:get_rules_with_same_event(<<"$events/message_delivered">>)),
|
?assertEqual([], emqx_rule_registry:get_rules_with_same_event(<<"$events/message_delivered">>)),
|
||||||
?assertEqual([], emqx_rule_registry:get_rules_with_same_event(<<"$events/message_acked">>)),
|
?assertEqual([], emqx_rule_registry:get_rules_with_same_event(<<"$events/message_acked">>)),
|
||||||
?assertEqual([], emqx_rule_registry:get_rules_with_same_event(<<"$events/message_dropped">>)),
|
?assertEqual([], emqx_rule_registry:get_rules_with_same_event(<<"$events/message_dropped">>)),
|
||||||
ok = emqx_rule_registry:add_rules(
|
ok = emqx_rule_registry:add_rules(
|
||||||
[make_simple_rule(<<"r1">>, <<"select * from \"simple/#\"">>, [<<"simple/#">>]),
|
[make_simple_rule(<<"r1">>, <<"select * from \"simple/#\"">>, [<<"simple/#">>]),
|
||||||
make_simple_rule(<<"r2">>, <<"select * from \"abc/+\"">>, [<<"abc/+">>]),
|
make_simple_rule(<<"r2">>, <<"select * from \"abc/+\"">>, [<<"abc/+">>]),
|
||||||
make_simple_rule(<<"r3">>, <<"select * from \"$events/client_connected\"">>, [<<"$events/client_connected">>]),
|
make_simple_rule(
|
||||||
make_simple_rule(<<"r4">>, <<"select * from \"$events/client_disconnected\"">>, [<<"$events/client_disconnected">>]),
|
<<"r3">>,
|
||||||
make_simple_rule(<<"r5">>, <<"select * from \"$events/session_subscribed\"">>, [<<"$events/session_subscribed">>]),
|
<<"select * from \"$events/client_connected\"">>,
|
||||||
make_simple_rule(<<"r6">>, <<"select * from \"$events/session_unsubscribed\"">>, [<<"$events/session_unsubscribed">>]),
|
[<<"$events/client_connected">>]),
|
||||||
make_simple_rule(<<"r7">>, <<"select * from \"$events/message_delivered\"">>, [<<"$events/message_delivered">>]),
|
make_simple_rule(
|
||||||
make_simple_rule(<<"r8">>, <<"select * from \"$events/message_acked\"">>, [<<"$events/message_acked">>]),
|
<<"r4">>,
|
||||||
make_simple_rule(<<"r9">>, <<"select * from \"$events/message_dropped\"">>, [<<"$events/message_dropped">>]),
|
<<"select * from \"$events/client_disconnected\"">>,
|
||||||
make_simple_rule(<<"r10">>, <<"select * from \"t/1, $events/session_subscribed, $events/client_connected\"">>, [<<"t/1">>, <<"$events/session_subscribed">>, <<"$events/client_connected">>])
|
[<<"$events/client_disconnected">>]),
|
||||||
|
make_simple_rule(
|
||||||
|
<<"r5">>,
|
||||||
|
<<"select * from \"$events/session_subscribed\"">>,
|
||||||
|
[<<"$events/session_subscribed">>]),
|
||||||
|
make_simple_rule(
|
||||||
|
<<"r6">>,
|
||||||
|
<<"select * from \"$events/session_unsubscribed\"">>,
|
||||||
|
[<<"$events/session_unsubscribed">>]),
|
||||||
|
make_simple_rule(
|
||||||
|
<<"r7">>,
|
||||||
|
<<"select * from \"$events/message_delivered\"">>,
|
||||||
|
[<<"$events/message_delivered">>]),
|
||||||
|
make_simple_rule(
|
||||||
|
<<"r8">>,
|
||||||
|
<<"select * from \"$events/message_acked\"">>,
|
||||||
|
[<<"$events/message_acked">>]),
|
||||||
|
make_simple_rule(
|
||||||
|
<<"r9">>,
|
||||||
|
<<"select * from \"$events/message_dropped\"">>,
|
||||||
|
[<<"$events/message_dropped">>]),
|
||||||
|
make_simple_rule(
|
||||||
|
<<"r10">>,
|
||||||
|
<<"select * from \"t/1, $events/session_subscribed,"
|
||||||
|
" $events/client_connected\"">>,
|
||||||
|
[<<"t/1">>, <<"$events/session_subscribed">>, <<"$events/client_connected">>])
|
||||||
]),
|
]),
|
||||||
?assertEqual(PubN + 3, length(emqx_rule_registry:get_rules_with_same_event(PubT))),
|
?assertEqual(PubN + 3, length(emqx_rule_registry:get_rules_with_same_event(PubT))),
|
||||||
?assertEqual(2, length(emqx_rule_registry:get_rules_with_same_event(<<"$events/client_connected">>))),
|
?assertEqual(
|
||||||
?assertEqual(1, length(emqx_rule_registry:get_rules_with_same_event(<<"$events/client_disconnected">>))),
|
2,
|
||||||
?assertEqual(2, length(emqx_rule_registry:get_rules_with_same_event(<<"$events/session_subscribed">>))),
|
length(emqx_rule_registry:get_rules_with_same_event(<<"$events/client_connected">>))),
|
||||||
?assertEqual(1, length(emqx_rule_registry:get_rules_with_same_event(<<"$events/session_unsubscribed">>))),
|
?assertEqual(
|
||||||
?assertEqual(1, length(emqx_rule_registry:get_rules_with_same_event(<<"$events/message_delivered">>))),
|
1,
|
||||||
?assertEqual(1, length(emqx_rule_registry:get_rules_with_same_event(<<"$events/message_acked">>))),
|
length(emqx_rule_registry:get_rules_with_same_event(<<"$events/client_disconnected">>))),
|
||||||
?assertEqual(1, length(emqx_rule_registry:get_rules_with_same_event(<<"$events/message_dropped">>))),
|
?assertEqual(
|
||||||
ok = emqx_rule_registry:remove_rules([<<"r1">>, <<"r2">>,<<"r3">>, <<"r4">>,<<"r5">>, <<"r6">>, <<"r7">>, <<"r8">>, <<"r9">>, <<"r10">>]),
|
2,
|
||||||
|
length(emqx_rule_registry:get_rules_with_same_event(<<"$events/session_subscribed">>))),
|
||||||
|
?assertEqual(
|
||||||
|
1,
|
||||||
|
length(emqx_rule_registry:get_rules_with_same_event(<<"$events/session_unsubscribed">>))),
|
||||||
|
?assertEqual(
|
||||||
|
1,
|
||||||
|
length(emqx_rule_registry:get_rules_with_same_event(<<"$events/message_delivered">>))),
|
||||||
|
?assertEqual(
|
||||||
|
1,
|
||||||
|
length(emqx_rule_registry:get_rules_with_same_event(<<"$events/message_acked">>))),
|
||||||
|
?assertEqual(
|
||||||
|
1,
|
||||||
|
length(emqx_rule_registry:get_rules_with_same_event(<<"$events/message_dropped">>))),
|
||||||
|
ok = emqx_rule_registry:remove_rules(
|
||||||
|
[<<"r1">>, <<"r2">>,<<"r3">>,
|
||||||
|
<<"r4">>,<<"r5">>, <<"r6">>,
|
||||||
|
<<"r7">>, <<"r8">>, <<"r9">>, <<"r10">>]),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
t_add_get_remove_action(_Config) ->
|
t_add_get_remove_action(_Config) ->
|
||||||
|
@ -882,7 +978,11 @@ register_resource_types() ->
|
||||||
emqx_rule_registry:register_resource_types([ResType1,ResType2]),
|
emqx_rule_registry:register_resource_types([ResType1,ResType2]),
|
||||||
ok.
|
ok.
|
||||||
get_resource_type() ->
|
get_resource_type() ->
|
||||||
?assertMatch({ok, #resource_type{name = <<"resource-type-debug-1">>}}, emqx_rule_registry:find_resource_type(<<"resource-type-debug-1">>)),
|
?assertMatch( { ok
|
||||||
|
, #resource_type{name = <<"resource-type-debug-1">>}
|
||||||
|
}
|
||||||
|
, emqx_rule_registry:find_resource_type(<<"resource-type-debug-1">>)
|
||||||
|
),
|
||||||
ok.
|
ok.
|
||||||
get_resource_types() ->
|
get_resource_types() ->
|
||||||
ResTypes = emqx_rule_registry:get_resource_types(),
|
ResTypes = emqx_rule_registry:get_resource_types(),
|
||||||
|
@ -947,11 +1047,18 @@ client_disconnected(Client, Client2) ->
|
||||||
verify_event('client.disconnected'),
|
verify_event('client.disconnected'),
|
||||||
ok.
|
ok.
|
||||||
session_subscribed(Client2) ->
|
session_subscribed(Client2) ->
|
||||||
{ok, _, _} = emqtt:subscribe(Client2, #{'User-Property' => {<<"topic_name">>, <<"t1">>}}, <<"t1">>, 1),
|
{ok, _, _} = emqtt:subscribe( Client2
|
||||||
|
, #{'User-Property' => {<<"topic_name">>, <<"t1">>}}
|
||||||
|
, <<"t1">>
|
||||||
|
, 1
|
||||||
|
),
|
||||||
verify_event('session.subscribed'),
|
verify_event('session.subscribed'),
|
||||||
ok.
|
ok.
|
||||||
session_unsubscribed(Client2) ->
|
session_unsubscribed(Client2) ->
|
||||||
{ok, _, _} = emqtt:unsubscribe(Client2, #{'User-Property' => {<<"topic_name">>, <<"t1">>}}, <<"t1">>),
|
{ok, _, _} = emqtt:unsubscribe( Client2
|
||||||
|
, #{'User-Property' => {<<"topic_name">>, <<"t1">>}}
|
||||||
|
, <<"t1">>
|
||||||
|
),
|
||||||
verify_event('session.unsubscribed'),
|
verify_event('session.unsubscribed'),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
@ -977,7 +1084,10 @@ t_mfa_action(_Config) ->
|
||||||
{ok, #rule{id = Id}} = emqx_rule_engine:create_rule(
|
{ok, #rule{id = Id}} = emqx_rule_engine:create_rule(
|
||||||
#{id => <<"rule:t_mfa_action">>,
|
#{id => <<"rule:t_mfa_action">>,
|
||||||
rawsql => SQL,
|
rawsql => SQL,
|
||||||
actions => [#{id => <<"action:mfa-test">>, name => 'mfa-action', args => #{}}],
|
actions => [#{ id => <<"action:mfa-test">>
|
||||||
|
, name => 'mfa-action'
|
||||||
|
, args => #{}
|
||||||
|
}],
|
||||||
description => <<"Debug rule">>}),
|
description => <<"Debug rule">>}),
|
||||||
{ok, Client} = emqtt:start_link([{username, <<"emqx">>}]),
|
{ok, Client} = emqtt:start_link([{username, <<"emqx">>}]),
|
||||||
{ok, _} = emqtt:connect(Client),
|
{ok, _} = emqtt:connect(Client),
|
||||||
|
@ -1676,12 +1786,18 @@ t_sqlparse_foreach_1(_Config) ->
|
||||||
Sql3 = "foreach payload.sensors "
|
Sql3 = "foreach payload.sensors "
|
||||||
"from \"t/#\" ",
|
"from \"t/#\" ",
|
||||||
?assertMatch({ok,[#{item := #{<<"cmd">> := <<"1">>}, clientid := <<"c_a">>},
|
?assertMatch({ok,[#{item := #{<<"cmd">> := <<"1">>}, clientid := <<"c_a">>},
|
||||||
#{item := #{<<"cmd">> := <<"2">>, <<"name">> := <<"ct">>}, clientid := <<"c_a">>}]},
|
#{item := #{ <<"cmd">> := <<"2">>
|
||||||
|
, <<"name">> := <<"ct">>
|
||||||
|
}
|
||||||
|
, clientid := <<"c_a">>}]},
|
||||||
emqx_rule_sqltester:test(
|
emqx_rule_sqltester:test(
|
||||||
#{<<"rawsql">> => Sql3,
|
#{<<"rawsql">> => Sql3,
|
||||||
<<"ctx">> => #{
|
<<"ctx">> =>
|
||||||
<<"payload">> => <<"{\"sensors\": [{\"cmd\":\"1\"}, {\"cmd\":\"2\",\"name\":\"ct\"}]}">>, <<"clientid">> => <<"c_a">>,
|
#{ <<"payload">> => <<"{\"sensors\": [{\"cmd\":\"1\"}, "
|
||||||
<<"topic">> => <<"t/a">>}})),
|
"{\"cmd\":\"2\",\"name\":\"ct\"}]}">>
|
||||||
|
, <<"clientid">> => <<"c_a">>
|
||||||
|
, <<"topic">> => <<"t/a">>
|
||||||
|
}})),
|
||||||
Sql4 = "foreach payload.sensors "
|
Sql4 = "foreach payload.sensors "
|
||||||
"from \"t/#\" ",
|
"from \"t/#\" ",
|
||||||
{ok,[#{metadata := #{rule_id := TRuleId}},
|
{ok,[#{metadata := #{rule_id := TRuleId}},
|
||||||
|
@ -1766,12 +1882,17 @@ t_sqlparse_foreach_4(_Config) ->
|
||||||
#{<<"payload">> =>
|
#{<<"payload">> =>
|
||||||
<<"{\"sensors\": [{\"cmd\":\"1\"}, {\"cmd\":\"2\"}]}">>,
|
<<"{\"sensors\": [{\"cmd\":\"1\"}, {\"cmd\":\"2\"}]}">>,
|
||||||
<<"topic">> => <<"t/a">>}})),
|
<<"topic">> => <<"t/a">>}})),
|
||||||
?assertMatch({ok,[#{<<"msg_type">> := <<"1">>, <<"name">> := <<"n1">>}, #{<<"msg_type">> := <<"2">>}]},
|
?assertMatch({ ok
|
||||||
|
, [ #{<<"msg_type">> := <<"1">>, <<"name">> := <<"n1">>}
|
||||||
|
, #{<<"msg_type">> := <<"2">>}
|
||||||
|
]
|
||||||
|
},
|
||||||
emqx_rule_sqltester:test(
|
emqx_rule_sqltester:test(
|
||||||
#{<<"rawsql">> => Sql,
|
#{<<"rawsql">> => Sql,
|
||||||
<<"ctx">> =>
|
<<"ctx">> =>
|
||||||
#{<<"payload">> =>
|
#{<<"payload">> =>
|
||||||
<<"{\"sensors\": [{\"cmd\":\"1\", \"name\":\"n1\"}, {\"cmd\":\"2\"}, {\"name\":\"n3\"}]}">>,
|
<<"{\"sensors\": [{\"cmd\":\"1\", \"name\":\"n1\"}, "
|
||||||
|
"{\"cmd\":\"2\"}, {\"name\":\"n3\"}]}">>,
|
||||||
<<"topic">> => <<"t/a">>}})),
|
<<"topic">> => <<"t/a">>}})),
|
||||||
?assertMatch({ok,[]},
|
?assertMatch({ok,[]},
|
||||||
emqx_rule_sqltester:test(
|
emqx_rule_sqltester:test(
|
||||||
|
@ -1828,8 +1949,13 @@ t_sqlparse_foreach_7(_Config) ->
|
||||||
"incase is_not_null(info.cmd) "
|
"incase is_not_null(info.cmd) "
|
||||||
"from \"t/#\" "
|
"from \"t/#\" "
|
||||||
"where s.page = '2' ",
|
"where s.page = '2' ",
|
||||||
Payload = <<"{\"sensors\": {\"page\": 2, \"collection\": {\"info\":[{\"name\":\"cmd1\", \"cmd\":\"1\"}, {\"cmd\":\"2\"}]} } }">>,
|
Payload = <<"{\"sensors\": {\"page\": 2, \"collection\": "
|
||||||
?assertMatch({ok,[#{<<"name">> := <<"cmd1">>, <<"msg_type">> := <<"1">>}, #{<<"msg_type">> := <<"2">>}]},
|
"{\"info\":[{\"name\":\"cmd1\", \"cmd\":\"1\"}, {\"cmd\":\"2\"}]} } }">>,
|
||||||
|
?assertMatch({ ok
|
||||||
|
, [ #{<<"name">> := <<"cmd1">>, <<"msg_type">> := <<"1">>}
|
||||||
|
, #{<<"msg_type">> := <<"2">>}
|
||||||
|
]
|
||||||
|
},
|
||||||
emqx_rule_sqltester:test(
|
emqx_rule_sqltester:test(
|
||||||
#{<<"rawsql">> => Sql,
|
#{<<"rawsql">> => Sql,
|
||||||
<<"ctx">> =>
|
<<"ctx">> =>
|
||||||
|
@ -1854,7 +1980,8 @@ t_sqlparse_foreach_8(_Config) ->
|
||||||
"incase is_map(info) "
|
"incase is_map(info) "
|
||||||
"from \"t/#\" "
|
"from \"t/#\" "
|
||||||
"where s.page = '2' ",
|
"where s.page = '2' ",
|
||||||
Payload = <<"{\"sensors\": {\"page\": 2, \"collection\": {\"info\":[\"haha\", {\"name\":\"cmd1\", \"cmd\":\"1\"}]} } }">>,
|
Payload = <<"{\"sensors\": {\"page\": 2, \"collection\": "
|
||||||
|
"{\"info\":[\"haha\", {\"name\":\"cmd1\", \"cmd\":\"1\"}]} } }">>,
|
||||||
?assertMatch({ok,[#{<<"name">> := <<"cmd1">>, <<"msg_type">> := <<"1">>}]},
|
?assertMatch({ok,[#{<<"name">> := <<"cmd1">>, <<"msg_type">> := <<"1">>}]},
|
||||||
emqx_rule_sqltester:test(
|
emqx_rule_sqltester:test(
|
||||||
#{<<"rawsql">> => Sql,
|
#{<<"rawsql">> => Sql,
|
||||||
|
@ -1862,10 +1989,11 @@ t_sqlparse_foreach_8(_Config) ->
|
||||||
#{<<"payload">> => Payload,
|
#{<<"payload">> => Payload,
|
||||||
<<"topic">> => <<"t/a">>}})),
|
<<"topic">> => <<"t/a">>}})),
|
||||||
|
|
||||||
Sql3 = "foreach json_decode(payload) as p, p.sensors as s, s.collection as c, sublist(2,1,c.info) as info "
|
Sql3 = "foreach json_decode(payload) as p, p.sensors as s,"
|
||||||
"do info.cmd as msg_type, info.name as name "
|
" s.collection as c, sublist(2,1,c.info) as info "
|
||||||
"from \"t/#\" "
|
"do info.cmd as msg_type, info.name as name "
|
||||||
"where s.page = '2' ",
|
"from \"t/#\" "
|
||||||
|
"where s.page = '2' ",
|
||||||
[?assertMatch({ok,[#{<<"name">> := <<"cmd1">>, <<"msg_type">> := <<"1">>}]},
|
[?assertMatch({ok,[#{<<"name">> := <<"cmd1">>, <<"msg_type">> := <<"1">>}]},
|
||||||
emqx_rule_sqltester:test(
|
emqx_rule_sqltester:test(
|
||||||
#{<<"rawsql">> => SqlN,
|
#{<<"rawsql">> => SqlN,
|
||||||
|
@ -1992,10 +2120,12 @@ t_sqlparse_array_index_1(_Config) ->
|
||||||
Sql3 = "select "
|
Sql3 = "select "
|
||||||
" payload.x[2].y "
|
" payload.x[2].y "
|
||||||
"from \"t/#\" ",
|
"from \"t/#\" ",
|
||||||
?assertMatch({ok, #{<<"payload">> := #{<<"x">> := [#{<<"y">> := 3}]}}}, emqx_rule_sqltester:test(
|
?assertMatch( {ok, #{<<"payload">> := #{<<"x">> := [#{<<"y">> := 3}]}}}
|
||||||
|
, emqx_rule_sqltester:test(
|
||||||
#{<<"rawsql">> => Sql3,
|
#{<<"rawsql">> => Sql3,
|
||||||
<<"ctx">> => #{<<"payload">> => #{<<"x">> => [1,#{y => 3},4]},
|
<<"ctx">> => #{<<"payload">> => #{<<"x">> => [1,#{y => 3},4]},
|
||||||
<<"topic">> => <<"t/a">>}})),
|
<<"topic">> => <<"t/a">>}})
|
||||||
|
),
|
||||||
|
|
||||||
%% index get with 'as'
|
%% index get with 'as'
|
||||||
Sql4 = "select "
|
Sql4 = "select "
|
||||||
|
@ -2228,10 +2358,12 @@ t_sqlparse_new_map(_Config) ->
|
||||||
t_sqlparse_payload_as(_Config) ->
|
t_sqlparse_payload_as(_Config) ->
|
||||||
%% https://github.com/emqx/emqx/issues/3866
|
%% https://github.com/emqx/emqx/issues/3866
|
||||||
Sql00 = "SELECT "
|
Sql00 = "SELECT "
|
||||||
" payload, map_get('engineWorkTime', payload.params, -1) as payload.params.engineWorkTime, "
|
" payload, map_get('engineWorkTime', payload.params, -1) "
|
||||||
|
"as payload.params.engineWorkTime, "
|
||||||
" map_get('hydOilTem', payload.params, -1) as payload.params.hydOilTem "
|
" map_get('hydOilTem', payload.params, -1) as payload.params.hydOilTem "
|
||||||
"FROM \"t/#\" ",
|
"FROM \"t/#\" ",
|
||||||
Payload1 = <<"{ \"msgId\": 1002, \"params\": { \"convertTemp\": 20, \"engineSpeed\": 42, \"hydOilTem\": 30 } }">>,
|
Payload1 = <<"{ \"msgId\": 1002, \"params\": "
|
||||||
|
"{ \"convertTemp\": 20, \"engineSpeed\": 42, \"hydOilTem\": 30 } }">>,
|
||||||
{ok, Res01} = emqx_rule_sqltester:test(
|
{ok, Res01} = emqx_rule_sqltester:test(
|
||||||
#{<<"rawsql">> => Sql00,
|
#{<<"rawsql">> => Sql00,
|
||||||
<<"ctx">> => #{<<"payload">> => Payload1,
|
<<"ctx">> => #{<<"payload">> => Payload1,
|
||||||
|
@ -2711,7 +2843,7 @@ set_special_configs(_App) ->
|
||||||
mock_print() ->
|
mock_print() ->
|
||||||
catch meck:unload(emqx_ctl),
|
catch meck:unload(emqx_ctl),
|
||||||
meck:new(emqx_ctl, [non_strict, passthrough]),
|
meck:new(emqx_ctl, [non_strict, passthrough]),
|
||||||
meck:expect(emqx_ctl, print, fun(Arg) -> emqx_ctl:format(Arg) end),
|
meck:expect(emqx_ctl, print, fun(Arg) -> emqx_ctl:format(Arg, []) end),
|
||||||
meck:expect(emqx_ctl, print, fun(Msg, Arg) -> emqx_ctl:format(Msg, Arg) end),
|
meck:expect(emqx_ctl, print, fun(Msg, Arg) -> emqx_ctl:format(Msg, Arg) end),
|
||||||
meck:expect(emqx_ctl, usage, fun(Usages) -> emqx_ctl:format_usage(Usages) end),
|
meck:expect(emqx_ctl, usage, fun(Usages) -> emqx_ctl:format_usage(Usages) end),
|
||||||
meck:expect(emqx_ctl, usage, fun(Cmd, Descr) -> emqx_ctl:format_usage(Cmd, Descr) end).
|
meck:expect(emqx_ctl, usage, fun(Cmd, Descr) -> emqx_ctl:format_usage(Cmd, Descr) end).
|
||||||
|
@ -2763,4 +2895,3 @@ t_clear_resource(_) ->
|
||||||
|
|
||||||
t_clear_action(_) ->
|
t_clear_action(_) ->
|
||||||
error('TODO').
|
error('TODO').
|
||||||
|
|
||||||
|
|
|
@ -143,7 +143,7 @@ t_join_cluster(_) ->
|
||||||
mock_print() ->
|
mock_print() ->
|
||||||
catch meck:unload(emqx_ctl),
|
catch meck:unload(emqx_ctl),
|
||||||
meck:new(emqx_ctl, [non_strict, passthrough]),
|
meck:new(emqx_ctl, [non_strict, passthrough]),
|
||||||
meck:expect(emqx_ctl, print, fun(Arg) -> emqx_ctl:format(Arg) end),
|
meck:expect(emqx_ctl, print, fun(Arg) -> emqx_ctl:format(Arg, []) end),
|
||||||
meck:expect(emqx_ctl, print, fun(Msg, Arg) -> emqx_ctl:format(Msg, Arg) end),
|
meck:expect(emqx_ctl, print, fun(Msg, Arg) -> emqx_ctl:format(Msg, Arg) end),
|
||||||
meck:expect(emqx_ctl, usage, fun(Usages) -> emqx_ctl:format_usage(Usages) end),
|
meck:expect(emqx_ctl, usage, fun(Usages) -> emqx_ctl:format_usage(Usages) end),
|
||||||
meck:expect(emqx_ctl, usage, fun(Cmd, Descr) -> emqx_ctl:format_usage(Cmd, Descr) end).
|
meck:expect(emqx_ctl, usage, fun(Cmd, Descr) -> emqx_ctl:format_usage(Cmd, Descr) end).
|
||||||
|
|
|
@ -1,20 +1,23 @@
|
||||||
%% -*- mode: erlang -*-
|
%% -*- mode: erlang -*-
|
||||||
{VSN,
|
{VSN,
|
||||||
[{"4.3.12",
|
[{"4.3.12",
|
||||||
[ {load_module,emqx_metrics,brutal_purge,soft_purge,[]}
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
, {apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}}
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_access_control,brutal_purge,soft_purge,[]}
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_channel,brutal_purge,soft_purge,[]}
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
, {load_module,emqx_session,brutal_purge,soft_purge,[]}
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_alarm,brutal_purge,soft_purge,[]}
|
{load_module,emqx_channel,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}
|
{load_module,emqx_session,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx,brutal_purge,soft_purge,[]}
|
{load_module,emqx_alarm,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_app,brutal_purge,soft_purge,[]}
|
{load_module,emqx_os_mon,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_message,brutal_purge,soft_purge,[]}
|
{load_module,emqx,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}
|
{load_module,emqx_app,brutal_purge,soft_purge,[]},
|
||||||
]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.11",
|
{"4.3.11",
|
||||||
[{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
|
@ -31,7 +34,9 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.10",
|
{"4.3.10",
|
||||||
[{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_channel,brutal_purge,soft_purge,[]},
|
{load_module,emqx_channel,brutal_purge,soft_purge,[]},
|
||||||
|
@ -48,7 +53,9 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.9",
|
{"4.3.9",
|
||||||
[{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
|
@ -70,7 +77,9 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.8",
|
{"4.3.8",
|
||||||
[{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
|
@ -92,7 +101,9 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.7",
|
{"4.3.7",
|
||||||
[{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
|
@ -116,7 +127,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.6",
|
{"4.3.6",
|
||||||
[{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
|
@ -141,7 +153,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.5",
|
{"4.3.5",
|
||||||
[{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
|
@ -167,7 +180,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.4",
|
{"4.3.4",
|
||||||
[{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
|
@ -194,7 +208,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.3",
|
{"4.3.3",
|
||||||
[{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
|
@ -222,7 +237,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.2",
|
{"4.3.2",
|
||||||
[{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
|
@ -250,7 +266,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.1",
|
{"4.3.1",
|
||||||
[{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
|
@ -282,7 +299,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.0",
|
{"4.3.0",
|
||||||
[{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
{apply,{emqx_metrics,assign_acl_stats_from_ets_to_counter,[]}},
|
||||||
{apply,{emqx_metrics,upgrade_retained_delayed_counter_type,[]}},
|
{apply,{emqx_metrics,upgrade_retained_delayed_counter_type,[]}},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
|
@ -318,19 +336,22 @@
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{<<".*">>,[]}],
|
{<<".*">>,[]}],
|
||||||
[{"4.3.12",
|
[{"4.3.12",
|
||||||
[ {load_module,emqx_channel,brutal_purge,soft_purge,[]}
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_access_control,brutal_purge,soft_purge,[]}
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_metrics,brutal_purge,soft_purge,[]}
|
{load_module,emqx_channel,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_session,brutal_purge,soft_purge,[]}
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_alarm,brutal_purge,soft_purge,[]}
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}
|
{load_module,emqx_session,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx,brutal_purge,soft_purge,[]}
|
{load_module,emqx_alarm,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_app,brutal_purge,soft_purge,[]}
|
{load_module,emqx_os_mon,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_message,brutal_purge,soft_purge,[]}
|
{load_module,emqx,brutal_purge,soft_purge,[]},
|
||||||
, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}
|
{load_module,emqx_app,brutal_purge,soft_purge,[]},
|
||||||
]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.11",
|
{"4.3.11",
|
||||||
[{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_channel,brutal_purge,soft_purge,[]},
|
{load_module,emqx_channel,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
|
@ -346,7 +367,9 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.10",
|
{"4.3.10",
|
||||||
[{load_module,emqx_channel,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_channel,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
{load_module,emqx_access_control,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_session,brutal_purge,soft_purge,[]},
|
{load_module,emqx_session,brutal_purge,soft_purge,[]},
|
||||||
|
@ -362,7 +385,9 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.9",
|
{"4.3.9",
|
||||||
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
|
@ -383,7 +408,9 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.8",
|
{"4.3.8",
|
||||||
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
|
@ -404,7 +431,9 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.7",
|
{"4.3.7",
|
||||||
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
|
@ -427,7 +456,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.6",
|
{"4.3.6",
|
||||||
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
|
@ -451,7 +481,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.5",
|
{"4.3.5",
|
||||||
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
|
@ -476,7 +507,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.4",
|
{"4.3.4",
|
||||||
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
|
@ -502,7 +534,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.3",
|
{"4.3.3",
|
||||||
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
|
@ -529,7 +562,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.2",
|
{"4.3.2",
|
||||||
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
|
{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
|
{load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
|
||||||
|
@ -556,7 +590,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.1",
|
{"4.3.1",
|
||||||
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
|
{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
|
{load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
|
||||||
|
@ -587,7 +622,8 @@
|
||||||
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
{load_module,emqx_message,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.0",
|
{"4.3.0",
|
||||||
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
|
{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_misc,brutal_purge,soft_purge,[]},
|
{load_module,emqx_misc,brutal_purge,soft_purge,[]},
|
||||||
|
|
|
@ -43,8 +43,7 @@
|
||||||
]).
|
]).
|
||||||
|
|
||||||
%% Exports mainly for test cases
|
%% Exports mainly for test cases
|
||||||
-export([ format/1
|
-export([ format/2
|
||||||
, format/2
|
|
||||||
, format_usage/1
|
, format_usage/1
|
||||||
, format_usage/2
|
, format_usage/2
|
||||||
]).
|
]).
|
||||||
|
@ -58,6 +57,8 @@
|
||||||
, code_change/3
|
, code_change/3
|
||||||
]).
|
]).
|
||||||
|
|
||||||
|
-elvis([{elvis_style, invalid_dynamic_call, #{ignore => [emqx_ctl]}}]).
|
||||||
|
|
||||||
-record(state, {seq = 0}).
|
-record(state, {seq = 0}).
|
||||||
|
|
||||||
-type(cmd() :: atom()).
|
-type(cmd() :: atom()).
|
||||||
|
@ -137,7 +138,7 @@ help() ->
|
||||||
|
|
||||||
-spec(print(io:format()) -> ok).
|
-spec(print(io:format()) -> ok).
|
||||||
print(Msg) ->
|
print(Msg) ->
|
||||||
io:format("~s", [format(Msg)]).
|
io:format("~s", [format(Msg, [])]).
|
||||||
|
|
||||||
-spec(print(io:format(), [term()]) -> ok).
|
-spec(print(io:format(), [term()]) -> ok).
|
||||||
print(Format, Args) ->
|
print(Format, Args) ->
|
||||||
|
@ -151,10 +152,6 @@ usage(UsageList) ->
|
||||||
usage(CmdParams, Desc) ->
|
usage(CmdParams, Desc) ->
|
||||||
io:format(format_usage(CmdParams, Desc)).
|
io:format(format_usage(CmdParams, Desc)).
|
||||||
|
|
||||||
-spec(format(io:format()) -> string()).
|
|
||||||
format(Msg) ->
|
|
||||||
lists:flatten(io_lib:format("~s", [Msg])).
|
|
||||||
|
|
||||||
-spec(format(io:format(), [term()]) -> string()).
|
-spec(format(io:format(), [term()]) -> string()).
|
||||||
format(Format, Args) ->
|
format(Format, Args) ->
|
||||||
lists:flatten(io_lib:format(Format, Args)).
|
lists:flatten(io_lib:format(Format, Args)).
|
||||||
|
|
|
@ -70,7 +70,7 @@ t_print(_) ->
|
||||||
ok = emqx_ctl:print("~s", [<<"~!@#$%^&*()">>]),
|
ok = emqx_ctl:print("~s", [<<"~!@#$%^&*()">>]),
|
||||||
% - check the output of the usage
|
% - check the output of the usage
|
||||||
mock_print(),
|
mock_print(),
|
||||||
?assertEqual("help~n", emqx_ctl:print("help~n")),
|
?assertEqual("help\n", emqx_ctl:print("help~n")),
|
||||||
?assertEqual("help", emqx_ctl:print("~s", [help])),
|
?assertEqual("help", emqx_ctl:print("~s", [help])),
|
||||||
?assertEqual("~!@#$%^&*()", emqx_ctl:print("~s", [<<"~!@#$%^&*()">>])),
|
?assertEqual("~!@#$%^&*()", emqx_ctl:print("~s", [<<"~!@#$%^&*()">>])),
|
||||||
unmock_print().
|
unmock_print().
|
||||||
|
@ -110,7 +110,7 @@ mock_print() ->
|
||||||
%% proxy usage/1,2 and print/1,2 to format_xx/1,2 funcs
|
%% proxy usage/1,2 and print/1,2 to format_xx/1,2 funcs
|
||||||
catch meck:unload(emqx_ctl),
|
catch meck:unload(emqx_ctl),
|
||||||
meck:new(emqx_ctl, [non_strict, passthrough]),
|
meck:new(emqx_ctl, [non_strict, passthrough]),
|
||||||
meck:expect(emqx_ctl, print, fun(Arg) -> emqx_ctl:format(Arg) end),
|
meck:expect(emqx_ctl, print, fun(Arg) -> emqx_ctl:format(Arg, []) end),
|
||||||
meck:expect(emqx_ctl, print, fun(Msg, Arg) -> emqx_ctl:format(Msg, Arg) end),
|
meck:expect(emqx_ctl, print, fun(Msg, Arg) -> emqx_ctl:format(Msg, Arg) end),
|
||||||
meck:expect(emqx_ctl, usage, fun(Usages) -> emqx_ctl:format_usage(Usages) end),
|
meck:expect(emqx_ctl, usage, fun(Usages) -> emqx_ctl:format_usage(Usages) end),
|
||||||
meck:expect(emqx_ctl, usage, fun(CmdParams, CmdDescr) ->
|
meck:expect(emqx_ctl, usage, fun(CmdParams, CmdDescr) ->
|
||||||
|
|
Loading…
Reference in New Issue