mirror of
				https://git.proxmox.com/git/rustc
				synced 2025-10-31 19:28:21 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			156 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #[path = "../../tracing-futures/tests/support.rs"]
 | |
| // we don't use some of the test support functions, but `tracing-futures` does.
 | |
| #[allow(dead_code)]
 | |
| mod support;
 | |
| use support::*;
 | |
| 
 | |
| use tracing::subscriber::with_default;
 | |
| use tracing::Level;
 | |
| use tracing_attributes::instrument;
 | |
| 
 | |
| use std::convert::TryFrom;
 | |
| use std::num::TryFromIntError;
 | |
| 
 | |
| #[instrument(err)]
 | |
| fn err() -> Result<u8, TryFromIntError> {
 | |
|     u8::try_from(1234)
 | |
| }
 | |
| 
 | |
| #[instrument(err)]
 | |
| fn err_suspicious_else() -> Result<u8, TryFromIntError> {
 | |
|     {}
 | |
|     u8::try_from(1234)
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn test() {
 | |
|     let span = span::mock().named("err");
 | |
|     let (subscriber, handle) = subscriber::mock()
 | |
|         .new_span(span.clone())
 | |
|         .enter(span.clone())
 | |
|         .event(event::mock().at_level(Level::ERROR))
 | |
|         .exit(span.clone())
 | |
|         .drop_span(span)
 | |
|         .done()
 | |
|         .run_with_handle();
 | |
|     with_default(subscriber, || err().ok());
 | |
|     handle.assert_finished();
 | |
| }
 | |
| 
 | |
| #[instrument(err)]
 | |
| async fn err_async(polls: usize) -> Result<u8, TryFromIntError> {
 | |
|     let future = PollN::new_ok(polls);
 | |
|     tracing::trace!(awaiting = true);
 | |
|     future.await.ok();
 | |
|     u8::try_from(1234)
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn test_async() {
 | |
|     let span = span::mock().named("err_async");
 | |
|     let (subscriber, handle) = subscriber::mock()
 | |
|         .new_span(span.clone())
 | |
|         .enter(span.clone())
 | |
|         .event(
 | |
|             event::mock()
 | |
|                 .with_fields(field::mock("awaiting").with_value(&true))
 | |
|                 .at_level(Level::TRACE),
 | |
|         )
 | |
|         .exit(span.clone())
 | |
|         .enter(span.clone())
 | |
|         .event(event::mock().at_level(Level::ERROR))
 | |
|         .exit(span.clone())
 | |
|         .drop_span(span)
 | |
|         .done()
 | |
|         .run_with_handle();
 | |
|     with_default(subscriber, || {
 | |
|         block_on_future(async { err_async(2).await }).ok();
 | |
|     });
 | |
|     handle.assert_finished();
 | |
| }
 | |
| 
 | |
| #[instrument(err)]
 | |
| fn err_mut(out: &mut u8) -> Result<(), TryFromIntError> {
 | |
|     *out = u8::try_from(1234)?;
 | |
|     Ok(())
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn test_mut() {
 | |
|     let span = span::mock().named("err_mut");
 | |
|     let (subscriber, handle) = subscriber::mock()
 | |
|         .new_span(span.clone())
 | |
|         .enter(span.clone())
 | |
|         .event(event::mock().at_level(Level::ERROR))
 | |
|         .exit(span.clone())
 | |
|         .drop_span(span)
 | |
|         .done()
 | |
|         .run_with_handle();
 | |
|     with_default(subscriber, || err_mut(&mut 0).ok());
 | |
|     handle.assert_finished();
 | |
| }
 | |
| 
 | |
| #[instrument(err)]
 | |
| async fn err_mut_async(polls: usize, out: &mut u8) -> Result<(), TryFromIntError> {
 | |
|     let future = PollN::new_ok(polls);
 | |
|     tracing::trace!(awaiting = true);
 | |
|     future.await.ok();
 | |
|     *out = u8::try_from(1234)?;
 | |
|     Ok(())
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn test_mut_async() {
 | |
|     let span = span::mock().named("err_mut_async");
 | |
|     let (subscriber, handle) = subscriber::mock()
 | |
|         .new_span(span.clone())
 | |
|         .enter(span.clone())
 | |
|         .event(
 | |
|             event::mock()
 | |
|                 .with_fields(field::mock("awaiting").with_value(&true))
 | |
|                 .at_level(Level::TRACE),
 | |
|         )
 | |
|         .exit(span.clone())
 | |
|         .enter(span.clone())
 | |
|         .event(event::mock().at_level(Level::ERROR))
 | |
|         .exit(span.clone())
 | |
|         .drop_span(span)
 | |
|         .done()
 | |
|         .run_with_handle();
 | |
|     with_default(subscriber, || {
 | |
|         block_on_future(async { err_mut_async(2, &mut 0).await }).ok();
 | |
|     });
 | |
|     handle.assert_finished();
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn impl_trait_return_type() {
 | |
|     // Reproduces https://github.com/tokio-rs/tracing/issues/1227
 | |
| 
 | |
|     #[instrument(err)]
 | |
|     fn returns_impl_trait(x: usize) -> Result<impl Iterator<Item = usize>, String> {
 | |
|         Ok(0..x)
 | |
|     }
 | |
| 
 | |
|     let span = span::mock().named("returns_impl_trait");
 | |
| 
 | |
|     let (subscriber, handle) = subscriber::mock()
 | |
|         .new_span(
 | |
|             span.clone()
 | |
|                 .with_field(field::mock("x").with_value(&10usize).only()),
 | |
|         )
 | |
|         .enter(span.clone())
 | |
|         .exit(span.clone())
 | |
|         .drop_span(span)
 | |
|         .done()
 | |
|         .run_with_handle();
 | |
| 
 | |
|     with_default(subscriber, || {
 | |
|         for _ in returns_impl_trait(10).unwrap() {
 | |
|             // nop
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     handle.assert_finished();
 | |
| }
 | 
