From 1974ec15ecc28050315908244a8ef190cbccd76a Mon Sep 17 00:00:00 2001 From: zmstone Date: Tue, 30 Apr 2024 12:12:35 +0200 Subject: [PATCH] fix(client_attrs): fix client_attrs extraction loop --- apps/emqx/src/emqx_channel.erl | 2 +- apps/emqx/test/emqx_client_SUITE.erl | 6 +++++- apps/emqx_utils/test/emqx_variform_tests.erl | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/emqx/src/emqx_channel.erl b/apps/emqx/src/emqx_channel.erl index ec49d165c..05358f889 100644 --- a/apps/emqx/src/emqx_channel.erl +++ b/apps/emqx/src/emqx_channel.erl @@ -1636,7 +1636,7 @@ maybe_set_client_initial_attrs(ConnPkt, #{zone := Zone} = ClientInfo) -> initialize_client_attrs(Inits, ClientInfo) -> lists:foldl( fun(#{expression := Variform, set_as_attr := Name}, Acc) -> - Attrs = maps:get(client_attrs, ClientInfo, #{}), + Attrs = maps:get(client_attrs, Acc, #{}), case emqx_variform:render(Variform, ClientInfo) of {ok, <<>>} -> ?SLOG( diff --git a/apps/emqx/test/emqx_client_SUITE.erl b/apps/emqx/test/emqx_client_SUITE.erl index f0afe6195..d47162ed7 100644 --- a/apps/emqx/test/emqx_client_SUITE.erl +++ b/apps/emqx/test/emqx_client_SUITE.erl @@ -422,6 +422,10 @@ t_client_attr_from_user_property(_Config) -> #{ expression => Compiled, set_as_attr => <<"group">> + }, + #{ + expression => Compiled, + set_as_attr => <<"group2">> } ]), SslConf = emqx_common_test_helpers:client_mtls('tlsv1.3'), @@ -436,7 +440,7 @@ t_client_attr_from_user_property(_Config) -> {ok, _} = emqtt:connect(Client), %% assert only two chars are extracted ?assertMatch( - #{clientinfo := #{client_attrs := #{<<"group">> := <<"g1">>}}}, + #{clientinfo := #{client_attrs := #{<<"group">> := <<"g1">>, <<"group2">> := <<"g1">>}}}, emqx_cm:get_chan_info(ClientId) ), emqtt:disconnect(Client). diff --git a/apps/emqx_utils/test/emqx_variform_tests.erl b/apps/emqx_utils/test/emqx_variform_tests.erl index 59c39cf1c..2e3c6c4d5 100644 --- a/apps/emqx_utils/test/emqx_variform_tests.erl +++ b/apps/emqx_utils/test/emqx_variform_tests.erl @@ -275,7 +275,7 @@ to_range_badarg_test_() -> ]. iif_test_() -> - %% if clientid has to words separated by a -, take the suffix, and append with `/#` + %% if clientid has two words separated by a -, take the suffix, and append with `/#` Expr1 = "iif(nth(2,tokens(clientid,'-')),concat([nth(2,tokens(clientid,'-')),'/#']),'')", [ ?_assertEqual({ok, <<"yes-A">>}, render("iif(a,'yes-A','no-A')", #{a => <<"x">>})),