summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/maintenance_mode_SUITE.erl36
1 files changed, 34 insertions, 2 deletions
diff --git a/test/maintenance_mode_SUITE.erl b/test/maintenance_mode_SUITE.erl
index 3fab59c974..e5d5c8543e 100644
--- a/test/maintenance_mode_SUITE.erl
+++ b/test/maintenance_mode_SUITE.erl
@@ -33,7 +33,8 @@ groups() ->
maintenance_mode_status,
listener_suspension_status,
client_connection_closure,
- queue_leadership_transition
+ classic_mirrored_queue_leadership_transfer,
+ quorum_queue_leadership_transfer
]}
].
@@ -176,7 +177,7 @@ client_connection_closure(Config) ->
rabbit_ct_broker_helpers:revive_node(Config, A).
-queue_leadership_transition(Config) ->
+classic_mirrored_queue_leadership_transfer(Config) ->
[A | _] = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
ct:pal("Picked node ~s for maintenance tests...", [A]),
@@ -202,3 +203,34 @@ queue_leadership_transition(Config) ->
rabbit_ct_broker_helpers:revive_node(Config, A),
%% rabbit_ct_broker_helpers:set_ha_policy/4 uses pattern for policy name
rabbit_ct_broker_helpers:clear_policy(Config, A, PolicyPattern).
+
+quorum_queue_leadership_transfer(Config) ->
+ [A | _] = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
+ ct:pal("Picked node ~s for maintenance tests...", [A]),
+
+ rabbit_ct_helpers:await_condition(
+ fun () -> not rabbit_ct_broker_helpers:is_being_drained_local_read(Config, A) end, 10000),
+
+ Conn = rabbit_ct_client_helpers:open_connection(Config, A),
+ {ok, Ch} = amqp_connection:open_channel(Conn),
+ QName = <<"qq.1">>,
+ amqp_channel:call(Ch, #'queue.declare'{queue = QName, durable = true, arguments = [
+ {<<"x-queue-type">>, longstr, <<"quorum">>}
+ ]}),
+
+ %% we cannot assert on the number of local leaders here: declaring a QQ on node A
+ %% does not guarantee that the leader will be hosted on node A
+
+ rabbit_ct_broker_helpers:drain_node(Config, A),
+ rabbit_ct_helpers:await_condition(
+ fun () -> rabbit_ct_broker_helpers:is_being_drained_local_read(Config, A) end, 10000),
+
+ %% quorum queue leader election is asynchronous
+ rabbit_ct_helpers:await_condition(
+ fun () ->
+ LocalLeaders = rabbit_ct_broker_helpers:rpc(Config, A,
+ rabbit_amqqueue, list_local_leaders, []),
+ length(LocalLeaders) =:= 0
+ end, 20000),
+
+ rabbit_ct_broker_helpers:revive_node(Config, A).