@@ -16,6 +16,7 @@ use std::sync::Arc;
1616use std:: sync:: Barrier ;
1717use std:: sync:: atomic:: AtomicBool ;
1818use std:: sync:: atomic:: Ordering ;
19+ use std:: sync:: mpsc;
1920
2021use logforth_append_async:: AsyncBuilder ;
2122use logforth_core:: Append ;
@@ -56,10 +57,14 @@ impl Append for FailingFlush {
5657}
5758
5859#[ derive( Debug ) ]
59- struct NoopTrap ;
60+ struct CapturedTrap {
61+ errors : mpsc:: Sender < String > ,
62+ }
6063
61- impl Trap for NoopTrap {
62- fn trap ( & self , _: & Error ) { }
64+ impl Trap for CapturedTrap {
65+ fn trap ( & self , err : & Error ) {
66+ self . errors . send ( err. to_string ( ) ) . unwrap ( ) ;
67+ }
6368}
6469
6570#[ test]
@@ -92,14 +97,16 @@ fn flush_waits_for_worker_completion() {
9297}
9398
9499#[ test]
95- fn flush_propagates_errors ( ) {
100+ fn flush_handles_errors_in_worker_thread ( ) {
101+ let ( tx, rx) = mpsc:: channel ( ) ;
102+
96103 let async_append = AsyncBuilder :: new ( "async-flush-error" )
97- . trap ( NoopTrap )
104+ . trap ( CapturedTrap { errors : tx } )
98105 . append ( FailingFlush )
99106 . build ( ) ;
100107
101- let err = async_append. flush ( ) . unwrap_err ( ) ;
102- let err = err . to_string ( ) ;
103- assert ! ( err. contains ( "failed to flush" ) ) ;
108+ async_append. flush ( ) . unwrap ( ) ;
109+
110+ let err = rx . recv ( ) . unwrap ( ) ;
104111 assert ! ( err. contains( "flush failed" ) ) ;
105112}
0 commit comments