blob: cd691fbaa12506ae41ab57ea149a00ae99d15ad4 [file] [log] [blame]
% Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.
-module(chttpd_external_test).
-include_lib("couch/include/couch_eunit.hrl").
-include_lib("couch/include/couch_db.hrl").
setup_mock() ->
ok = meck:new([config, couch], [passthrough]),
ok = meck:expect(couch_db, is_clustered, 1, false),
ok = meck:expect(couch_db, get_db_info, 1, {ok, [{name, <<"fake">>}]}),
ok = meck:expect(couch_db, name, 1, <<"fake">>),
ok = meck:expect(couch_db, get_user_ctx, 1, #user_ctx{}),
ok = meck:expect(couch_db, get_security, 1, []),
ok = meck:expect(couch_uuids, new, 0, <<"4">>),
ok = meck:expect(config, get_integer, fun(_, _, N) -> N end).
teardown_mock(_) ->
meck:unload().
setup_local_httpd_req() ->
ok = meck:new(mochiweb, [passthrough]),
ok = meck:expect(mochiweb_socket, peername, fun(_) ->
{ok, {{127, 0, 0, 1}, 5984}}
end),
ok = meck:expect(mochiweb_request, recv_body, 2, {[{<<"a">>, 42}]}),
Headers = mochiweb_headers:make([{"host", "example.com"}]),
MochiReq = mochiweb_request:new(nil, 'GET', "/", {1, 1}, Headers),
#httpd{
mochi_req = MochiReq,
method = 'GET',
path_parts = [<<"/">>],
requested_path_parts = [<<"/">>],
user_ctx = #user_ctx{}
}.
setup_remote_httpd_req() ->
Headers = mochiweb_headers:make([{"host", "example.com"}]),
MochiReq = mochiweb_request:new(nil, 'GET', "/", {1, 1}, Headers),
#httpd{
mochi_req = MochiReq,
method = 'GET',
path_parts = [<<"/">>],
requested_path_parts = [<<"/">>],
peer = "127.0.0.1",
req_body = {[{<<"a">>, 42}]},
user_ctx = #user_ctx{}
}.
json_req_obj_local_httpd_req_test_() ->
{
"chttpd external local httpd_req tests",
{
setup,
fun setup_mock/0,
fun teardown_mock/1,
{
setup,
fun setup_local_httpd_req/0,
fun should_convert_req_to_json_obj/1
}
}
}.
json_req_obj_remote_httpd_req_test_() ->
{
"chttpd external remote httpd_req tests",
{
setup,
fun setup_mock/0,
fun teardown_mock/1,
{
setup,
fun setup_remote_httpd_req/0,
fun should_convert_req_to_json_obj/1
}
}
}.
should_convert_req_to_json_obj(HttpdReq) ->
Expect = expect(),
{Result} = chttpd_external:json_req_obj(HttpdReq, <<"fake">>),
lists:map(
fun({K, V}) ->
{K, ?_assertEqual(couch_util:get_value(K, Expect), V)}
end,
Result
).
expect() ->
[
{<<"info">>, {[{name, <<"fake">>}]}},
{<<"uuid">>, <<"4">>},
{<<"id">>, null},
{<<"method">>, 'GET'},
{<<"requested_path">>, [<<"/">>]},
{<<"path">>, [<<"/">>]},
{<<"raw_path">>, <<"/">>},
{<<"query">>, {[]}},
{<<"headers">>, {[{<<"host">>, <<"example.com">>}]}},
{<<"body">>, {[{<<"a">>, 42}]}},
{<<"peer">>, <<"127.0.0.1">>},
{<<"form">>, {[]}},
{<<"cookie">>, {[]}},
{<<"userCtx">>,
{[
{<<"db">>, <<"fake">>},
{<<"name">>, null},
{<<"roles">>, []}
]}},
{<<"secObj">>, []}
].