Tests
This commit is contained in:
parent
db72e7d9e3
commit
99279bd10f
|
|
@ -1,7 +1,7 @@
|
||||||
PROJECT = rabbitmq_auth_backend_uaa
|
PROJECT = rabbitmq_auth_backend_uaa
|
||||||
|
|
||||||
DEPS = mochiweb amqp_client
|
DEPS = mochiweb amqp_client
|
||||||
TEST_DEPS = rabbit
|
TEST_DEPS = cowboy rabbitmq_web_dispatch rabbit
|
||||||
|
|
||||||
DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk
|
DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk
|
||||||
|
|
||||||
|
|
@ -13,3 +13,6 @@ ERLANG_MK_COMMIT = rabbitmq-tmp
|
||||||
|
|
||||||
include rabbitmq-components.mk
|
include rabbitmq-components.mk
|
||||||
include erlang.mk
|
include erlang.mk
|
||||||
|
|
||||||
|
WITH_BROKER_TEST_COMMANDS:= \
|
||||||
|
rabbit_auth_backend_uaa_test:tests()
|
||||||
|
|
|
||||||
|
|
@ -84,10 +84,6 @@ check_token(Token) ->
|
||||||
{port, Port} = lists:keyfind(port, 1, URI),
|
{port, Port} = lists:keyfind(port, 1, URI),
|
||||||
HostHdr = rabbit_misc:format("~s:~b", [Host, Port]),
|
HostHdr = rabbit_misc:format("~s:~b", [Host, Port]),
|
||||||
ReqBody = "token=" ++ http_uri:encode(binary_to_list(Token)),
|
ReqBody = "token=" ++ http_uri:encode(binary_to_list(Token)),
|
||||||
rabbit_log:info("Req ~p", [{Path,
|
|
||||||
[{"Host", HostHdr}, {"Authorization", "Basic " ++ Auth}],
|
|
||||||
"application/x-www-form-urlencoded",
|
|
||||||
ReqBody}]),
|
|
||||||
Resp = httpc:request(post,
|
Resp = httpc:request(post,
|
||||||
{Path,
|
{Path,
|
||||||
[{"Host", HostHdr}, {"Authorization", "Basic " ++ Auth}],
|
[{"Host", HostHdr}, {"Authorization", "Basic " ++ Auth}],
|
||||||
|
|
@ -100,6 +96,7 @@ check_token(Token) ->
|
||||||
case Code of
|
case Code of
|
||||||
200 -> parse_resp(Body);
|
200 -> parse_resp(Body);
|
||||||
400 -> parse_err(Body);
|
400 -> parse_err(Body);
|
||||||
|
401 -> {error, invalid_resource_authorization};
|
||||||
_ -> {error, {Code, Body}}
|
_ -> {error, {Code, Body}}
|
||||||
end;
|
end;
|
||||||
{error, _} = E -> E
|
{error, _} = E -> E
|
||||||
|
|
|
||||||
105
deps/rabbitmq_auth_backend_oauth2/test/src/rabbit_auth_backend_uaa_test.erl
vendored
Normal file
105
deps/rabbitmq_auth_backend_oauth2/test/src/rabbit_auth_backend_uaa_test.erl
vendored
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
-module(rabbit_auth_backend_uaa_test).
|
||||||
|
|
||||||
|
-compile(export_all).
|
||||||
|
|
||||||
|
-include_lib("rabbit_common/include/rabbit.hrl").
|
||||||
|
|
||||||
|
-define(CLIENT, "client").
|
||||||
|
-define(SECRET, "secret").
|
||||||
|
-define(TOKEN, <<"valid_token">>).
|
||||||
|
-define(URL, "http://localhost:5678/uaa").
|
||||||
|
-define(RESOURCE_ID, "rebbitmq").
|
||||||
|
|
||||||
|
tests() ->
|
||||||
|
init(),
|
||||||
|
test_token(),
|
||||||
|
test_errors(),
|
||||||
|
passed.
|
||||||
|
|
||||||
|
init() ->
|
||||||
|
uaa_mock:register_context().
|
||||||
|
|
||||||
|
test_token() ->
|
||||||
|
application:set_env(rabbitmq_auth_backend_uaa, resource_server_id, ?RESOURCE_ID),
|
||||||
|
application:set_env(rabbitmq_auth_backend_uaa, uri, ?URL),
|
||||||
|
application:set_env(rabbitmq_auth_backend_uaa, username, ?CLIENT),
|
||||||
|
application:set_env(rabbitmq_auth_backend_uaa, password, ?SECRET),
|
||||||
|
application:set_env(rabbit, auth_backends, [rabbit_auth_backend_uaa]),
|
||||||
|
{ok, #auth_user{username = ?TOKEN} = User} =
|
||||||
|
rabbit_auth_backend_uaa:user_login_authentication(?TOKEN, any),
|
||||||
|
{refused, _, _} =
|
||||||
|
rabbit_auth_backend_uaa:user_login_authentication(<<"not token">>, any),
|
||||||
|
|
||||||
|
{ok, none} =
|
||||||
|
rabbit_auth_backend_uaa:user_login_authorization(?TOKEN),
|
||||||
|
{refused, _, _} =
|
||||||
|
rabbit_auth_backend_uaa:user_login_authorization(<<"not token">>),
|
||||||
|
|
||||||
|
true = rabbit_auth_backend_uaa:check_vhost_access(User, <<"vhost">>, none),
|
||||||
|
false = rabbit_auth_backend_uaa:check_vhost_access(User, <<"non_vhost">>, none),
|
||||||
|
|
||||||
|
true = rabbit_auth_backend_uaa:check_resource_access(
|
||||||
|
User,
|
||||||
|
#resource{virtual_host = <<"vhost">>,
|
||||||
|
kind = queue,
|
||||||
|
name = <<"foo">>},
|
||||||
|
configure),
|
||||||
|
true = rabbit_auth_backend_uaa:check_resource_access(
|
||||||
|
User,
|
||||||
|
#resource{virtual_host = <<"vhost">>,
|
||||||
|
kind = exchange,
|
||||||
|
name = <<"foo">>},
|
||||||
|
write),
|
||||||
|
true = rabbit_auth_backend_uaa:check_resource_access(
|
||||||
|
User,
|
||||||
|
#resource{virtual_host = <<"vhost">>,
|
||||||
|
kind = topic,
|
||||||
|
name = <<"foo">>},
|
||||||
|
read),
|
||||||
|
|
||||||
|
false = rabbit_auth_backend_uaa:check_resource_access(
|
||||||
|
User,
|
||||||
|
#resource{virtual_host = <<"vhost">>,
|
||||||
|
kind = queue,
|
||||||
|
name = <<"foo1">>},
|
||||||
|
configure),
|
||||||
|
false = rabbit_auth_backend_uaa:check_resource_access(
|
||||||
|
User,
|
||||||
|
#resource{virtual_host = <<"vhost">>,
|
||||||
|
kind = exchange,
|
||||||
|
name = <<"foo">>},
|
||||||
|
read),
|
||||||
|
false = rabbit_auth_backend_uaa:check_resource_access(
|
||||||
|
User,
|
||||||
|
#resource{virtual_host = <<"vhost1">>,
|
||||||
|
kind = topic,
|
||||||
|
name = <<"foo">>},
|
||||||
|
read).
|
||||||
|
|
||||||
|
test_errors() ->
|
||||||
|
application:set_env(rabbitmq_auth_backend_uaa, resource_server_id, ?RESOURCE_ID),
|
||||||
|
application:set_env(rabbitmq_auth_backend_uaa, uri, ?URL),
|
||||||
|
application:set_env(rabbitmq_auth_backend_uaa, username, ?CLIENT),
|
||||||
|
application:set_env(rabbitmq_auth_backend_uaa, password, "wrong_sectet"),
|
||||||
|
application:set_env(rabbit, auth_backends, [rabbit_auth_backend_uaa]),
|
||||||
|
%TODO: resource id test
|
||||||
|
{error, invalid_resource_authorization} =
|
||||||
|
rabbit_auth_backend_uaa:user_login_authorization(?TOKEN),
|
||||||
|
|
||||||
|
application:set_env(rabbitmq_auth_backend_uaa, username, "wrong_client"),
|
||||||
|
application:set_env(rabbitmq_auth_backend_uaa, password, ?SECRET),
|
||||||
|
|
||||||
|
{error, invalid_resource_authorization} =
|
||||||
|
rabbit_auth_backend_uaa:user_login_authorization(?TOKEN),
|
||||||
|
|
||||||
|
application:set_env(rabbitmq_auth_backend_uaa, username, ?CLIENT),
|
||||||
|
application:set_env(rabbitmq_auth_backend_uaa, uri, "http://wrong.url"),
|
||||||
|
{error, _} =
|
||||||
|
rabbit_auth_backend_uaa:user_login_authorization(?TOKEN).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,70 @@
|
||||||
|
-module(uaa_mock).
|
||||||
|
|
||||||
|
-export([
|
||||||
|
init/3
|
||||||
|
,rest_init/2
|
||||||
|
,allowed_methods/2
|
||||||
|
,is_authorized/2
|
||||||
|
]).
|
||||||
|
|
||||||
|
-export([
|
||||||
|
content_types_accepted/2
|
||||||
|
]).
|
||||||
|
|
||||||
|
-export([
|
||||||
|
process_post/2
|
||||||
|
]).
|
||||||
|
|
||||||
|
-export([register_context/0]).
|
||||||
|
|
||||||
|
-define(TOKEN, <<"valid_token">>).
|
||||||
|
-define(CLIENT, <<"client">>).
|
||||||
|
-define(SECRET, <<"secret">>).
|
||||||
|
|
||||||
|
|
||||||
|
register_context() ->
|
||||||
|
rabbit_web_dispatch:register_context_handler(
|
||||||
|
rabbit_test_uaa, [{port, 5678}], "",
|
||||||
|
cowboy_router:compile([{'_', [{"/uaa/check_token", uaa_mock, []}]}]),
|
||||||
|
"UAA mock").
|
||||||
|
|
||||||
|
init(_Transport, _Req, _Opts) ->
|
||||||
|
%% Compile the DTL template used for the authentication
|
||||||
|
%% form in the implicit grant flow.
|
||||||
|
{upgrade, protocol, cowboy_rest}.
|
||||||
|
|
||||||
|
rest_init(Req, _Opts) ->
|
||||||
|
{ok, Req, undefined_state}.
|
||||||
|
|
||||||
|
is_authorized(Req, State) ->
|
||||||
|
case cowboy_req:parse_header(<<"authorization">>, Req) of
|
||||||
|
{ok, {<<"basic">>, {Username, Password}}, _} ->
|
||||||
|
case {Username, Password} of
|
||||||
|
{?CLIENT, ?SECRET} -> {true, Req, State};
|
||||||
|
_ -> {{false, <<>>}, Req, State}
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
{{false, <<>>}, Req, State}
|
||||||
|
end.
|
||||||
|
|
||||||
|
content_types_accepted(Req, State) ->
|
||||||
|
{[{{<<"application">>, <<"x-www-form-urlencoded">>, []}, process_post}],
|
||||||
|
Req, State}.
|
||||||
|
|
||||||
|
allowed_methods(Req, State) ->
|
||||||
|
{[<<"POST">>], Req, State}.
|
||||||
|
|
||||||
|
process_post(Req, State) ->
|
||||||
|
{ok, Params, _Req2} = cowboy_req:body_qs(Req),
|
||||||
|
Token = proplists:get_value(<<"token">>, Params),
|
||||||
|
{ok, Reply} = case Token of
|
||||||
|
?TOKEN -> cowboy_req:reply(200, [{<<"content-type">>, <<"application/json">>}], response(), Req);
|
||||||
|
_ -> cowboy_req:reply(400, [{<<"content-type">>, <<"application/json">>}], <<"{\"error\":\"invalid_token\"}">>, Req)
|
||||||
|
end,
|
||||||
|
{halt, Reply, State}.
|
||||||
|
|
||||||
|
response() ->
|
||||||
|
mochijson2:encode([
|
||||||
|
{<<"foo">>, <<"bar">>},
|
||||||
|
{<<"scope">>, [<<"vhost_q_configure_foo">>, <<"vhost_ex_write_foo">>, <<"vhost_t_read_foo">>]}
|
||||||
|
]).
|
||||||
Loading…
Reference in New Issue