diff options
| author | Michael Klishin <michael@clojurewerkz.org> | 2020-06-30 02:42:09 +0300 |
|---|---|---|
| committer | Michael Klishin <michael@clojurewerkz.org> | 2020-07-14 03:50:32 +0300 |
| commit | bcc6fc87c98ba0f79db8546c110d641193d1d753 (patch) | |
| tree | aeca03fde2b174ba7712639fcb4ffe82283cdbcc /test | |
| parent | e06ab7c9b59e09d3e2c4a1facf05b98c29124370 (diff) | |
| download | rabbitmq-server-git-bcc6fc87c98ba0f79db8546c110d641193d1d753.tar.gz | |
More integration tests for maintenance mode
References #2321
Diffstat (limited to 'test')
| -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). |
