diff options
| -rw-r--r-- | test/maintenance_mode_SUITE.erl | 36 |
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). |
