aboutsummaryrefslogblamecommitdiffstats
path: root/lib/kernel/test/logger_test_lib.erl
blob: be4bc427fbb341a1af2433eec1903ce120d6d412 (plain) (tree)





























                                                                           



                                                          
                                                                    

                                                            

                                                                                          

                                                                   



                                                                                      
                                                       













                                                              
                                                                  

                                
                                                                  























                                                                                          
%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2018. All Rights Reserved.
%%
%% 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.
%%
%% %CopyrightEnd%
%%
-module(logger_test_lib).

-include_lib("kernel/src/logger_internal.hrl").

-export([setup/2, log/3, sync_and_read/3]).

-export([init/2,
         pre_init_per_suite/3, pre_init_per_testcase/4,
         post_end_per_testcase/5, post_end_per_suite/3]).

setup(Config,Vars) ->
    Postfix = case proplists:get_value(postfix, Config) of
                  undefined -> "";
                  P -> ["_",P]
              end,
    FuncStr = lists:concat([proplists:get_value(suite, Config), "_",
                            proplists:get_value(tc, Config)|
                            Postfix]),
    ConfigFileName = filename:join(proplists:get_value(priv_dir, Config), FuncStr),
    file:write_file(ConfigFileName ++ ".config", io_lib:format("[{kernel, ~p}].",[Vars])),
    Sname = lists:concat([proplists:get_value(tc,Config)|Postfix]),
    case test_server:start_node(Sname, slave,
                                [{args, ["-pa ",filename:dirname(code:which(?MODULE)),
                                         " -boot start_sasl -kernel start_timer true "
                                         "-config ",ConfigFileName]}]) of
        {ok, Node} ->
            L = rpc:call(Node, logger, get_config, []),
            ct:log("~p",[L]),
            {ok, L, Node};
        {error, Reason} ->
            ct:log("Failed to start node: ~p",[Reason]),
            error
    end.

log(Node, F, A) ->
    log(Node, logger, F, A).
log(Node, M, F, A) ->
    MD = #{ gl => rpc:call(Node, erlang, whereis, [logger]) },
    rpc:call(Node, M, F, A ++ [MD]).

sync_and_read(Node,disk_log,Log) ->
    rpc:call(Node,logger_disk_log_h,filesync,[?STANDARD_HANDLER]),
    file:read_file(Log ++ ".1");
sync_and_read(Node, file,Log) ->
    ok = rpc:call(Node,logger_std_h,filesync,[?STANDARD_HANDLER]),
    file:read_file(Log).


init(_, _) ->
    {ok, []}.

pre_init_per_suite(_Suite, Config, State) ->
    {[{nodes, nodes()} | Config], State}.

pre_init_per_testcase(Suite, TC, Config, State) ->
    cleanup(Config),
    {[{suite, Suite}, {tc, TC} | Config], State}.

post_end_per_testcase(_, _TC, Config, Res, State) ->
    cleanup(Config),
    {Res, State}.

post_end_per_suite(_, Config, State) ->
    cleanup(Config),
    {Config, State}.

cleanup(Config) ->
    [test_server:stop_node(N) || N <- nodes(),
                                 not lists:member(N, proplists:get_value(nodes, Config))].