summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2019-04-01 16:36:49 +0300
committerMichael Klishin <michael@clojurewerkz.org>2019-04-01 16:36:49 +0300
commita1ab9545f3644e6e14d36ff3a4223963c634fa8a (patch)
tree2f69546686838223a7bd74836ce5fd097f261bd9 /test
parent2997bc4f072cf4755a2069bab5a0b246c726a70c (diff)
downloadrabbitmq-server-git-a1ab9545f3644e6e14d36ff3a4223963c634fa8a.tar.gz
Quorum queue; make membership changes [more] idempotent
Per discussion with @kjnilsson.
Diffstat (limited to 'test')
-rw-r--r--test/quorum_queue_SUITE.erl28
1 files changed, 21 insertions, 7 deletions
diff --git a/test/quorum_queue_SUITE.erl b/test/quorum_queue_SUITE.erl
index 02616677f3..1aa5247b57 100644
--- a/test/quorum_queue_SUITE.erl
+++ b/test/quorum_queue_SUITE.erl
@@ -54,8 +54,9 @@ groups() ->
add_member_not_found,
delete_member_not_running,
delete_member_classic,
- delete_member_not_found,
- delete_member]
+ delete_member_queue_not_found,
+ delete_member,
+ delete_member_not_a_member]
++ all_tests()},
{cluster_size_2, [], memory_tests()},
{cluster_size_3, [], [
@@ -1228,7 +1229,8 @@ add_member_already_a_member(Config) ->
QQ = ?config(queue_name, Config),
?assertEqual({'queue.declare_ok', QQ, 0, 0},
declare(Ch, QQ, [{<<"x-queue-type">>, longstr, <<"quorum">>}])),
- ?assertEqual({error, already_a_member},
+ %% idempotent by design
+ ?assertEqual(ok,
rpc:call(Server, rabbit_quorum_queue, add_member,
[<<"/">>, QQ, Server])).
@@ -1266,7 +1268,8 @@ delete_member_not_running(Config) ->
QQ = ?config(queue_name, Config),
?assertEqual({'queue.declare_ok', QQ, 0, 0},
declare(Ch, QQ, [{<<"x-queue-type">>, longstr, <<"quorum">>}])),
- ?assertEqual({error, node_not_running},
+ %% it should be possible to delete members that are not online (e.g. decomissioned)
+ ?assertEqual(ok,
rpc:call(Server, rabbit_quorum_queue, delete_member,
[<<"/">>, QQ, 'rabbit@burrow'])).
@@ -1279,7 +1282,7 @@ delete_member_classic(Config) ->
rpc:call(Server, rabbit_quorum_queue, delete_member,
[<<"/">>, CQ, Server])).
-delete_member_not_found(Config) ->
+delete_member_queue_not_found(Config) ->
[Server | _] = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
QQ = ?config(queue_name, Config),
?assertEqual({error, not_found},
@@ -1295,12 +1298,23 @@ delete_member(Config) ->
timer:sleep(100),
?assertEqual(ok,
rpc:call(Server, rabbit_quorum_queue, delete_member,
+ [<<"/">>, QQ, Server])).
+
+delete_member_not_a_member(Config) ->
+ [Server | _] = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ QQ = ?config(queue_name, Config),
+ ?assertEqual({'queue.declare_ok', QQ, 0, 0},
+ declare(Ch, QQ, [{<<"x-queue-type">>, longstr, <<"quorum">>}])),
+ timer:sleep(100),
+ ?assertEqual(ok,
+ rpc:call(Server, rabbit_quorum_queue, delete_member,
[<<"/">>, QQ, Server])),
- ?assertEqual({error, not_a_member},
+ %% idempotent by design
+ ?assertEqual(ok,
rpc:call(Server, rabbit_quorum_queue, delete_member,
[<<"/">>, QQ, Server])).
-
cleanup_data_dir(Config) ->
%% This test is slow, but also checks that we handle properly errors when
%% trying to delete a queue in minority. A case clause there had gone