diff options
author | Matthew Sackman <matthew@rabbitmq.com> | 2011-02-08 16:47:57 +0000 |
---|---|---|
committer | Matthew Sackman <matthew@rabbitmq.com> | 2011-02-08 16:47:57 +0000 |
commit | a807bfe03cb685bcbb3c569a4c2951fe87985c88 (patch) | |
tree | 3dda7af7d53cd5598676aef59d33cedb8bd49b98 /src/rabbit_tests.erl | |
parent | ed1473c26892d0ab07d7f704ca8afb91c6698c21 (diff) | |
download | rabbitmq-server-a807bfe03cb685bcbb3c569a4c2951fe87985c88.tar.gz |
Added test which covers the mysteriously dead queue on queue declaration, and hence misc:is_process_alivebug23806
Diffstat (limited to 'src/rabbit_tests.erl')
-rw-r--r-- | src/rabbit_tests.erl | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl index 9beee4cb..58c369b5 100644 --- a/src/rabbit_tests.erl +++ b/src/rabbit_tests.erl @@ -82,6 +82,7 @@ run_cluster_dependent_tests(SecondaryNode) -> passed = test_delegates_async(SecondaryNode), passed = test_delegates_sync(SecondaryNode), passed = test_queue_cleanup(SecondaryNode), + passed = test_declare_on_dead_queue(SecondaryNode), %% we now run the tests remotely, so that code coverage on the %% local node picks up more of the delegate @@ -90,12 +91,13 @@ run_cluster_dependent_tests(SecondaryNode) -> Remote = spawn(SecondaryNode, fun () -> Rs = [ test_delegates_async(Node), test_delegates_sync(Node), - test_queue_cleanup(Node) ], + test_queue_cleanup(Node), + test_declare_on_dead_queue(Node) ], Self ! {self(), Rs} end), receive {Remote, Result} -> - Result = [passed, passed, passed] + Result = lists:duplicate(length(Result), passed) after 30000 -> throw(timeout) end, @@ -1310,6 +1312,32 @@ test_queue_cleanup(_SecondaryNode) -> end, passed. +test_declare_on_dead_queue(SecondaryNode) -> + QueueName = rabbit_misc:r(<<"/">>, queue, ?CLEANUP_QUEUE_NAME), + Self = self(), + Pid = spawn(SecondaryNode, + fun () -> + {new, #amqqueue{name = QueueName, pid = QPid}} = + rabbit_amqqueue:declare(QueueName, false, false, [], + none), + exit(QPid, kill), + Self ! {self(), killed, QPid} + end), + receive + {Pid, killed, QPid} -> + {existing, #amqqueue{name = QueueName, + pid = QPid}} = + rabbit_amqqueue:declare(QueueName, false, false, [], none), + false = rabbit_misc:is_process_alive(QPid), + {new, Q} = rabbit_amqqueue:declare(QueueName, false, false, [], + none), + true = rabbit_misc:is_process_alive(Q#amqqueue.pid), + {ok, 0} = rabbit_amqqueue:delete(Q, false, false), + passed + after 2000 -> + throw(failed_to_create_and_kill_queue) + end. + %--------------------------------------------------------------------- control_action(Command, Args) -> |