@ -362,6 +362,7 @@ error_logger_redirect_test_() ->
{ " error reports are printed " ,
fun ( ) - >
error_logger : error_report ( [ { this , is } , a , { silly , format } ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w this: is, a, silly: format " , [ self ( ) ] ) ) ,
@ -371,6 +372,7 @@ error_logger_redirect_test_() ->
{ " string error reports are printed " ,
fun ( ) - >
error_logger : error_report ( " this is less silly " ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w this is less silly " , [ self ( ) ] ) ) ,
@ -380,6 +382,7 @@ error_logger_redirect_test_() ->
{ " error messages are printed " ,
fun ( ) - >
error_logger : error_msg ( " doom, doom has come upon you all " ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w doom, doom has come upon you all " , [ self ( ) ] ) ) ,
@ -389,7 +392,8 @@ error_logger_redirect_test_() ->
{ " error messages are truncated at 4096 characters " ,
fun ( ) - >
error_logger : error_msg ( " doom, doom has come upon you all ~p " , [ string : copies ( " doom " , 10000 ) ] ) ,
timer : sleep ( 100 ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 1000 ) ,
{ _ , _ , Msg } = pop ( ) ,
? assert ( length ( lists : flatten ( Msg ) ) < 5100 )
end
@ -397,6 +401,7 @@ error_logger_redirect_test_() ->
{ " info reports are printed " ,
fun ( ) - >
error_logger : info_report ( [ { this , is } , a , { silly , format } ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [info] ~w this: is, a, silly: format " , [ self ( ) ] ) ) ,
@ -406,6 +411,7 @@ error_logger_redirect_test_() ->
{ " info reports are truncated at 4096 characters " ,
fun ( ) - >
error_logger : info_report ( [ [ { this , is } , a , { silly , format } ] | | _ < - lists : seq ( 0 , 600 ) ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 1000 ) ,
{ _ , _ , Msg } = pop ( ) ,
? assert ( length ( lists : flatten ( Msg ) ) < 5000 )
@ -414,6 +420,7 @@ error_logger_redirect_test_() ->
{ " single term info reports are printed " ,
fun ( ) - >
error_logger : info_report ( { foolish , bees } ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [info] ~w {foolish,bees} " , [ self ( ) ] ) ) ,
@ -423,6 +430,7 @@ error_logger_redirect_test_() ->
{ " single term error reports are printed " ,
fun ( ) - >
error_logger : error_report ( { foolish , bees } ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w {foolish,bees} " , [ self ( ) ] ) ) ,
@ -432,6 +440,7 @@ error_logger_redirect_test_() ->
{ " string info reports are printed " ,
fun ( ) - >
error_logger : info_report ( " this is less silly " ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [info] ~w this is less silly " , [ self ( ) ] ) ) ,
@ -441,7 +450,8 @@ error_logger_redirect_test_() ->
{ " string info reports are truncated at 4096 characters " ,
fun ( ) - >
error_logger : info_report ( string : copies ( " this is less silly " , 1000 ) ) ,
timer : sleep ( 100 ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 1000 ) ,
{ _ , _ , Msg } = pop ( ) ,
? assert ( length ( lists : flatten ( Msg ) ) < 5100 )
end
@ -450,6 +460,7 @@ error_logger_redirect_test_() ->
{ " info messages are printed " ,
fun ( ) - >
error_logger : info_msg ( " doom, doom has come upon you all " ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [info] ~w doom, doom has come upon you all " , [ self ( ) ] ) ) ,
@ -459,7 +470,8 @@ error_logger_redirect_test_() ->
{ " info messages are truncated at 4096 characters " ,
fun ( ) - >
error_logger : info_msg ( " doom, doom has come upon you all ~p " , [ string : copies ( " doom " , 10000 ) ] ) ,
timer : sleep ( 100 ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 1000 ) ,
{ _ , _ , Msg } = pop ( ) ,
? assert ( length ( lists : flatten ( Msg ) ) < 5100 )
end
@ -469,6 +481,7 @@ error_logger_redirect_test_() ->
fun ( ) - >
error_logger : warning_msg ( " doom, doom has come upon you all " ) ,
Map = error_logger : warning_map ( ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [ ~w ] ~w doom, doom has come upon you all " , [ Map , self ( ) ] ) ) ,
@ -479,6 +492,7 @@ error_logger_redirect_test_() ->
fun ( ) - >
error_logger : warning_report ( [ { i , like } , pie ] ) ,
Map = error_logger : warning_map ( ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [ ~w ] ~w i: like, pie " , [ Map , self ( ) ] ) ) ,
@ -489,6 +503,7 @@ error_logger_redirect_test_() ->
fun ( ) - >
error_logger : warning_report ( { foolish , bees } ) ,
Map = error_logger : warning_map ( ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [ ~w ] ~w {foolish,bees} " , [ Map , self ( ) ] ) ) ,
@ -498,6 +513,7 @@ error_logger_redirect_test_() ->
{ " application stop reports " ,
fun ( ) - >
error_logger : info_report ( [ { application , foo } , { exited , quittin_time } , { type , lazy } ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [info] ~w Application foo exited with reason: quittin_time " , [ self ( ) ] ) ) ,
@ -507,6 +523,7 @@ error_logger_redirect_test_() ->
{ " supervisor reports " ,
fun ( ) - >
error_logger : error_report ( supervisor_report , [ { errorContext , france } , { offender , [ { name , mini_steve } , { mfargs , { a , b , [ c ] } } , { pid , bleh } ] } , { reason , fired } , { supervisor , { local , steve } } ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w Supervisor steve had child mini_steve started with a:b(c) at bleh exit with reason fired in context france " , [ self ( ) ] ) ) ,
@ -516,6 +533,7 @@ error_logger_redirect_test_() ->
{ " supervisor reports with real error " ,
fun ( ) - >
error_logger : error_report ( supervisor_report , [ { errorContext , france } , { offender , [ { name , mini_steve } , { mfargs , { a , b , [ c ] } } , { pid , bleh } ] } , { reason , { function_clause , [ { crash , handle_info , [ foo ] } ] } } , { supervisor , { local , steve } } ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w Supervisor steve had child mini_steve started with a:b(c) at bleh exit with reason no function clause matching crash:handle_info(foo) in context france " , [ self ( ) ] ) ) ,
@ -526,6 +544,7 @@ error_logger_redirect_test_() ->
{ " supervisor_bridge reports " ,
fun ( ) - >
error_logger : error_report ( supervisor_report , [ { errorContext , france } , { offender , [ { mod , mini_steve } , { pid , bleh } ] } , { reason , fired } , { supervisor , { local , steve } } ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w Supervisor steve had child at module mini_steve at bleh exit with reason fired in context france " , [ self ( ) ] ) ) ,
@ -535,6 +554,7 @@ error_logger_redirect_test_() ->
{ " application progress report " ,
fun ( ) - >
error_logger : info_report ( progress , [ { application , foo } , { started_at , node ( ) } ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [info] ~w Application foo started on node ~w " , [ self ( ) , node ( ) ] ) ) ,
@ -545,6 +565,7 @@ error_logger_redirect_test_() ->
fun ( ) - >
lager : set_loglevel ( ? MODULE , debug ) ,
error_logger : info_report ( progress , [ { supervisor , { local , foo } } , { started , [ { mfargs , { foo , bar , 1 } } , { pid , baz } ] } ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [debug] ~w Supervisor foo started foo:bar/1 at pid baz " , [ self ( ) ] ) ) ,
@ -554,6 +575,7 @@ error_logger_redirect_test_() ->
{ " crash report for emfile " ,
fun ( ) - >
error_logger : error_report ( crash_report , [ [ { pid , self ( ) } , { error_info , { error , { emfile , [ { stack , trace , 1 } ] } , [ ] } } ] , [ ] ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w CRASH REPORT Process ~w with 0 neighbours crashed with reason: maximum number of file descriptors exhausted, check ulimit -n " , [ self ( ) , self ( ) ] ) ) ,
@ -563,6 +585,7 @@ error_logger_redirect_test_() ->
{ " crash report for system process limit " ,
fun ( ) - >
error_logger : error_report ( crash_report , [ [ { pid , self ( ) } , { error_info , { error , { system_limit , [ { erlang , spawn , 1 } ] } , [ ] } } ] , [ ] ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w CRASH REPORT Process ~w with 0 neighbours crashed with reason: system limit: maximum number of processes exceeded " , [ self ( ) , self ( ) ] ) ) ,
@ -572,6 +595,7 @@ error_logger_redirect_test_() ->
{ " crash report for system process limit2 " ,
fun ( ) - >
error_logger : error_report ( crash_report , [ [ { pid , self ( ) } , { error_info , { error , { system_limit , [ { erlang , spawn_opt , 1 } ] } , [ ] } } ] , [ ] ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w CRASH REPORT Process ~w with 0 neighbours crashed with reason: system limit: maximum number of processes exceeded " , [ self ( ) , self ( ) ] ) ) ,
@ -581,6 +605,7 @@ error_logger_redirect_test_() ->
{ " crash report for system port limit " ,
fun ( ) - >
error_logger : error_report ( crash_report , [ [ { pid , self ( ) } , { error_info , { error , { system_limit , [ { erlang , open_port , 1 } ] } , [ ] } } ] , [ ] ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w CRASH REPORT Process ~w with 0 neighbours crashed with reason: system limit: maximum number of ports exceeded " , [ self ( ) , self ( ) ] ) ) ,
@ -590,6 +615,7 @@ error_logger_redirect_test_() ->
{ " crash report for system port limit " ,
fun ( ) - >
error_logger : error_report ( crash_report , [ [ { pid , self ( ) } , { error_info , { error , { system_limit , [ { erlang , list_to_atom , 1 } ] } , [ ] } } ] , [ ] ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w CRASH REPORT Process ~w with 0 neighbours crashed with reason: system limit: tried to create an atom larger than 255, or maximum atom count exceeded " , [ self ( ) , self ( ) ] ) ) ,
@ -599,6 +625,7 @@ error_logger_redirect_test_() ->
{ " crash report for system ets table limit " ,
fun ( ) - >
error_logger : error_report ( crash_report , [ [ { pid , self ( ) } , { error_info , { error , { system_limit , [ { ets , new , [ segment_offsets , [ ordered_set , public ] ] } , { mi_segment , open_write , 1 } , { mi_buffer_converter , handle_cast , 2 } , { gen_server , handle_msg , 5 } , { proc_lib , init_p_do_apply , 3 } ] } , [ ] } } ] , [ ] ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
{ _ , _ , Msg } = pop ( ) ,
Expected = lists : flatten ( io_lib : format ( " [error] ~w CRASH REPORT Process ~w with 0 neighbours crashed with reason: system limit: maximum number of ETS tables exceeded " , [ self ( ) , self ( ) ] ) ) ,
@ -608,7 +635,8 @@ error_logger_redirect_test_() ->
{ " crash report for unknown system limit should be truncated at 500 characters " ,
fun ( ) - >
error_logger : error_report ( crash_report , [ [ { pid , self ( ) } , { error_info , { error , { system_limit , [ { wtf , boom , [ string : copies ( " aaaa " , 4096 ) ] } ] } , [ ] } } ] , [ ] ] ) ,
timer : sleep ( 100 ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 1000 ) ,
{ _ , _ , Msg } = pop ( ) ,
? assert ( length ( lists : flatten ( Msg ) ) > 500 ) ,
? assert ( length ( lists : flatten ( Msg ) ) < 700 )
@ -618,17 +646,20 @@ error_logger_redirect_test_() ->
fun ( ) - >
lager : set_loglevel ( ? MODULE , error ) ,
error_logger : info_report ( [ hello , world ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
? assertEqual ( 0 , count ( ) ) ,
? assertEqual ( 0 , count_ignored ( ) ) ,
lager : set_loglevel ( ? MODULE , info ) ,
error_logger : info_report ( [ hello , world ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
? assertEqual ( 1 , count ( ) ) ,
? assertEqual ( 0 , count_ignored ( ) ) ,
lager : set_loglevel ( ? MODULE , error ) ,
lager_mochiglobal : put ( loglevel , ? DEBUG ) ,
error_logger : info_report ( [ hello , world ] ) ,
_ = gen_event : which_handlers ( error_logger ) ,
timer : sleep ( 100 ) ,
? assertEqual ( 1 , count ( ) ) ,
? assertEqual ( 1 , count_ignored ( ) )