Skip to content

Commit 3783dee

Browse files
committed
Shovel tests: more common testcases
1 parent 92375ec commit 3783dee

File tree

2 files changed

+71
-110
lines changed

2 files changed

+71
-110
lines changed

deps/rabbitmq_shovel/test/local_dynamic_SUITE.erl

Lines changed: 0 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ groups() ->
4646
local_to_local_predeclared_dest,
4747
local_to_local_predeclared_quorum_dest,
4848
local_to_local_missing_predeclared_dest,
49-
local_to_local_queue_status,
5049
local_to_local_exchange_status,
5150
local_to_local_queue_and_exchange_src_fails,
5251
local_to_local_queue_and_exchange_dest_fails,
@@ -57,13 +56,6 @@ groups() ->
5756
local_to_local_stream_on_publish,
5857
local_to_local_stream_on_confirm,
5958
local_to_local_delete_dest_queue,
60-
local_to_local_user_access,
61-
local_to_local_credit_flow_on_confirm,
62-
local_to_local_credit_flow_on_publish,
63-
local_to_local_credit_flow_no_ack,
64-
local_to_local_quorum_credit_flow_on_confirm,
65-
local_to_local_quorum_credit_flow_on_publish,
66-
local_to_local_quorum_credit_flow_no_ack,
6759
local_to_local_stream_credit_flow_on_confirm,
6860
local_to_local_stream_credit_flow_on_publish,
6961
local_to_local_stream_credit_flow_no_ack,
@@ -404,25 +396,6 @@ local_to_local_missing_predeclared_dest(Config) ->
404396
Config, 0, rabbit_runtime_parameters, lookup,
405397
[<<"/">>, <<"shovel">>, ?PARAM])).
406398

407-
local_to_local_queue_status(Config) ->
408-
Src = ?config(srcq, Config),
409-
Dest = ?config(destq, Config),
410-
shovel_test_utils:set_param(Config, ?PARAM,
411-
[{<<"src-protocol">>, <<"local">>},
412-
{<<"src-queue">>, Src},
413-
{<<"dest-protocol">>, <<"local">>},
414-
{<<"dest-queue">>, Dest}
415-
]),
416-
Status = rabbit_ct_broker_helpers:rpc(Config, 0,
417-
rabbit_shovel_status, status, []),
418-
?assertMatch([{_, dynamic, {running, _}, _, _}], Status),
419-
[{_, dynamic, {running, Info}, _, _}] = Status,
420-
?assertMatch(<<"local">>, proplists:get_value(src_protocol, Info)),
421-
?assertMatch(<<"local">>, proplists:get_value(dest_protocol, Info)),
422-
?assertMatch(Src, proplists:get_value(src_queue, Info)),
423-
?assertMatch(Dest, proplists:get_value(dest_queue, Info)),
424-
ok.
425-
426399
local_to_local_exchange_status(Config) ->
427400
DefExchange = <<"amq.direct">>,
428401
RK1 = <<"carrots">>,
@@ -649,77 +622,6 @@ local_to_local_delete_dest_queue(Config) ->
649622
30000)
650623
end).
651624

652-
local_to_local_user_access(Config) ->
653-
Src = ?config(srcq, Config),
654-
Dest = ?config(destq, Config),
655-
Uri = shovel_test_utils:make_uri(
656-
Config, 0, <<"guest">>, <<"forgotmypassword">>, <<"%2F">>),
657-
ok = rabbit_ct_broker_helpers:rpc(
658-
Config, 0, rabbit_runtime_parameters, set,
659-
[<<"/">>, <<"shovel">>, ?PARAM, [{<<"src-uri">>, Uri},
660-
{<<"dest-uri">>, [Uri]},
661-
{<<"src-protocol">>, <<"local">>},
662-
{<<"src-queue">>, Src},
663-
{<<"dest-protocol">>, <<"local">>},
664-
{<<"dest-queue">>, Dest}],
665-
none]),
666-
shovel_test_utils:await_no_shovel(Config, ?PARAM).
667-
668-
local_to_local_credit_flow_on_confirm(Config) ->
669-
local_to_local_credit_flow(Config, <<"on-confirm">>).
670-
671-
local_to_local_credit_flow_on_publish(Config) ->
672-
local_to_local_credit_flow(Config, <<"on-publish">>).
673-
674-
local_to_local_credit_flow_no_ack(Config) ->
675-
local_to_local_credit_flow(Config, <<"no-ack">>).
676-
677-
local_to_local_credit_flow(Config, AckMode) ->
678-
Src = ?config(srcq, Config),
679-
Dest = ?config(destq, Config),
680-
with_amqp10_session(Config,
681-
fun (Sess) ->
682-
shovel_test_utils:set_param(Config, ?PARAM,
683-
[{<<"src-protocol">>, <<"local">>},
684-
{<<"src-queue">>, Src},
685-
{<<"dest-protocol">>, <<"local">>},
686-
{<<"dest-queue">>, Dest},
687-
{<<"ack-mode">>, AckMode}
688-
]),
689-
amqp10_publish(Sess, Src, <<"tag1">>, 1000),
690-
amqp10_expect_count(Sess, Dest, 1000)
691-
end).
692-
693-
local_to_local_quorum_credit_flow_on_confirm(Config) ->
694-
local_to_local_quorum_credit_flow(Config, <<"on-confirm">>).
695-
696-
local_to_local_quorum_credit_flow_on_publish(Config) ->
697-
local_to_local_quorum_credit_flow(Config, <<"on-publish">>).
698-
699-
local_to_local_quorum_credit_flow_no_ack(Config) ->
700-
local_to_local_quorum_credit_flow(Config, <<"no-ack">>).
701-
702-
local_to_local_quorum_credit_flow(Config, AckMode) ->
703-
Src = ?config(srcq, Config),
704-
Dest = ?config(destq, Config),
705-
VHost = <<"/">>,
706-
declare_queue(Config, VHost, Src, [{<<"x-queue-type">>, longstr, <<"quorum">>}]),
707-
declare_queue(Config, VHost, Dest, [{<<"x-queue-type">>, longstr, <<"quorum">>}]),
708-
with_amqp10_session(Config,
709-
fun (Sess) ->
710-
shovel_test_utils:set_param(Config, ?PARAM,
711-
[{<<"src-protocol">>, <<"local">>},
712-
{<<"src-queue">>, Src},
713-
{<<"src-predeclared">>, true},
714-
{<<"dest-protocol">>, <<"local">>},
715-
{<<"dest-queue">>, Dest},
716-
{<<"dest-predeclared">>, true},
717-
{<<"ack-mode">>, AckMode}
718-
]),
719-
amqp10_publish(Sess, Src, <<"tag1">>, 1000),
720-
amqp10_expect_count(Sess, Dest, 1000)
721-
end).
722-
723625
local_to_local_stream_credit_flow_on_confirm(Config) ->
724626
local_to_local_stream_credit_flow(Config, <<"on-confirm">>).
725627

deps/rabbitmq_shovel/test/shovel_dynamic_SUITE.erl

Lines changed: 71 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
amqp10_publish_msg/4,
2626
amqp10_expect_one/2,
2727
amqp10_expect_count/3,
28-
make_uri/3,
28+
make_uri/2, make_uri/3,
29+
make_uri/5,
2930
await_no_shovel/2
3031
]).
3132

@@ -66,6 +67,16 @@ tests() ->
6667
simple_quorum_no_ack,
6768
simple_quorum_on_confirm,
6869
simple_quorum_on_publish,
70+
%% Credit flow tests are just simple tests that publish a high
71+
%% number of messages, on the attempt to trigger the different
72+
%% credit flow mechanisms. Having the same test twice (simple/credit)
73+
%% helps to isolate the problem.
74+
credit_flow_classic_no_ack,
75+
credit_flow_classic_on_confirm,
76+
credit_flow_classic_on_publish,
77+
credit_flow_quorum_no_ack,
78+
credit_flow_quorum_on_confirm,
79+
credit_flow_quorum_on_publish,
6980
autodelete_classic_on_confirm,
7081
autodelete_quorum_on_confirm,
7182
autodelete_classic_on_publish,
@@ -84,8 +95,10 @@ tests() ->
8495
autodelete_classic_on_publish_with_rejections,
8596
autodelete_quorum_on_publish_with_rejections,
8697
no_vhost_access,
98+
no_user_access,
8799
application_properties,
88-
delete_src_queue
100+
delete_src_queue,
101+
shovel_status
89102
].
90103

91104
%% -------------------------------------------------------------------
@@ -238,24 +251,42 @@ simple(Config) ->
238251
end).
239252

240253
simple_classic_no_ack(Config) ->
241-
simple_queue_type_ack_mode(Config, <<"classic">>, <<"no-ack">>).
254+
simple_queue_type_ack_mode(Config, <<"classic">>, <<"no-ack">>, 10).
242255

243256
simple_classic_on_confirm(Config) ->
244-
simple_queue_type_ack_mode(Config, <<"classic">>, <<"on-confirm">>).
257+
simple_queue_type_ack_mode(Config, <<"classic">>, <<"on-confirm">>, 10).
245258

246259
simple_classic_on_publish(Config) ->
247-
simple_queue_type_ack_mode(Config, <<"classic">>, <<"on-publish">>).
260+
simple_queue_type_ack_mode(Config, <<"classic">>, <<"on-publish">>, 10).
248261

249262
simple_quorum_no_ack(Config) ->
250-
simple_queue_type_ack_mode(Config, <<"quorum">>, <<"no-ack">>).
263+
simple_queue_type_ack_mode(Config, <<"quorum">>, <<"no-ack">>, 10).
251264

252265
simple_quorum_on_confirm(Config) ->
253-
simple_queue_type_ack_mode(Config, <<"quorum">>, <<"on-confirm">>).
266+
simple_queue_type_ack_mode(Config, <<"quorum">>, <<"on-confirm">>, 10).
254267

255268
simple_quorum_on_publish(Config) ->
256-
simple_queue_type_ack_mode(Config, <<"quorum">>, <<"on-publish">>).
269+
simple_queue_type_ack_mode(Config, <<"quorum">>, <<"on-publish">>, 10).
257270

258-
simple_queue_type_ack_mode(Config, Type, AckMode) ->
271+
credit_flow_classic_no_ack(Config) ->
272+
simple_queue_type_ack_mode(Config, <<"classic">>, <<"no-ack">>, 5000).
273+
274+
credit_flow_classic_on_confirm(Config) ->
275+
simple_queue_type_ack_mode(Config, <<"classic">>, <<"on-confirm">>, 5000).
276+
277+
credit_flow_classic_on_publish(Config) ->
278+
simple_queue_type_ack_mode(Config, <<"classic">>, <<"on-publish">>, 5000).
279+
280+
credit_flow_quorum_no_ack(Config) ->
281+
simple_queue_type_ack_mode(Config, <<"quorum">>, <<"no-ack">>, 5000).
282+
283+
credit_flow_quorum_on_confirm(Config) ->
284+
simple_queue_type_ack_mode(Config, <<"quorum">>, <<"on-confirm">>, 5000).
285+
286+
credit_flow_quorum_on_publish(Config) ->
287+
simple_queue_type_ack_mode(Config, <<"quorum">>, <<"on-publish">>, 5000).
288+
289+
simple_queue_type_ack_mode(Config, Type, AckMode, NMsgs) ->
259290
Src = ?config(srcq, Config),
260291
Dest = ?config(destq, Config),
261292
with_amqp10_session(
@@ -266,7 +297,7 @@ simple_queue_type_ack_mode(Config, Type, AckMode) ->
266297
ExtraArgs = [{<<"ack-mode">>, AckMode}],
267298
ShovelArgs = ?config(shovel_args, Config) ++ ExtraArgs,
268299
set_param(Config, ?PARAM, ShovelArgs),
269-
amqp10_publish_expect(Sess, Src, Dest, <<"hello">>, 10)
300+
amqp10_publish_expect(Sess, Src, Dest, <<"hello">>, NMsgs)
270301
end).
271302

272303
autodelete_classic_on_confirm_no_transfer(Config) ->
@@ -297,7 +328,7 @@ autodelete_no_ack(Config) ->
297328
ExtraArgs = [{<<"ack-mode">>, <<"no-ack">>},
298329
{<<"src-delete-after">>, 100}],
299330
ShovelArgs = ?config(shovel_args, Config) ++ ExtraArgs,
300-
Uri = shovel_test_utils:make_uri(Config, 0),
331+
Uri = make_uri(Config, 0),
301332
?assertMatch({error_string, _},
302333
rabbit_ct_broker_helpers:rpc(
303334
Config, 0, rabbit_runtime_parameters, set,
@@ -405,6 +436,16 @@ no_vhost_access(Config) ->
405436
[<<"/">>, <<"shovel">>, ?PARAM, ShovelArgs, none]),
406437
await_no_shovel(Config, ?PARAM).
407438

439+
no_user_access(Config) ->
440+
Uri = make_uri(
441+
Config, 0, <<"guest">>, <<"forgotmypassword">>, <<"%2F">>),
442+
ShovelArgs = [{<<"src-uri">>, Uri},
443+
{<<"dest-uri">>, [Uri]}] ++ ?config(shovel_args, Config),
444+
ok = rabbit_ct_broker_helpers:rpc(
445+
Config, 0, rabbit_runtime_parameters, set,
446+
[<<"/">>, <<"shovel">>, ?PARAM, ShovelArgs, none]),
447+
await_no_shovel(Config, ?PARAM).
448+
408449
application_properties(Config) ->
409450
Src = ?config(srcq, Config),
410451
Dest = ?config(destq, Config),
@@ -445,13 +486,31 @@ delete_src_queue(Config) ->
445486
Config, 0,
446487
["list_queues", "name", "messages", "--no-table-headers"])),
447488
45_000),
448-
?awaitMatch([{_Name, dynamic, {running, _}, _, _}],
489+
?awaitMatch([{_Name, dynamic, {running, _}, #{forwarded := 0}, _}],
449490
rabbit_ct_broker_helpers:rpc(Config, 0,
450491
rabbit_shovel_status, status, []),
451492
30000),
452493
_ = amqp10_publish_expect(Sess, Src, Dest, <<"hello">>, 1)
453494
end).
454495

496+
shovel_status(Config) ->
497+
Src = ?config(srcq, Config),
498+
Dest = ?config(destq, Config),
499+
SrcProtocol = ?config(src_protocol, Config),
500+
DestProtocol = ?config(dest_protocol, Config),
501+
set_param(Config, ?PARAM, ?config(shovel_args, Config)),
502+
Status = rabbit_ct_broker_helpers:rpc(Config, 0,
503+
rabbit_shovel_status, status, []),
504+
?assertMatch([{_, dynamic, {running, _}, _, _}], Status),
505+
[{_, dynamic, {running, Info}, _, _}] = Status,
506+
?assertMatch(SrcProtocol, proplists:get_value(src_protocol, Info)),
507+
?assertMatch(DestProtocol, proplists:get_value(dest_protocol, Info)),
508+
SrcAddress = binary_to_atom(binary:replace(?config(src_address, Config), <<"-">>, <<"_">>)),
509+
DestAddress = binary_to_atom(binary:replace(?config(dest_address, Config), <<"-">>, <<"_">>)),
510+
?assertMatch(Src, proplists:get_value(SrcAddress, Info)),
511+
?assertMatch(Dest, proplists:get_value(DestAddress, Info)),
512+
ok.
513+
455514
%%----------------------------------------------------------------------------
456515
maybe_skip_local_protocol(Config) ->
457516
[Node] = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),

0 commit comments

Comments
 (0)