Skip to content

Commit cf521b1

Browse files
committed
rabbit_exchange_type_consistent_hash_SUITE: Open/close connection explicitly
[Why] In CI, we observe that the channel hangs sometimes. rabbitmq_ct_client_helpers implicit connection is quite fragile in the sense that a test case can disturb the next one in some cases. [How] Let's use a dedicated connection and see if it fixes the problem.
1 parent d7e8b55 commit cf521b1

File tree

1 file changed

+44
-41
lines changed

1 file changed

+44
-41
lines changed

deps/rabbitmq_consistent_hash_exchange/test/rabbit_exchange_type_consistent_hash_SUITE.erl

Lines changed: 44 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ custom_header_undefined(Config) ->
156156
Exchange = <<"my exchange">>,
157157
Queue = <<"my queue">>,
158158

159-
Ch = rabbit_ct_client_helpers:open_channel(Config),
159+
{Conn, Ch} = rabbit_ct_client_helpers:open_connection_and_channel(Config),
160160
#'confirm.select_ok'{} = amqp_channel:call(Ch, #'confirm.select'{}),
161161
#'exchange.declare_ok'{} = amqp_channel:call(
162162
Ch, #'exchange.declare' {
@@ -179,7 +179,7 @@ custom_header_undefined(Config) ->
179179
?assertMatch({#'basic.get_ok'{}, #amqp_msg{}},
180180
amqp_channel:call(Ch, #'basic.get'{queue = Queue})),
181181

182-
rabbit_ct_client_helpers:close_channel(Ch),
182+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Ch),
183183
clean_up_test_topology(Config, Exchange, [Queue]),
184184
ok.
185185

@@ -373,7 +373,7 @@ test_with_timestamp(Config, Qs) ->
373373
Qs).
374374

375375
test_mutually_exclusive_arguments(Config) ->
376-
Chan = rabbit_ct_client_helpers:open_channel(Config, 0),
376+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
377377

378378
process_flag(trap_exit, true),
379379
Cmd = #'exchange.declare'{
@@ -384,11 +384,11 @@ test_mutually_exclusive_arguments(Config) ->
384384
},
385385
?assertExit(_, amqp_channel:call(Chan, Cmd)),
386386

387-
rabbit_ct_client_helpers:close_channel(Chan),
387+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
388388
ok.
389389

390390
test_non_supported_property(Config) ->
391-
Chan = rabbit_ct_client_helpers:open_channel(Config, 0),
391+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
392392

393393
process_flag(trap_exit, true),
394394
Cmd = #'exchange.declare'{
@@ -398,7 +398,7 @@ test_non_supported_property(Config) ->
398398
},
399399
?assertExit(_, amqp_channel:call(Chan, Cmd)),
400400

401-
rabbit_ct_client_helpers:close_channel(Chan),
401+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
402402
ok.
403403

404404
rnd() ->
@@ -411,13 +411,13 @@ test0(Config, MakeMethod, MakeMsg, DeclareArgs, Queues) ->
411411
test0(Config, MakeMethod, MakeMsg, DeclareArgs, Queues, ?DEFAULT_SAMPLE_COUNT).
412412

413413
test0(Config, MakeMethod, MakeMsg, DeclareArgs, [Q1, Q2, Q3, Q4] = Queues, IterationCount) ->
414-
Chan = rabbit_ct_client_helpers:open_channel(Config),
415-
#'confirm.select_ok'{} = amqp_channel:call(Chan, #'confirm.select'{}),
416-
417414
CHX = <<"e">>,
418415

419416
clean_up_test_topology(Config, CHX, Queues),
420417

418+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config),
419+
#'confirm.select_ok'{} = amqp_channel:call(Chan, #'confirm.select'{}),
420+
421421
#'exchange.declare_ok'{} =
422422
amqp_channel:call(Chan,
423423
#'exchange.declare' {
@@ -464,11 +464,11 @@ test0(Config, MakeMethod, MakeMsg, DeclareArgs, [Q1, Q2, Q3, Q4] = Queues, Itera
464464
[Chi, Obs]),
465465

466466
clean_up_test_topology(Config, CHX, Queues),
467-
rabbit_ct_client_helpers:close_channel(Chan),
467+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
468468
ok.
469469

470470
test_binding_with_negative_routing_key(Config) ->
471-
Chan = rabbit_ct_client_helpers:open_channel(Config, 0),
471+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
472472
X = <<"bind-fail">>,
473473
amqp_channel:call(Chan, #'exchange.delete' {exchange = X}),
474474

@@ -482,15 +482,15 @@ test_binding_with_negative_routing_key(Config) ->
482482
Cmd = #'queue.bind'{exchange = <<"bind-fail">>,
483483
routing_key = <<"-1">>},
484484
?assertExit(_, amqp_channel:call(Chan, Cmd)),
485-
Ch2 = rabbit_ct_client_helpers:open_channel(Config, 0),
485+
{Conn2, Ch2} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
486486
amqp_channel:call(Ch2, #'queue.delete'{queue = Q}),
487487

488-
rabbit_ct_client_helpers:close_channel(Chan),
489-
rabbit_ct_client_helpers:close_channel(Ch2),
488+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
489+
rabbit_ct_client_helpers:close_connection_and_channel(Conn2, Ch2),
490490
ok.
491491

492492
test_binding_with_non_numeric_routing_key(Config) ->
493-
Chan = rabbit_ct_client_helpers:open_channel(Config, 0),
493+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
494494
X = <<"bind-fail">>,
495495
amqp_channel:call(Chan, #'exchange.delete' {exchange = X}),
496496

@@ -505,18 +505,19 @@ test_binding_with_non_numeric_routing_key(Config) ->
505505
routing_key = <<"not-a-number">>},
506506
?assertExit(_, amqp_channel:call(Chan, Cmd)),
507507

508-
Ch2 = rabbit_ct_client_helpers:open_channel(Config, 0),
508+
{Conn2, Ch2} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
509509
amqp_channel:call(Ch2, #'queue.delete'{queue = Q}),
510510

511-
rabbit_ct_client_helpers:close_channel(Chan),
511+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
512+
rabbit_ct_client_helpers:close_connection_and_channel(Conn2, Ch2),
512513
ok.
513514

514515
%%
515516
%% Hash Ring management
516517
%%
517518

518519
test_durable_exchange_hash_ring_recovery_between_node_restarts(Config) ->
519-
Chan = rabbit_ct_client_helpers:open_channel(Config, 0),
520+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
520521

521522
X = <<"test_hash_ring_recovery_between_node_restarts">>,
522523
amqp_channel:call(Chan, #'exchange.delete' {exchange = X}),
@@ -547,11 +548,11 @@ test_durable_exchange_hash_ring_recovery_between_node_restarts(Config) ->
547548
assert_ring_consistency(Config, X),
548549

549550
clean_up_test_topology(Config, X, Queues),
550-
rabbit_ct_client_helpers:close_channel(Chan),
551+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
551552
ok.
552553

553554
test_hash_ring_updates_when_queue_is_deleted(Config) ->
554-
Chan = rabbit_ct_client_helpers:open_channel(Config, 0),
555+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
555556

556557
X = <<"test_hash_ring_updates_when_queue_is_deleted">>,
557558
amqp_channel:call(Chan, #'exchange.delete' {exchange = X}),
@@ -576,11 +577,11 @@ test_hash_ring_updates_when_queue_is_deleted(Config) ->
576577
?assertEqual(0, count_buckets_of_exchange(Config, X)),
577578

578579
clean_up_test_topology(Config, X, [Q]),
579-
rabbit_ct_client_helpers:close_channel(Chan),
580+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
580581
ok.
581582

582583
test_hash_ring_updates_when_multiple_queues_are_deleted(Config) ->
583-
Chan = rabbit_ct_client_helpers:open_channel(Config, 0),
584+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
584585

585586
X = <<"test_hash_ring_updates_when_multiple_queues_are_deleted">>,
586587
amqp_channel:call(Chan, #'exchange.delete' {exchange = X}),
@@ -611,7 +612,7 @@ test_hash_ring_updates_when_multiple_queues_are_deleted(Config) ->
611612
?assertEqual(0, count_buckets_of_exchange(Config, X)),
612613

613614
clean_up_test_topology(Config, X, Queues),
614-
rabbit_ct_client_helpers:close_channel(Chan),
615+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
615616
ok.
616617

617618
test_hash_ring_updates_when_exclusive_queues_are_deleted_due_to_connection_closure(Config) ->
@@ -706,7 +707,7 @@ test_hash_ring_updates_when_exclusive_queues_are_deleted_due_to_connection_closu
706707
ok.
707708

708709
test_hash_ring_updates_when_exchange_is_deleted(Config) ->
709-
Chan = rabbit_ct_client_helpers:open_channel(Config, 0),
710+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
710711

711712
X = <<"test_hash_ring_updates_when_exchange_is_deleted">>,
712713
amqp_channel:call(Chan, #'exchange.delete' {exchange = X}),
@@ -734,11 +735,11 @@ test_hash_ring_updates_when_exchange_is_deleted(Config) ->
734735
?assertEqual(0, count_buckets_of_exchange(Config, X)),
735736

736737
clean_up_test_topology(Config, X, Queues),
737-
rabbit_ct_client_helpers:close_channel(Chan),
738+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
738739
ok.
739740

740741
test_hash_ring_updates_when_queue_is_unbound(Config) ->
741-
Chan = rabbit_ct_client_helpers:open_channel(Config, 0),
742+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
742743

743744
X = <<"test_hash_ring_updates_when_queue_is_unbound">>,
744745
amqp_channel:call(Chan, #'exchange.delete' {exchange = X}),
@@ -769,11 +770,11 @@ test_hash_ring_updates_when_queue_is_unbound(Config) ->
769770
?assertEqual(8, count_buckets_of_exchange(Config, X)),
770771

771772
clean_up_test_topology(Config, X, Queues),
772-
rabbit_ct_client_helpers:close_channel(Chan),
773+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
773774
ok.
774775

775776
test_hash_ring_updates_when_duplicate_binding_is_created_and_queue_is_deleted(Config) ->
776-
Chan = rabbit_ct_client_helpers:open_channel(Config, 0),
777+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
777778

778779
X = <<"test_hash_ring_updates_when_duplicate_binding_is_created_and_queue_is_deleted">>,
779780
amqp_channel:call(Chan, #'exchange.delete' {exchange = X}),
@@ -818,11 +819,11 @@ test_hash_ring_updates_when_duplicate_binding_is_created_and_queue_is_deleted(Co
818819
assert_ring_consistency(Config, X),
819820

820821
clean_up_test_topology(Config, X, [Q1, Q2]),
821-
rabbit_ct_client_helpers:close_channel(Chan),
822+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
822823
ok.
823824

824825
test_hash_ring_updates_when_duplicate_binding_is_created_and_binding_is_deleted(Config) ->
825-
Chan = rabbit_ct_client_helpers:open_channel(Config, 0),
826+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
826827

827828
X = <<"test_hash_ring_updates_when_duplicate_binding_is_created_and_binding_is_deleted">>,
828829
amqp_channel:call(Chan, #'exchange.delete' {exchange = X}),
@@ -872,14 +873,14 @@ test_hash_ring_updates_when_duplicate_binding_is_created_and_binding_is_deleted(
872873
?assertEqual(0, count_buckets_of_exchange(Config, X)),
873874

874875
clean_up_test_topology(Config, X, [Q1, Q2]),
875-
rabbit_ct_client_helpers:close_channel(Chan),
876+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
876877
ok.
877878

878879
%% Follows the setup described in
879880
%% https://github.com/rabbitmq/rabbitmq-server/issues/3386#issuecomment-1103929292
880881
node_restart(Config) ->
881-
Chan1 = rabbit_ct_client_helpers:open_channel(Config, 1),
882-
Chan2 = rabbit_ct_client_helpers:open_channel(Config, 2),
882+
{Conn1, Chan1} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 1),
883+
{Conn2, Chan2} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 2),
883884

884885
X = atom_to_binary(?FUNCTION_NAME),
885886
#'exchange.declare_ok'{} = amqp_channel:call(Chan1,
@@ -903,8 +904,8 @@ node_restart(Config) ->
903904
F(Chan1, QsNode1),
904905
F(Chan2, QsNode2),
905906

906-
rabbit_ct_client_helpers:close_channel(Chan1),
907-
rabbit_ct_client_helpers:close_channel(Chan2),
907+
rabbit_ct_client_helpers:close_connection_and_channel(Conn1, Chan1),
908+
rabbit_ct_client_helpers:close_connection_and_channel(Conn2, Chan2),
908909

909910
rabbit_ct_broker_helpers:restart_node(Config, 1),
910911
rabbit_ct_broker_helpers:restart_node(Config, 2),
@@ -942,7 +943,7 @@ count_buckets_of_exchange(Config, X) ->
942943
from_mnesia_to_khepri(Config) ->
943944
Queues = [Q1, Q2, Q3, Q4] = ?RoutingTestQs,
944945
IterationCount = ?DEFAULT_SAMPLE_COUNT,
945-
Chan = rabbit_ct_client_helpers:open_channel(Config, 0),
946+
{Conn, Chan} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
946947
#'confirm.select_ok'{} = amqp_channel:call(Chan, #'confirm.select'{}),
947948

948949
CHX = <<"e">>,
@@ -997,25 +998,27 @@ from_mnesia_to_khepri(Config) ->
997998
ct:pal("Chi-square test for 3 degrees of freedom is ~p, p = 0.01 is 11.35, observations (counts, expected): ~p",
998999
[Chi, Obs]),
9991000
clean_up_test_topology(Config, CHX, Queues),
1000-
rabbit_ct_client_helpers:close_channel(Chan),
1001+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
10011002
ok;
10021003
Skip ->
1004+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
10031005
Skip
10041006
end;
10051007
Skip ->
1008+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Chan),
10061009
Skip
10071010
end.
10081011

10091012
clean_up_test_topology(Config) ->
10101013
clean_up_test_topology(Config, none, ?AllQs).
10111014

10121015
clean_up_test_topology(Config, none, Qs) ->
1013-
Ch = rabbit_ct_client_helpers:open_channel(Config, 0),
1016+
{Conn, Ch} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
10141017
[amqp_channel:call(Ch, #'queue.delete' {queue = Q}) || Q <- Qs],
1015-
rabbit_ct_client_helpers:close_channel(Ch);
1018+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Ch);
10161019

10171020
clean_up_test_topology(Config, X, Qs) ->
1018-
Ch = rabbit_ct_client_helpers:open_channel(Config, 0),
1021+
{Conn, Ch} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
10191022
amqp_channel:call(Ch, #'exchange.delete' {exchange = X}),
10201023
[amqp_channel:call(Ch, #'queue.delete' {queue = Q}) || Q <- Qs],
1021-
rabbit_ct_client_helpers:close_channel(Ch).
1024+
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Ch).

0 commit comments

Comments
 (0)