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