diff options
author | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
commit | 84adefa331c4159d432d22840663c38f155cd4c1 (patch) | |
tree | bff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/kernel/test/error_logger_warn_SUITE.erl | |
download | otp-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.erl | 503 |
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. |