From 71aaf5c5381bf9cdfc588714388a5761ac73e7c2 Mon Sep 17 00:00:00 2001 From: firest Date: Wed, 31 Aug 2022 16:49:27 +0800 Subject: [PATCH] fix(authz): fix dialyzer && test case && proper error --- apps/emqx/test/emqx_proper_types.erl | 1 + apps/emqx_authz/src/emqx_authz.erl | 3 ++- apps/emqx_exhook/test/emqx_exhook_SUITE.erl | 6 ++++-- .../test/props/prop_exhook_hooks.erl | 17 ++++++++++++----- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/apps/emqx/test/emqx_proper_types.erl b/apps/emqx/test/emqx_proper_types.erl index b56140288..78fab0b38 100644 --- a/apps/emqx/test/emqx_proper_types.erl +++ b/apps/emqx/test/emqx_proper_types.erl @@ -69,6 +69,7 @@ conninfo() -> {conn_props, properties()}, {connected, boolean()}, {connected_at, timestamp()}, + {disconnected_at, timestamp()}, {keepalive, range(0, 16#ffff)}, {receive_maximum, non_neg_integer()}, {expiry_interval, non_neg_integer()} diff --git a/apps/emqx_authz/src/emqx_authz.erl b/apps/emqx_authz/src/emqx_authz.erl index c5b08e70c..3b175fc31 100644 --- a/apps/emqx_authz/src/emqx_authz.erl +++ b/apps/emqx_authz/src/emqx_authz.erl @@ -49,7 +49,8 @@ -type default_result() :: allow | deny. --type authz_result() :: {stop, allow} | {ok, deny}. +-type authz_result_value() :: #{result := allow | deny, from => _}. +-type authz_result() :: {stop, authz_result_value()} | {ok, authz_result_value()} | ignore. -type sources() :: [source()]. diff --git a/apps/emqx_exhook/test/emqx_exhook_SUITE.erl b/apps/emqx_exhook/test/emqx_exhook_SUITE.erl index 74ec6c1ae..fb2a04cc0 100644 --- a/apps/emqx_exhook/test/emqx_exhook_SUITE.erl +++ b/apps/emqx_exhook/test/emqx_exhook_SUITE.erl @@ -120,8 +120,10 @@ t_access_failed_if_no_server_running(Config) -> ), ?assertMatch( - {stop, deny}, - emqx_exhook_handler:on_client_authorize(ClientInfo, publish, <<"t/1">>, allow) + {stop, #{result := deny, from := exhook}}, + emqx_exhook_handler:on_client_authorize(ClientInfo, publish, <<"t/1">>, #{ + result => allow, from => exhookk + }) ), Message = emqx_message:make(<<"t/1">>, <<"abc">>), diff --git a/apps/emqx_exhook/test/props/prop_exhook_hooks.erl b/apps/emqx_exhook/test/props/prop_exhook_hooks.erl index 5c169f72f..c42791f7a 100644 --- a/apps/emqx_exhook/test/props/prop_exhook_hooks.erl +++ b/apps/emqx_exhook/test/props/prop_exhook_hooks.erl @@ -133,9 +133,16 @@ prop_client_authenticate() -> ). prop_client_authorize() -> + MkResult = fun(Result) -> #{result => Result, from => exhook} end, ?ALL( {ClientInfo0, PubSub, Topic, Result, Meta}, - {clientinfo(), oneof([publish, subscribe]), topic(), oneof([allow, deny]), request_meta()}, + { + clientinfo(), + oneof([publish, subscribe]), + topic(), + oneof([MkResult(allow), MkResult(deny)]), + request_meta() + }, begin ClientInfo = inject_magic_into(username, ClientInfo0), OutResult = emqx_hooks:run_fold( @@ -145,9 +152,9 @@ prop_client_authorize() -> ), ExpectedOutResult = case maps:get(username, ClientInfo) of - <<"baduser">> -> deny; - <<"gooduser">> -> allow; - <<"normaluser">> -> allow; + <<"baduser">> -> MkResult(deny); + <<"gooduser">> -> MkResult(allow); + <<"normaluser">> -> MkResult(allow); _ -> Result end, ?assertEqual(ExpectedOutResult, OutResult), @@ -544,7 +551,7 @@ subopts(SubOpts) -> authresult_to_bool(AuthResult) -> AuthResult == ok. -aclresult_to_bool(Result) -> +aclresult_to_bool(#{result := Result}) -> Result == allow. pubsub_to_enum(publish) -> 'PUBLISH';