% 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_monitor_test).


-include_lib("eunit/include/eunit.hrl").


-define(HANDLER, couch_log_error_logger_h).


couch_log_monitor_test_() ->
    {setup,
        fun couch_log_test_util:start/0,
        fun couch_log_test_util:stop/1,
        [
            fun monitor_ignores_unknown_messages/0,
            fun monitor_restarts_handler/0,
            fun coverage_test/0
        ]
    }.


monitor_ignores_unknown_messages() ->
    Pid1 = get_monitor_pid(),

    ?assertEqual(ignored, gen_server:call(Pid1, do_foo_please)),

    gen_server:cast(Pid1, do_bar_please),
    Pid1 ! do_baz_please,
    timer:sleep(250),
    ?assert(is_process_alive(Pid1)).


monitor_restarts_handler() ->
    Pid1 = get_monitor_pid(),
    error_logger:delete_report_handler(?HANDLER),
    timer:sleep(250),

    ?assert(not is_process_alive(Pid1)),

    Pid2 = get_monitor_pid(),
    ?assert(is_process_alive(Pid2)),

    Handlers = gen_event:which_handlers(error_logger),
    ?assert(lists:member(?HANDLER, Handlers)).


coverage_test() ->
    Resp = couch_log_monitor:code_change(foo, bazinga, baz),
    ?assertEqual({ok, bazinga}, Resp).


get_monitor_pid() ->
    Children = supervisor:which_children(couch_log_sup),
    [MonPid] = [Pid || {couch_log_monitor, Pid, _, _} <- Children, is_pid(Pid)],
    MonPid.
