diff options
| author | Michael Klishin <michael@clojurewerkz.org> | 2019-12-11 05:02:46 +0300 |
|---|---|---|
| committer | Michael Klishin <michael@clojurewerkz.org> | 2019-12-12 15:58:00 +0300 |
| commit | 2962cad98247c9fdd11315742293a44eece7e598 (patch) | |
| tree | d12c5f7a290913be1c7366f4dd453069e22f43af /test | |
| parent | 25e329c63bd0a85a8da66a158ef0db3fe505f8f4 (diff) | |
| download | rabbitmq-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.erl | 39 |
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]. |
