@@ -272,6 +272,7 @@ mod tests {
272272 use hmac:: { Hmac , Mac } ;
273273 use sha2:: Sha256 ;
274274 use tower:: ServiceExt ;
275+ use tracing_subscriber:: util:: SubscriberInitExt ;
275276 use trogon_nats:: jetstream:: { MockJetStreamContext , MockJetStreamPublisher } ;
276277
277278 type HmacSha256 = Hmac < Sha256 > ;
@@ -331,10 +332,31 @@ mod tests {
331332 builder. body ( Body :: from ( body. to_vec ( ) ) ) . unwrap ( )
332333 }
333334
335+ // ── ServeError ─────────────────────────────────────────────────────────
336+
337+ #[ test]
338+ fn serve_error_display_and_source ( ) {
339+ use async_nats:: jetstream:: context:: { CreateStreamError , CreateStreamErrorKind } ;
340+
341+ let io_err =
342+ ServeError :: Io ( std:: io:: Error :: new ( std:: io:: ErrorKind :: AddrInUse , "port taken" ) ) ;
343+ assert_eq ! ( io_err. to_string( ) , "server IO error: port taken" ) ;
344+ assert ! ( std:: error:: Error :: source( & io_err) . is_some( ) ) ;
345+
346+ let prov_err =
347+ ServeError :: Provision ( CreateStreamError :: new ( CreateStreamErrorKind :: EmptyStreamName ) ) ;
348+ assert ! ( prov_err. to_string( ) . contains( "stream provisioning failed" ) ) ;
349+ assert ! ( std:: error:: Error :: source( & prov_err) . is_some( ) ) ;
350+
351+ let io_err: ServeError = std:: io:: Error :: other ( "boom" ) . into ( ) ;
352+ assert ! ( matches!( io_err, ServeError :: Io ( _) ) ) ;
353+ }
354+
334355 // ── provision ────────────────────────────────────────────────────────────
335356
336357 #[ tokio:: test]
337358 async fn provision_creates_stream ( ) {
359+ let _guard = tracing_subscriber:: fmt ( ) . with_test_writer ( ) . set_default ( ) ;
338360 let js = MockJetStreamContext :: new ( ) ;
339361 let config = test_config ( None ) ;
340362
0 commit comments