@@ -235,129 +235,22 @@ end_per_group(_, Config) ->
235235 Config .
236236
237237% %--------------------------------------------------------------------
238- init_per_testcase (_TestCase , Config ) ->
238+ init_per_testcase (TestCase , Config ) ->
239239 ssh :stop (),
240240 ssh :start (),
241- {ok , TestLogHandlerRef } = ssh_test_lib :add_log_handler (),
242241 ssh_test_lib :verify_sanity_check (Config ),
243- [{ log_handler_ref , TestLogHandlerRef } | Config ] .
242+ ssh_test_lib : add_log_handler ( TestCase , Config ) .
244243
245244end_per_testcase (TestCase , Config ) ->
246245 {ok , Events } = ssh_test_lib :get_log_events (
247246 proplists :get_value (log_handler_ref , Config )),
248247 EventCnt = length (Events ),
249- {ok , InterestingEventCnt } = analyze_events (Events , EventCnt ),
248+ {ok , InterestingEventCnt } = ssh_test_lib : analyze_events (Events , EventCnt ),
250249 VerificationResult = verify_events (TestCase , InterestingEventCnt ),
251- ssh_test_lib :rm_log_handler (),
250+ ssh_test_lib :rm_log_handler (TestCase ),
252251 ssh :stop (),
253252 VerificationResult .
254253
255- analyze_events (_ , 0 ) ->
256- {ok , 0 };
257- analyze_events (Events , EventNumber ) when EventNumber > 0 ->
258- {ok , Cnt } = print_interesting_events (Events , 0 ),
259- case Cnt > 0 of
260- true ->
261- ct :comment (" (logger stats) interesting: ~p boring: ~p " ,
262- [Cnt , EventNumber - Cnt ]);
263- _ ->
264- ct :comment (" (logger stats) boring: ~p " ,
265- [length (Events )])
266- end ,
267- AllEventsSummary = lists :flatten ([process_event (E ) || E <- Events ]),
268- ct :log (" ~n Total logger events: ~p~n All events:~n~s " , [EventNumber , AllEventsSummary ]),
269- {ok , Cnt }.
270-
271- process_event (#{msg := {report ,
272- #{label := Label ,
273- report := [{supervisor , Supervisor },
274- {Status , Properties }]}},
275- level := Level }) ->
276- format_event1 (Label , Supervisor , Status , Properties , Level );
277- process_event (#{msg := {report ,
278- #{label := Label ,
279- report := [{supervisor , Supervisor },
280- {errorContext , _ErrorContext },
281- {reason , {Status , _ReasonDetails }},
282- {offender , Properties }]}},
283- level := Level }) ->
284- format_event1 (Label , Supervisor , Status , Properties , Level );
285- process_event (#{msg := {report ,
286- #{label := Label ,
287- report := [{supervisor , Supervisor },
288- {errorContext , _ErrorContext },
289- {reason , Status },
290- {offender , Properties }]}},
291- level := Level }) ->
292- format_event1 (Label , Supervisor , Status , Properties , Level );
293- process_event (#{msg := {report ,
294- #{label := Label ,
295- report := [Properties , []]}},
296- level := Level }) ->
297- {status , Status } = get_value (status , Properties ),
298- {pid , Pid } = get_value (pid , Properties ),
299- Id = get_value (registered_name , Properties ),
300- {initial_call , {M , F , Args }} = get_value (initial_call , Properties ),
301- io_lib :format (" [~44s ] ~6s ~30s ~20s ~30s ~20s :~10s (~40s )~n " ,
302- [io_lib :format (" ~p " , [E ]) ||
303- E <- [Pid , Level , Label , Status , Id , M , F , Args ]]);
304- process_event (#{msg := {report ,
305- #{label := Label ,
306- name := Pid ,
307- reason := {Reason , _Stack = [{M , F , Args , Location } | _ ]}}},
308- level := Level }) ->
309- io_lib :format (" [~44s ] ~6s ~30s ~20s ~30s ~20s :~10s (~40s ) ~30s~n " ,
310- [io_lib :format (" ~p " , [E ]) ||
311- E <- [Pid , Level , Label , Reason , undefined , M , F , Args , Location ]]);
312- process_event (#{msg := {report ,
313- #{label := Label ,
314- format := Format ,
315- args := Args }},
316- meta := #{pid := Pid },
317- level := Level }) ->
318- io_lib :format (" [~44s ] ~6s ~30s ~150s~n " ,
319- [io_lib :format (" ~p " , [E ]) ||
320- E <- [Pid , Level , Label ]] ++ [io_lib :format (Format , Args )]);
321- process_event (E ) ->
322- io_lib :format (" ~n ||RAW event||~n~p~n " , [E ]).
323-
324- format_event1 (Label , Supervisor , Status , Properties , Level ) ->
325- {pid , Pid } = get_value (pid , Properties ),
326- Id = get_value (id , Properties ),
327- {M , F , Args } = get_mfa_value (Properties ),
328- RestartType = get_value (restart_type , Properties ),
329- Significant = get_value (significant , Properties ),
330- io_lib :format (" [~30s <- ~10s ] ~6s ~30s ~20s ~30s ~20s :~10s (~40s ) ~20s ~25s~n " ,
331- [io_lib :format (" ~p " , [E ]) ||
332- E <- [Supervisor , Pid , Level , Label , Status , Id , M , F , Args ,
333- Significant , RestartType ]]).
334-
335- get_mfa_value (Properties ) ->
336- case get_value (mfargs , Properties ) of
337- {mfargs , MFA } ->
338- MFA ;
339- false ->
340- {mfa , MFA } = get_value (mfa , Properties ),
341- MFA
342- end .
343-
344- get_value (Key , List ) ->
345- case lists :keyfind (Key , 1 , List ) of
346- R = false ->
347- ct :log (" Key ~p not found in~n~p " , [Key , List ]),
348- R ;
349- R -> R
350- end .
351-
352- print_interesting_events ([], Cnt ) ->
353- {ok , Cnt };
354- print_interesting_events ([#{level := Level } = Event | Tail ], Cnt )
355- when Level /= info , Level /= notice , Level /= debug ->
356- ct :log (" ------------~n Interesting event found:~n~p~n ==========~n " , [Event ]),
357- print_interesting_events (Tail , Cnt + 1 );
358- print_interesting_events ([_ |Tail ], Cnt ) ->
359- print_interesting_events (Tail , Cnt ).
360-
361254verify_events (_TestCase , 0 ) -> ok ;
362255verify_events (no_sensitive_leak , 1 ) -> ok ;
363256verify_events (max_channels_option , 3 ) -> ok ;
@@ -1647,7 +1540,8 @@ kex_error(Config) ->
16471540 {preferred_algorithms ,[{kex ,[Kex1 ]}]}
16481541 ]),
16491542 Ref = make_ref (),
1650- ok = ssh_log_h :add_fun (kex_error ,
1543+ HandlerId = kex_error2 , % % avoid conflict with ssh_test_lib log handler
1544+ ok = ssh_log_h :add_fun (HandlerId ,
16511545 fun (#{msg := {report ,#{format := Fmt ,args := As ,label := {error_logger ,_ }}}}, Pid ) ->
16521546 true = (erlang :process_info (Pid ) =/= undefined ), % remove handler if we are dead
16531547 Pid ! {Ref , lists :flatten (io_lib :format (Fmt ,As ))};
@@ -1657,7 +1551,7 @@ kex_error(Config) ->
16571551 end ,
16581552 self ()),
16591553 Cleanup = fun () ->
1660- ok = logger :remove_handler (kex_error ),
1554+ ok = logger :remove_handler (HandlerId ),
16611555 ok = logger :set_primary_config (level , Level )
16621556 end ,
16631557 try
@@ -1670,7 +1564,7 @@ kex_error(Config) ->
16701564 ])
16711565 of
16721566 _ ->
1673- ok = logger :remove_handler (kex_error ),
1567+ ok = logger :remove_handler (HandlerId ),
16741568 ct :fail (" expected failure" , [])
16751569 catch
16761570 error :{badmatch ,{error ," Key exchange failed" }} ->
@@ -1796,7 +1690,7 @@ no_sensitive_leak(Config) ->
17961690 end ,
17971691
17981692 % % Install the test handler:
1799- Hname = no_sensitive_leak ,
1693+ Hname = no_sensitive_leak2 , % % avoid conflict with ssh_test_lib log handler
18001694 ok = ssh_log_h :add_fun (Hname ,
18011695 fun (#{msg := {report ,#{report := Rep }}}, Pid ) ->
18021696 true = (erlang :process_info (Pid , status ) =/= undefined ), % remove handler if we are dead
0 commit comments