Permalink
Browse files

Add unit tests for delayed responses

BugzID: 12438
  • Loading branch information...
Robert Newson authored and kocolosk committed Aug 18, 2011
1 parent 6a3ffde commit cae3f5d02b52e018295f7aa2d6c73830705d135a
Showing with 82 additions and 0 deletions.
  1. +43 −0 test/chttpd_delayed_response_test.erl
  2. +39 −0 test/mock_request.erl
@@ -0,0 +1,43 @@
+%% Copyright 2011 Cloudant
+%%
+%% 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_delayed_response_test).
+-include_lib("eunit/include/eunit.hrl").
+-include_lib("couch/include/couch_db.hrl").
+
+all_test_() ->
+ {foreach,
+ fun() -> application:load(couch) end,
+ fun(_) -> application:unload(couch) end,
+ [
+ fun delayed_chunked_response/1,
+ fun delayed_chunked_response_after_error/1
+ ]}.
+
+delayed_chunked_response(_) ->
+ {"sending an error first should be ok",
+ fun() ->
+ Req = #httpd{mochi_req=mock_request:new(nil, get, "/", {1, 1}, [])},
+ {ok, Resp} = chttpd:start_delayed_chunked_response(Req, 200, []),
+ ?assertMatch({ok, _}, chttpd:send_delayed_error(Resp, bad_request))
+ end}.
+
+delayed_chunked_response_after_error(_) ->
+ {"sending an error midstream should throw http_abort",
+ fun() ->
+ Req = #httpd{mochi_req=mock_request:new(nil, get, "/", {1, 1}, [])},
+ {ok, Resp} = chttpd:start_delayed_chunked_response(Req, 200, []),
+ {ok, Resp1} = chttpd:send_delayed_chunk(Resp, <<>>),
+ ?assertThrow({http_abort, _, _}, chttpd:send_delayed_error(Resp1, bad_request))
+ end}.
View
@@ -0,0 +1,39 @@
+%% Copyright 2011 Cloudant
+%%
+%% 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(mock_request, [Socket, Method, RawPath, Version, Headers]).
+
+-compile(export_all).
+
+get_header_value(_) ->
+ undefined.
+
+parse_qs() ->
+ [].
+
+get(method) ->
+ Method;
+get(raw_path) ->
+ RawPath;
+get(version) ->
+ Version.
+
+should_close() ->
+ false.
+
+respond({Code, ResponseHeaders, _}) ->
+ mochiweb:new_response({THIS, Code, ResponseHeaders}).
+
+send(_) ->
+ ok.

0 comments on commit cae3f5d

Please sign in to comment.