summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2019-12-11 05:02:46 +0300
committerMichael Klishin <michael@clojurewerkz.org>2019-12-12 15:58:00 +0300
commit2962cad98247c9fdd11315742293a44eece7e598 (patch)
treed12c5f7a290913be1c7366f4dd453069e22f43af /test
parent25e329c63bd0a85a8da66a158ef0db3fe505f8f4 (diff)
downloadrabbitmq-server-git-2962cad98247c9fdd11315742293a44eece7e598.tar.gz
Initial tests for rabbit_quorum_queue:list_with_minimum_quorum/0
Diffstat (limited to 'test')
-rw-r--r--test/quorum_queue_SUITE.erl39
1 files changed, 36 insertions, 3 deletions
diff --git a/test/quorum_queue_SUITE.erl b/test/quorum_queue_SUITE.erl
index 64058ce013..eff5e7c5ce 100644
--- a/test/quorum_queue_SUITE.erl
+++ b/test/quorum_queue_SUITE.erl
@@ -43,6 +43,7 @@ groups() ->
[
{single_node, [], all_tests()},
{single_node, [], memory_tests()},
+ {single_node, [], [node_removal_is_quorum_critical]},
{unclustered, [], [
{cluster_size_2, [], [add_member]}
]},
@@ -56,7 +57,8 @@ groups() ->
delete_member_classic,
delete_member_queue_not_found,
delete_member,
- delete_member_not_a_member]
+ delete_member_not_a_member,
+ node_removal_is_quorum_critical]
++ all_tests()},
{cluster_size_2, [], memory_tests()},
{cluster_size_3, [], [
@@ -74,12 +76,14 @@ groups() ->
shrink_all,
rebalance,
file_handle_reservations,
- file_handle_reservations_above_limit
+ file_handle_reservations_above_limit,
+ node_removal_is_not_quorum_critical
]},
{cluster_size_5, [], [start_queue,
start_queue_concurrent,
quorum_cluster_size_3,
- quorum_cluster_size_7
+ quorum_cluster_size_7,
+ node_removal_is_not_quorum_critical
]},
{clustered_with_partitions, [], [
reconnect_consumer_and_publish,
@@ -1387,6 +1391,29 @@ delete_member_not_a_member(Config) ->
rpc:call(Server, rabbit_quorum_queue, delete_member,
[<<"/">>, QQ, Server])).
+%% These tests check if node removal would cause any queues to lose (or not lose)
+%% their quorum. See rabbitmq/rabbitmq-cli#389 for background.
+
+node_removal_is_quorum_critical(Config) ->
+ [Server | _] = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ QName = ?config(queue_name, Config),
+ ?assertEqual({'queue.declare_ok', QName, 0, 0},
+ declare(Ch, QName, [{<<"x-queue-type">>, longstr, <<"quorum">>}])),
+ timer:sleep(100),
+ Qs = rpc:call(Server, rabbit_quorum_queue, list_with_minimum_quorum, []),
+ ?assertEqual([QName], queue_names(Qs)).
+
+node_removal_is_not_quorum_critical(Config) ->
+ [Server | _] = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ QName = ?config(queue_name, Config),
+ ?assertEqual({'queue.declare_ok', QName, 0, 0},
+ declare(Ch, QName, [{<<"x-queue-type">>, longstr, <<"quorum">>}])),
+ timer:sleep(100),
+ Qs = rpc:call(Server, rabbit_quorum_queue, list_with_minimum_quorum, []),
+ ?assertEqual([], Qs).
+
file_handle_reservations(Config) ->
Servers = [Server1 | _] = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
Ch = rabbit_ct_client_helpers:open_channel(Config, Server1),
@@ -2407,3 +2434,9 @@ wait_for_consensus(Name, Config) ->
Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
RaName = ra_name(Name),
{ok, _, _} = ra:members({RaName, Server}).
+
+queue_names(Records) ->
+ [begin
+ #resource{name = Name} = amqqueue:get_name(Q),
+ Name
+ end || Q <- Records].