summaryrefslogtreecommitdiff
path: root/src/couch_log/test/eunit/couch_log_writer_syslog_test.erl
blob: c32b5c6bf4d9ba187ae7393ad81a1696b37bf282 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
% 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)).