summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDiana Corbacho <diana@rabbitmq.com>2018-12-03 14:54:34 +0000
committerDiana Corbacho <diana@rabbitmq.com>2018-12-03 14:54:34 +0000
commitcddcdba48dacd8cc4e20a1b11d8df8b156a9878a (patch)
treeb6e88be82dd5529be857b8d6dbea12f5bbb0460e /test
parent08121376120e3ec936344bf39d80aa9448218d80 (diff)
downloadrabbitmq-server-git-cddcdba48dacd8cc4e20a1b11d8df8b156a9878a.tar.gz
Implement delete_immediately_by_resource
delete_immediately doesn't work for qq as we cannot easily retrieve resource name from qpid. Instead, delete_immediately_by_resource receives a resource record which should make it easier for both users and developers. Usage: `rabbitmqctl eval 'rabbit_amqqueue:delete_immediately([rabbit_misc:r(<<"VHOST_NAME">>, queue, <<"QUEUE_NAME">>)]).'`
Diffstat (limited to 'test')
-rw-r--r--test/quorum_queue_SUITE.erl43
1 files changed, 42 insertions, 1 deletions
diff --git a/test/quorum_queue_SUITE.erl b/test/quorum_queue_SUITE.erl
index 19f3a66a1d..531b645774 100644
--- a/test/quorum_queue_SUITE.erl
+++ b/test/quorum_queue_SUITE.erl
@@ -108,7 +108,9 @@ all_tests() ->
cancel_sync_queue,
basic_recover,
idempotent_recover,
- vhost_with_quorum_queue_is_deleted
+ vhost_with_quorum_queue_is_deleted,
+ delete_immediately,
+ delete_immediately_by_resource
].
%% -------------------------------------------------------------------
@@ -1633,6 +1635,45 @@ basic_recover(Config) ->
amqp_channel:cast(Ch, #'basic.recover'{requeue = true}),
wait_for_messages_ready(Servers, RaName, 1),
wait_for_messages_pending_ack(Servers, RaName, 0).
+
+delete_immediately(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ QQ = ?config(queue_name, Config),
+ Args = [{<<"x-queue-type">>, longstr, <<"quorum">>}],
+ ?assertEqual({'queue.declare_ok', QQ, 0, 0},
+ declare(Ch, QQ, Args)),
+
+ Cmd = ["eval", "{ok, Q} = rabbit_amqqueue:lookup(rabbit_misc:r(<<\"/\">>, queue, <<\"" ++ binary_to_list(QQ) ++ "\">>)), Pid = rabbit_amqqueue:pid_of(Q), rabbit_amqqueue:delete_immediately([Pid])."],
+ {ok, Msg} = rabbit_ct_broker_helpers:rabbitmqctl(Config, 0, Cmd),
+ ?assertEqual(match, re:run(Msg, ".*error.*", [{capture, none}])),
+
+ ?assertEqual({'queue.declare_ok', QQ, 0, 0},
+ amqp_channel:call(Ch, #'queue.declare'{queue = QQ,
+ durable = true,
+ passive = true,
+ auto_delete = false,
+ arguments = Args})).
+
+delete_immediately_by_resource(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, 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">>}])),
+
+ Cmd2 = ["eval", "rabbit_amqqueue:delete_immediately_by_resource([rabbit_misc:r(<<\"/\">>, queue, <<\"" ++ binary_to_list(QQ) ++ "\">>)])."],
+ ?assertEqual({ok, "ok\n"}, rabbit_ct_broker_helpers:rabbitmqctl(Config, 0, Cmd2)),
+
+ %% Check that the application and process are down
+ wait_until(fun() ->
+ [] == rpc:call(Server, supervisor, which_children, [ra_server_sup])
+ end),
+ ?assertMatch({ra, _, _}, lists:keyfind(ra, 1,
+ rpc:call(Server, application, which_applications, []))).
+
%%----------------------------------------------------------------------------
declare(Ch, Q) ->