List excahnges command test
This commit is contained in:
parent
670e7bbe47
commit
7c16aa3214
|
|
@ -0,0 +1,170 @@
|
|||
defmodule ListExchangesCommandTest do
|
||||
use ExUnit.Case, async: false
|
||||
import ExUnit.CaptureIO
|
||||
import TestHelper
|
||||
|
||||
@vhost "test1"
|
||||
@user "guest"
|
||||
@root "/"
|
||||
@default_timeout :infinity
|
||||
@default_exchanges [{"amq.direct", :direct},
|
||||
{"amq.fanout", :fanout},
|
||||
{"amq.match", :headers},
|
||||
{"amq.rabbitmq.trace", :topic},
|
||||
{"amq.headers", :headers},
|
||||
{"amq.topic", :topic},
|
||||
{"", :direct}]
|
||||
|
||||
defp default_exchange_names() do
|
||||
{names, _types} = Enum.unzip(@default_exchanges)
|
||||
names
|
||||
end
|
||||
|
||||
setup_all do
|
||||
:net_kernel.start([:rabbitmqctl, :shortnames])
|
||||
:net_kernel.connect_node(get_rabbit_hostname)
|
||||
|
||||
on_exit([], fn ->
|
||||
:erlang.disconnect_node(get_rabbit_hostname)
|
||||
:net_kernel.stop()
|
||||
end)
|
||||
|
||||
:ok
|
||||
end
|
||||
|
||||
setup context do
|
||||
add_vhost @vhost
|
||||
set_permissions @user, @vhost, [".*", ".*", ".*"]
|
||||
on_exit(fn ->
|
||||
delete_vhost @vhost
|
||||
end)
|
||||
{
|
||||
:ok,
|
||||
opts: %{
|
||||
quiet: true,
|
||||
node: get_rabbit_hostname,
|
||||
timeout: context[:test_timeout] || @default_timeout,
|
||||
param: @vhost
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@tag test_timeout: :infinity
|
||||
test "return bad_info_key on a single bad arg", context do
|
||||
capture_io(fn ->
|
||||
assert ListExchangesCommand.run(["quack"], context[:opts]) ==
|
||||
{:error, {:bad_info_key, [:quack]}}
|
||||
end)
|
||||
end
|
||||
|
||||
@tag test_timeout: :infinity
|
||||
test "multiple bad args return a list of bad info key values", context do
|
||||
capture_io(fn ->
|
||||
assert ListExchangesCommand.run(["quack", "oink"], context[:opts]) ==
|
||||
{:error, {:bad_info_key, [:quack, :oink]}}
|
||||
end)
|
||||
end
|
||||
|
||||
@tag test_timeout: :infinity
|
||||
test "return bad_info_key on mix of good and bad args", context do
|
||||
capture_io(fn ->
|
||||
assert ListExchangesCommand.run(["quack", "type"], context[:opts]) ==
|
||||
{:error, {:bad_info_key, [:quack]}}
|
||||
assert ListExchangesCommand.run(["name", "oink"], context[:opts]) ==
|
||||
{:error, {:bad_info_key, [:oink]}}
|
||||
assert ListExchangesCommand.run(["name", "oink", "type"], context[:opts]) ==
|
||||
{:error, {:bad_info_key, [:oink]}}
|
||||
end)
|
||||
end
|
||||
|
||||
@tag test_timeout: 0
|
||||
test "zero timeout causes command to return badrpc", context do
|
||||
capture_io(fn ->
|
||||
assert ListExchangesCommand.run([], context[:opts]) ==
|
||||
[{:badrpc, :timeout}]
|
||||
end)
|
||||
end
|
||||
|
||||
test "show default exchanges by default", context do
|
||||
capture_io(fn ->
|
||||
assert MapSet.new(ListExchangesCommand.run(["name"], context[:opts])) ==
|
||||
MapSet.new(for {ex_name, ex_type} <- @default_exchanges, do: [name: ex_name])
|
||||
end)
|
||||
end
|
||||
|
||||
test "no info keys returns name and type", context do
|
||||
exchange_name = "test_exchange"
|
||||
declare_exchange(exchange_name, @vhost)
|
||||
capture_io(fn ->
|
||||
assert MapSet.new(ListExchangesCommand.run([], context[:opts])) ==
|
||||
MapSet.new(
|
||||
for({ex_name, ex_type} <- @default_exchanges, do: [name: ex_name, type: ex_type]) ++
|
||||
[[name: exchange_name, type: :direct]])
|
||||
end)
|
||||
end
|
||||
|
||||
test "list multiple excahnges", context do
|
||||
declare_exchange("test_exchange_1", @vhost, :direct)
|
||||
declare_exchange("test_exchange_2", @vhost, :fanout)
|
||||
capture_io(fn ->
|
||||
non_default_exchanges = ListExchangesCommand.run(["name", "type"], context[:opts])
|
||||
|> without_default_exchanges
|
||||
assert non_default_exchanges ==
|
||||
[[name: "test_exchange_1", type: :direct],
|
||||
[name: "test_exchange_2", type: :fanout]]
|
||||
end)
|
||||
end
|
||||
|
||||
test "info keys filter single key", context do
|
||||
declare_exchange("test_exchange_1", @vhost)
|
||||
declare_exchange("test_exchange_2", @vhost)
|
||||
capture_io(fn ->
|
||||
non_default_exchanges = ListExchangesCommand.run(["name"], context[:opts])
|
||||
|> without_default_exchanges
|
||||
assert non_default_exchanges ==
|
||||
[[name: "test_exchange_1"],
|
||||
[name: "test_exchange_2"]]
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
test "info keys add additional keys", context do
|
||||
declare_exchange("durable_exchange", @vhost, :direct, true)
|
||||
declare_exchange("auto_delete_exchange", @vhost, :fanout, false, true)
|
||||
capture_io(fn ->
|
||||
non_default_exchanges = ListExchangesCommand.run(["name", "type", "durable", "auto_delete"], context[:opts])
|
||||
|> without_default_exchanges
|
||||
assert non_default_exchanges ==
|
||||
[[name: "auto_delete_exchange", type: :fanout, durable: false, auto_delete: true],
|
||||
[name: "durable_exchange", type: :direct, durable: true, auto_delete: false]]
|
||||
end)
|
||||
end
|
||||
|
||||
test "specifying a vhost returns the targeted vhost exchanges", context do
|
||||
other_vhost = "other_vhost"
|
||||
add_vhost other_vhost
|
||||
on_exit(fn ->
|
||||
delete_vhost other_vhost
|
||||
end)
|
||||
declare_exchange("test_exchange_1", @vhost)
|
||||
declare_exchange("test_exchange_2", other_vhost)
|
||||
capture_io(fn ->
|
||||
non_default_exchanges1 = ListExchangesCommand.run(["name"], context[:opts])
|
||||
|> without_default_exchanges
|
||||
|
||||
non_default_exchanges2 = ListExchangesCommand.run(["name"], %{context[:opts] | :param => other_vhost})
|
||||
|> without_default_exchanges
|
||||
|
||||
assert non_default_exchanges1 == [[name: "test_exchange_1"]]
|
||||
assert non_default_exchanges2 == [[name: "test_exchange_2"]]
|
||||
end)
|
||||
end
|
||||
|
||||
defp without_default_exchanges(xs) do
|
||||
Enum.filter(xs,
|
||||
fn(x) ->
|
||||
not Enum.member?(default_exchange_names(), x[:name])
|
||||
end)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -67,10 +67,10 @@ defmodule ListQueuesCommandTest do
|
|||
|
||||
@tag test_timeout: 0
|
||||
test "zero timeout causes command to return badrpc", context do
|
||||
# capture_io(fn ->
|
||||
capture_io(fn ->
|
||||
assert ListQueuesCommand.run([], context[:opts]) ==
|
||||
[{:badrpc, :timeout}]
|
||||
# end)
|
||||
end)
|
||||
end
|
||||
|
||||
@tag test_timeout: 1
|
||||
|
|
@ -79,10 +79,10 @@ defmodule ListQueuesCommandTest do
|
|||
for i <- 1..10000 do
|
||||
declare_queue("test_queue_" <> Integer.to_string(i), @vhost)
|
||||
end
|
||||
# capture_io(fn ->
|
||||
capture_io(fn ->
|
||||
assert ListQueuesCommand.run([], context[:opts]) ==
|
||||
[{:badrpc, {:timeout, 0.001}}]
|
||||
# end)
|
||||
end)
|
||||
end
|
||||
|
||||
test "no info keys returns names and message count", context do
|
||||
|
|
@ -90,10 +90,10 @@ defmodule ListQueuesCommandTest do
|
|||
message_count = 3
|
||||
declare_queue(queue_name, @vhost)
|
||||
publish_messages(queue_name, 3)
|
||||
# capture_io(fn ->
|
||||
assert ListQueuesCommand.run([], context[:opts]) ==
|
||||
[[name: queue_name, messages: message_count]]
|
||||
# end)
|
||||
capture_io(fn ->
|
||||
assert ListQueuesCommand.run([], context[:opts]) ==
|
||||
[[name: queue_name, messages: message_count]]
|
||||
end)
|
||||
end
|
||||
|
||||
test "return multiple queues", context do
|
||||
|
|
@ -101,11 +101,11 @@ defmodule ListQueuesCommandTest do
|
|||
publish_messages("test_queue_1", 3)
|
||||
declare_queue("test_queue_2", @vhost)
|
||||
publish_messages("test_queue_2", 1)
|
||||
# capture_io(fn ->
|
||||
assert ListQueuesCommand.run([], context[:opts]) ==
|
||||
[[name: "test_queue_1", messages: 3],
|
||||
[name: "test_queue_2", messages: 1]]
|
||||
# end)
|
||||
capture_io(fn ->
|
||||
assert ListQueuesCommand.run([], context[:opts]) ==
|
||||
[[name: "test_queue_1", messages: 3],
|
||||
[name: "test_queue_2", messages: 1]]
|
||||
end)
|
||||
end
|
||||
|
||||
test "info keys filter single key", context do
|
||||
|
|
@ -113,11 +113,11 @@ defmodule ListQueuesCommandTest do
|
|||
publish_messages("test_queue_1", 3)
|
||||
declare_queue("test_queue_2", @vhost)
|
||||
publish_messages("test_queue_2", 1)
|
||||
# capture_io(fn ->
|
||||
assert ListQueuesCommand.run(["name"], context[:opts]) ==
|
||||
[[name: "test_queue_1"],
|
||||
[name: "test_queue_2"]]
|
||||
# end)
|
||||
capture_io(fn ->
|
||||
assert ListQueuesCommand.run(["name"], context[:opts]) ==
|
||||
[[name: "test_queue_1"],
|
||||
[name: "test_queue_2"]]
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
|
|
@ -126,20 +126,60 @@ defmodule ListQueuesCommandTest do
|
|||
publish_messages("durable_queue", 3)
|
||||
declare_queue("auto_delete_queue", @vhost, false, true)
|
||||
publish_messages("auto_delete_queue", 1)
|
||||
# capture_io(fn ->
|
||||
assert Keyword.equal?(ListQueuesCommand.run(["name", "messages", "durable", "auto_delete"], context[:opts]),
|
||||
[[name: "durable_queue", messages: 3, durable: true, auto_delete: false],
|
||||
[name: "auto_delete_queue", messages: 1, durable: false, auto_delete: true]])
|
||||
# end)
|
||||
capture_io(fn ->
|
||||
assert Keyword.equal?(
|
||||
ListQueuesCommand.run(["name", "messages", "durable", "auto_delete"], context[:opts]),
|
||||
[[name: "durable_queue", messages: 3, durable: true, auto_delete: false],
|
||||
[name: "auto_delete_queue", messages: 1, durable: false, auto_delete: true]])
|
||||
end)
|
||||
end
|
||||
|
||||
test "specifying a vhost returns the targeted vhost queues", context do
|
||||
other_vhost = "other_vhost"
|
||||
add_vhost other_vhost
|
||||
on_exit(fn ->
|
||||
delete_vhost other_vhost
|
||||
end)
|
||||
declare_queue("test_queue_1", @vhost)
|
||||
declare_queue("test_queue_2", other_vhost)
|
||||
capture_io(fn ->
|
||||
assert ListQueuesCommand.run(["name"], context[:opts]) == [[name: "test_queue_1"]]
|
||||
assert ListQueuesCommand.run(["name"], %{context[:opts] | :param => other_vhost}) == [[name: "test_queue_2"]]
|
||||
end)
|
||||
end
|
||||
|
||||
# TODO: list online/offline queues. Require cluster add/remove
|
||||
# test "list online queues do not show offline queues", context do
|
||||
# other_node = @secondary_node
|
||||
# declare_queue("online_queue", @vhost, true)
|
||||
# publish_messages("online_queue", 3)
|
||||
# #declare on another node
|
||||
# declare_queue_on_node(other_node, "offline_queue", @vhost, true)
|
||||
# publish_messages("offline_queue", 3)
|
||||
# stop_node(other_node)
|
||||
|
||||
# assert ListQueuesCommand.run(["name"], %{context[:opts] | online: true}) == [[name: "online_queue"]]
|
||||
# end
|
||||
|
||||
# test "list offline queues do not show online queues", context do
|
||||
# other_node = @secondary_node
|
||||
# declare_queue("online_queue", @vhost, true)
|
||||
# publish_messages("online_queue", 3)
|
||||
# #declare on another node
|
||||
# declare_queue_on_node(other_node, "offline_queue", @vhost, true)
|
||||
# publish_messages("offline_queue", 3)
|
||||
# stop_node(other_node)
|
||||
|
||||
# assert ListQueuesCommand.run(["name"], %{context[:opts] | offline: true}) == [[name: "offline_queue"]]
|
||||
# end
|
||||
|
||||
|
||||
def publish_messages(name, count) do
|
||||
with_channel(@vhost, fn(channel) ->
|
||||
for i <- 1..count do
|
||||
AMQP.Basic.publish(channel, "", name,
|
||||
"test_message" <> Integer.to_string(i))
|
||||
end
|
||||
for i <- 1..count do
|
||||
AMQP.Basic.publish(channel, "", name,
|
||||
"test_message" <> Integer.to_string(i))
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -81,8 +81,16 @@ defmodule TestHelper do
|
|||
|
||||
def declare_queue(name, vhost, durable \\ false, auto_delete \\ false, args \\ [], owner \\ :none) do
|
||||
queue_name = :rabbit_misc.r(vhost, :queue, name)
|
||||
:rpc.call(get_rabbit_hostname, :rabbit_amqqueue, :declare,
|
||||
[queue_name, durable, auto_delete, args, owner])
|
||||
:rpc.call(get_rabbit_hostname,
|
||||
:rabbit_amqqueue, :declare,
|
||||
[queue_name, durable, auto_delete, args, owner])
|
||||
end
|
||||
|
||||
def declare_exchange(name, vhost, type \\ :direct, durable \\ false, auto_delete \\ false, internal \\ false, args \\ []) do
|
||||
exchange_name = :rabbit_misc.r(vhost, :exchange, name)
|
||||
:rpc.call(get_rabbit_hostname,
|
||||
:rabbit_exchange, :declare,
|
||||
[exchange_name, type, durable, auto_delete, internal, args])
|
||||
end
|
||||
|
||||
def list_permissions(vhost) do
|
||||
|
|
|
|||
Loading…
Reference in New Issue