diff --git a/deps/rabbit/src/rabbit_amqp_management.erl b/deps/rabbit/src/rabbit_amqp_management.erl index e4555e806033..5bf016188504 100644 --- a/deps/rabbit/src/rabbit_amqp_management.erl +++ b/deps/rabbit/src/rabbit_amqp_management.erl @@ -256,7 +256,9 @@ handle_http_req(<<"DELETE">>, [rabbit_misc:rs(QName)]) end end) - catch exit:#amqp_error{explanation = Explanation} -> + catch exit:#amqp_error{name = not_found, explanation = Explanation} -> + throw(<<"404">>, Explanation, []); + exit:#amqp_error{explanation = Explanation} -> throw(<<"400">>, Explanation, []) end; diff --git a/deps/rabbitmq_amqp_client/test/management_SUITE.erl b/deps/rabbitmq_amqp_client/test/management_SUITE.erl index 2487e0631187..bb38205647c6 100644 --- a/deps/rabbitmq_amqp_client/test/management_SUITE.erl +++ b/deps/rabbitmq_amqp_client/test/management_SUITE.erl @@ -75,6 +75,7 @@ groups() -> unbind_bad_binding_path_segment, exclusive_queue, purge_stream, + purge_non_existing_queue_should_return_not_found, pipeline, multiple_link_pairs, link_attach_order, @@ -778,6 +779,18 @@ purge_stream(Config) -> {ok, #{}} = rabbitmq_amqp_client:delete_queue(LinkPair, QName), ok = cleanup(Init). +purge_non_existing_queue_should_return_not_found(Config) -> + Init = {_, LinkPair} = init(Config), + QName = atom_to_binary(?FUNCTION_NAME), + + {error, Resp} = rabbitmq_amqp_client:purge_queue(LinkPair, QName), + ?assertMatch(#{subject := <<"404">>}, amqp10_msg:properties(Resp)), + #'v1_0.amqp_value'{content = {utf8, Reason}} = amqp10_msg:body(Resp), + ?assertEqual(<<"no queue '", QName/binary, "' in vhost '/'">>, + Reason), + + ok = cleanup(Init). + queue_topology(Config) -> NodeNames = rabbit_ct_broker_helpers:get_node_configs(Config, nodename), Nodes = [N0, N1, N2] = lists:map(fun erlang:atom_to_binary/1, NodeNames),