fix(client mgmt api): allow projecting `client_attrs` from client fields
Fixes https://emqx.atlassian.net/browse/EMQX-12511
This commit is contained in:
parent
51810c6919
commit
0874768c1d
|
@ -815,7 +815,8 @@ fields(mqueue_message) ->
|
||||||
fields(requested_client_fields) ->
|
fields(requested_client_fields) ->
|
||||||
%% NOTE: some Client fields actually returned in response are missing in schema:
|
%% NOTE: some Client fields actually returned in response are missing in schema:
|
||||||
%% enable_authn, is_persistent, listener, peerport
|
%% enable_authn, is_persistent, listener, peerport
|
||||||
ClientFields = [element(1, F) || F <- fields(client)],
|
ClientFields0 = [element(1, F) || F <- fields(client)],
|
||||||
|
ClientFields = [client_attrs | ClientFields0],
|
||||||
[
|
[
|
||||||
{fields,
|
{fields,
|
||||||
hoconsc:mk(
|
hoconsc:mk(
|
||||||
|
|
|
@ -1032,6 +1032,7 @@ t_query_multiple_clients_urlencode(_) ->
|
||||||
t_query_clients_with_fields(_) ->
|
t_query_clients_with_fields(_) ->
|
||||||
process_flag(trap_exit, true),
|
process_flag(trap_exit, true),
|
||||||
TCBin = atom_to_binary(?FUNCTION_NAME),
|
TCBin = atom_to_binary(?FUNCTION_NAME),
|
||||||
|
APIPort = 18083,
|
||||||
ClientId = <<TCBin/binary, "_client">>,
|
ClientId = <<TCBin/binary, "_client">>,
|
||||||
Username = <<TCBin/binary, "_user">>,
|
Username = <<TCBin/binary, "_user">>,
|
||||||
{ok, C} = emqtt:start_link(#{clientid => ClientId, username => Username}),
|
{ok, C} = emqtt:start_link(#{clientid => ClientId, username => Username}),
|
||||||
|
@ -1040,6 +1041,13 @@ t_query_clients_with_fields(_) ->
|
||||||
|
|
||||||
Auth = emqx_mgmt_api_test_util:auth_header_(),
|
Auth = emqx_mgmt_api_test_util:auth_header_(),
|
||||||
?assertEqual([#{<<"clientid">> => ClientId}], get_clients_all_fields(Auth, "fields=clientid")),
|
?assertEqual([#{<<"clientid">> => ClientId}], get_clients_all_fields(Auth, "fields=clientid")),
|
||||||
|
?assertMatch(
|
||||||
|
{ok,
|
||||||
|
{{_, 200, _}, _, #{
|
||||||
|
<<"data">> := [#{<<"client_attrs">> := #{}}]
|
||||||
|
}}},
|
||||||
|
list_request(APIPort, "fields=client_attrs")
|
||||||
|
),
|
||||||
?assertEqual(
|
?assertEqual(
|
||||||
[#{<<"clientid">> => ClientId, <<"username">> => Username}],
|
[#{<<"clientid">> => ClientId, <<"username">> => Username}],
|
||||||
get_clients_all_fields(Auth, "fields=clientid,username")
|
get_clients_all_fields(Auth, "fields=clientid,username")
|
||||||
|
@ -1072,6 +1080,7 @@ get_clients(Auth, Qs, ExpectError, ClientIdOnly) ->
|
||||||
Resp = emqx_mgmt_api_test_util:request_api(get, ClientsPath, Qs, Auth),
|
Resp = emqx_mgmt_api_test_util:request_api(get, ClientsPath, Qs, Auth),
|
||||||
case ExpectError of
|
case ExpectError of
|
||||||
false ->
|
false ->
|
||||||
|
ct:pal("get clients response:\n ~p", [Resp]),
|
||||||
{ok, Body} = Resp,
|
{ok, Body} = Resp,
|
||||||
#{<<"data">> := Clients} = emqx_utils_json:decode(Body),
|
#{<<"data">> := Clients} = emqx_utils_json:decode(Body),
|
||||||
case ClientIdOnly of
|
case ClientIdOnly of
|
||||||
|
|
Loading…
Reference in New Issue