mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 20:30:23 +00:00

The errors are still logged by common_test to the report it creates. The process that is going to crash has to call cowboy_error_h:ignore/3 with the MFA where the crash is expected to occur for it to be ignored. Gun retry failures are also ignored. Only unexpected crashes are printed.
38 lines
1.3 KiB
Erlang
38 lines
1.3 KiB
Erlang
%% Feel free to use, reuse and abuse the code in this file.
|
|
|
|
-module(http_errors).
|
|
-behaviour(cowboy_http_handler).
|
|
-export([init/3, handle/2, terminate/3]).
|
|
|
|
init({_Transport, http}, Req, _Opts) ->
|
|
{Case, Req1} = cowboy_req:qs_val(<<"case">>, Req),
|
|
case_init(Case, Req1).
|
|
|
|
case_init(<<"init_before_reply">> = Case, _Req) ->
|
|
cowboy_error_h:ignore(?MODULE, case_init, 2),
|
|
erlang:error(Case);
|
|
case_init(<<"init_after_reply">> = Case, Req) ->
|
|
cowboy_error_h:ignore(?MODULE, case_init, 2),
|
|
{ok, _Req1} = cowboy_req:reply(200, [], "http_handler_crashes", Req),
|
|
erlang:error(Case);
|
|
case_init(<<"init_reply_handle_error">> = Case, Req) ->
|
|
{ok, Req1} = cowboy_req:reply(200, [], "http_handler_crashes", Req),
|
|
{ok, Req1, Case};
|
|
case_init(<<"handle_before_reply">> = Case, Req) ->
|
|
{ok, Req, Case};
|
|
case_init(<<"handle_after_reply">> = Case, Req) ->
|
|
{ok, Req, Case}.
|
|
|
|
handle(_Req, <<"init_reply_handle_error">> = Case) ->
|
|
cowboy_error_h:ignore(?MODULE, handle, 2),
|
|
erlang:error(Case);
|
|
handle(_Req, <<"handle_before_reply">> = Case) ->
|
|
cowboy_error_h:ignore(?MODULE, handle, 2),
|
|
erlang:error(Case);
|
|
handle(Req, <<"handle_after_reply">> = Case) ->
|
|
cowboy_error_h:ignore(?MODULE, handle, 2),
|
|
{ok, _Req1} = cowboy_req:reply(200, [], "http_handler_crashes", Req),
|
|
erlang:error(Case).
|
|
|
|
terminate(_, _, _) ->
|
|
ok.
|