blob: 36572a4196698e969ce31c231e25f39b9d246f09 [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_plugin_tests).
-export([
before_request/1,
after_request/2,
handle_error/1,
before_response/4,
before_serve_file/5
]).
-export([ %% couch_epi_plugin behaviour
app/0,
providers/0,
services/0,
data_providers/0,
data_subscriptions/0,
processes/0,
notify/3
]).
-include_lib("couch/include/couch_eunit.hrl").
-include_lib("couch/include/couch_db.hrl").
%% couch_epi_plugin behaviour
app() -> test_app.
providers() -> [{chttpd, ?MODULE}].
services() -> [].
data_providers() -> [].
data_subscriptions() -> [].
processes() -> [].
notify(_, _, _) -> ok.
setup() ->
couch_tests:setup([
couch_epi_dispatch:dispatch(chttpd, ?MODULE)
]).
teardown(Ctx) ->
couch_tests:teardown(Ctx).
before_request({true, Id}) -> [{true, [{before_request, Id}]}];
before_request({false, Id}) -> [{false, Id}];
before_request({fail, Id}) -> throw({before_request, Id}).
after_request({true, Id}, A) -> [{true, [{after_request, Id}]}, A];
after_request({false, Id}, A) -> [{false, Id}, A];
after_request({fail, Id}, _A) -> throw({after_request, Id}).
handle_error({true, Id}) -> [{true, [{handle_error, Id}]}];
handle_error({false, Id}) -> [{false, Id}];
handle_error({fail, Id}) -> throw({handle_error, Id}).
before_response({true, Id}, A, B, C) ->
[{true, [{before_response, Id}]}, A, B, C];
before_response({false, Id}, A, B, C) ->
[{false, Id}, A, B, C];
before_response({fail, Id}, _A, _B, _C) ->
throw({before_response, Id}).
before_serve_file({true, Id}, A, B, C, D) ->
[{true, [{before_serve_file, Id}]}, A, B, C, D];
before_serve_file({false, Id}, A, B, C, D) ->
[{false, Id}, A, B, C, D];
before_serve_file({fail, _Id}, _A, _B, _C, _D) ->
throw(before_serve_file).
callback_test_() ->
{
"callback tests",
{
setup, fun setup/0, fun teardown/1,
[
fun before_request_match/0,
fun before_request_no_match/0,
fun before_request_throw/0,
fun after_request_match/0,
fun after_request_no_match/0,
fun after_request_throw/0,
fun handle_error_match/0,
fun handle_error_no_match/0,
fun handle_error_throw/0,
fun before_response_match/0,
fun before_response_no_match/0,
fun before_response_throw/0,
fun before_serve_file_match/0,
fun before_serve_file_no_match/0,
fun before_serve_file_throw/0
]
}
}.
before_request_match() ->
?assertEqual(
{ok, {true, [{before_request, foo}]}},
chttpd_plugin:before_request({true, foo})).
before_request_no_match() ->
?assertEqual(
{ok, {false, foo}},
chttpd_plugin:before_request({false, foo})).
before_request_throw() ->
?assertThrow(
{before_request, foo},
chttpd_plugin:before_request({fail, foo})).
after_request_match() ->
?assertEqual(
{ok, bar},
chttpd_plugin:after_request({true, foo}, bar)).
after_request_no_match() ->
?assertEqual(
{ok, bar},
chttpd_plugin:after_request({false, foo}, bar)).
after_request_throw() ->
?assertThrow(
{after_request, foo},
chttpd_plugin:after_request({fail, foo}, bar)).
handle_error_match() ->
?assertEqual(
{true, [{handle_error, foo}]},
chttpd_plugin:handle_error({true, foo})).
handle_error_no_match() ->
?assertEqual(
{false, foo},
chttpd_plugin:handle_error({false, foo})).
handle_error_throw() ->
?assertThrow(
{handle_error, foo},
chttpd_plugin:handle_error({fail, foo})).
before_response_match() ->
?assertEqual(
{ok, {{true, [{before_response, foo}]}, 1, 2, 3}},
chttpd_plugin:before_response({true, foo}, 1, 2, 3)).
before_response_no_match() ->
?assertEqual(
{ok, {{false, foo}, 1, 2, 3}},
chttpd_plugin:before_response({false, foo}, 1, 2, 3)).
before_response_throw() ->
?assertThrow(
{before_response, foo},
chttpd_plugin:before_response({fail, foo}, 1, 2, 3)).
before_serve_file_match() ->
?assertEqual(
{ok, {{true, [{before_serve_file, foo}]}, 1, 2, 3, 4}},
chttpd_plugin:before_serve_file({true, foo}, 1, 2, 3, 4)).
before_serve_file_no_match() ->
?assertEqual(
{ok, {{false, foo}, 1, 2, 3, 4}},
chttpd_plugin:before_serve_file({false, foo}, 1, 2, 3, 4)).
before_serve_file_throw() ->
?assertThrow(
before_serve_file,
chttpd_plugin:before_serve_file({fail, foo}, 1, 2, 3, 4)).