Shovel amqp1.0: fix delete after validation

Queue-length is not supported, so it should fail already during validation and
not shovel startup
This commit is contained in:
Diana Parra Corbacho 2025-08-23 13:26:46 +02:00
parent c7f6cad331
commit b6d831b115
2 changed files with 28 additions and 2 deletions

View File

@ -183,7 +183,7 @@ amqp10_src_validation(_Def, User) ->
{<<"src-uri">>, validate_uri_fun(User), mandatory}, {<<"src-uri">>, validate_uri_fun(User), mandatory},
{<<"src-address">>, fun rabbit_parameter_validation:binary/2, mandatory}, {<<"src-address">>, fun rabbit_parameter_validation:binary/2, mandatory},
{<<"src-prefetch-count">>, fun rabbit_parameter_validation:number/2, optional}, {<<"src-prefetch-count">>, fun rabbit_parameter_validation:number/2, optional},
{<<"src-delete-after">>, fun validate_delete_after/2, optional} {<<"src-delete-after">>, fun validate_amqp10_delete_after/2, optional}
]. ].
amqp091_src_validation(_Def, User) -> amqp091_src_validation(_Def, User) ->
@ -302,6 +302,12 @@ validate_delete_after(Name, Term) ->
{error, "~ts should be a number greater than or equal to 0, \"never\" or \"queue-length\", actually was " {error, "~ts should be a number greater than or equal to 0, \"never\" or \"queue-length\", actually was "
"~tp", [Name, Term]}. "~tp", [Name, Term]}.
validate_amqp10_delete_after(_Name, <<"never">>) -> ok;
validate_amqp10_delete_after(_Name, N) when is_integer(N), N >= 0 -> ok;
validate_amqp10_delete_after(Name, Term) ->
{error, "~ts should be a number greater than or equal to 0 or \"never\", actually was "
"~tp", [Name, Term]}.
validate_internal_owner(Name, Term0) -> validate_internal_owner(Name, Term0) ->
Term = rabbit_data_coercion:to_proplist(Term0), Term = rabbit_data_coercion:to_proplist(Term0),

View File

@ -29,7 +29,8 @@ groups() ->
simple_amqp10_dest, simple_amqp10_dest,
simple_amqp10_src, simple_amqp10_src,
amqp091_to_amqp10_with_dead_lettering, amqp091_to_amqp10_with_dead_lettering,
amqp10_to_amqp091_application_properties amqp10_to_amqp091_application_properties,
test_amqp10_delete_after_queue_length
]}, ]},
{with_map_config, [], [ {with_map_config, [], [
simple, simple,
@ -341,6 +342,25 @@ autodelete_amqp091_dest(Config, {AckMode, After, ExpSrc, ExpDest}) ->
expect_count(Session, Src, ExpSrc) expect_count(Session, Src, ExpSrc)
end. end.
test_amqp10_delete_after_queue_length(Config) ->
Src = ?config(srcq, Config),
Dest = ?config(destq, Config),
Uri = shovel_test_utils:make_uri(Config, 0),
Error = rabbit_ct_broker_helpers:rpc(
Config, 0,
rabbit_runtime_parameters, set,
[<<"/">>, <<"shovel">>, <<"test">>, [{<<"src-uri">>, Uri},
{<<"dest-uri">>, [Uri]},
{<<"src-protocol">>, <<"amqp10">>},
{<<"src-address">>, Src},
{<<"src-delete-after">>, <<"queue-length">>},
{<<"dest-protocol">>, <<"amqp10">>},
{<<"dest-address">>, Dest}],
none]),
?assertMatch({error_string, _}, Error),
{_, Msg} = Error,
?assertMatch(match, re:run(Msg, "Validation failed.*", [{capture, none}])).
%%---------------------------------------------------------------------------- %%----------------------------------------------------------------------------
with_session(Config, Fun) -> with_session(Config, Fun) ->