summaryrefslogtreecommitdiff
path: root/deps/rabbitmq_cli/test/ctl/list_channels_command_test.exs
diff options
context:
space:
mode:
Diffstat (limited to 'deps/rabbitmq_cli/test/ctl/list_channels_command_test.exs')
-rw-r--r--deps/rabbitmq_cli/test/ctl/list_channels_command_test.exs118
1 files changed, 118 insertions, 0 deletions
diff --git a/deps/rabbitmq_cli/test/ctl/list_channels_command_test.exs b/deps/rabbitmq_cli/test/ctl/list_channels_command_test.exs
new file mode 100644
index 0000000000..6ccf602211
--- /dev/null
+++ b/deps/rabbitmq_cli/test/ctl/list_channels_command_test.exs
@@ -0,0 +1,118 @@
+## This Source Code Form is subject to the terms of the Mozilla Public
+## License, v. 2.0. If a copy of the MPL was not distributed with this
+## file, You can obtain one at https://mozilla.org/MPL/2.0/.
+##
+## Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved.
+
+defmodule ListChannelsCommandTest do
+ use ExUnit.Case, async: false
+ import TestHelper
+
+ @command RabbitMQ.CLI.Ctl.Commands.ListChannelsCommand
+ @default_timeout :infinity
+
+ setup_all do
+ RabbitMQ.CLI.Core.Distribution.start()
+
+ close_all_connections(get_rabbit_hostname())
+
+ on_exit([], fn ->
+ close_all_connections(get_rabbit_hostname())
+ end)
+
+ :ok
+ end
+
+ setup context do
+ {
+ :ok,
+ opts: %{
+ node: get_rabbit_hostname(),
+ timeout: context[:test_timeout] || @default_timeout
+ }
+ }
+ end
+
+ test "merge_defaults: default channel info keys are pid, user, consumer_count, and messages_unacknowledged", context do
+ assert match?({~w(pid user consumer_count messages_unacknowledged), _}, @command.merge_defaults([], context[:opts]))
+ end
+
+ test "validate: returns bad_info_key on a single bad arg", context do
+ assert @command.validate(["quack"], context[:opts]) ==
+ {:validation_failure, {:bad_info_key, [:quack]}}
+ end
+
+ test "validate: returns multiple bad args return a list of bad info key values", context do
+ assert @command.validate(["quack", "oink"], context[:opts]) ==
+ {:validation_failure, {:bad_info_key, [:oink, :quack]}}
+ end
+
+ test "validate: returns bad_info_key on mix of good and bad args", context do
+ assert @command.validate(["quack", "pid"], context[:opts]) ==
+ {:validation_failure, {:bad_info_key, [:quack]}}
+ assert @command.validate(["user", "oink"], context[:opts]) ==
+ {:validation_failure, {:bad_info_key, [:oink]}}
+ assert @command.validate(["user", "oink", "pid"], context[:opts]) ==
+ {:validation_failure, {:bad_info_key, [:oink]}}
+ end
+
+ @tag test_timeout: 0
+ test "run: zero timeout causes command to return badrpc", context do
+ assert run_command_to_list(@command, [["user"], context[:opts]]) ==
+ [{:badrpc, {:timeout, 0.0}}]
+ end
+
+ test "run: multiple channels on multiple connections", context do
+ node_name = get_rabbit_hostname()
+ close_all_connections(node_name)
+ existent_channels = :rabbit_misc.rpc_call(node_name,:rabbit_channel, :list, [])
+ with_channel("/", fn(_channel1) ->
+ with_channel("/", fn(_channel2) ->
+ all_channels = run_command_to_list(@command, [["pid", "user", "connection"], context[:opts]])
+ channels = Enum.filter(all_channels,
+ fn(ch) ->
+ not Enum.member?(existent_channels, ch[:pid])
+ end)
+ chan1 = Enum.at(channels, 0)
+ chan2 = Enum.at(channels, 1)
+ assert Keyword.keys(chan1) == ~w(pid user connection)a
+ assert Keyword.keys(chan2) == ~w(pid user connection)a
+ assert "guest" == chan1[:user]
+ assert "guest" == chan2[:user]
+ assert chan1[:pid] !== chan2[:pid]
+ end)
+ end)
+ end
+
+ test "run: multiple channels on single connection", context do
+ node_name = get_rabbit_hostname()
+ close_all_connections(get_rabbit_hostname())
+ with_connection("/", fn(conn) ->
+ existent_channels = :rabbit_misc.rpc_call(node_name,:rabbit_channel, :list, [])
+ {:ok, _} = AMQP.Channel.open(conn)
+ {:ok, _} = AMQP.Channel.open(conn)
+ all_channels = run_command_to_list(@command, [["pid", "user", "connection"], context[:opts]])
+ channels = Enum.filter(all_channels,
+ fn(ch) ->
+ not Enum.member?(existent_channels, ch[:pid])
+ end)
+
+ chan1 = Enum.at(channels, 0)
+ chan2 = Enum.at(channels, 1)
+ assert Keyword.keys(chan1) == ~w(pid user connection)a
+ assert Keyword.keys(chan2) == ~w(pid user connection)a
+ assert "guest" == chan1[:user]
+ assert "guest" == chan2[:user]
+ assert chan1[:pid] !== chan2[:pid]
+ end)
+ end
+
+ test "run: info keys order is preserved", context do
+ close_all_connections(get_rabbit_hostname())
+ with_channel("/", fn(_channel) ->
+ channels = run_command_to_list(@command, [~w(connection vhost name pid number user), context[:opts]])
+ chan = Enum.at(channels, 0)
+ assert Keyword.keys(chan) == ~w(connection vhost name pid number user)a
+ end)
+ end
+end