您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

55 行
1.9 KiB

  1. -module(lager_manager_killer_test).
  2. -author("Sungjin Park <jinni.park@gmail.com>").
  3. -compile([{parse_transform, lager_transform}]).
  4. -ifdef(TEST).
  5. -include_lib("eunit/include/eunit.hrl").
  6. overload_test() ->
  7. application:stop(lager),
  8. application:load(lager),
  9. Delay = 1000, % sleep 1 sec on every log
  10. KillerHWM = 10, % kill the manager if there are more than 10 pending logs
  11. KillerReinstallAfter = 1000, % reinstall killer after 1 sec
  12. application:set_env(lager, handlers, [{lager_slow_backend, [{delay, Delay}]}]),
  13. application:set_env(lager, async_threshold, undefined),
  14. application:set_env(lager, killer_hwm, KillerHWM),
  15. application:set_env(lager, killer_reinstall_after, KillerReinstallAfter),
  16. ensure_started(lager),
  17. lager_config:set(async, true),
  18. Manager = whereis(lager_event),
  19. erlang:trace(all, true, [procs]),
  20. [lager:info("~p'th message", [N]) || N <- lists:seq(1,KillerHWM+2)],
  21. Margin = 100,
  22. receive
  23. {trace, Manager, exit, killed} ->
  24. ?debugFmt("Manager ~p killed", [Manager])
  25. after Delay+Margin ->
  26. ?assert(false)
  27. end,
  28. receive
  29. {trace, _Sup, spawn, Pid, Fun} ->
  30. ?assert(process_info(Pid, registered_name) =:= {registered_name, lager_event}),
  31. ?debugFmt("Manager ~p start with ~p", [Pid, Fun]),
  32. ?assertNot(lists:member(lager_manager_killer, gen_event:which_handlers(lager_event)))
  33. after Margin ->
  34. ?assert(false)
  35. end,
  36. erlang:trace(all, false, [procs]),
  37. timer:sleep(KillerReinstallAfter),
  38. ?assert(proplists:get_value(lager_manager_killer, gen_event:which_handlers(lager_event))),
  39. ?assert(gen_event:call(lager_event, lager_manager_killer, get_settings) =:= [KillerHWM, KillerReinstallAfter]),
  40. ?debugFmt("Killer reinstalled with [~p, ~p]", [KillerHWM, KillerReinstallAfter]),
  41. application:stop(lager).
  42. ensure_started(App) ->
  43. case application:start(App) of
  44. ok ->
  45. ok;
  46. {error, {not_started, Dep}} ->
  47. ensure_started(Dep),
  48. ensure_started(App)
  49. end.
  50. -endif.