summaryrefslogtreecommitdiff
path: root/src/chttpd/test/eunit/chttpd_plugin_tests.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/chttpd/test/eunit/chttpd_plugin_tests.erl')
-rw-r--r--src/chttpd/test/eunit/chttpd_plugin_tests.erl187
1 files changed, 187 insertions, 0 deletions
diff --git a/src/chttpd/test/eunit/chttpd_plugin_tests.erl b/src/chttpd/test/eunit/chttpd_plugin_tests.erl
new file mode 100644
index 000000000..36572a419
--- /dev/null
+++ b/src/chttpd/test/eunit/chttpd_plugin_tests.erl
@@ -0,0 +1,187 @@
+% 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)).