aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/test/error_logger_SUITE.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kernel/test/error_logger_SUITE.erl')
-rw-r--r--lib/kernel/test/error_logger_SUITE.erl300
1 files changed, 300 insertions, 0 deletions
diff --git a/lib/kernel/test/error_logger_SUITE.erl b/lib/kernel/test/error_logger_SUITE.erl
new file mode 100644
index 0000000000..a737949bbb
--- /dev/null
+++ b/lib/kernel/test/error_logger_SUITE.erl
@@ -0,0 +1,300 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1996-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_SUITE).
+
+-include("test_server.hrl").
+
+%%-----------------------------------------------------------------
+%% We don't have to test the normal behaviour here, i.e. the tty
+%% handler.
+%% We will add an own error handler in order to verify that the
+%% error_logger deliver the expected events.
+%%-----------------------------------------------------------------
+
+-export([all/1, error_report/1, info_report/1, error/1, info/1,
+ emulator/1, tty/1, logfile/1, add/1, delete/1]).
+
+-export([generate_error/0]).
+
+-export([init/1,
+ handle_event/2, handle_call/2, handle_info/2,
+ terminate/2]).
+
+
+all(suite) ->
+ [error_report, info_report, error, info,
+ emulator, tty, logfile, add, delete].
+
+%%-----------------------------------------------------------------
+
+error_report(suite) -> [];
+error_report(doc) -> [];
+error_report(Config) when list(Config) ->
+ ?line error_logger:add_report_handler(?MODULE, self()),
+ Rep1 = [{tag1,"data1"},{tag2,data2},{tag3,3}],
+ Rep2 = [testing,"testing",{tag1,"tag1"}],
+ Rep3 = "This is a string !",
+ Rep4 = {this,is,a,tuple},
+ ?line ok = error_logger:error_report(Rep1),
+ reported(error_report, std_error, Rep1),
+ ?line ok = error_logger:error_report(Rep2),
+ reported(error_report, std_error, Rep2),
+ ?line ok = error_logger:error_report(Rep3),
+ reported(error_report, std_error, Rep3),
+ ?line ok = error_logger:error_report(Rep4),
+ reported(error_report, std_error, Rep4),
+
+ ?line ok = error_logger:error_report(test_type, Rep1),
+ reported(error_report, test_type, Rep1),
+ ?line ok = error_logger:error_report(test_type, Rep2),
+ reported(error_report, test_type, Rep2),
+ ?line ok = error_logger:error_report(test_type, Rep3),
+ reported(error_report, test_type, Rep3),
+ ?line ok = error_logger:error_report(test_type, Rep4),
+ reported(error_report, test_type, Rep4),
+
+ ?line ok = error_logger:error_report("test_type", Rep1),
+ reported(error_report, "test_type", Rep1),
+ ?line ok = error_logger:error_report({test,type}, Rep2),
+ reported(error_report, {test,type}, Rep2),
+ ?line ok = error_logger:error_report([test,type], Rep3),
+ reported(error_report, [test,type], Rep3),
+ ?line ok = error_logger:error_report(1, Rep4),
+ reported(error_report, 1, Rep4),
+
+ ?line my_yes = error_logger:delete_report_handler(?MODULE),
+ ok.
+
+%%-----------------------------------------------------------------
+
+info_report(suite) -> [];
+info_report(doc) -> [];
+info_report(Config) when list(Config) ->
+ ?line error_logger:add_report_handler(?MODULE, self()),
+ Rep1 = [{tag1,"data1"},{tag2,data2},{tag3,3}],
+ Rep2 = [testing,"testing",{tag1,"tag1"}],
+ Rep3 = "This is a string !",
+ Rep4 = {this,is,a,tuple},
+ ?line ok = error_logger:info_report(Rep1),
+ reported(info_report, std_info, Rep1),
+ ?line ok = error_logger:info_report(Rep2),
+ reported(info_report, std_info, Rep2),
+ ?line ok = error_logger:info_report(Rep3),
+ reported(info_report, std_info, Rep3),
+ ?line ok = error_logger:info_report(Rep4),
+ reported(info_report, std_info, Rep4),
+
+ ?line ok = error_logger:info_report(test_type, Rep1),
+ reported(info_report, test_type, Rep1),
+ ?line ok = error_logger:info_report(test_type, Rep2),
+ reported(info_report, test_type, Rep2),
+ ?line ok = error_logger:info_report(test_type, Rep3),
+ reported(info_report, test_type, Rep3),
+ ?line ok = error_logger:info_report(test_type, Rep4),
+ reported(info_report, test_type, Rep4),
+
+ ?line ok = error_logger:info_report("test_type", Rep1),
+ reported(info_report, "test_type", Rep1),
+ ?line ok = error_logger:info_report({test,type}, Rep2),
+ reported(info_report, {test,type}, Rep2),
+ ?line ok = error_logger:info_report([test,type], Rep3),
+ reported(info_report, [test,type], Rep3),
+ ?line ok = error_logger:info_report(1, Rep4),
+ reported(info_report, 1, Rep4),
+
+ ?line my_yes = error_logger:delete_report_handler(?MODULE),
+ ok.
+
+%%-----------------------------------------------------------------
+
+error(suite) -> [];
+error(doc) -> [];
+error(Config) when list(Config) ->
+ ?line error_logger:add_report_handler(?MODULE, self()),
+ Msg1 = "This is a plain text string~n",
+ Msg2 = "This is a text with arguments ~p~n",
+ Arg2 = "This is the argument",
+ Msg3 = {erroneous,msg},
+
+ ?line ok = error_logger:error_msg(Msg1),
+ reported(error, Msg1, []),
+ ?line ok = error_logger:error_msg(Msg2, Arg2),
+ reported(error, Msg2, Arg2),
+ ?line ok = error_logger:error_msg(Msg3),
+ reported(error, Msg3, []),
+
+ ?line ok = error_logger:error_msg(Msg1, []),
+ reported(error, Msg1, []),
+ ?line ok = error_logger:error_msg(Msg2, Arg2),
+ reported(error, Msg2, Arg2),
+ ?line ok = error_logger:error_msg(Msg3, []),
+ reported(error, Msg3, []),
+
+ ?line ok = error_logger:format(Msg1, []),
+ reported(error, Msg1, []),
+ ?line ok = error_logger:format(Msg2, Arg2),
+ reported(error, Msg2, Arg2),
+ ?line ok = error_logger:format(Msg3, []),
+ reported(error, Msg3, []),
+
+ ?line my_yes = error_logger:delete_report_handler(?MODULE),
+ ok.
+
+%%-----------------------------------------------------------------
+
+info(suite) -> [];
+info(doc) -> [];
+info(Config) when list(Config) ->
+ ?line error_logger:add_report_handler(?MODULE, self()),
+ Msg1 = "This is a plain text string~n",
+ Msg2 = "This is a text with arguments ~p~n",
+ Arg2 = "This is the argument",
+ Msg3 = {erroneous,msg},
+
+ ?line ok = error_logger:info_msg(Msg1),
+ reported(info_msg, Msg1, []),
+ ?line ok = error_logger:info_msg(Msg2, Arg2),
+ reported(info_msg, Msg2, Arg2),
+ ?line ok = error_logger:info_msg(Msg3),
+ reported(info_msg, Msg3, []),
+
+ ?line ok = error_logger:info_msg(Msg1, []),
+ reported(info_msg, Msg1, []),
+ ?line ok = error_logger:info_msg(Msg2, Arg2),
+ reported(info_msg, Msg2, Arg2),
+ ?line ok = error_logger:info_msg(Msg3, []),
+ reported(info_msg, Msg3, []),
+
+ ?line my_yes = error_logger:delete_report_handler(?MODULE),
+ ok.
+
+%%-----------------------------------------------------------------
+
+emulator(suite) -> [];
+emulator(doc) -> [];
+emulator(Config) when list(Config) ->
+ ?line error_logger:add_report_handler(?MODULE, self()),
+ spawn(?MODULE, generate_error, []),
+ reported(emulator),
+ ?line my_yes = error_logger:delete_report_handler(?MODULE),
+ ok.
+
+generate_error() ->
+ erlang:error({badmatch,4}).
+
+%%-----------------------------------------------------------------
+%% We don't enables or disables tty error logging here. We do not
+%% want to interact with the test run.
+%%-----------------------------------------------------------------
+
+tty(suite) -> [];
+tty(doc) -> [];
+tty(Config) when is_list(Config) ->
+ ?line {'EXIT', _Reason} = (catch error_logger:tty(dummy)),
+ ok.
+
+%%-----------------------------------------------------------------
+%% If where already exists a logfile we skip this test case !!
+%%-----------------------------------------------------------------
+
+logfile(suite) -> [];
+logfile(doc) -> [];
+logfile(Config) when list(Config) ->
+ ?line case error_logger:logfile(filename) of
+ {error, no_log_file} -> % Ok, we continues.
+ do_logfile();
+ _ ->
+ ok
+ end.
+
+do_logfile() ->
+ ?line {error, _} = error_logger:logfile(close),
+ ?line {error, _} = error_logger:logfile({open,{error}}),
+ ?line ok = error_logger:logfile({open, "dummy_logfile.log"}),
+ ?line "dummy_logfile.log" = error_logger:logfile(filename),
+ ?line ok = error_logger:logfile(close),
+ ?line {'EXIT',_} = (catch error_logger:logfile(dummy)),
+ ok.
+
+%%-----------------------------------------------------------------
+
+add(suite) -> [];
+add(doc) -> [];
+add(Config) when list(Config) ->
+ ?line {'EXIT',_} = (catch error_logger:add_report_handler("dummy")),
+ ?line {'EXIT',_} = error_logger:add_report_handler(non_existing),
+ ?line my_error = error_logger:add_report_handler(?MODULE, [error]),
+ ok.
+
+%%-----------------------------------------------------------------
+
+delete(suite) -> [];
+delete(doc) -> [];
+delete(Config) when list(Config) ->
+ ?line {'EXIT',_} = (catch error_logger:delete_report_handler("dummy")),
+ ?line {error,_} = error_logger:delete_report_handler(non_existing),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Check that the report has been received.
+%%-----------------------------------------------------------------
+reported(Tag, Type, Report) ->
+ receive
+ {Tag, Type, Report} ->
+ test_server:messages_get(),
+ ok
+ after 1000 ->
+ test_server:fail(no_report_received)
+ end.
+
+reported(emulator) ->
+ receive
+ {error, "~s~n", String} when list(String) ->
+ test_server:messages_get(),
+ ok
+ after 1000 ->
+ test_server:fail(no_report_received)
+ end.
+
+%%-----------------------------------------------------------------
+%% The error_logger handler (gen_event behaviour).
+%% Sends a notification to the Tester process about the events
+%% generated by the Tester process.
+%%-----------------------------------------------------------------
+init(Tester) when pid(Tester) ->
+ {ok, Tester};
+init(Config) when list(Config) ->
+ my_error.
+
+handle_event({Tag, _GL, {_EPid, Type, Report}}, Tester) ->
+ Tester ! {Tag, Type, Report},
+ {ok, Tester};
+handle_event(_Event, Tester) ->
+ {ok, Tester}.
+
+handle_info({emulator, _GL, String}, Tester) ->
+ Tester ! {emulator, String},
+ {ok, Tester};
+handle_info(_, Tester) ->
+ {ok, Tester}.
+
+handle_call(_Query, Tester) -> {ok, {error, bad_query}, Tester}.
+
+terminate(_Reason, _Tester) ->
+ my_yes.