test: fix tests error

This commit is contained in:
Rory Z 2021-06-16 17:18:08 +08:00 committed by zhanghongtong
parent 227c8e626b
commit b21959b0c3
5 changed files with 50 additions and 61 deletions

View File

@ -117,12 +117,12 @@ t_emqx_pubsub_api(_) ->
?assertEqual([], emqx:topics()).
t_hook_unhook(_) ->
ok = emqx:hook(test_hook, fun ?MODULE:hook_fun1/1, []),
ok = emqx:hook(test_hook, fun ?MODULE:hook_fun2/1, []),
ok = emqx:hook(test_hook, {?MODULE, hook_fun1, []}),
ok = emqx:hook(test_hook, {?MODULE, hook_fun2, []}),
?assertEqual({error, already_exists},
emqx:hook(test_hook, fun ?MODULE:hook_fun2/1, [])),
ok = emqx:unhook(test_hook, fun ?MODULE:hook_fun1/1),
ok = emqx:unhook(test_hook, fun ?MODULE:hook_fun2/1),
emqx:hook(test_hook, {?MODULE, hook_fun2, []})),
ok = emqx:unhook(test_hook, {?MODULE, hook_fun1}),
ok = emqx:unhook(test_hook, {?MODULE, hook_fun2}),
ok = emqx:hook(emqx_hook, {?MODULE, hook_fun8, []}, 8),
ok = emqx:hook(emqx_hook, {?MODULE, hook_fun2, []}, 2),
@ -134,21 +134,20 @@ t_hook_unhook(_) ->
ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun10, []}).
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, fun ?MODULE:hook_fun4/4, [init]),
ok = emqx:hook(foldl_hook, fun ?MODULE:hook_fun5/4, [init]),
ok = emqx:hook(foldl_hook, {?MODULE, hook_fun4, [init]}),
ok = emqx:hook(foldl_hook, {?MODULE, hook_fun5, [init]}),
[r5,r4] = emqx:run_fold_hook(foldl_hook, [arg1, arg2], []),
[] = 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, []}),
[r9] = emqx:run_fold_hook(foldl_hook2, [arg], []),
ok = emqx:hook(foreach_hook, fun ?MODULE:hook_fun6/2, [initArg]),
{error, already_exists} = emqx:hook(foreach_hook, fun ?MODULE:hook_fun6/2, [initArg]),
ok = emqx:hook(foreach_hook, fun ?MODULE:hook_fun7/2, [initArg]),
ok = emqx:hook(foreach_hook, fun ?MODULE:hook_fun8/2, [initArg]),
ok = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}),
{error, already_exists} = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}),
ok = emqx:hook(foreach_hook, {?MODULE, hook_fun7, [initArg]}),
ok = emqx:hook(foreach_hook, {?MODULE, hook_fun8, [initArg]}),
ok = emqx:run_hook(foreach_hook, [arg]),
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">>)).
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(),
emqx_zone:set_env(bypass_zone, allow_anonymous, true),
emqx_zone:set_env(zone, allow_anonymous, false),
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)).
@ -67,6 +62,11 @@ t_bypass_auth_plugins(_) ->
%% 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(InitProps) ->
maps:merge(#{zone => zone,

View File

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

View File

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