diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_topic_permissions_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_topic_permissions_command.ex index 022e9aa356..e121b70120 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_topic_permissions_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/set_topic_permissions_command.ex @@ -29,25 +29,25 @@ defmodule RabbitMQ.CLI.Ctl.Commands.SetTopicPermissionsCommand do def validate([], _) do {:validation_failure, :not_enough_args} end - def validate([_|_] = args, _) when length(args) < 3 do + def validate([_|_] = args, _) when length(args) < 4 do {:validation_failure, :not_enough_args} end - def validate([_|_] = args, _) when length(args) > 3 do + def validate([_|_] = args, _) when length(args) > 4 do {:validation_failure, :too_many_args} end def validate(_, _), do: :ok - def run([user, exchange, pattern], %{node: node_name, vhost: vhost}) do + def run([user, exchange, writePerm, readPerm], %{node: node_name, vhost: vhost}) do :rabbit_misc.rpc_call(node_name, :rabbit_auth_backend_internal, :set_topic_permissions, - [user, vhost, exchange, pattern, Helpers.cli_acting_user()] + [user, vhost, exchange, writePerm, readPerm, Helpers.cli_acting_user()] ) end - def usage, do: "set_topic_permissions [-p ] " + def usage, do: "set_topic_permissions [-p ] " - def banner([user, exchange, _], %{vhost: vhost}), do: "Setting topic permissions on \"#{exchange}\" for user \"#{user}\" in vhost \"#{vhost}\" ..." + def banner([user, exchange, _, _], %{vhost: vhost}), do: "Setting topic permissions on \"#{exchange}\" for user \"#{user}\" in vhost \"#{vhost}\" ..." end diff --git a/deps/rabbitmq_cli/test/clear_topic_permissions_command_test.exs b/deps/rabbitmq_cli/test/clear_topic_permissions_command_test.exs index cb0a19c834..ea6647cc3e 100644 --- a/deps/rabbitmq_cli/test/clear_topic_permissions_command_test.exs +++ b/deps/rabbitmq_cli/test/clear_topic_permissions_command_test.exs @@ -39,8 +39,8 @@ defmodule ClearTopicPermissionsTest do end setup context do - set_topic_permissions(@user, @specific_vhost, "amq.topic", "^a") - set_topic_permissions(@user, @specific_vhost, "topic1", "^a") + set_topic_permissions(@user, @specific_vhost, "amq.topic", "^a", "^b") + set_topic_permissions(@user, @specific_vhost, "topic1", "^a", "^b") { :ok, opts: %{node: get_rabbit_hostname, vhost: context[:vhost]} diff --git a/deps/rabbitmq_cli/test/list_topic_permissions_command_test.exs b/deps/rabbitmq_cli/test/list_topic_permissions_command_test.exs index e1aa9e2c13..27308a6420 100644 --- a/deps/rabbitmq_cli/test/list_topic_permissions_command_test.exs +++ b/deps/rabbitmq_cli/test/list_topic_permissions_command_test.exs @@ -32,8 +32,8 @@ defmodule ListTopicPermissionsCommandTest do add_vhost(@vhost) add_user(@user, @password) - set_topic_permissions(@user, @vhost, "amq.topic", "^a") - set_topic_permissions(@user, @vhost, "topic1", "^a") + set_topic_permissions(@user, @vhost, "amq.topic", "^a", "^b") + set_topic_permissions(@user, @vhost, "topic1", "^a", "^b") on_exit([], fn -> clear_topic_permissions(@user, @vhost) @@ -82,8 +82,8 @@ defmodule ListTopicPermissionsCommandTest do permissions = @command.run([], Map.merge(context[:opts], %{vhost: @vhost})) assert Enum.count(permissions) == 2 assert Enum.sort(permissions) == [ - [user: @user, exchange: "amq.topic", pattern: "^a"], - [user: @user, exchange: "topic1", pattern: "^a"] + [user: @user, exchange: "amq.topic", write: "^a", read: "^b"], + [user: @user, exchange: "topic1", write: "^a", read: "^b"] ] end diff --git a/deps/rabbitmq_cli/test/list_user_topic_permissions_command_test.exs b/deps/rabbitmq_cli/test/list_user_topic_permissions_command_test.exs index ff123c88fa..e11bf714f0 100644 --- a/deps/rabbitmq_cli/test/list_user_topic_permissions_command_test.exs +++ b/deps/rabbitmq_cli/test/list_user_topic_permissions_command_test.exs @@ -24,8 +24,8 @@ defmodule ListUserTopicPermissionsCommandTest do RabbitMQ.CLI.Core.Distribution.start() :net_kernel.connect_node(get_rabbit_hostname) - set_topic_permissions("guest", "/", "amq.topic", "^a") - set_topic_permissions("guest", "/", "topic1", "^a") + set_topic_permissions("guest", "/", "amq.topic", "^a", "^b") + set_topic_permissions("guest", "/", "topic1", "^a", "^b") on_exit([], fn -> clear_topic_permissions("guest", "/") diff --git a/deps/rabbitmq_cli/test/set_topic_permissions_command_test.exs b/deps/rabbitmq_cli/test/set_topic_permissions_command_test.exs index 6a9fa0ee04..d9af72336f 100644 --- a/deps/rabbitmq_cli/test/set_topic_permissions_command_test.exs +++ b/deps/rabbitmq_cli/test/set_topic_permissions_command_test.exs @@ -63,7 +63,8 @@ defmodule SetTopicPermissionsCommandTest do assert @command.validate([], %{}) == {:validation_failure, :not_enough_args} assert @command.validate(["insufficient"], %{}) == {:validation_failure, :not_enough_args} assert @command.validate(["not", "enough"], %{}) == {:validation_failure, :not_enough_args} - assert @command.validate(["this", "is", "too", "many"], %{}) == {:validation_failure, :too_many_args} + assert @command.validate(["still", "not", "enough"], %{}) == {:validation_failure, :not_enough_args} + assert @command.validate(["this", "is", "way", "too", "many"], %{}) == {:validation_failure, :too_many_args} end @tag user: @user, vhost: @vhost @@ -71,11 +72,12 @@ defmodule SetTopicPermissionsCommandTest do vhost_opts = Map.merge(context[:opts], %{vhost: context[:vhost]}) assert @command.run( - [context[:user], "amq.topic", "^a"], + [context[:user], "amq.topic", "^a", "^b"], vhost_opts ) == :ok - assert List.first(list_user_topic_permissions(context[:user]))[:pattern] == "^a" + assert List.first(list_user_topic_permissions(context[:user]))[:write] == "^a" + assert List.first(list_user_topic_permissions(context[:user]))[:read] == "^b" end test "run: throws a badrpc when instructed to contact an unreachable RabbitMQ node" do @@ -83,13 +85,13 @@ defmodule SetTopicPermissionsCommandTest do :net_kernel.connect_node(target) opts = %{node: target, vhost: @vhost} - assert @command.run([@user, "amq.topic", "^a"], opts) == {:badrpc, :nodedown} + assert @command.run([@user, "amq.topic", "^a", "^b"], opts) == {:badrpc, :nodedown} end @tag user: "interloper", vhost: @root test "run: an invalid user returns a no-such-user error", context do assert @command.run( - [context[:user], "amq.topic", "^a"], + [context[:user], "amq.topic", "^a", "^b"], context[:opts] ) == {:error, {:no_such_user, context[:user]}} end @@ -99,7 +101,7 @@ defmodule SetTopicPermissionsCommandTest do vhost_opts = Map.merge(context[:opts], %{vhost: context[:vhost]}) assert @command.run( - [context[:user], "amq.topic", "^a"], + [context[:user], "amq.topic", "^a", "^b"], vhost_opts ) == {:error, {:no_such_vhost, context[:vhost]}} @@ -110,7 +112,7 @@ defmodule SetTopicPermissionsCommandTest do test "run: invalid regex patterns return error", context do n = Enum.count(list_user_topic_permissions(context[:user])) {:error, {:invalid_regexp, _, _}} = @command.run( - [context[:user], "amq.topic", "["], + [context[:user], "amq.topic", "[", "^b"], context[:opts] ) assert Enum.count(list_user_topic_permissions(context[:user])) == n @@ -120,7 +122,7 @@ defmodule SetTopicPermissionsCommandTest do test "banner", context do vhost_opts = Map.merge(context[:opts], %{vhost: context[:vhost]}) - assert @command.banner([context[:user], "amq.topic", "^a"], vhost_opts) + assert @command.banner([context[:user], "amq.topic", "^a", "^b"], vhost_opts) =~ ~r/Setting topic permissions on \"amq.topic\" for user \"#{context[:user]}\" in vhost \"#{context[:vhost]}\" \.\.\./ end end diff --git a/deps/rabbitmq_cli/test/test_helper.exs b/deps/rabbitmq_cli/test/test_helper.exs index 04865d16df..73a9fe6beb 100644 --- a/deps/rabbitmq_cli/test/test_helper.exs +++ b/deps/rabbitmq_cli/test/test_helper.exs @@ -174,12 +174,12 @@ defmodule TestHelper do ) end - def set_topic_permissions(user, vhost, exchange, pattern) do + def set_topic_permissions(user, vhost, exchange, writePerm, readPerm) do :rpc.call( get_rabbit_hostname, :rabbit_auth_backend_internal, :set_topic_permissions, - [user, vhost, exchange, pattern, "acting-user"], + [user, vhost, exchange, writePerm, readPerm, "acting-user"], :infinity ) end