Fix the test cases for emqx_banned, emqx_flapping modules
- Remove the 'is_enabled/1' function of 'emqx_banned' module - Remove the 'is_enabled/1' function of 'emqx_flapping' module - Add 'enable_acl/1', 'enable_banned/1' and 'enable_flapping_detect/1'
This commit is contained in:
parent
fa516626a6
commit
80621ec9be
|
@ -38,8 +38,6 @@
|
||||||
, info/1
|
, info/1
|
||||||
]).
|
]).
|
||||||
|
|
||||||
-export([is_enabled/1]).
|
|
||||||
|
|
||||||
%% gen_server callbacks
|
%% gen_server callbacks
|
||||||
-export([ init/1
|
-export([ init/1
|
||||||
, handle_call/3
|
, handle_call/3
|
||||||
|
@ -72,19 +70,14 @@ start_link() ->
|
||||||
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
|
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
|
||||||
|
|
||||||
-spec(check(emqx_types:client()) -> boolean()).
|
-spec(check(emqx_types:client()) -> boolean()).
|
||||||
check(#{zone := Zone,
|
check(#{client_id := ClientId,
|
||||||
client_id := ClientId,
|
|
||||||
username := Username,
|
username := Username,
|
||||||
peername := {IPAddr, _}
|
peername := {IPAddr, _}
|
||||||
}) ->
|
}) ->
|
||||||
is_enabled(Zone) andalso
|
|
||||||
ets:member(?BANNED_TAB, {client_id, ClientId})
|
ets:member(?BANNED_TAB, {client_id, ClientId})
|
||||||
orelse ets:member(?BANNED_TAB, {username, Username})
|
orelse ets:member(?BANNED_TAB, {username, Username})
|
||||||
orelse ets:member(?BANNED_TAB, {ipaddr, IPAddr}).
|
orelse ets:member(?BANNED_TAB, {ipaddr, IPAddr}).
|
||||||
|
|
||||||
is_enabled(Zone) ->
|
|
||||||
emqx_zone:get_env(Zone, enable_ban, false).
|
|
||||||
|
|
||||||
-spec(add(emqx_types:banned()) -> ok).
|
-spec(add(emqx_types:banned()) -> ok).
|
||||||
add(Banned) when is_record(Banned, banned) ->
|
add(Banned) when is_record(Banned, banned) ->
|
||||||
mnesia:dirty_write(?BANNED_TAB, Banned).
|
mnesia:dirty_write(?BANNED_TAB, Banned).
|
||||||
|
|
|
@ -964,14 +964,15 @@ set_logger_meta(_ConnPkt, #channel{client = #{client_id := ClientId}}) ->
|
||||||
%% Check banned/flapping
|
%% Check banned/flapping
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
|
|
||||||
check_banned(_ConnPkt, #channel{client = Client}) ->
|
check_banned(_ConnPkt, #channel{client = Client = #{zone := Zone}}) ->
|
||||||
case emqx_banned:check(Client) of
|
case emqx_zone:enable_banned(Zone) andalso emqx_banned:check(Client) of
|
||||||
true -> {error, ?RC_BANNED};
|
true -> {error, ?RC_BANNED};
|
||||||
false -> ok
|
false -> ok
|
||||||
end.
|
end.
|
||||||
|
|
||||||
check_flapping(_ConnPkt, #channel{client = Client}) ->
|
check_flapping(_ConnPkt, #channel{client = Client = #{zone := Zone}}) ->
|
||||||
case emqx_flapping:check(Client) of
|
case emqx_zone:enable_flapping_detect(Zone)
|
||||||
|
andalso emqx_flapping:check(Client) of
|
||||||
true -> {error, ?RC_CONNECTION_RATE_EXCEEDED};
|
true -> {error, ?RC_CONNECTION_RATE_EXCEEDED};
|
||||||
false -> ok
|
false -> ok
|
||||||
end.
|
end.
|
||||||
|
@ -1186,7 +1187,7 @@ maybe_resume_session(#channel{session = Session,
|
||||||
|
|
||||||
%% @doc Is ACL enabled?
|
%% @doc Is ACL enabled?
|
||||||
is_acl_enabled(#{zone := Zone, is_superuser := IsSuperuser}) ->
|
is_acl_enabled(#{zone := Zone, is_superuser := IsSuperuser}) ->
|
||||||
(not IsSuperuser) andalso emqx_zone:get_env(Zone, enable_acl, true).
|
(not IsSuperuser) andalso emqx_zone:enable_acl(Zone).
|
||||||
|
|
||||||
%% @doc Parse Topic Filters
|
%% @doc Parse Topic Filters
|
||||||
-compile({inline, [parse_topic_filters/1]}).
|
-compile({inline, [parse_topic_filters/1]}).
|
||||||
|
|
|
@ -70,8 +70,8 @@ stop() -> gen_server:stop(?MODULE).
|
||||||
|
|
||||||
%% @doc Check flapping when a MQTT client connected.
|
%% @doc Check flapping when a MQTT client connected.
|
||||||
-spec(check(emqx_types:client()) -> boolean()).
|
-spec(check(emqx_types:client()) -> boolean()).
|
||||||
check(#{zone := Zone, client_id := ClientId}) ->
|
check(#{client_id := ClientId}) ->
|
||||||
is_enabled(Zone) andalso check(ClientId, get_policy()).
|
check(ClientId, get_policy()).
|
||||||
|
|
||||||
check(ClientId, #{banned_interval := Interval}) ->
|
check(ClientId, #{banned_interval := Interval}) ->
|
||||||
case ets:lookup(?FLAPPING_TAB, {banned, ClientId}) of
|
case ets:lookup(?FLAPPING_TAB, {banned, ClientId}) of
|
||||||
|
@ -82,8 +82,7 @@ check(ClientId, #{banned_interval := Interval}) ->
|
||||||
|
|
||||||
%% @doc Detect flapping when a MQTT client disconnected.
|
%% @doc Detect flapping when a MQTT client disconnected.
|
||||||
-spec(detect(emqx_types:client()) -> boolean()).
|
-spec(detect(emqx_types:client()) -> boolean()).
|
||||||
detect(Client = #{zone := Zone}) ->
|
detect(Client) -> detect(Client, get_policy()).
|
||||||
is_enabled(Zone) andalso detect(Client, get_policy()).
|
|
||||||
|
|
||||||
detect(#{client_id := ClientId, peername := Peername},
|
detect(#{client_id := ClientId, peername := Peername},
|
||||||
Policy = #{threshold := Threshold}) ->
|
Policy = #{threshold := Threshold}) ->
|
||||||
|
@ -107,11 +106,7 @@ detect(#{client_id := ClientId, peername := Peername},
|
||||||
false
|
false
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-compile({inline, [is_enabled/1, get_policy/0, now_diff/1]}).
|
-compile({inline, [get_policy/0, now_diff/1]}).
|
||||||
|
|
||||||
-spec(is_enabled(emqx_types:zone()) -> boolean()).
|
|
||||||
is_enabled(Zone) ->
|
|
||||||
emqx_zone:get_env(Zone, enable_flapping_detect, false).
|
|
||||||
|
|
||||||
get_policy() ->
|
get_policy() ->
|
||||||
emqx:get_env(flapping_detect_policy, ?DEFAULT_DETECT_POLICY).
|
emqx:get_env(flapping_detect_policy, ?DEFAULT_DETECT_POLICY).
|
||||||
|
|
|
@ -25,7 +25,12 @@
|
||||||
-logger_header("[Zone]").
|
-logger_header("[Zone]").
|
||||||
|
|
||||||
%% APIs
|
%% APIs
|
||||||
-export([start_link/0]).
|
-export([start_link/0, stop/0]).
|
||||||
|
|
||||||
|
-export([ enable_acl/1
|
||||||
|
, enable_banned/1
|
||||||
|
, enable_flapping_detect/1
|
||||||
|
]).
|
||||||
|
|
||||||
-export([ get_env/2
|
-export([ get_env/2
|
||||||
, get_env/3
|
, get_env/3
|
||||||
|
@ -34,9 +39,6 @@
|
||||||
, force_reload/0
|
, force_reload/0
|
||||||
]).
|
]).
|
||||||
|
|
||||||
%% for test
|
|
||||||
-export([stop/0]).
|
|
||||||
|
|
||||||
%% gen_server callbacks
|
%% gen_server callbacks
|
||||||
-export([ init/1
|
-export([ init/1
|
||||||
, handle_call/3
|
, handle_call/3
|
||||||
|
@ -65,6 +67,18 @@
|
||||||
start_link() ->
|
start_link() ->
|
||||||
gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
|
gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
|
||||||
|
|
||||||
|
-spec(enable_acl(zone()) -> boolean()).
|
||||||
|
enable_acl(Zone) ->
|
||||||
|
get_env(Zone, enable_acl, true).
|
||||||
|
|
||||||
|
-spec(enable_banned(zone()) -> boolean()).
|
||||||
|
enable_banned(Zone) ->
|
||||||
|
get_env(Zone, enable_banned, false).
|
||||||
|
|
||||||
|
-spec(enable_flapping_detect(zone()) -> boolean()).
|
||||||
|
enable_flapping_detect(Zone) ->
|
||||||
|
get_env(Zone, enable_flapping_detect, false).
|
||||||
|
|
||||||
-spec(get_env(maybe(zone()), atom()) -> maybe(term())).
|
-spec(get_env(maybe(zone()), atom()) -> maybe(term())).
|
||||||
get_env(undefined, Key) -> emqx:get_env(Key);
|
get_env(undefined, Key) -> emqx:get_env(Key);
|
||||||
get_env(Zone, Key) ->
|
get_env(Zone, Key) ->
|
||||||
|
|
Loading…
Reference in New Issue