Merge pull request #9384 from terry-xiaoyu/utf8_resource_id_in_alarm_name

fix: generating alarm name for utf8 resource id failed
This commit is contained in:
Xinyu Liu 2022-11-17 10:37:58 +08:00 committed by GitHub
commit f1572ea84e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 9 deletions

View File

@ -822,7 +822,7 @@ find_type(ResId) ->
{ok, Type}.
alarm_name_of_resource_down(Type, ResId) ->
list_to_binary(io_lib:format("resource/~s/~s/down", [Type, ResId])).
unicode:characters_to_binary(io_lib:format("resource/~ts/~ts/down", [Type, ResId])).
is_prober(<<?PROBE_RES_PREFIX, _/binary>>) ->
true;

View File

@ -62,7 +62,8 @@ groups() ->
t_create_rule,
t_reset_metrics,
t_reset_metrics_fallbacks,
t_create_resource
t_create_resource,
t_clean_resource_alarms
]},
{actions, [],
[t_inspect_action
@ -307,21 +308,29 @@ t_create_resource(_Config) ->
ok.
t_clean_resource_alarms(_Config) ->
lists:foreach(fun(ResId) ->
clean_resource_alarms(ResId)
end, [<<"abc">>, <<"哈喽"/utf8>>]).
clean_resource_alarms(ResId) ->
emqx_rule_registry:register_resource_types(
[make_simple_debug_resource_type()]),
ok = emqx_rule_engine:load_providers(),
{ok, #resource{id = ResId}} = emqx_rule_engine:create_resource(
#{type => built_in,
#{id => ResId,
type => built_in,
config => #{},
description => <<"debug resource">>}),
?assert(true, is_binary(ResId)),
Name = emqx_rule_engine:alarm_name_of_resource_down(ResId, built_in),
_ = emqx_alarm:activate(Name, #{id => ResId, type => built_in}),
AlarmExist = fun(#{name := AName}) -> AName == Name end,
Len = length(lists:filter(AlarmExist, emqx_alarm:get_alarms())),
?assert(Len == 1),
Len = length(lists:filter(AlarmExist, emqx_alarm:get_alarms(activated))),
?assertEqual(1, Len),
emqx_rule_engine:ensure_resource_deleted(ResId),
emqx_alarm:deactivate(Name),
LenAfterRemove = length(lists:filter(AlarmExist, emqx_alarm:get_alarms(activated))),
?assertEqual(0, LenAfterRemove),
ok = emqx_rule_engine:unload_providers(),
emqx_rule_registry:remove_resource(ResId),
LenAfterRemove = length(lists:filter(AlarmExist, emqx_alarm:get_alarms())),
?assert(LenAfterRemove == 0),
ok.
%%------------------------------------------------------------------------------