blob: c32b5c6bf4d9ba187ae7393ad81a1696b37bf282 [file] [log] [blame]
% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.
-module(couch_log_writer_syslog_test).
-include_lib("couch_log/include/couch_log.hrl").
-include_lib("eunit/include/eunit.hrl").
-define(WRITER, couch_log_writer_syslog).
couch_log_writer_syslog_test_() ->
{setup,
fun couch_log_test_util:start/0,
fun couch_log_test_util:stop/1,
[
fun check_init_terminate/0,
fun() ->
couch_log_test_util:with_meck(
[{io, [unstick]}],
fun check_stderr_write/0
)
end,
fun() ->
couch_log_test_util:with_meck(
[{gen_udp, [unstick]}],
fun check_udp_send/0
)
end
]
}.
check_init_terminate() ->
{ok, St} = ?WRITER:init(),
ok = ?WRITER:terminate(stop, St).
check_stderr_write() ->
meck:expect(io, format, 3, ok),
Entry = #log_entry{
level = debug,
pid = list_to_pid("<0.1.0>"),
msg = "stuff",
msg_id = "msg_id",
time_stamp = "time_stamp"
},
{ok, St} = ?WRITER:init(),
{ok, NewSt} = ?WRITER:write(Entry, St),
ok = ?WRITER:terminate(stop, NewSt),
?assert(meck:called(io, format, 3)),
?assert(meck:validate(io)).
check_udp_send() ->
meck:expect(gen_udp, open, 1, {ok, socket}),
meck:expect(gen_udp, send, 4, ok),
meck:expect(gen_udp, close, fun(socket) -> ok end),
config:set("log", "syslog_host", "localhost"),
try
Entry = #log_entry{
level = debug,
pid = list_to_pid("<0.1.0>"),
msg = "stuff",
msg_id = "msg_id",
time_stamp = "time_stamp"
},
{ok, St} = ?WRITER:init(),
{ok, NewSt} = ?WRITER:write(Entry, St),
ok = ?WRITER:terminate(stop, NewSt)
after
config:delete("log", "syslog_host")
end,
?assert(meck:called(gen_udp, open, 1)),
?assert(meck:called(gen_udp, send, 4)),
?assert(meck:called(gen_udp, close, 1)),
?assert(meck:validate(gen_udp)).
facility_test() ->
Names = [
"kern", "user", "mail", "daemon", "auth", "syslog", "lpr",
"news", "uucp", "clock", "authpriv", "ftp", "ntp", "audit",
"alert", "cron", "local0", "local1", "local2", "local3",
"local4", "local5", "local6", "local7"
],
lists:foldl(fun(Name, Id) ->
IdStr = lists:flatten(io_lib:format("~w", [Id])),
?assertEqual(Id bsl 3, couch_log_writer_syslog:get_facility(Name)),
?assertEqual(Id bsl 3, couch_log_writer_syslog:get_facility(IdStr)),
Id + 1
end, 0, Names),
?assertEqual(23 bsl 3, couch_log_writer_syslog:get_facility("foo")),
?assertEqual(23 bsl 3, couch_log_writer_syslog:get_facility("-1")),
?assertEqual(23 bsl 3, couch_log_writer_syslog:get_facility("24")).
level_test() ->
Levels = [
emergency, alert, critical, error,
warning, notice, info, debug
],
lists:foldl(fun(Name, Id) ->
?assertEqual(Id, couch_log_writer_syslog:get_level(Name)),
Id + 1
end, 0, Levels),
?assertEqual(3, couch_log_writer_syslog:get_level(foo)).