summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2010-06-15 18:59:39 +0100
committerMatthew Sackman <matthew@rabbitmq.com>2010-06-15 18:59:39 +0100
commit0e421723c045973a31de184de4cd22f21cb0f325 (patch)
tree373979e1070824421d21db5a0606acbea3d2d6ec
parent74f5c9ca871208523454fbd3be5def4cc21a98c9 (diff)
downloadrabbitmq-server-git-0e421723c045973a31de184de4cd22f21cb0f325.tar.gz
Improved test coverage of the queue index walker
-rw-r--r--src/rabbit_amqqueue.erl2
-rw-r--r--src/rabbit_tests.erl39
2 files changed, 35 insertions, 6 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index 3c9c41bdeb..1289144704 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -121,7 +121,7 @@
start() ->
DurableQueues = find_durable_queues(),
- {ok, BQ} = application:get_env(backing_queue_module),
+ {ok, BQ} = application:get_env(rabbit, backing_queue_module),
ok = BQ:start([QName || #amqqueue{name = QName} <- DurableQueues]),
{ok,_} = supervisor:start_child(
rabbit_sup,
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl
index 7ce03e5d6d..d49208c366 100644
--- a/src/rabbit_tests.erl
+++ b/src/rabbit_tests.erl
@@ -1313,7 +1313,8 @@ test_backing_queue() ->
{ok, rabbit_variable_queue} ->
passed = test_msg_store(),
passed = test_queue_index(),
- passed = test_variable_queue();
+ passed = test_variable_queue(),
+ passed = test_queue_recover();
_ ->
passed
end.
@@ -1518,10 +1519,10 @@ test_msg_store() ->
passed.
queue_name(Name) ->
- rabbit_misc:r(<<"/">>, queue, term_to_binary(Name)).
+ rabbit_misc:r(<<"/">>, queue, Name).
test_queue() ->
- queue_name(test).
+ queue_name(<<"test">>).
empty_test_queue() ->
ok = rabbit_variable_queue:start([]),
@@ -1767,7 +1768,7 @@ test_variable_queue_dynamic_duration_change() ->
VQ10 = rabbit_variable_queue:handle_pre_hibernate(VQ9),
{empty, VQ11} = rabbit_variable_queue:fetch(true, VQ10),
- rabbit_variable_queue:terminate(VQ11),
+ rabbit_variable_queue:delete_and_terminate(VQ11),
passed.
@@ -1833,6 +1834,34 @@ test_variable_queue_partial_segments_delta_thing() ->
VQ8 = rabbit_variable_queue:ack(AckTags ++ AckTags1, VQ7),
%% should be empty now
{empty, VQ9} = rabbit_variable_queue:fetch(true, VQ8),
- rabbit_variable_queue:terminate(VQ9),
+ rabbit_variable_queue:delete_and_terminate(VQ9),
passed.
+
+test_queue_recover() ->
+ Count = 2*rabbit_queue_index:next_segment_boundary(0),
+ #amqqueue { pid = QPid, name = QName } = Q =
+ rabbit_amqqueue:declare(test_queue(), true, false, [], none),
+ Msg = fun() -> rabbit_basic:message(
+ rabbit_misc:r(<<>>, exchange, <<>>),
+ <<>>, #'P_basic'{delivery_mode = 2}, <<>>) end,
+ Delivery = #delivery{mandatory = false,
+ immediate = false,
+ txn = none,
+ sender = self(),
+ message = Msg()},
+ [true = rabbit_amqqueue:deliver(QPid, Delivery) || _ <- lists:seq(1, Count)],
+ rabbit_amqqueue:stat(Q),
+ exit(QPid, shutdown),
+ MRef = erlang:monitor(process, QPid),
+ receive {'DOWN', MRef, process, QPid, _Info} -> ok
+ after 10000 -> exit(timeout_waiting_for_queue_death)
+ end,
+ ok = stop_msg_store(),
+ ok = supervisor:terminate_child(rabbit_sup, rabbit_amqqueue_sup),
+ ok = supervisor:delete_child(rabbit_sup, rabbit_amqqueue_sup),
+ ok = rabbit_amqqueue:start(),
+ {ok, Count} = rabbit_amqqueue:with_or_die(
+ QName,
+ fun (Q1) -> rabbit_amqqueue:delete(Q1, false, false) end),
+ passed.