fix(metrics): inc `connack.auth_error` when using MQTT 3.1 (5.0)

Since MQTT 3.1 uses a different reason code for auth failures, it was
failing to increase the corresponding metric that works for MQTT 5.0.
This commit is contained in:
Thales Macedo Garitezi 2022-06-10 16:56:26 -03:00
parent 7b559193d1
commit 7cd35c9d44
No known key found for this signature in database
GPG Key ID: DD279F8152A9B6DD
2 changed files with 41 additions and 2 deletions

View File

@ -484,8 +484,12 @@ inc_sent(Packet) ->
do_inc_sent(?CONNACK_PACKET(ReasonCode)) -> do_inc_sent(?CONNACK_PACKET(ReasonCode)) ->
(ReasonCode == ?RC_SUCCESS) orelse inc('packets.connack.error'), (ReasonCode == ?RC_SUCCESS) orelse inc('packets.connack.error'),
(ReasonCode == ?RC_NOT_AUTHORIZED) andalso inc('packets.connack.auth_error'), ((ReasonCode == ?RC_NOT_AUTHORIZED) orelse
(ReasonCode == ?RC_BAD_USER_NAME_OR_PASSWORD) andalso inc('packets.connack.auth_error'), (ReasonCode == ?CONNACK_AUTH)) andalso
inc('packets.connack.auth_error'),
((ReasonCode == ?RC_BAD_USER_NAME_OR_PASSWORD) orelse
(ReasonCode == ?CONNACK_CREDENTIALS)) andalso
inc('packets.connack.auth_error'),
inc('packets.connack.sent'); inc('packets.connack.sent');
do_inc_sent(?PUBLISH_PACKET(QoS)) -> do_inc_sent(?PUBLISH_PACKET(QoS)) ->
inc('messages.sent'), inc('messages.sent'),

View File

@ -678,6 +678,41 @@ t_connect_client_never_negative(Config) when is_list(Config) ->
t_connect_client_never_negative({'end', _Config}) -> t_connect_client_never_negative({'end', _Config}) ->
ok. ok.
t_connack_auth_error({init, Config}) ->
process_flag(trap_exit, true),
ok = emqx_common_test_helpers:start_apps([]),
ChainName = 'mqtt:global',
AuthenticatorConfig = #{
enable => true,
mechanism => password_based,
backend => built_in_database,
user_id_type => username,
password_hash_algorithm => #{
name => plain,
salt_position => disable
},
user_group => <<"global:mqtt">>
},
ok = emqx_authentication:register_providers(
[{{password_based, built_in_database}, emqx_authn_mnesia}]
),
emqx_authentication:initialize_authentication(ChainName, AuthenticatorConfig),
Config;
t_connack_auth_error({'end', _Config}) ->
ok = emqx_common_test_helpers:stop_apps([]),
ok;
t_connack_auth_error(Config) when is_list(Config) ->
%% MQTT 3.1
?assertEqual(0, emqx_metrics:val('packets.connack.auth_error')),
{ok, C0} = emqtt:start_link([{proto_ver, v4}]),
?assertEqual({error, {unauthorized_client, undefined}}, emqtt:connect(C0)),
?assertEqual(1, emqx_metrics:val('packets.connack.auth_error')),
%% MQTT 5.0
{ok, C1} = emqtt:start_link([{proto_ver, v5}]),
?assertEqual({error, {not_authorized, #{}}}, emqtt:connect(C1)),
?assertEqual(2, emqx_metrics:val('packets.connack.auth_error')),
ok.
wait_for_events(Action, Kinds) -> wait_for_events(Action, Kinds) ->
wait_for_events(Action, Kinds, 500). wait_for_events(Action, Kinds, 500).