Skip to content

Commit 5b372e6

Browse files
dcorbachomergify[bot]
authored andcommitted
Shovel amqp1.0: fix delete after validation
Queue-length is not supported, so it should fail already during validation and not shovel startup (cherry picked from commit b6d831b) # Conflicts: # deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl # deps/rabbitmq_shovel/test/amqp10_dynamic_SUITE.erl
1 parent b112383 commit 5b372e6

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ amqp10_src_validation(_Def, User) ->
133133
{<<"src-uri">>, validate_uri_fun(User), mandatory},
134134
{<<"src-address">>, fun rabbit_parameter_validation:binary/2, mandatory},
135135
{<<"src-prefetch-count">>, fun rabbit_parameter_validation:number/2, optional},
136-
{<<"src-delete-after">>, fun validate_delete_after/2, optional}
136+
{<<"src-delete-after">>, fun validate_amqp10_delete_after/2, optional}
137137
].
138138

139139
amqp091_src_validation(_Def, User) ->
@@ -233,6 +233,23 @@ validate_delete_after(Name, Term) ->
233233
{error, "~ts should be a number greater than or equal to 0, \"never\" or \"queue-length\", actually was "
234234
"~tp", [Name, Term]}.
235235

236+
<<<<<<< HEAD
237+
=======
238+
validate_amqp10_delete_after(_Name, <<"never">>) -> ok;
239+
validate_amqp10_delete_after(_Name, N) when is_integer(N), N >= 0 -> ok;
240+
validate_amqp10_delete_after(Name, Term) ->
241+
{error, "~ts should be a number greater than or equal to 0 or \"never\", actually was "
242+
"~tp", [Name, Term]}.
243+
244+
validate_internal_owner(Name, Term0) ->
245+
Term = rabbit_data_coercion:to_proplist(Term0),
246+
247+
rabbit_parameter_validation:proplist(Name, [{<<"name">>, fun rabbit_parameter_validation:binary/2},
248+
{<<"kind">>, rabbit_parameter_validation:enum(
249+
['exchange', 'queue'])},
250+
{<<"virtual_host">>, fun rabbit_parameter_validation:binary/2}], Term).
251+
252+
>>>>>>> b6d831b11 (Shovel amqp1.0: fix delete after validation)
236253
validate_queue_args(Name, Term0) ->
237254
Term = rabbit_data_coercion:to_proplist(Term0),
238255

deps/rabbitmq_shovel/test/amqp10_dynamic_SUITE.erl

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,13 @@ groups() ->
2828
autodelete_amqp091_dest_on_publish,
2929
simple_amqp10_dest,
3030
simple_amqp10_src,
31+
<<<<<<< HEAD
3132
amqp091_to_amqp10_with_dead_lettering
33+
=======
34+
amqp091_to_amqp10_with_dead_lettering,
35+
amqp10_to_amqp091_application_properties,
36+
test_amqp10_delete_after_queue_length
37+
>>>>>>> b6d831b11 (Shovel amqp1.0: fix delete after validation)
3238
]},
3339
{with_map_config, [], [
3440
simple,
@@ -301,6 +307,25 @@ autodelete_amqp091_dest(Config, {AckMode, After, ExpSrc, ExpDest}) ->
301307
expect_count(Session, Src, <<"hello">>, ExpSrc)
302308
end.
303309

310+
test_amqp10_delete_after_queue_length(Config) ->
311+
Src = ?config(srcq, Config),
312+
Dest = ?config(destq, Config),
313+
Uri = shovel_test_utils:make_uri(Config, 0),
314+
Error = rabbit_ct_broker_helpers:rpc(
315+
Config, 0,
316+
rabbit_runtime_parameters, set,
317+
[<<"/">>, <<"shovel">>, <<"test">>, [{<<"src-uri">>, Uri},
318+
{<<"dest-uri">>, [Uri]},
319+
{<<"src-protocol">>, <<"amqp10">>},
320+
{<<"src-address">>, Src},
321+
{<<"src-delete-after">>, <<"queue-length">>},
322+
{<<"dest-protocol">>, <<"amqp10">>},
323+
{<<"dest-address">>, Dest}],
324+
none]),
325+
?assertMatch({error_string, _}, Error),
326+
{_, Msg} = Error,
327+
?assertMatch(match, re:run(Msg, "Validation failed.*", [{capture, none}])).
328+
304329
%%----------------------------------------------------------------------------
305330

306331
with_session(Config, Fun) ->

0 commit comments

Comments
 (0)