aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/test/error_logger_warn_SUITE.erl
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
committerErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
commit84adefa331c4159d432d22840663c38f155cd4c1 (patch)
treebff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/kernel/test/error_logger_warn_SUITE.erl
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/kernel/test/error_logger_warn_SUITE.erl')
-rw-r--r--lib/kernel/test/error_logger_warn_SUITE.erl503
1 files changed, 503 insertions, 0 deletions
diff --git a/lib/kernel/test/error_logger_warn_SUITE.erl b/lib/kernel/test/error_logger_warn_SUITE.erl
new file mode 100644
index 0000000000..6629eca1ad
--- /dev/null
+++ b/lib/kernel/test/error_logger_warn_SUITE.erl
@@ -0,0 +1,503 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(error_logger_warn_SUITE).
+
+-export([all/1,init_per_testcase/2,fin_per_testcase/2,
+ basic/1,warnings_info/1,warnings_warnings/1,
+ rb_basic/1,rb_warnings_info/1,rb_warnings_warnings/1,
+ rb_trunc/1,rb_utc/1,file_utc/1]).
+
+%% Internal exports.
+-export([init/1,handle_event/2,handle_info/2,handle_call/2]).
+
+-include("test_server.hrl").
+
+-define(EXPECT(Pattern),
+ (fun() ->
+ receive
+ Pattern = X ->
+ erlang:display({got_expected,?MODULE,?LINE,X}),
+ ok
+ after 5000 ->
+ exit({timeout_in_expect,?MODULE,?LINE})
+ end
+ end)()).
+
+% Default timetrap timeout (set in init_per_testcase).
+-define(default_timeout, ?t:minutes(1)).
+
+
+all(suite) ->
+ [basic, warnings_info, warnings_warnings,
+ rb_basic, rb_warnings_info, rb_warnings_warnings,
+ rb_trunc,rb_utc, file_utc].
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog = ?t:timetrap(?default_timeout),
+ [{watchdog, Dog} | Config].
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+basic(doc) ->
+ ["Tests basic error logger functionality"];
+basic(Config) when is_list(Config) ->
+ put(elw_config,Config),
+ basic().
+
+warnings_info(doc) ->
+ ["Tests mapping warnings to info functionality"];
+warnings_info(Config) when is_list(Config) ->
+ put(elw_config,Config),
+ warnings_info().
+
+warnings_warnings(doc) ->
+ ["Tests mapping warnings to warnings functionality"];
+warnings_warnings(Config) when is_list(Config) ->
+ put(elw_config,Config),
+ warnings_warnings().
+
+rb_basic(doc) ->
+ ["Tests basic rb functionality"];
+rb_basic(Config) when is_list(Config) ->
+ put(elw_config,Config),
+ rb_basic().
+
+rb_warnings_info(doc) ->
+ ["Tests warnings as info rb functionality"];
+rb_warnings_info(Config) when is_list(Config) ->
+ put(elw_config,Config),
+ rb_warnings_info().
+
+rb_warnings_warnings(doc) ->
+ ["Tests warnings as warnings rb functionality"];
+rb_warnings_warnings(Config) when is_list(Config) ->
+ put(elw_config,Config),
+ rb_warnings_warnings().
+
+rb_trunc(doc) ->
+ ["Tests rb functionality on truncated data"];
+rb_trunc(Config) when is_list(Config) ->
+ put(elw_config,Config),
+ rb_trunc().
+
+rb_utc(doc) ->
+ ["Tests UTC mapping in rb (-sasl utc_log true)"];
+rb_utc(Config) when is_list(Config) ->
+ put(elw_config,Config),
+ rb_utc().
+
+file_utc(doc) ->
+ ["Tests UTC mapping in file logger (-stdlib utc_log true)"];
+file_utc(Config) when is_list(Config) ->
+ put(elw_config,Config),
+ file_utc().
+
+
+% a small gen_event
+
+init([Pid]) ->
+ {ok, Pid}.
+
+handle_event(Event,Pid) ->
+ Pid ! {handle_event,Event},
+ {ok,Pid}.
+
+handle_info(Unexpected,Pid) ->
+ Pid ! {unexpected_info,Unexpected},
+ {ok,Pid}.
+
+handle_call(Unexpected, Pid) ->
+ Pid ! {unexpected_call, Unexpected},
+ {ok,Pid}.
+
+start_node(Name,Args) ->
+ MyDir = filename:dirname(code:which(?MODULE)),
+ element(2,test_server:start_node(Name, slave, [{args, Args ++ " -pa " ++ MyDir}])).
+
+stop_node(Name) ->
+ test_server:stop_node(Name).
+
+install_relay(Node) ->
+ rpc:call(Node,error_logger,add_report_handler,[?MODULE,[self()]]).
+
+
+format(Node,A,B) ->
+ rpc:call(Node,error_logger,format,[A,B]).
+error_msg(Node,A,B) ->
+ rpc:call(Node,error_logger,error_msg,[A,B]).
+error_report(Node,B) ->
+ rpc:call(Node,error_logger,error_report,[B]).
+warning_msg(Node,A,B) ->
+ rpc:call(Node,error_logger,warning_msg,[A,B]).
+warning_report(Node,B) ->
+ rpc:call(Node,error_logger,warning_report,[B]).
+info_msg(Node,A,B) ->
+ rpc:call(Node,error_logger,info_msg,[A,B]).
+info_report(Node,B) ->
+ rpc:call(Node,error_logger,info_report,[B]).
+
+nn() ->
+ error_logger_warn_suite_helper.
+
+
+
+
+basic() ->
+ ?line Node = start_node(nn(),[]),
+ ?line ok = install_relay(Node),
+ ?line Self = self(),
+ ?line GL = group_leader(),
+ ?line format(Node,"~p~n",[Self]),
+ ?line ?EXPECT({handle_event,{error,GL,{_,"~p~n",[Self]}}}),
+ ?line error_msg(Node,"~p~n",[Self]),
+ ?line ?EXPECT({handle_event,{error,GL,{_,"~p~n",[Self]}}}),
+ ?line warning_msg(Node,"~p~n",[Self]),
+ ?line ?EXPECT({handle_event,{error,GL,{_,"~p~n",[Self]}}}),
+ ?line info_msg(Node,"~p~n",[Self]),
+ ?line ?EXPECT({handle_event,{info_msg,GL,{_,"~p~n",[Self]}}}),
+ ?line Report = [{self,Self},{gl,GL},make_ref()],
+ ?line error_report(Node,Report),
+ ?line ?EXPECT({handle_event,{error_report,GL,{_,std_error,Report}}}),
+ ?line warning_report(Node,Report),
+ ?line ?EXPECT({handle_event,{error_report,GL,{_,std_error,Report}}}),
+ ?line info_report(Node,Report),
+ ?line ?EXPECT({handle_event,{info_report,GL,{_,std_info,Report}}}),
+
+ ?line stop_node(Node),
+ ok.
+
+warnings_info() ->
+ ?line Node = start_node(nn(),"+Wi"),
+ ?line ok = install_relay(Node),
+ ?line Self = self(),
+ ?line GL = group_leader(),
+ ?line Report = [{self,Self},{gl,GL},make_ref()],
+ ?line warning_msg(Node,"~p~n",[Self]),
+ ?line ?EXPECT({handle_event,{info_msg,GL,{_,"~p~n",[Self]}}}),
+ ?line warning_report(Node,Report),
+ ?line ?EXPECT({handle_event,{info_report,GL,{_,std_info,Report}}}),
+ ?line stop_node(Node),
+ ok.
+
+warnings_warnings() ->
+ ?line Node = start_node(nn(),"+Ww"),
+ ?line ok = install_relay(Node),
+ ?line Self = self(),
+ ?line GL = group_leader(),
+ ?line Report = [{self,Self},{gl,GL},make_ref()],
+ ?line warning_msg(Node,"~p~n",[Self]),
+ ?line ?EXPECT({handle_event,{warning_msg,GL,{_,"~p~n",[Self]}}}),
+ ?line warning_report(Node,Report),
+ ?line ?EXPECT({handle_event,{warning_report,GL,{_,std_warning,Report}}}),
+ ?line stop_node(Node),
+ ok.
+
+
+% RB...
+
+quote(String) ->
+ case os:type() of
+ {win32,_} ->
+ "\\\""++String++"\\\"";
+ _ ->
+ "'\""++String++"\"'"
+ end.
+
+iquote(String) ->
+ case os:type() of
+ {win32,_} ->
+ "\\\""++String++"\\\"";
+ _ ->
+ "\""++String++"\""
+ end.
+
+oquote(String) ->
+ case os:type() of
+ {win32,_} ->
+ "\""++String++"\"";
+ _ ->
+ "'"++String++"'"
+ end.
+
+
+findstr(String,FileName) ->
+ File=binary_to_list(element(2,file:read_file(FileName))),
+ findstrc(String,File).
+
+findstrc(String,File) ->
+ case string:str(File,String) of
+ N when is_integer(N),
+ N > 0 ->
+ S2 = lists:sublist(File,N,length(File)),
+ case string:str(S2,"\n") of
+ 0 ->
+ 1;
+ M ->
+ S3 = lists:sublist(S2,M,length(S2)),
+ 1 + findstrc(String,S3)
+ end;
+ _ ->
+ 0
+ end.
+
+% Doesn't count empty lines
+lines(File) ->
+ length(
+ string:tokens(
+ binary_to_list(
+ element(2,file:read_file(File))),
+ "\n")).
+
+%directories anf filenames
+ld() ->
+ Config = get(elw_config),
+ PrivDir = ?config(priv_dir, Config),
+ filename:absname(PrivDir).
+
+lf() ->
+ filename:join([ld(),"logfile.txt"]).
+rd() ->
+ Config = get(elw_config),
+ PrivDir = ?config(priv_dir, Config),
+ LogDir = filename:join(PrivDir,"log"),
+ file:make_dir(LogDir),
+ filename:absname(LogDir).
+rf() ->
+ filename:join([rd(),"1"]).
+
+nice_stop_node(Name) ->
+ erlang:monitor_node(Name, true),
+ rpc:call(Name, init, stop, []),
+ receive
+ {nodedown,Name} -> ok
+ end.
+
+%rensa rd() f�re varje rapport-test s� man bara f�r en fil...
+clean_rd() ->
+ {ok,L} = file:list_dir(rd()),
+ lists:foreach(fun(F) ->
+ file:delete(F)
+ end,
+ [filename:append(rd(),X) || X <- L]),
+ ok.
+
+fake_gl(Node,What,A) ->
+ Fun = fun() ->
+ group_leader(self(),self()),
+ error_logger:What(A)
+ end,
+ rpc:call(Node,erlang,apply,[Fun,[]]).
+fake_gl(Node,What,A,B) ->
+ Fun = fun() ->
+ group_leader(self(),self()),
+ error_logger:What(A,B)
+ end,
+ rpc:call(Node,erlang,apply,[Fun,[]]).
+
+
+one_rb_lines(Param) ->
+ file:delete(lf()),
+ rb:start_log(lf()),
+ apply(rb,show,Param),
+ rb:stop_log(),
+ lines(lf()).
+
+one_rb_findstr(Param,String) ->
+ file:delete(lf()),
+ rb:start_log(lf()),
+ apply(rb,show,Param),
+ rb:stop_log(),
+ findstr(String,lf()).
+
+% Tests
+rb_basic() ->
+ ?line clean_rd(),
+ % Behold, the magic parameters to activate rb logging...
+ ?line Node = start_node(nn(),"-boot start_sasl -sasl error_logger_mf_dir "++
+ quote(rd())++" error_logger_mf_maxbytes 5000 "
+ "error_logger_mf_maxfiles 5"),
+ ?line Self = self(),
+ ?line GL = group_leader(),
+ ?line Report = [{self,Self},{gl,GL},make_ref()],
+ ?line fake_gl(Node,warning_msg,"~p~n",[Self]),
+ ?line fake_gl(Node,warning_report,Report),
+ ?line nice_stop_node(Node),
+ ?line application:start(sasl),
+ ?line rb:start([{report_dir, rd()}]),
+ ?line rb:list(),
+ ?line true = (one_rb_lines([error]) > 1),
+ ?line true = (one_rb_lines([error_report]) > 1),
+ ?line 1 = one_rb_findstr([error],pid_to_list(Self)),
+ ?line 1 = one_rb_findstr([error_report],pid_to_list(Self)),
+ ?line 2 = one_rb_findstr([],pid_to_list(Self)),
+ ?line true = (one_rb_findstr([progress],"===") > 4),
+ ?line rb:stop(),
+ ?line application:stop(sasl),
+ ?line stop_node(Node),
+ ok.
+
+rb_warnings_info() ->
+ ?line clean_rd(),
+ ?line Node = start_node(nn(),"+W i -boot start_sasl -sasl error_logger_mf_dir "++
+ quote(rd())++" error_logger_mf_maxbytes 5000 "
+ "error_logger_mf_maxfiles 5"),
+ ?line Self = self(),
+ ?line GL = group_leader(),
+ ?line Report = [{self,Self},{gl,GL},make_ref()],
+ ?line fake_gl(Node,warning_msg,"~p~n",[Self]),
+ ?line fake_gl(Node,warning_report,Report),
+ ?line nice_stop_node(Node),
+ ?line application:start(sasl),
+ ?line rb:start([{report_dir, rd()}]),
+ ?line rb:list(),
+ ?line true = (one_rb_lines([error]) =:= 0),
+ ?line true = (one_rb_lines([error_report]) =:= 0),
+ ?line 0 = one_rb_findstr([error],pid_to_list(Self)),
+ ?line 0 = one_rb_findstr([error_report],pid_to_list(Self)),
+ ?line 0 = one_rb_findstr([warning_msg],pid_to_list(Self)),
+ ?line 0 = one_rb_findstr([warning_report],pid_to_list(Self)),
+ ?line 1 = one_rb_findstr([info_msg],pid_to_list(Self)),
+ ?line 1 = one_rb_findstr([info_report],pid_to_list(Self)),
+ ?line 2 = one_rb_findstr([],pid_to_list(Self)),
+ ?line true = (one_rb_findstr([progress],"===") > 4),
+ ?line rb:stop(),
+ ?line application:stop(sasl),
+ ?line stop_node(Node),
+ ok.
+
+rb_warnings_warnings() ->
+ ?line clean_rd(),
+ ?line Node = start_node(nn(),"+W w -boot start_sasl -sasl error_logger_mf_dir "++
+ quote(rd())++" error_logger_mf_maxbytes 5000 "
+ "error_logger_mf_maxfiles 5"),
+ ?line Self = self(),
+ ?line GL = group_leader(),
+ ?line Report = [{self,Self},{gl,GL},make_ref()],
+ ?line fake_gl(Node,warning_msg,"~p~n",[Self]),
+ ?line fake_gl(Node,warning_report,Report),
+ ?line nice_stop_node(Node),
+ ?line application:start(sasl),
+ ?line rb:start([{report_dir, rd()}]),
+ ?line rb:list(),
+ ?line true = (one_rb_lines([error]) =:= 0),
+ ?line true = (one_rb_lines([error_report]) =:= 0),
+ ?line 0 = one_rb_findstr([error],pid_to_list(Self)),
+ ?line 0 = one_rb_findstr([error_report],pid_to_list(Self)),
+ ?line 1 = one_rb_findstr([warning_msg],pid_to_list(Self)),
+ ?line 1 = one_rb_findstr([warning_report],pid_to_list(Self)),
+ ?line 0 = one_rb_findstr([info_msg],pid_to_list(Self)),
+ ?line 0 = one_rb_findstr([info_report],pid_to_list(Self)),
+ ?line 2 = one_rb_findstr([],pid_to_list(Self)),
+ ?line true = (one_rb_findstr([progress],"===") > 4),
+ ?line rb:stop(),
+ ?line application:stop(sasl),
+ ?line stop_node(Node),
+ ok.
+
+rb_trunc() ->
+ ?line clean_rd(),
+ ?line Node = start_node(nn(),"+W w -boot start_sasl -sasl error_logger_mf_dir "++
+ quote(rd())++" error_logger_mf_maxbytes 5000 "
+ "error_logger_mf_maxfiles 5"),
+ ?line Self = self(),
+ ?line GL = group_leader(),
+ ?line Report = [{self,Self},{gl,GL},make_ref()],
+ ?line fake_gl(Node,warning_msg,"~p~n",[Self]),
+ ?line fake_gl(Node,warning_report,Report),
+ ?line nice_stop_node(Node),
+ ?line application:start(sasl),
+ ?line {ok,File} = file:read_file(rf()),
+ ?line S=byte_size(File)-2,
+ ?line <<TFile:S/binary,_/binary>>=File,
+ ?line file:write_file(rf(),TFile),
+ ?line rb:start([{report_dir, rd()}]),
+ ?line rb:list(),
+ ?line true = (one_rb_lines([error]) =:= 0),
+ ?line true = (one_rb_lines([error_report]) =:= 0),
+ ?line 0 = one_rb_findstr([error],pid_to_list(Self)),
+ ?line 0 = one_rb_findstr([error_report],pid_to_list(Self)),
+ ?line 1 = one_rb_findstr([warning_msg],pid_to_list(Self)),
+ ?line 0 = one_rb_findstr([warning_report],pid_to_list(Self)),
+ ?line 0 = one_rb_findstr([info_msg],pid_to_list(Self)),
+ ?line 0 = one_rb_findstr([info_report],pid_to_list(Self)),
+ ?line 1 = one_rb_findstr([],pid_to_list(Self)),
+ ?line true = (one_rb_findstr([progress],"===") > 4),
+ ?line rb:stop(),
+ ?line application:stop(sasl),
+ ?line stop_node(Node),
+ ok.
+
+rb_utc() ->
+ ?line clean_rd(),
+ ?line Node = start_node(nn(),"+W w -boot start_sasl -sasl error_logger_mf_dir "++
+ quote(rd())++" error_logger_mf_maxbytes 5000 "
+ "error_logger_mf_maxfiles 5 -sasl utc_log true"),
+ ?line Self = self(),
+ ?line GL = group_leader(),
+ ?line Report = [{self,Self},{gl,GL},make_ref()],
+ ?line fake_gl(Node,warning_msg,"~p~n",[Self]),
+ ?line fake_gl(Node,warning_report,Report),
+ ?line nice_stop_node(Node),
+ ?line application:stop(sasl),
+ ?line UtcLog=case application:get_env(sasl,utc_log) of
+ {ok,true} ->
+ true;
+ _AllOthers ->
+ application:set_env(sasl,utc_log,true),
+ false
+ end,
+ ?line application:start(sasl),
+ ?line rb:start([{report_dir, rd()}]),
+ ?line rb:list(),
+ ?line Pr=one_rb_findstr([progress],"==="),
+ ?line Wm=one_rb_findstr([warning_msg],"==="),
+ ?line Wr=one_rb_findstr([warning_report],"==="),
+ ?line Sum=Pr+Wm+Wr,
+ ?line Sum=one_rb_findstr([],"UTC"),
+ ?line rb:stop(),
+ ?line application:stop(sasl),
+ ?line application:set_env(sasl,utc_log,UtcLog),
+ ?line stop_node(Node),
+ ok.
+
+file_utc() ->
+ ?line file:delete(lf()),
+ ?line SS="+W w -stdlib utc_log true -kernel error_logger "++ oquote("{file,"++iquote(lf())++"}"),
+ %erlang:display(SS),
+ ?line Node = start_node(nn(),SS),
+ %erlang:display(rpc:call(Node,application,get_env,[kernel,error_logger])),
+ ?line Self = self(),
+ ?line GL = group_leader(),
+ ?line fake_gl(Node,error_msg,"~p~n",[Self]),
+ ?line fake_gl(Node,warning_msg,"~p~n",[Self]),
+ ?line fake_gl(Node,info_msg,"~p~n",[Self]),
+ ?line Report = [{self,Self},{gl,GL},make_ref()],
+ ?line fake_gl(Node,error_report,Report),
+ ?line fake_gl(Node,warning_report,Report),
+ ?line fake_gl(Node,info_report,Report),
+ ?line nice_stop_node(Node),
+ ?line receive after 5000 -> ok end, % Let the node die, needed
+ ?line 6 = findstr("UTC",lf()),
+ ?line 2 = findstr("WARNING",lf()),
+ ?line 2 = findstr("ERROR",lf()),
+ ?line 2 = findstr("INFO",lf()),
+ ?line stop_node(Node),
+ ok.