test: fix tests error

This commit is contained in:
Rory Z 2021-06-16 17:18:08 +08:00 committed by Shawn
parent e5447cd6e4
commit 1a09d636ae
5 changed files with 50 additions and 61 deletions

View File

@ -117,12 +117,12 @@ t_emqx_pubsub_api(_) ->
?assertEqual([], emqx:topics()). ?assertEqual([], emqx:topics()).
t_hook_unhook(_) -> t_hook_unhook(_) ->
ok = emqx:hook(test_hook, fun ?MODULE:hook_fun1/1, []), ok = emqx:hook(test_hook, {?MODULE, hook_fun1, []}),
ok = emqx:hook(test_hook, fun ?MODULE:hook_fun2/1, []), ok = emqx:hook(test_hook, {?MODULE, hook_fun2, []}),
?assertEqual({error, already_exists}, ?assertEqual({error, already_exists},
emqx:hook(test_hook, fun ?MODULE:hook_fun2/1, [])), emqx:hook(test_hook, {?MODULE, hook_fun2, []})),
ok = emqx:unhook(test_hook, fun ?MODULE:hook_fun1/1), ok = emqx:unhook(test_hook, {?MODULE, hook_fun1}),
ok = emqx:unhook(test_hook, fun ?MODULE:hook_fun2/1), ok = emqx:unhook(test_hook, {?MODULE, hook_fun2}),
ok = emqx:hook(emqx_hook, {?MODULE, hook_fun8, []}, 8), ok = emqx:hook(emqx_hook, {?MODULE, hook_fun8, []}, 8),
ok = emqx:hook(emqx_hook, {?MODULE, hook_fun2, []}, 2), ok = emqx:hook(emqx_hook, {?MODULE, hook_fun2, []}, 2),
@ -134,21 +134,20 @@ t_hook_unhook(_) ->
ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun10, []}). ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun10, []}).
t_run_hook(_) -> t_run_hook(_) ->
ok = emqx:hook(foldl_hook, fun ?MODULE:hook_fun3/4, [init]),
ok = emqx:hook(foldl_hook, {?MODULE, hook_fun3, [init]}), ok = emqx:hook(foldl_hook, {?MODULE, hook_fun3, [init]}),
ok = emqx:hook(foldl_hook, fun ?MODULE:hook_fun4/4, [init]), ok = emqx:hook(foldl_hook, {?MODULE, hook_fun4, [init]}),
ok = emqx:hook(foldl_hook, fun ?MODULE:hook_fun5/4, [init]), ok = emqx:hook(foldl_hook, {?MODULE, hook_fun5, [init]}),
[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, fun ?MODULE:hook_fun9/2), ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun9, []}),
ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun10, []}), ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun10, []}),
[r9] = emqx:run_fold_hook(foldl_hook2, [arg], []), [r9] = emqx:run_fold_hook(foldl_hook2, [arg], []),
ok = emqx:hook(foreach_hook, fun ?MODULE:hook_fun6/2, [initArg]), ok = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}),
{error, already_exists} = emqx:hook(foreach_hook, fun ?MODULE:hook_fun6/2, [initArg]), {error, already_exists} = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}),
ok = emqx:hook(foreach_hook, fun ?MODULE:hook_fun7/2, [initArg]), ok = emqx:hook(foreach_hook, {?MODULE, hook_fun7, [initArg]}),
ok = emqx:hook(foreach_hook, fun ?MODULE:hook_fun8/2, [initArg]), ok = emqx:hook(foreach_hook, {?MODULE, hook_fun8, [initArg]}),
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:hook(foreach_filter1_hook, {?MODULE, hook_fun1, []}, {?MODULE, hook_filter1, []}, 0),

View File

@ -50,16 +50,11 @@ t_check_acl(_) ->
?assertEqual(allow, emqx_access_control:check_acl(clientinfo(), Publish, <<"t">>)). ?assertEqual(allow, emqx_access_control:check_acl(clientinfo(), Publish, <<"t">>)).
t_bypass_auth_plugins(_) -> t_bypass_auth_plugins(_) ->
AuthFun = fun(#{zone := bypass_zone}, AuthRes) ->
{stop, AuthRes#{auth_result => password_error}};
(#{zone := _}, AuthRes) ->
{stop, AuthRes#{auth_result => success}}
end,
ClientInfo = clientinfo(), ClientInfo = clientinfo(),
emqx_zone:set_env(bypass_zone, allow_anonymous, true), emqx_zone:set_env(bypass_zone, allow_anonymous, true),
emqx_zone:set_env(zone, allow_anonymous, false), emqx_zone:set_env(zone, allow_anonymous, false),
emqx_zone:set_env(bypass_zone, bypass_auth_plugins, true), emqx_zone:set_env(bypass_zone, bypass_auth_plugins, true),
emqx:hook('client.authenticate', AuthFun, []), emqx:hook('client.authenticate',{?MODULE, auth_fun, []}),
?assertMatch({ok, _}, emqx_access_control:authenticate(ClientInfo#{zone => bypass_zone})), ?assertMatch({ok, _}, emqx_access_control:authenticate(ClientInfo#{zone => bypass_zone})),
?assertMatch({ok, _}, emqx_access_control:authenticate(ClientInfo)). ?assertMatch({ok, _}, emqx_access_control:authenticate(ClientInfo)).
@ -67,6 +62,11 @@ t_bypass_auth_plugins(_) ->
%% Helper functions %% Helper functions
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
auth_fun(#{zone := bypass_zone}, AuthRes) ->
{stop, AuthRes#{auth_result => password_error}};
auth_fun(#{zone := _}, AuthRes) ->
{stop, AuthRes#{auth_result => success}}.
clientinfo() -> clientinfo(#{}). clientinfo() -> clientinfo(#{}).
clientinfo(InitProps) -> clientinfo(InitProps) ->
maps:merge(#{zone => zone, maps:merge(#{zone => zone,

View File

@ -40,15 +40,15 @@ all() -> emqx_ct:all(?MODULE).
t_add_del_hook(_) -> t_add_del_hook(_) ->
{ok, _} = emqx_hooks:start_link(), {ok, _} = emqx_hooks:start_link(),
ok = emqx:hook(test_hook, fun ?MODULE:hook_fun1/1, []), ok = emqx:hook(test_hook, {?MODULE, hook_fun1, []}),
ok = emqx:hook(test_hook, fun ?MODULE:hook_fun2/1, []), ok = emqx:hook(test_hook, {?MODULE, hook_fun2, []}),
?assertEqual({error, already_exists}, ?assertEqual({error, already_exists},
emqx:hook(test_hook, fun ?MODULE:hook_fun2/1, [])), emqx:hook(test_hook, {?MODULE, hook_fun2, []})),
Callbacks = [{callback, {fun ?MODULE:hook_fun1/1, []}, undefined, 0}, Callbacks = [{callback, {?MODULE, hook_fun1, []}, undefined, 0},
{callback, {fun ?MODULE:hook_fun2/1, []}, undefined, 0}], {callback, {?MODULE, hook_fun2, []}, undefined, 0}],
?assertEqual(Callbacks, emqx_hooks:lookup(test_hook)), ?assertEqual(Callbacks, emqx_hooks:lookup(test_hook)),
ok = emqx:unhook(test_hook, fun ?MODULE:hook_fun1/1), ok = emqx:unhook(test_hook, {?MODULE, hook_fun1}),
ok = emqx:unhook(test_hook, fun ?MODULE:hook_fun2/1), ok = emqx:unhook(test_hook, {?MODULE, hook_fun2}),
timer:sleep(200), timer:sleep(200),
?assertEqual([], emqx_hooks:lookup(test_hook)), ?assertEqual([], emqx_hooks:lookup(test_hook)),
@ -71,21 +71,20 @@ t_add_del_hook(_) ->
t_run_hooks(_) -> t_run_hooks(_) ->
{ok, _} = emqx_hooks:start_link(), {ok, _} = emqx_hooks:start_link(),
ok = emqx:hook(foldl_hook, fun ?MODULE:hook_fun3/4, [init]),
ok = emqx:hook(foldl_hook, {?MODULE, hook_fun3, [init]}), ok = emqx:hook(foldl_hook, {?MODULE, hook_fun3, [init]}),
ok = emqx:hook(foldl_hook, fun ?MODULE:hook_fun4/4, [init]), ok = emqx:hook(foldl_hook, {?MODULE, hook_fun4, [init]}),
ok = emqx:hook(foldl_hook, fun ?MODULE:hook_fun5/4, [init]), ok = emqx:hook(foldl_hook, {?MODULE, hook_fun5, [init]}),
[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, fun ?MODULE:hook_fun9/2), ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun9, []}),
ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun10, []}), ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun10, []}),
[r9] = emqx:run_fold_hook(foldl_hook2, [arg], []), [r9] = emqx:run_fold_hook(foldl_hook2, [arg], []),
ok = emqx:hook(foreach_hook, fun ?MODULE:hook_fun6/2, [initArg]), ok = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}),
{error, already_exists} = emqx:hook(foreach_hook, fun ?MODULE:hook_fun6/2, [initArg]), {error, already_exists} = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}),
ok = emqx:hook(foreach_hook, fun ?MODULE:hook_fun7/2, [initArg]), ok = emqx:hook(foreach_hook, {?MODULE, hook_fun7, [initArg]}),
ok = emqx:hook(foreach_hook, fun ?MODULE:hook_fun8/2, [initArg]), ok = emqx:hook(foreach_hook, {?MODULE, hook_fun8, [initArg]}),
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:hook(foreach_filter1_hook, {?MODULE, hook_fun1, []}, {?MODULE, hook_filter1, []}, 0),

View File

@ -50,18 +50,6 @@ end_per_suite(_Config) ->
delete_default_app(), delete_default_app(),
emqx_ct_helpers:stop_apps([emqx_modules, emqx_management, emqx_auth_mnesia]). emqx_ct_helpers:stop_apps([emqx_modules, emqx_management, emqx_auth_mnesia]).
init_per_testcase(t_check_acl_as_clientid, Config) ->
emqx:hook('client.check_acl', fun emqx_acl_mnesia:check_acl/5, [#{key_as => clientid}]),
Config;
init_per_testcase(_, Config) ->
emqx:hook('client.check_acl', fun emqx_acl_mnesia:check_acl/5, [#{key_as => username}]),
Config.
end_per_testcase(_, Config) ->
emqx:unhook('client.check_acl', fun emqx_acl_mnesia:check_acl/5),
Config.
set_special_configs(emqx) -> set_special_configs(emqx) ->
application:set_env(emqx, allow_anonymous, true), application:set_env(emqx, allow_anonymous, true),
application:set_env(emqx, enable_acl_cache, false), application:set_env(emqx, enable_acl_cache, false),

View File

@ -234,10 +234,8 @@ t_hook_connected_disconnected(Cfg) ->
ConnAckBin = frame_connack(0), ConnAckBin = frame_connack(0),
Parent = self(), Parent = self(),
HookFun1 = fun(_, _) -> Parent ! connected, ok end, emqx:hook('client.connected', {?MODULE, hook_fun1, [Parent]}),
HookFun2 = fun(_, _, _) -> Parent ! disconnected, ok end, emqx:hook('client.disconnected',{?MODULE, hook_fun2, [Parent]}),
emqx:hook('client.connected', HookFun1),
emqx:hook('client.disconnected', HookFun2),
send(Sock, ConnBin), send(Sock, ConnBin),
{ok, ConnAckBin} = recv(Sock, 5000), {ok, ConnAckBin} = recv(Sock, 5000),
@ -260,8 +258,8 @@ t_hook_connected_disconnected(Cfg) ->
SockType =/= udp andalso begin SockType =/= udp andalso begin
{error, closed} = recv(Sock, 5000) {error, closed} = recv(Sock, 5000)
end, end,
emqx:unhook('client.connected', HookFun1), emqx:unhook('client.connected', {?MODULE, hook_fun1}),
emqx:unhook('client.disconnected', HookFun2). emqx:unhook('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),
@ -280,10 +278,8 @@ t_hook_session_subscribed_unsubscribed(Cfg) ->
{ok, ConnAckBin} = recv(Sock, 5000), {ok, ConnAckBin} = recv(Sock, 5000),
Parent = self(), Parent = self(),
HookFun1 = fun(_, _, _) -> Parent ! subscribed, ok end, emqx:hook('session.subscribed', {?MODULE, hook_fun3, [Parent]}),
HookFun2 = fun(_, _, _) -> Parent ! unsubscribed, ok end, emqx:hook('session.unsubscribed', {?MODULE, hook_fun4, [Parent]}),
emqx:hook('session.subscribed', HookFun1),
emqx:hook('session.unsubscribed', HookFun2),
SubBin = frame_subscribe(<<"t/#">>, 1), SubBin = frame_subscribe(<<"t/#">>, 1),
SubAckBin = frame_suback(0), SubAckBin = frame_suback(0),
@ -310,8 +306,8 @@ t_hook_session_subscribed_unsubscribed(Cfg) ->
end, end,
close(Sock), close(Sock),
emqx:unhook('session.subscribed', HookFun1), emqx:unhook('session.subscribed', {?MODULE, hook_fun3}),
emqx:unhook('session.unsubscribed', HookFun2). emqx:unhook('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),
@ -335,19 +331,26 @@ t_hook_message_delivered(Cfg) ->
send(Sock, SubBin), send(Sock, SubBin),
{ok, SubAckBin} = recv(Sock, 5000), {ok, SubAckBin} = recv(Sock, 5000),
HookFun1 = fun(_, Msg) -> {ok, Msg#message{payload = <<"2">>}} end, emqx:hook('message.delivered', {?MODULE, hook_fun5, []}),
emqx:hook('message.delivered', HookFun1),
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', HookFun1). emqx:unhook('message.delivered', {?MODULE, hook_fun5}).
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Utils %% Utils
hook_fun1(_, _, Parent) -> Parent ! connected, ok.
hook_fun2(_, _, _, Parent) -> Parent ! disconnected, ok.
hook_fun3(_, _, _, Parent) -> Parent ! subscribed, ok.
hook_fun4(_, _, _, Parent) -> Parent ! unsubscribed, ok.
hook_fun5(_, Msg) -> {ok, Msg#message{payload = <<"2">>}}.
rand_bytes() -> rand_bytes() ->
crypto:strong_rand_bytes(rand:uniform(256)). crypto:strong_rand_bytes(rand:uniform(256)).