summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2020-06-30 02:42:09 +0300
committerMichael Klishin <michael@clojurewerkz.org>2020-07-14 03:50:32 +0300
commitbcc6fc87c98ba0f79db8546c110d641193d1d753 (patch)
treeaeca03fde2b174ba7712639fcb4ffe82283cdbcc
parente06ab7c9b59e09d3e2c4a1facf05b98c29124370 (diff)
downloadrabbitmq-server-git-bcc6fc87c98ba0f79db8546c110d641193d1d753.tar.gz
More integration tests for maintenance mode
References #2321
-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).