fix: remove the APIs for emqx_hooks:put/2 and emqx_hooks:add/2
This commit is contained in:
parent
39b1b20506
commit
48f685a0dd
|
@ -49,10 +49,6 @@
|
||||||
|
|
||||||
%% Hooks API
|
%% Hooks API
|
||||||
-export([
|
-export([
|
||||||
hook/2,
|
|
||||||
hook/3,
|
|
||||||
hook/4,
|
|
||||||
unhook/2,
|
|
||||||
run_hook/2,
|
run_hook/2,
|
||||||
run_fold_hook/3
|
run_fold_hook/3
|
||||||
]).
|
]).
|
||||||
|
@ -160,31 +156,6 @@ subscribed(SubId, Topic) when is_atom(SubId); is_binary(SubId) ->
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% Hooks API
|
%% Hooks API
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
|
|
||||||
-spec hook(emqx_hooks:hookpoint(), emqx_hooks:action()) -> ok | {error, already_exists}.
|
|
||||||
hook(HookPoint, Action) ->
|
|
||||||
emqx_hooks:add(HookPoint, Action).
|
|
||||||
|
|
||||||
-spec hook(
|
|
||||||
emqx_hooks:hookpoint(),
|
|
||||||
emqx_hooks:action(),
|
|
||||||
emqx_hooks:filter() | integer() | list()
|
|
||||||
) ->
|
|
||||||
ok | {error, already_exists}.
|
|
||||||
hook(HookPoint, Action, Priority) when is_integer(Priority) ->
|
|
||||||
emqx_hooks:add(HookPoint, Action, Priority);
|
|
||||||
hook(HookPoint, Action, {_M, _F, _A} = Filter) ->
|
|
||||||
emqx_hooks:add(HookPoint, Action, Filter).
|
|
||||||
|
|
||||||
-spec hook(emqx_hooks:hookpoint(), emqx_hooks:action(), emqx_hooks:filter(), integer()) ->
|
|
||||||
ok | {error, already_exists}.
|
|
||||||
hook(HookPoint, Action, Filter, Priority) ->
|
|
||||||
emqx_hooks:add(HookPoint, Action, Filter, Priority).
|
|
||||||
|
|
||||||
-spec unhook(emqx_hooks:hookpoint(), emqx_hooks:action() | {module(), atom()}) -> ok.
|
|
||||||
unhook(HookPoint, Action) ->
|
|
||||||
emqx_hooks:del(HookPoint, Action).
|
|
||||||
|
|
||||||
-spec run_hook(emqx_hooks:hookpoint(), list(any())) -> ok | stop.
|
-spec run_hook(emqx_hooks:hookpoint(), list(any())) -> ok | stop.
|
||||||
run_hook(HookPoint, Args) ->
|
run_hook(HookPoint, Args) ->
|
||||||
emqx_hooks:run(HookPoint, Args).
|
emqx_hooks:run(HookPoint, Args).
|
||||||
|
|
|
@ -29,10 +29,8 @@
|
||||||
|
|
||||||
%% Hooks API
|
%% Hooks API
|
||||||
-export([
|
-export([
|
||||||
add/2,
|
|
||||||
add/3,
|
add/3,
|
||||||
add/4,
|
add/4,
|
||||||
put/2,
|
|
||||||
put/3,
|
put/3,
|
||||||
put/4,
|
put/4,
|
||||||
del/2,
|
del/2,
|
||||||
|
@ -121,44 +119,34 @@ callback_priority(#callback{priority = P}) -> P.
|
||||||
%% Hooks API
|
%% Hooks API
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
|
|
||||||
%% @doc `add/2,3,4` add a new hook, returns 'already_exists' if the hook exists.
|
%% @doc `add/3,4` add a new hook, returns 'already_exists' if the hook exists.
|
||||||
-spec add(hookpoint(), action() | callback()) -> ok_or_error(already_exists).
|
-spec add(hookpoint(), action(), integer()) ->
|
||||||
add(HookPoint, Callback) when is_record(Callback, callback) ->
|
|
||||||
gen_server:call(?SERVER, {add, HookPoint, Callback}, infinity);
|
|
||||||
add(HookPoint, Action) when is_function(Action); is_tuple(Action) ->
|
|
||||||
add(HookPoint, #callback{action = Action, priority = 0}).
|
|
||||||
|
|
||||||
-spec add(hookpoint(), action(), filter() | integer() | list()) ->
|
|
||||||
ok_or_error(already_exists).
|
ok_or_error(already_exists).
|
||||||
add(HookPoint, Action, {_M, _F, _A} = Filter) ->
|
|
||||||
add(HookPoint, #callback{action = Action, filter = Filter, priority = 0});
|
|
||||||
add(HookPoint, Action, Priority) when is_integer(Priority) ->
|
add(HookPoint, Action, Priority) when is_integer(Priority) ->
|
||||||
add(HookPoint, #callback{action = Action, priority = Priority}).
|
do_add(HookPoint, #callback{action = Action, priority = Priority}).
|
||||||
|
|
||||||
-spec add(hookpoint(), action(), filter(), integer()) ->
|
-spec add(hookpoint(), action(), integer(), filter()) ->
|
||||||
ok_or_error(already_exists).
|
ok_or_error(already_exists).
|
||||||
add(HookPoint, Action, Filter, Priority) when is_integer(Priority) ->
|
add(HookPoint, Action, Priority, Filter) when is_integer(Priority) ->
|
||||||
add(HookPoint, #callback{action = Action, filter = Filter, priority = Priority}).
|
do_add(HookPoint, #callback{action = Action, filter = Filter, priority = Priority}).
|
||||||
|
|
||||||
%% @doc `put/2,3,4` updates the existing hook, add it if not exists.
|
do_add(HookPoint, Callback) ->
|
||||||
-spec put(hookpoint(), action() | callback()) -> ok.
|
gen_server:call(?SERVER, {add, HookPoint, Callback}, infinity).
|
||||||
put(HookPoint, Callback) when is_record(Callback, callback) ->
|
|
||||||
case add(HookPoint, Callback) of
|
%% @doc `put/3,4` updates the existing hook, add it if not exists.
|
||||||
|
-spec put(hookpoint(), action(), integer()) -> ok.
|
||||||
|
put(HookPoint, Action, Priority) when is_integer(Priority) ->
|
||||||
|
do_put(HookPoint, #callback{action = Action, priority = Priority}).
|
||||||
|
|
||||||
|
-spec put(hookpoint(), action(), integer(), filter()) -> ok.
|
||||||
|
put(HookPoint, Action, Priority, Filter) when is_integer(Priority) ->
|
||||||
|
do_put(HookPoint, #callback{action = Action, filter = Filter, priority = Priority}).
|
||||||
|
|
||||||
|
do_put(HookPoint, Callback) ->
|
||||||
|
case do_add(HookPoint, Callback) of
|
||||||
ok -> ok;
|
ok -> ok;
|
||||||
{error, already_exists} -> gen_server:call(?SERVER, {put, HookPoint, Callback}, infinity)
|
{error, already_exists} -> gen_server:call(?SERVER, {put, HookPoint, Callback}, infinity)
|
||||||
end;
|
end.
|
||||||
put(HookPoint, Action) when is_function(Action); is_tuple(Action) ->
|
|
||||||
?MODULE:put(HookPoint, #callback{action = Action, priority = 0}).
|
|
||||||
|
|
||||||
-spec put(hookpoint(), action(), filter() | integer() | list()) -> ok.
|
|
||||||
put(HookPoint, Action, {_M, _F, _A} = Filter) ->
|
|
||||||
?MODULE:put(HookPoint, #callback{action = Action, filter = Filter, priority = 0});
|
|
||||||
put(HookPoint, Action, Priority) when is_integer(Priority) ->
|
|
||||||
?MODULE:put(HookPoint, #callback{action = Action, priority = Priority}).
|
|
||||||
|
|
||||||
-spec put(hookpoint(), action(), filter(), integer()) -> ok.
|
|
||||||
put(HookPoint, Action, Filter, Priority) when is_integer(Priority) ->
|
|
||||||
?MODULE:put(HookPoint, #callback{action = Action, filter = Filter, priority = Priority}).
|
|
||||||
|
|
||||||
%% @doc Unregister a callback.
|
%% @doc Unregister a callback.
|
||||||
-spec del(hookpoint(), action() | {module(), atom()}) -> ok.
|
-spec del(hookpoint(), action() | {module(), atom()}) -> ok.
|
||||||
|
|
|
@ -95,52 +95,54 @@ t_emqx_pubsub_api(_) ->
|
||||||
?assertEqual([], emqx:topics()).
|
?assertEqual([], emqx:topics()).
|
||||||
|
|
||||||
t_hook_unhook(_) ->
|
t_hook_unhook(_) ->
|
||||||
ok = emqx:hook(test_hook, {?MODULE, hook_fun1, []}),
|
ok = emqx_hooks:add(test_hook, {?MODULE, hook_fun1, []}, 0),
|
||||||
ok = emqx:hook(test_hook, {?MODULE, hook_fun2, []}),
|
ok = emqx_hooks:add(test_hook, {?MODULE, hook_fun2, []}, 0),
|
||||||
?assertEqual(
|
?assertEqual(
|
||||||
{error, already_exists},
|
{error, already_exists},
|
||||||
emqx:hook(test_hook, {?MODULE, hook_fun2, []})
|
emqx_hooks:add(test_hook, {?MODULE, hook_fun2, []}, 0)
|
||||||
),
|
),
|
||||||
ok = emqx:unhook(test_hook, {?MODULE, hook_fun1}),
|
ok = emqx_hooks:del(test_hook, {?MODULE, hook_fun1}),
|
||||||
ok = emqx:unhook(test_hook, {?MODULE, hook_fun2}),
|
ok = emqx_hooks:del(test_hook, {?MODULE, hook_fun2}),
|
||||||
|
|
||||||
ok = emqx:hook(emqx_hook, {?MODULE, hook_fun8, []}, 8),
|
ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun8, []}, 8),
|
||||||
ok = emqx:hook(emqx_hook, {?MODULE, hook_fun2, []}, 2),
|
ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun2, []}, 2),
|
||||||
ok = emqx:hook(emqx_hook, {?MODULE, hook_fun10, []}, 10),
|
ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun10, []}, 10),
|
||||||
ok = emqx:hook(emqx_hook, {?MODULE, hook_fun9, []}, 9),
|
ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun9, []}, 9),
|
||||||
ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun2, []}),
|
ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun2, []}),
|
||||||
ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun8, []}),
|
ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun8, []}),
|
||||||
ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun9, []}),
|
ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun9, []}),
|
||||||
ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun10, []}).
|
ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun10, []}).
|
||||||
|
|
||||||
t_run_hook(_) ->
|
t_run_hook(_) ->
|
||||||
ok = emqx:hook(foldl_hook, {?MODULE, hook_fun3, [init]}),
|
ok = emqx_hooks:add(foldl_hook, {?MODULE, hook_fun3, [init]}, 0),
|
||||||
ok = emqx:hook(foldl_hook, {?MODULE, hook_fun4, [init]}),
|
ok = emqx_hooks:add(foldl_hook, {?MODULE, hook_fun4, [init]}, 0),
|
||||||
ok = emqx:hook(foldl_hook, {?MODULE, hook_fun5, [init]}),
|
ok = emqx_hooks:add(foldl_hook, {?MODULE, hook_fun5, [init]}, 0),
|
||||||
[r5, r4] = emqx:run_fold_hook(foldl_hook, [arg1, arg2], []),
|
[r5, r4] = emqx:run_fold_hook(foldl_hook, [arg1, arg2], []),
|
||||||
[] = emqx:run_fold_hook(unknown_hook, [], []),
|
[] = emqx:run_fold_hook(unknown_hook, [], []),
|
||||||
|
|
||||||
ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun9, []}),
|
ok = emqx_hooks:add(foldl_hook2, {?MODULE, hook_fun9, []}, 0),
|
||||||
ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun10, []}),
|
ok = emqx_hooks:add(foldl_hook2, {?MODULE, hook_fun10, []}, 0),
|
||||||
[r10] = emqx:run_fold_hook(foldl_hook2, [arg], []),
|
[r10] = emqx:run_fold_hook(foldl_hook2, [arg], []),
|
||||||
|
|
||||||
ok = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}),
|
ok = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun6, [initArg]}, 0),
|
||||||
{error, already_exists} = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}),
|
{error, already_exists} = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun6, [initArg]}, 0),
|
||||||
ok = emqx:hook(foreach_hook, {?MODULE, hook_fun7, [initArg]}),
|
ok = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun7, [initArg]}, 0),
|
||||||
ok = emqx:hook(foreach_hook, {?MODULE, hook_fun8, [initArg]}),
|
ok = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun8, [initArg]}, 0),
|
||||||
ok = emqx:run_hook(foreach_hook, [arg]),
|
ok = emqx:run_hook(foreach_hook, [arg]),
|
||||||
|
|
||||||
ok = emqx:hook(foreach_filter1_hook, {?MODULE, hook_fun1, []}, {?MODULE, hook_filter1, []}, 0),
|
ok = emqx_hooks:add(
|
||||||
|
foreach_filter1_hook, {?MODULE, hook_fun1, []}, 0, {?MODULE, hook_filter1, []}
|
||||||
|
),
|
||||||
%% filter passed
|
%% filter passed
|
||||||
?assertEqual(ok, emqx:run_hook(foreach_filter1_hook, [arg])),
|
?assertEqual(ok, emqx:run_hook(foreach_filter1_hook, [arg])),
|
||||||
%% filter failed
|
%% filter failed
|
||||||
?assertEqual(ok, emqx:run_hook(foreach_filter1_hook, [arg1])),
|
?assertEqual(ok, emqx:run_hook(foreach_filter1_hook, [arg1])),
|
||||||
|
|
||||||
ok = emqx:hook(
|
ok = emqx_hooks:add(
|
||||||
foldl_filter2_hook, {?MODULE, hook_fun2, []}, {?MODULE, hook_filter2, [init_arg]}
|
foldl_filter2_hook, {?MODULE, hook_fun2, []}, 0, {?MODULE, hook_filter2, [init_arg]}
|
||||||
),
|
),
|
||||||
ok = emqx:hook(
|
ok = emqx_hooks:add(
|
||||||
foldl_filter2_hook, {?MODULE, hook_fun2_1, []}, {?MODULE, hook_filter2_1, [init_arg]}
|
foldl_filter2_hook, {?MODULE, hook_fun2_1, []}, 0, {?MODULE, hook_filter2_1, [init_arg]}
|
||||||
),
|
),
|
||||||
?assertEqual(3, emqx:run_fold_hook(foldl_filter2_hook, [arg], 1)),
|
?assertEqual(3, emqx:run_fold_hook(foldl_filter2_hook, [arg], 1)),
|
||||||
?assertEqual(2, emqx:run_fold_hook(foldl_filter2_hook, [arg1], 1)).
|
?assertEqual(2, emqx:run_fold_hook(foldl_filter2_hook, [arg1], 1)).
|
||||||
|
|
|
@ -66,7 +66,7 @@ add_hook_order_prop() ->
|
||||||
hooks(),
|
hooks(),
|
||||||
try
|
try
|
||||||
{ok, _} = emqx_hooks:start_link(),
|
{ok, _} = emqx_hooks:start_link(),
|
||||||
[ok = emqx:hook(prop_hook, {M, F, []}, Prio) || {Prio, M, F} <- Hooks],
|
[ok = emqx_hooks:add(prop_hook, {M, F, []}, Prio) || {Prio, M, F} <- Hooks],
|
||||||
Callbacks = emqx_hooks:lookup(prop_hook),
|
Callbacks = emqx_hooks:lookup(prop_hook),
|
||||||
Order = [{Prio, M, F} || {callback, {M, F, _}, _Filter, Prio} <- Callbacks],
|
Order = [{Prio, M, F} || {callback, {M, F, _}, _Filter, Prio} <- Callbacks],
|
||||||
?assertEqual(
|
?assertEqual(
|
||||||
|
@ -93,11 +93,11 @@ hooks() ->
|
||||||
|
|
||||||
t_add_put_del_hook(_) ->
|
t_add_put_del_hook(_) ->
|
||||||
{ok, _} = emqx_hooks:start_link(),
|
{ok, _} = emqx_hooks:start_link(),
|
||||||
ok = emqx:hook(test_hook, {?MODULE, hook_fun1, []}),
|
ok = emqx_hooks:add(test_hook, {?MODULE, hook_fun1, []}, 0),
|
||||||
ok = emqx:hook(test_hook, {?MODULE, hook_fun2, []}),
|
ok = emqx_hooks:add(test_hook, {?MODULE, hook_fun2, []}, 0),
|
||||||
?assertEqual(
|
?assertEqual(
|
||||||
{error, already_exists},
|
{error, already_exists},
|
||||||
emqx:hook(test_hook, {?MODULE, hook_fun2, []})
|
emqx_hooks:add(test_hook, {?MODULE, hook_fun2, []}, 0)
|
||||||
),
|
),
|
||||||
Callbacks0 = [
|
Callbacks0 = [
|
||||||
{callback, {?MODULE, hook_fun1, []}, undefined, 0},
|
{callback, {?MODULE, hook_fun1, []}, undefined, 0},
|
||||||
|
@ -105,23 +105,23 @@ t_add_put_del_hook(_) ->
|
||||||
],
|
],
|
||||||
?assertEqual(Callbacks0, emqx_hooks:lookup(test_hook)),
|
?assertEqual(Callbacks0, emqx_hooks:lookup(test_hook)),
|
||||||
|
|
||||||
ok = emqx_hooks:put(test_hook, {?MODULE, hook_fun1, [test]}),
|
ok = emqx_hooks:put(test_hook, {?MODULE, hook_fun1, [test]}, 0),
|
||||||
ok = emqx_hooks:put(test_hook, {?MODULE, hook_fun2, [test]}),
|
ok = emqx_hooks:put(test_hook, {?MODULE, hook_fun2, [test]}, 0),
|
||||||
Callbacks1 = [
|
Callbacks1 = [
|
||||||
{callback, {?MODULE, hook_fun1, [test]}, undefined, 0},
|
{callback, {?MODULE, hook_fun1, [test]}, undefined, 0},
|
||||||
{callback, {?MODULE, hook_fun2, [test]}, undefined, 0}
|
{callback, {?MODULE, hook_fun2, [test]}, undefined, 0}
|
||||||
],
|
],
|
||||||
?assertEqual(Callbacks1, emqx_hooks:lookup(test_hook)),
|
?assertEqual(Callbacks1, emqx_hooks:lookup(test_hook)),
|
||||||
|
|
||||||
ok = emqx:unhook(test_hook, {?MODULE, hook_fun1}),
|
ok = emqx_hooks:del(test_hook, {?MODULE, hook_fun1}),
|
||||||
ok = emqx:unhook(test_hook, {?MODULE, hook_fun2}),
|
ok = emqx_hooks:del(test_hook, {?MODULE, hook_fun2}),
|
||||||
timer:sleep(200),
|
timer:sleep(200),
|
||||||
?assertEqual([], emqx_hooks:lookup(test_hook)),
|
?assertEqual([], emqx_hooks:lookup(test_hook)),
|
||||||
|
|
||||||
ok = emqx:hook(emqx_hook, {?MODULE, hook_fun8, []}, 8),
|
ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun8, []}, 8),
|
||||||
ok = emqx:hook(emqx_hook, {?MODULE, hook_fun2, []}, 2),
|
ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun2, []}, 2),
|
||||||
ok = emqx:hook(emqx_hook, {?MODULE, hook_fun10, []}, 10),
|
ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun10, []}, 10),
|
||||||
ok = emqx:hook(emqx_hook, {?MODULE, hook_fun9, []}, 9),
|
ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun9, []}, 9),
|
||||||
Callbacks2 = [
|
Callbacks2 = [
|
||||||
{callback, {?MODULE, hook_fun10, []}, undefined, 10},
|
{callback, {?MODULE, hook_fun10, []}, undefined, 10},
|
||||||
{callback, {?MODULE, hook_fun9, []}, undefined, 9},
|
{callback, {?MODULE, hook_fun9, []}, undefined, 9},
|
||||||
|
@ -142,43 +142,45 @@ t_add_put_del_hook(_) ->
|
||||||
],
|
],
|
||||||
?assertEqual(Callbacks3, emqx_hooks:lookup(emqx_hook)),
|
?assertEqual(Callbacks3, emqx_hooks:lookup(emqx_hook)),
|
||||||
|
|
||||||
ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun2, [test]}),
|
ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun2, [test]}),
|
||||||
ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun8, [test]}),
|
ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun8, [test]}),
|
||||||
ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun9, [test]}),
|
ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun9, [test]}),
|
||||||
ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun10, [test]}),
|
ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun10, [test]}),
|
||||||
timer:sleep(200),
|
timer:sleep(200),
|
||||||
?assertEqual([], emqx_hooks:lookup(emqx_hook)).
|
?assertEqual([], emqx_hooks:lookup(emqx_hook)).
|
||||||
|
|
||||||
t_run_hooks(_) ->
|
t_run_hooks(_) ->
|
||||||
{ok, _} = emqx_hooks:start_link(),
|
{ok, _} = emqx_hooks:start_link(),
|
||||||
ok = emqx:hook(foldl_hook, {?MODULE, hook_fun3, [init]}),
|
ok = emqx_hooks:add(foldl_hook, {?MODULE, hook_fun3, [init]}, 0),
|
||||||
ok = emqx:hook(foldl_hook, {?MODULE, hook_fun4, [init]}),
|
ok = emqx_hooks:add(foldl_hook, {?MODULE, hook_fun4, [init]}, 0),
|
||||||
ok = emqx:hook(foldl_hook, {?MODULE, hook_fun5, [init]}),
|
ok = emqx_hooks:add(foldl_hook, {?MODULE, hook_fun5, [init]}, 0),
|
||||||
[r5, r4] = emqx:run_fold_hook(foldl_hook, [arg1, arg2], []),
|
[r5, r4] = emqx:run_fold_hook(foldl_hook, [arg1, arg2], []),
|
||||||
[] = emqx:run_fold_hook(unknown_hook, [], []),
|
[] = emqx:run_fold_hook(unknown_hook, [], []),
|
||||||
|
|
||||||
ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun9, []}),
|
ok = emqx_hooks:add(foldl_hook2, {?MODULE, hook_fun9, []}, 0),
|
||||||
ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun10, []}),
|
ok = emqx_hooks:add(foldl_hook2, {?MODULE, hook_fun10, []}, 0),
|
||||||
%% Note: 10 is _less_ than 9 per lexicographic order
|
%% Note: 10 is _less_ than 9 per lexicographic order
|
||||||
[r10] = emqx:run_fold_hook(foldl_hook2, [arg], []),
|
[r10] = emqx:run_fold_hook(foldl_hook2, [arg], []),
|
||||||
|
|
||||||
ok = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}),
|
ok = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun6, [initArg]}, 0),
|
||||||
{error, already_exists} = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}),
|
{error, already_exists} = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun6, [initArg]}, 0),
|
||||||
ok = emqx:hook(foreach_hook, {?MODULE, hook_fun7, [initArg]}),
|
ok = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun7, [initArg]}, 0),
|
||||||
ok = emqx:hook(foreach_hook, {?MODULE, hook_fun8, [initArg]}),
|
ok = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun8, [initArg]}, 0),
|
||||||
ok = emqx:run_hook(foreach_hook, [arg]),
|
ok = emqx:run_hook(foreach_hook, [arg]),
|
||||||
|
|
||||||
ok = emqx:hook(foreach_filter1_hook, {?MODULE, hook_fun1, []}, {?MODULE, hook_filter1, []}, 0),
|
ok = emqx_hooks:add(
|
||||||
|
foreach_filter1_hook, {?MODULE, hook_fun1, []}, 0, {?MODULE, hook_filter1, []}
|
||||||
|
),
|
||||||
%% filter passed
|
%% filter passed
|
||||||
?assertEqual(ok, emqx:run_hook(foreach_filter1_hook, [arg])),
|
?assertEqual(ok, emqx:run_hook(foreach_filter1_hook, [arg])),
|
||||||
%% filter failed
|
%% filter failed
|
||||||
?assertEqual(ok, emqx:run_hook(foreach_filter1_hook, [arg1])),
|
?assertEqual(ok, emqx:run_hook(foreach_filter1_hook, [arg1])),
|
||||||
|
|
||||||
ok = emqx:hook(
|
ok = emqx_hooks:add(
|
||||||
foldl_filter2_hook, {?MODULE, hook_fun2, []}, {?MODULE, hook_filter2, [init_arg]}
|
foldl_filter2_hook, {?MODULE, hook_fun2, []}, 0, {?MODULE, hook_filter2, [init_arg]}
|
||||||
),
|
),
|
||||||
ok = emqx:hook(
|
ok = emqx_hooks:add(
|
||||||
foldl_filter2_hook, {?MODULE, hook_fun2_1, []}, {?MODULE, hook_filter2_1, [init_arg]}
|
foldl_filter2_hook, {?MODULE, hook_fun2_1, []}, 0, {?MODULE, hook_filter2_1, [init_arg]}
|
||||||
),
|
),
|
||||||
?assertEqual(3, emqx:run_fold_hook(foldl_filter2_hook, [arg], 1)),
|
?assertEqual(3, emqx:run_fold_hook(foldl_filter2_hook, [arg], 1)),
|
||||||
?assertEqual(2, emqx:run_fold_hook(foldl_filter2_hook, [arg1], 1)).
|
?assertEqual(2, emqx:run_fold_hook(foldl_filter2_hook, [arg1], 1)).
|
||||||
|
|
|
@ -330,8 +330,8 @@ t_clients_get_subscription_api(_) ->
|
||||||
|
|
||||||
t_on_offline_event(_) ->
|
t_on_offline_event(_) ->
|
||||||
Fun = fun(Channel) ->
|
Fun = fun(Channel) ->
|
||||||
emqx_hooks:add('client.connected', {emqx_sys, on_client_connected, []}),
|
emqx_hooks:add('client.connected', {emqx_sys, on_client_connected, []}, 1000),
|
||||||
emqx_hooks:add('client.disconnected', {emqx_sys, on_client_disconnected, []}),
|
emqx_hooks:add('client.disconnected', {emqx_sys, on_client_disconnected, []}, 1000),
|
||||||
|
|
||||||
ConnectedSub = <<"$SYS/brokers/+/gateway/coap/clients/+/connected">>,
|
ConnectedSub = <<"$SYS/brokers/+/gateway/coap/clients/+/connected">>,
|
||||||
emqx_broker:subscribe(ConnectedSub),
|
emqx_broker:subscribe(ConnectedSub),
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
-compile(export_all).
|
-compile(export_all).
|
||||||
-compile(nowarn_export_all).
|
-compile(nowarn_export_all).
|
||||||
|
|
||||||
|
-include_lib("emqx/include/emqx_hooks.hrl").
|
||||||
|
|
||||||
-import(
|
-import(
|
||||||
emqx_exproto_echo_svr,
|
emqx_exproto_echo_svr,
|
||||||
[
|
[
|
||||||
|
@ -263,8 +265,8 @@ t_hook_connected_disconnected(Cfg) ->
|
||||||
ConnAckBin = frame_connack(0),
|
ConnAckBin = frame_connack(0),
|
||||||
|
|
||||||
Parent = self(),
|
Parent = self(),
|
||||||
emqx:hook('client.connected', {?MODULE, hook_fun1, [Parent]}),
|
emqx_hooks:add('client.connected', {?MODULE, hook_fun1, [Parent]}, 1000),
|
||||||
emqx:hook('client.disconnected', {?MODULE, hook_fun2, [Parent]}),
|
emqx_hooks:add('client.disconnected', {?MODULE, hook_fun2, [Parent]}, 1000),
|
||||||
|
|
||||||
send(Sock, ConnBin),
|
send(Sock, ConnBin),
|
||||||
{ok, ConnAckBin} = recv(Sock, 5000),
|
{ok, ConnAckBin} = recv(Sock, 5000),
|
||||||
|
@ -288,8 +290,8 @@ t_hook_connected_disconnected(Cfg) ->
|
||||||
begin
|
begin
|
||||||
{error, closed} = recv(Sock, 5000)
|
{error, closed} = recv(Sock, 5000)
|
||||||
end,
|
end,
|
||||||
emqx:unhook('client.connected', {?MODULE, hook_fun1}),
|
emqx_hooks:del('client.connected', {?MODULE, hook_fun1}),
|
||||||
emqx:unhook('client.disconnected', {?MODULE, hook_fun2}).
|
emqx_hooks:del('client.disconnected', {?MODULE, hook_fun2}).
|
||||||
|
|
||||||
t_hook_session_subscribed_unsubscribed(Cfg) ->
|
t_hook_session_subscribed_unsubscribed(Cfg) ->
|
||||||
SockType = proplists:get_value(listener_type, Cfg),
|
SockType = proplists:get_value(listener_type, Cfg),
|
||||||
|
@ -309,8 +311,8 @@ t_hook_session_subscribed_unsubscribed(Cfg) ->
|
||||||
{ok, ConnAckBin} = recv(Sock, 5000),
|
{ok, ConnAckBin} = recv(Sock, 5000),
|
||||||
|
|
||||||
Parent = self(),
|
Parent = self(),
|
||||||
emqx:hook('session.subscribed', {?MODULE, hook_fun3, [Parent]}),
|
emqx_hooks:add('session.subscribed', {?MODULE, hook_fun3, [Parent]}, 1000),
|
||||||
emqx:hook('session.unsubscribed', {?MODULE, hook_fun4, [Parent]}),
|
emqx_hooks:add('session.unsubscribed', {?MODULE, hook_fun4, [Parent]}, 1000),
|
||||||
|
|
||||||
SubBin = frame_subscribe(<<"t/#">>, 1),
|
SubBin = frame_subscribe(<<"t/#">>, 1),
|
||||||
SubAckBin = frame_suback(0),
|
SubAckBin = frame_suback(0),
|
||||||
|
@ -337,8 +339,8 @@ t_hook_session_subscribed_unsubscribed(Cfg) ->
|
||||||
end,
|
end,
|
||||||
|
|
||||||
close(Sock),
|
close(Sock),
|
||||||
emqx:unhook('session.subscribed', {?MODULE, hook_fun3}),
|
emqx_hooks:del('session.subscribed', {?MODULE, hook_fun3}),
|
||||||
emqx:unhook('session.unsubscribed', {?MODULE, hook_fun4}).
|
emqx_hooks:del('session.unsubscribed', {?MODULE, hook_fun4}).
|
||||||
|
|
||||||
t_hook_message_delivered(Cfg) ->
|
t_hook_message_delivered(Cfg) ->
|
||||||
SockType = proplists:get_value(listener_type, Cfg),
|
SockType = proplists:get_value(listener_type, Cfg),
|
||||||
|
@ -363,14 +365,14 @@ t_hook_message_delivered(Cfg) ->
|
||||||
send(Sock, SubBin),
|
send(Sock, SubBin),
|
||||||
{ok, SubAckBin} = recv(Sock, 5000),
|
{ok, SubAckBin} = recv(Sock, 5000),
|
||||||
|
|
||||||
emqx:hook('message.delivered', {?MODULE, hook_fun5, []}),
|
emqx_hooks:add('message.delivered', {?MODULE, hook_fun5, []}, 1000),
|
||||||
|
|
||||||
emqx:publish(emqx_message:make(<<"t/dn">>, <<"1">>)),
|
emqx:publish(emqx_message:make(<<"t/dn">>, <<"1">>)),
|
||||||
PubBin1 = frame_publish(<<"t/dn">>, 0, <<"2">>),
|
PubBin1 = frame_publish(<<"t/dn">>, 0, <<"2">>),
|
||||||
{ok, PubBin1} = recv(Sock, 5000),
|
{ok, PubBin1} = recv(Sock, 5000),
|
||||||
|
|
||||||
close(Sock),
|
close(Sock),
|
||||||
emqx:unhook('message.delivered', {?MODULE, hook_fun5}).
|
emqx_hooks:del('message.delivered', {?MODULE, hook_fun5}).
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% Utils
|
%% Utils
|
||||||
|
|
|
@ -27,6 +27,11 @@
|
||||||
|
|
||||||
-define(CONF_KEY_PATH, [license]).
|
-define(CONF_KEY_PATH, [license]).
|
||||||
|
|
||||||
|
%% Give the license app the highest priority.
|
||||||
|
%% We don't define it in the emqx_hooks.hrl becasue that is an opensource code
|
||||||
|
%% and can be changed by the communitiy.
|
||||||
|
-define(HP_LICENSE, 2000).
|
||||||
|
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
%% API
|
%% API
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
|
@ -114,7 +119,7 @@ post_config_update(_Path, _Cmd, NewConf, _Old, _AppEnvs) ->
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
|
|
||||||
add_license_hook() ->
|
add_license_hook() ->
|
||||||
ok = emqx_hooks:put('client.connect', {?MODULE, check, []}).
|
ok = emqx_hooks:put('client.connect', {?MODULE, check, []}, ?HP_LICENSE).
|
||||||
|
|
||||||
del_license_hook() ->
|
del_license_hook() ->
|
||||||
_ = emqx_hooks:del('client.connect', {?MODULE, check, []}),
|
_ = emqx_hooks:del('client.connect', {?MODULE, check, []}),
|
||||||
|
|
Loading…
Reference in New Issue