|
%% @doc This test is named zzzz_gh280_crash because it has to be run first and tests are run in
|
|
%% reverse alphabetical order.
|
|
%%
|
|
%% The problem we are attempting to detect here is when log_mf_h is installed as a handler for error_logger
|
|
%% and lager starts up to replace the current handlers with its own. This causes a start up crash because
|
|
%% OTP error logging modules do not have any notion of a lager-style log level.
|
|
-module(zzzz_gh280_crash).
|
|
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
gh280_crash_test() ->
|
|
{timeout, 30, fun() -> gh280_impl() end}.
|
|
|
|
gh280_impl() ->
|
|
application:stop(lager),
|
|
application:stop(goldrush),
|
|
|
|
error_logger:tty(false),
|
|
%% see https://github.com/erlang/otp/blob/maint/lib/stdlib/src/log_mf_h.erl#L81
|
|
%% for an explanation of the init arguments to log_mf_h
|
|
ok = gen_event:add_sup_handler(error_logger, log_mf_h, log_mf_h:init("/tmp", 10000, 5)),
|
|
lager:start(),
|
|
Result = receive
|
|
{gen_event_EXIT,log_mf_h,normal} ->
|
|
true;
|
|
{gen_event_EXIT,Handler,Reason} ->
|
|
{Handler,Reason};
|
|
X ->
|
|
X
|
|
after 10000 ->
|
|
timeout
|
|
end,
|
|
?assert(Result),
|
|
application:stop(lager),
|
|
application:stop(goldrush).
|