1: -module(syslogger_SUITE).
    2: 
    3: -export([all/0,
    4:          init_per_suite/1,
    5:          end_per_suite/1,
    6:          init_per_testcase/2,
    7:          end_per_testcase/2]).
    8: 
    9: -export([syslogger_is_used_to_log/1]).
   10: 
   11: -include_lib("common_test/include/ct.hrl").
   12: -include_lib("eunit/include/eunit.hrl").
   13: 
   14: -define(HANDLER_ID, sys_log).
   15: -define(IDENT, "mongooseim").
   16: -define(FACILITY, local0).
   17: 
   18: all() ->
   19:     [syslogger_is_used_to_log
   20:     ].
   21: 
   22: init_per_suite(Config) ->
   23:     LoggerConfig = logger:get_primary_config(),
   24:     case logger:compare_levels(info, maps:get(level, LoggerConfig)) of
   25:         lt -> logger:set_primary_config(level, info);
   26:         _ -> ok
   27:     end,
   28: 
   29:     setup_meck(),
   30:     ok = mongoose_logger_running(),
   31: 
   32:     [{logger_primary_config, LoggerConfig} | Config].
   33: 
   34: end_per_suite(Config) ->
   35:     logger:remove_handler(?HANDLER_ID),
   36:     logger:set_primary_config(?config(logger_primary_config, Config)),
   37: 
   38:     unload_meck(),
   39:     ok.
   40: 
   41: init_per_testcase(_TC, Config) ->
   42:     meck:reset(syslogger),
   43:     Config.
   44: 
   45: end_per_testcase(_TC, _Config) ->
   46:     ok.
   47: 
   48: %%
   49: %% Tests
   50: %%
   51: syslogger_is_used_to_log(_Config) ->
   52:     logger:log(error, "Something for syslogger"),
   53: 
   54:     ?assert(meck:validate(syslogger)),
   55:     ok = meck:wait(syslogger, log, [#{level => error,
   56:                                       msg => {string, "Something for syslogger"},
   57:                                       meta => '_'},
   58:                                     #{id => ?HANDLER_ID, ident => ?IDENT, facility => ?FACILITY}],
   59:                    timer:seconds(1)).
   60: 
   61: %%
   62: %% Helpers
   63: %%
   64: 
   65: setup_meck() ->
   66:     meck:new(syslogger, [no_link]),
   67:     meck:expect(syslogger, adding_handler,
   68:                 fun(C) ->
   69:                     {ok, C}
   70:                 end),
   71:     meck:expect(syslogger, log,
   72:                 fun(_LogEvent, _Config) ->
   73:                     ok
   74:                 end).
   75: 
   76: mongoose_logger_running() ->
   77:     HandlerID = ?HANDLER_ID,
   78:     HandlerModule = syslogger,
   79:     HandlerConfig = #{level => info,
   80:                       formatter => {logger_formatter, #{single_line => true}},
   81:                       config => {log_opts, [cons, pid, perror]},
   82:                       ident => ?IDENT,
   83:                       facility => ?FACILITY},
   84:     ok = logger:add_handler(HandlerID, HandlerModule, HandlerConfig).
   85: 
   86: unload_meck() ->
   87:     meck:unload(syslogger).