From 7b609282887a1227782d72e497335085e240f2e6 Mon Sep 17 00:00:00 2001 From: JimMoen Date: Mon, 11 Dec 2023 15:01:12 +0800 Subject: [PATCH] fix(api): endpoint `/v5/topics` with invalid topic filter --- .../src/emqx_mgmt_api_topics.erl | 4 +++- .../test/emqx_mgmt_api_topics_SUITE.erl | 17 +++++++++++++++++ changes/fix-12141.en.md | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 changes/fix-12141.en.md diff --git a/apps/emqx_management/src/emqx_mgmt_api_topics.erl b/apps/emqx_management/src/emqx_mgmt_api_topics.erl index c1d5f8e74..02d4461e9 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_topics.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_topics.erl @@ -115,7 +115,9 @@ do_list(Params) -> {200, format_list_response(Pager, QResult)} catch throw:{error, page_limit_invalid} -> - {400, #{code => <<"INVALID_PARAMETER">>, message => <<"page_limit_invalid">>}} + {400, #{code => <<"INVALID_PARAMETER">>, message => <<"page_limit_invalid">>}}; + error:{invalid_topic_filter, _} -> + {400, #{code => <<"INVALID_PARAMTER">>, message => <<"topic_filter_invalid">>}} end. lookup(#{topic := Topic}) -> diff --git a/apps/emqx_management/test/emqx_mgmt_api_topics_SUITE.erl b/apps/emqx_management/test/emqx_mgmt_api_topics_SUITE.erl index 40ca7aa91..d2f0838e0 100644 --- a/apps/emqx_management/test/emqx_mgmt_api_topics_SUITE.erl +++ b/apps/emqx_management/test/emqx_mgmt_api_topics_SUITE.erl @@ -155,3 +155,20 @@ t_shared_topics(_Configs) -> ), ok = emqtt:stop(Client). + +t_shared_topics_invalid(_Config) -> + %% no real topic + InvalidShareTopicFilter = <<"$share/group">>, + Path = emqx_mgmt_api_test_util:api_path(["topics"]), + QS = uri_string:compose_query([ + {"topic", InvalidShareTopicFilter}, + {"node", atom_to_list(node())} + ]), + Headers = emqx_mgmt_api_test_util:auth_header_(), + {error, {{_, 400, _}, _RespHeaders, Body}} = emqx_mgmt_api_test_util:request_api( + get, Path, QS, Headers, [], #{return_all => true} + ), + ?assertMatch( + #{<<"code">> := <<"INVALID_PARAMTER">>, <<"message">> := <<"topic_filter_invalid">>}, + emqx_utils_json:decode(Body, [return_maps]) + ). diff --git a/changes/fix-12141.en.md b/changes/fix-12141.en.md new file mode 100644 index 000000000..9611756ad --- /dev/null +++ b/changes/fix-12141.en.md @@ -0,0 +1 @@ +Fixed API endpoint `/v5/topics` to return `InternalError` with HTTP status 500 by invalid topic filter.