Skip to content

Commit

Permalink
Test manager killer on alternate sink
Browse files Browse the repository at this point in the history
  • Loading branch information
Mark Allen committed Apr 7, 2016
1 parent ec43800 commit 9393c5b
Showing 1 changed file with 47 additions and 4 deletions.
51 changes: 47 additions & 4 deletions test/lager_manager_killer_test.erl
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").

-define(TEST_SINK_NAME, '__lager_test_sink'). %% <-- used by parse transform
-define(TEST_SINK_EVENT, '__lager_test_sink_lager_event'). %% <-- used by lager API calls and internals for gen_event

overload_test_() ->
{timeout, 60,
fun() ->
Expand All @@ -26,7 +29,7 @@ overload_test_() ->
[lager:info("~p'th message", [N]) || N <- lists:seq(1,KillerHWM+2)],
Margin = 100,
ok = confirm_manager_exit(Manager, Delay+Margin),
ok = confirm_sink_reregister(Margin),
ok = confirm_sink_reregister(lager_event, Margin),
erlang:trace(all, false, [procs]),
wait_until(fun() ->
case proplists:get_value(lager_manager_killer, gen_event:which_handlers(lager_event)) of
Expand All @@ -43,6 +46,46 @@ overload_test_() ->
application:stop(lager)
end}.

overload_alternate_sink_test_() ->
{timeout, 60,
fun() ->
application:stop(lager),
application:load(lager),
Delay = 1000, % sleep 1 sec on every log
KillerHWM = 10, % kill the manager if there are more than 10 pending logs
KillerReinstallAfter = 1000, % reinstall killer after 1 sec
application:set_env(lager, handlers, []),
application:set_env(lager, extra_sinks, [{?TEST_SINK_EVENT, [
{handlers, [{lager_slow_backend, [{delay, Delay}]}]},
{killer_hwm, KillerHWM},
{killer_reinstall_after, KillerReinstallAfter},
{async_threshold, undefined}
]}]),
application:set_env(lager, error_logger_redirect, true),
ensure_started(lager),
lager_config:set({?TEST_SINK_EVENT, async}, true),
Manager = whereis(?TEST_SINK_EVENT),
erlang:trace(all, true, [procs]),
[?TEST_SINK_NAME:info("~p'th message", [N]) || N <- lists:seq(1,KillerHWM+2)],
Margin = 100,
ok = confirm_manager_exit(Manager, Delay+Margin),
ok = confirm_sink_reregister(?TEST_SINK_EVENT, Margin),
erlang:trace(all, false, [procs]),
wait_until(fun() ->
case proplists:get_value(lager_manager_killer, gen_event:which_handlers(?TEST_SINK_EVENT)) of
[] -> false;
_ -> true
end
end, Margin, 15),
wait_until(fun() ->
case gen_event:call(?TEST_SINK_EVENT, lager_manager_killer, get_settings) of
[KillerHWM, KillerReinstallAfter] -> true;
_Other -> false
end
end, Margin, 15),
application:stop(lager)
end}.

ensure_started(App) ->
case application:start(App) of
ok ->
Expand All @@ -63,10 +106,10 @@ confirm_manager_exit(Manager, Delay) ->
?assert(false)
end.

confirm_sink_reregister(Delay) ->
confirm_sink_reregister(Sink, Delay) ->
receive
{trace, _Pid, register, lager_event} ->
?assertNot(lists:member(lager_manager_killer, gen_event:which_handlers(lager_event)))
{trace, _Pid, register, Sink} ->
?assertNot(lists:member(lager_manager_killer, gen_event:which_handlers(Sink)))
after Delay ->
?assert(false)
end.
Expand Down

0 comments on commit 9393c5b

Please sign in to comment.