summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Cogoluègnes <acogoluegnes@gmail.com>2016-12-28 09:28:23 +0100
committerArnaud Cogoluègnes <acogoluegnes@gmail.com>2016-12-28 09:28:23 +0100
commit868573a77513057e80f2e884b2d8baf438d70639 (patch)
tree5981d0bc5aeabd76eaf1ffcd34cd53479659f639
parentfea4fdde4ceae88d818ac2847677462a4aced62b (diff)
downloadrabbitmq-server-git-868573a77513057e80f2e884b2d8baf438d70639.tar.gz
Move topic permission tests in their own suite
References #505
-rw-r--r--test/topic_permission_SUITE.erl220
-rw-r--r--test/unit_SUITE.erl181
2 files changed, 222 insertions, 179 deletions
diff --git a/test/topic_permission_SUITE.erl b/test/topic_permission_SUITE.erl
new file mode 100644
index 0000000000..f408e854d4
--- /dev/null
+++ b/test/topic_permission_SUITE.erl
@@ -0,0 +1,220 @@
+%% The contents of this file are subject to the Mozilla Public License
+%% Version 1.1 (the "License"); you may not use this file except in
+%% compliance with the License. You may obtain a copy of the License at
+%% http://www.mozilla.org/MPL/
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+%% License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% The Original Code is RabbitMQ.
+%%
+%% The Initial Developer of the Original Code is GoPivotal, Inc.
+%% Copyright (c) 2011-2016 Pivotal Software, Inc. All rights reserved.
+%%
+
+-module(topic_permission_SUITE).
+
+-include_lib("common_test/include/ct.hrl").
+-include_lib("rabbit_common/include/rabbit.hrl").
+
+-compile(export_all).
+
+all() ->
+ [
+ {group, sequential_tests}
+ ].
+
+groups() -> [
+ {sequential_tests, [], [
+ topic_permission_database_access,
+ topic_permission_checks
+ ]}
+ ].
+
+init_per_group(_, Config) -> Config.
+end_per_group(_, Config) -> Config.
+
+init_per_testcase(Testcase, Config) when Testcase =:= topic_permission_database_access;
+ Testcase =:= topic_permission_checks ->
+ mnesia:start(),
+ create_tables([rabbit_topic_permission, rabbit_user, rabbit_vhost]),
+ {ok, Pool} = worker_pool_sup:start_link(1, worker_pool:default_pool()),
+ {ok, Registry} = rabbit_registry:start_link(),
+ {ok, Event} = rabbit_event:start_link(),
+ Config1 = rabbit_ct_helpers:set_config(Config,[
+ {pool_sup, Pool}, {registry_sup, Registry},
+ {event_sup, Event}
+ ]),
+ file_handle_cache_stats:init(),
+ Config1;
+init_per_testcase(_Testcase, Config) ->
+ Config.
+
+create_tables(Tables) ->
+ AllTables = rabbit_table:definitions(),
+ [begin
+ ShortDefinition = [begin
+ {Field, proplists:get_value(Field, Definition)}
+ end || Field <- [record_name, attributes]],
+ mnesia:create_table(Name, ShortDefinition)
+ end || {Name, Definition} <- AllTables, proplists:is_defined(Name, Tables)].
+
+end_per_testcase(Testcase, Config) when Testcase =:= topic_permission_database_access;
+ Testcase =:= topic_permission_checks ->
+ mnesia:stop(),
+ [begin
+ Sup = ?config(SupEntry, Config),
+ unlink(Sup),
+ exit(Sup, kill)
+ end || SupEntry <- [pool_sup, registry_sup, event_sup]],
+ ok;
+end_per_testcase(_TC, _Config) ->
+ ok.
+
+topic_permission_database_access(_Config) ->
+ 0 = length(ets:tab2list(rabbit_topic_permission)),
+ rabbit_misc:execute_mnesia_transaction(fun() ->
+ ok = mnesia:write(rabbit_vhost,
+ #vhost{virtual_host = <<"/">>},
+ write),
+ ok = mnesia:write(rabbit_vhost,
+ #vhost{virtual_host = <<"other-vhost">>},
+ write)
+ end),
+ rabbit_auth_backend_internal:add_user(<<"guest">>, <<"guest">>),
+ rabbit_auth_backend_internal:add_user(<<"dummy">>, <<"dummy">>),
+
+ rabbit_auth_backend_internal:set_topic_permissions(
+ <<"guest">>, <<"/">>, <<"amq.topic">>, "^a"
+ ),
+ 1 = length(ets:tab2list(rabbit_topic_permission)),
+ 1 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
+ 0 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"dummy">>)),
+ 1 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"/">>)),
+ 0 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"other-vhost">>)),
+ 1 = length(rabbit_auth_backend_internal:list_user_vhost_topic_permissions(<<"guest">>,<<"/">>)),
+ 0 = length(rabbit_auth_backend_internal:list_user_vhost_topic_permissions(<<"guest">>,<<"other-vhost">>)),
+ 1 = length(rabbit_auth_backend_internal:list_topic_permissions()),
+
+ rabbit_auth_backend_internal:set_topic_permissions(
+ <<"guest">>, <<"other-vhost">>, <<"amq.topic">>, ".*"
+ ),
+ 2 = length(ets:tab2list(rabbit_topic_permission)),
+ 2 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
+ 0 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"dummy">>)),
+ 1 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"/">>)),
+ 1 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"other-vhost">>)),
+ 1 = length(rabbit_auth_backend_internal:list_user_vhost_topic_permissions(<<"guest">>,<<"/">>)),
+ 1 = length(rabbit_auth_backend_internal:list_user_vhost_topic_permissions(<<"guest">>,<<"other-vhost">>)),
+ 2 = length(rabbit_auth_backend_internal:list_topic_permissions()),
+
+ rabbit_auth_backend_internal:set_topic_permissions(
+ <<"guest">>, <<"/">>, <<"topic1">>, "^a"
+ ),
+ rabbit_auth_backend_internal:set_topic_permissions(
+ <<"guest">>, <<"/">>, <<"topic2">>, "^a"
+ ),
+
+ 4 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
+ 3 = length(rabbit_auth_backend_internal:list_user_vhost_topic_permissions(<<"guest">>,<<"/">>)),
+ 1 = length(rabbit_auth_backend_internal:list_user_vhost_topic_permissions(<<"guest">>,<<"other-vhost">>)),
+ 4 = length(rabbit_auth_backend_internal:list_topic_permissions()),
+
+ rabbit_auth_backend_internal:clear_topic_permissions(<<"guest">>, <<"other-vhost">>),
+ 0 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"other-vhost">>)),
+ 3 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
+ rabbit_auth_backend_internal:clear_topic_permissions(<<"guest">>, <<"/">>, <<"topic1">>),
+ 2 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
+ rabbit_auth_backend_internal:clear_topic_permissions(<<"guest">>, <<"/">>),
+ 0 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
+
+
+ {error, {no_such_user, _}} = (catch rabbit_auth_backend_internal:set_topic_permissions(
+ <<"non-existing-user">>, <<"other-vhost">>, <<"amq.topic">>, ".*"
+ )),
+
+ {error, {no_such_vhost, _}} = (catch rabbit_auth_backend_internal:set_topic_permissions(
+ <<"guest">>, <<"non-existing-vhost">>, <<"amq.topic">>, ".*"
+ )),
+
+ {error, {no_such_user, _}} = (catch rabbit_auth_backend_internal:set_topic_permissions(
+ <<"non-existing-user">>, <<"non-existing-vhost">>, <<"amq.topic">>, ".*"
+ )),
+
+ {error, {no_such_user, _}} = (catch rabbit_auth_backend_internal:list_user_topic_permissions(
+ "non-existing-user"
+ )),
+
+ {error, {no_such_vhost, _}} = (catch rabbit_auth_backend_internal:list_vhost_topic_permissions(
+ "non-existing-vhost"
+ )),
+
+ {error, {invalid_regexp, _, _}} = (catch rabbit_auth_backend_internal:set_topic_permissions(
+ <<"guest">>, <<"/">>, <<"amq.topic">>, "["
+ )),
+ ok.
+
+topic_permission_checks(_Config) ->
+ 0 = length(ets:tab2list(rabbit_topic_permission)),
+ rabbit_misc:execute_mnesia_transaction(fun() ->
+ ok = mnesia:write(rabbit_vhost,
+ #vhost{virtual_host = <<"/">>},
+ write),
+ ok = mnesia:write(rabbit_vhost,
+ #vhost{virtual_host = <<"other-vhost">>},
+ write)
+ end),
+ rabbit_auth_backend_internal:add_user(<<"guest">>, <<"guest">>),
+ rabbit_auth_backend_internal:add_user(<<"dummy">>, <<"dummy">>),
+
+ rabbit_auth_backend_internal:set_topic_permissions(
+ <<"guest">>, <<"/">>, <<"amq.topic">>, "^a"
+ ),
+ 1 = length(ets:tab2list(rabbit_topic_permission)),
+ 1 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
+ 0 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"dummy">>)),
+ 1 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"/">>)),
+ 0 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"other-vhost">>)),
+
+ rabbit_auth_backend_internal:set_topic_permissions(
+ <<"guest">>, <<"other-vhost">>, <<"amq.topic">>, ".*"
+ ),
+ 2 = length(ets:tab2list(rabbit_topic_permission)),
+ 2 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
+ 0 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"dummy">>)),
+ 1 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"/">>)),
+ 1 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"other-vhost">>)),
+
+ User = #auth_user{username = <<"guest">>},
+ Topic = #resource{name = <<"amq.topic">>, virtual_host = <<"/">>,
+ options = #{routing_key => <<"a.b.c">>},
+ kind = topic},
+ %% user has access to exchange, routing key matches
+ true = rabbit_auth_backend_internal:check_resource_access(
+ User,
+ Topic,
+ write
+ ),
+ %% user has access to exchange, routing key does not match
+ false = rabbit_auth_backend_internal:check_resource_access(
+ User,
+ Topic#resource{options = #{routing_key => <<"x.y.z">>}},
+ write
+ ),
+ %% user has access to exchange but not on this vhost
+ %% let pass when there's no match
+ true = rabbit_auth_backend_internal:check_resource_access(
+ User,
+ Topic#resource{virtual_host = <<"fancyvhost">>},
+ write
+ ),
+ %% user does not have access to exchange
+ %% let pass when there's no match
+ true = rabbit_auth_backend_internal:check_resource_access(
+ #auth_user{username = <<"dummy">>},
+ Topic,
+ write
+ ),
+ ok. \ No newline at end of file
diff --git a/test/unit_SUITE.erl b/test/unit_SUITE.erl
index 1b03f0d23d..f3fec06cb4 100644
--- a/test/unit_SUITE.erl
+++ b/test/unit_SUITE.erl
@@ -71,9 +71,7 @@ groups() ->
decrypt_start_app,
decrypt_start_app_file,
decrypt_start_app_undefined,
- decrypt_start_app_wrong_passphrase,
- topic_permission_database_access,
- topic_permission_checks
+ decrypt_start_app_wrong_passphrase
]}
].
@@ -85,31 +83,9 @@ init_per_testcase(TC, Config) when TC =:= decrypt_start_app;
TC =:= decrypt_start_app_undefined ->
application:load(rabbit),
Config;
-init_per_testcase(Testcase, Config) when Testcase =:= topic_permission_database_access;
- Testcase =:= topic_permission_checks ->
- mnesia:start(),
- create_tables([rabbit_topic_permission, rabbit_user, rabbit_vhost]),
- {ok, Pool} = worker_pool_sup:start_link(1, worker_pool:default_pool()),
- {ok, Registry} = rabbit_registry:start_link(),
- {ok, Event} = rabbit_event:start_link(),
- Config1 = rabbit_ct_helpers:set_config(Config,[
- {pool_sup, Pool}, {registry_sup, Registry},
- {event_sup, Event}
- ]),
- file_handle_cache_stats:init(),
- Config1;
-init_per_testcase(_, Config) ->
+init_per_testcase(_Testcase, Config) ->
Config.
-create_tables(Tables) ->
- AllTables = rabbit_table:definitions(),
- [begin
- ShortDefinition = [begin
- {Field, proplists:get_value(Field, Definition)}
- end || Field <- [record_name, attributes]],
- mnesia:create_table(Name, ShortDefinition)
- end || {Name, Definition} <- AllTables, proplists:is_defined(Name, Tables)].
-
end_per_testcase(TC, _Config) when TC =:= decrypt_start_app;
TC =:= decrypt_start_app_file;
TC =:= decrypt_start_app_undefined ->
@@ -117,15 +93,6 @@ end_per_testcase(TC, _Config) when TC =:= decrypt_start_app;
application:unload(rabbit_shovel_test);
end_per_testcase(decrypt_config, _Config) ->
application:unload(rabbit);
-end_per_testcase(Testcase, Config) when Testcase =:= topic_permission_database_access;
- Testcase =:= topic_permission_checks ->
- mnesia:stop(),
- [begin
- Sup = ?config(SupEntry, Config),
- unlink(Sup),
- exit(Sup, kill)
- end || SupEntry <- [pool_sup, registry_sup, event_sup]],
- ok;
end_per_testcase(_TC, _Config) ->
ok.
@@ -497,151 +464,7 @@ rabbitmqctl_encode_encrypt_decrypt(Secret) ->
)
.
-topic_permission_database_access(_Config) ->
- 0 = length(ets:tab2list(rabbit_topic_permission)),
- rabbit_misc:execute_mnesia_transaction(fun() ->
- ok = mnesia:write(rabbit_vhost,
- #vhost{virtual_host = <<"/">>},
- write),
- ok = mnesia:write(rabbit_vhost,
- #vhost{virtual_host = <<"other-vhost">>},
- write)
- end),
- rabbit_auth_backend_internal:add_user(<<"guest">>, <<"guest">>),
- rabbit_auth_backend_internal:add_user(<<"dummy">>, <<"dummy">>),
-
- rabbit_auth_backend_internal:set_topic_permissions(
- <<"guest">>, <<"/">>, <<"amq.topic">>, "^a"
- ),
- 1 = length(ets:tab2list(rabbit_topic_permission)),
- 1 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
- 0 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"dummy">>)),
- 1 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"/">>)),
- 0 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"other-vhost">>)),
- 1 = length(rabbit_auth_backend_internal:list_user_vhost_topic_permissions(<<"guest">>,<<"/">>)),
- 0 = length(rabbit_auth_backend_internal:list_user_vhost_topic_permissions(<<"guest">>,<<"other-vhost">>)),
- 1 = length(rabbit_auth_backend_internal:list_topic_permissions()),
-
- rabbit_auth_backend_internal:set_topic_permissions(
- <<"guest">>, <<"other-vhost">>, <<"amq.topic">>, ".*"
- ),
- 2 = length(ets:tab2list(rabbit_topic_permission)),
- 2 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
- 0 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"dummy">>)),
- 1 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"/">>)),
- 1 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"other-vhost">>)),
- 1 = length(rabbit_auth_backend_internal:list_user_vhost_topic_permissions(<<"guest">>,<<"/">>)),
- 1 = length(rabbit_auth_backend_internal:list_user_vhost_topic_permissions(<<"guest">>,<<"other-vhost">>)),
- 2 = length(rabbit_auth_backend_internal:list_topic_permissions()),
-
- rabbit_auth_backend_internal:set_topic_permissions(
- <<"guest">>, <<"/">>, <<"topic1">>, "^a"
- ),
- rabbit_auth_backend_internal:set_topic_permissions(
- <<"guest">>, <<"/">>, <<"topic2">>, "^a"
- ),
-
- 4 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
- 3 = length(rabbit_auth_backend_internal:list_user_vhost_topic_permissions(<<"guest">>,<<"/">>)),
- 1 = length(rabbit_auth_backend_internal:list_user_vhost_topic_permissions(<<"guest">>,<<"other-vhost">>)),
- 4 = length(rabbit_auth_backend_internal:list_topic_permissions()),
-
- rabbit_auth_backend_internal:clear_topic_permissions(<<"guest">>, <<"other-vhost">>),
- 0 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"other-vhost">>)),
- 3 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
- rabbit_auth_backend_internal:clear_topic_permissions(<<"guest">>, <<"/">>, <<"topic1">>),
- 2 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
- rabbit_auth_backend_internal:clear_topic_permissions(<<"guest">>, <<"/">>),
- 0 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
-
-
- {error, {no_such_user, _}} = (catch rabbit_auth_backend_internal:set_topic_permissions(
- <<"non-existing-user">>, <<"other-vhost">>, <<"amq.topic">>, ".*"
- )),
-
- {error, {no_such_vhost, _}} = (catch rabbit_auth_backend_internal:set_topic_permissions(
- <<"guest">>, <<"non-existing-vhost">>, <<"amq.topic">>, ".*"
- )),
- {error, {no_such_user, _}} = (catch rabbit_auth_backend_internal:set_topic_permissions(
- <<"non-existing-user">>, <<"non-existing-vhost">>, <<"amq.topic">>, ".*"
- )),
-
- {error, {no_such_user, _}} = (catch rabbit_auth_backend_internal:list_user_topic_permissions(
- "non-existing-user"
- )),
-
- {error, {no_such_vhost, _}} = (catch rabbit_auth_backend_internal:list_vhost_topic_permissions(
- "non-existing-vhost"
- )),
-
- {error, {invalid_regexp, _, _}} = (catch rabbit_auth_backend_internal:set_topic_permissions(
- <<"guest">>, <<"/">>, <<"amq.topic">>, "["
- )),
- ok.
-
-topic_permission_checks(_Config) ->
- 0 = length(ets:tab2list(rabbit_topic_permission)),
- rabbit_misc:execute_mnesia_transaction(fun() ->
- ok = mnesia:write(rabbit_vhost,
- #vhost{virtual_host = <<"/">>},
- write),
- ok = mnesia:write(rabbit_vhost,
- #vhost{virtual_host = <<"other-vhost">>},
- write)
- end),
- rabbit_auth_backend_internal:add_user(<<"guest">>, <<"guest">>),
- rabbit_auth_backend_internal:add_user(<<"dummy">>, <<"dummy">>),
-
- rabbit_auth_backend_internal:set_topic_permissions(
- <<"guest">>, <<"/">>, <<"amq.topic">>, "^a"
- ),
- 1 = length(ets:tab2list(rabbit_topic_permission)),
- 1 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
- 0 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"dummy">>)),
- 1 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"/">>)),
- 0 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"other-vhost">>)),
-
- rabbit_auth_backend_internal:set_topic_permissions(
- <<"guest">>, <<"other-vhost">>, <<"amq.topic">>, ".*"
- ),
- 2 = length(ets:tab2list(rabbit_topic_permission)),
- 2 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"guest">>)),
- 0 = length(rabbit_auth_backend_internal:list_user_topic_permissions(<<"dummy">>)),
- 1 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"/">>)),
- 1 = length(rabbit_auth_backend_internal:list_vhost_topic_permissions(<<"other-vhost">>)),
-
- User = #auth_user{username = <<"guest">>},
- Topic = #resource{name = <<"amq.topic">>, virtual_host = <<"/">>,
- options = #{routing_key => <<"a.b.c">>},
- kind = topic},
- %% user has access to exchange, routing key matches
- true = rabbit_auth_backend_internal:check_resource_access(
- User,
- Topic,
- write
- ),
- %% user has access to exchange, routing key does not match
- false = rabbit_auth_backend_internal:check_resource_access(
- User,
- Topic#resource{options = #{routing_key => <<"x.y.z">>}},
- write
- ),
- %% user has access to exchange but not on this vhost
- %% let pass when there's no match
- true = rabbit_auth_backend_internal:check_resource_access(
- User,
- Topic#resource{virtual_host = <<"fancyvhost">>},
- write
- ),
- %% user does not have access to exchange
- %% let pass when there's no match
- true = rabbit_auth_backend_internal:check_resource_access(
- #auth_user{username = <<"dummy">>},
- Topic,
- write
- ),
- ok.
%% -------------------------------------------------------------------
%% pg_local.