blob: 5a3f89520c8a5488d5233df551bc45cba4de3466 [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)).