From bff8eb116266eb74327d339beb2ca1cc2841ae8e Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Thu, 4 Aug 2011 17:07:17 -0400 Subject: [PATCH] Console backend tests --- src/lager_console_backend.erl | 101 ++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/src/lager_console_backend.erl b/src/lager_console_backend.erl index 6f4b02f..ace74cb 100644 --- a/src/lager_console_backend.erl +++ b/src/lager_console_backend.erl @@ -26,6 +26,10 @@ -record(state, {level, verbose}). +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + %% @private init(Level) when is_atom(Level) -> {ok, #state{level=lager_util:level_to_num(Level), verbose=false}}; @@ -64,3 +68,100 @@ terminate(_Reason, _State) -> %% @private code_change(_OldVsn, State, _Extra) -> {ok, State}. + +-ifdef(TEST). +console_log_test_() -> + %% tiny recursive fun that pretends to be a group leader + F = fun(Self) -> + fun() -> + YComb = fun(Fun) -> + receive + {io_request, From, ReplyAs, {put_chars, unicode, _Msg}} = Y -> + From ! {io_reply, ReplyAs, ok}, + Self ! Y, + Fun(Fun); + Other -> + ?debugFmt("unexpected message ~p~n", [Other]), + Self ! Other + end + end, + YComb(YComb) + end + end, + + {foreach, + fun() -> + error_logger:tty(false), + application:load(lager), + application:set_env(lager, handlers, []), + application:set_env(lager, error_logger_redirect, false), + application:start(lager) + end, + fun(_) -> + application:stop(lager), + application:load(lager), + error_logger:tty(true) + end, + [ + {"regular console logging", + fun() -> + Pid = spawn(F(self())), + gen_event:add_handler(lager_event, lager_console_backend, info), + erlang:group_leader(Pid, whereis(lager_event)), + lager:log(info, self(), "Test message"), + receive + {io_request, From, ReplyAs, {put_chars, unicode, Msg}} -> + From ! {io_reply, ReplyAs, ok}, + ?assertMatch([_, "[info]", "Test message\n"], re:split(Msg, " ", [{return, list}, {parts, 3}])) + after + 500 -> + ?assert(false) + end + end + }, + {"verbose console logging", + fun() -> + Pid = spawn(F(self())), + erlang:group_leader(Pid, whereis(lager_event)), + gen_event:add_handler(lager_event, lager_console_backend, [info, true]), + lager:log(info, self(), "Test message"), + lager:log(info, self(), "Test message"), + PidStr = pid_to_list(self()), + receive + {io_request, _, _, {put_chars, unicode, Msg}} -> + ?assertMatch([_, _, "[info]", PidStr, "Test message\n"], re:split(Msg, " ", [{return, list}, {parts, 5}])) + after + 500 -> + ?assert(false) + end + end + } + ] + }. + +set_loglevel_test_() -> + {foreach, + fun() -> + error_logger:tty(false), + application:load(lager), + application:set_env(lager, handlers, [{lager_console_backend, info}]), + application:set_env(lager, error_logger_redirect, false), + application:start(lager) + end, + fun(_) -> + application:stop(lager), + application:load(lager), + error_logger:tty(true) + end, + [ + {"Get/set loglevel test", + fun() -> + ?assertEqual(info, lager:get_loglevel(lager_console_backend)), + lager:set_loglevel(lager_console_backend, debug), + ?assertEqual(debug, lager:get_loglevel(lager_console_backend)) + end + } + ] + }. + +-endif.