parent
cbab77e34c
commit
57f2eff218
|
|
@ -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 <vhost>] <user> <exchange> <pattern>"
|
||||
def usage, do: "set_topic_permissions [-p <vhost>] <user> <exchange> <write> <read>"
|
||||
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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]}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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", "/")
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue