1 #[path = "../../tracing-futures/tests/support.rs"]
2 // we don't use some of the test support functions, but `tracing-futures` does.
3 #[allow(dead_code)]
4 mod support;
5 use support::*;
6 
7 use tracing::subscriber::with_default;
8 use tracing::Level;
9 use tracing_attributes::instrument;
10 
11 use std::convert::TryFrom;
12 use std::num::TryFromIntError;
13 
14 #[instrument(err)]
err() -> Result<u8, TryFromIntError>15 fn err() -> Result<u8, TryFromIntError> {
16     u8::try_from(1234)
17 }
18 
19 #[test]
test()20 fn test() {
21     let span = span::mock().named("err");
22     let (subscriber, handle) = subscriber::mock()
23         .new_span(span.clone())
24         .enter(span.clone())
25         .event(event::mock().at_level(Level::ERROR))
26         .exit(span.clone())
27         .drop_span(span)
28         .done()
29         .run_with_handle();
30     with_default(subscriber, || err().ok());
31     handle.assert_finished();
32 }
33 
34 #[instrument(err)]
err_async(polls: usize) -> Result<u8, TryFromIntError>35 async fn err_async(polls: usize) -> Result<u8, TryFromIntError> {
36     let future = PollN::new_ok(polls);
37     tracing::trace!(awaiting = true);
38     future.await.ok();
39     u8::try_from(1234)
40 }
41 
42 #[test]
test_async()43 fn test_async() {
44     let span = span::mock().named("err_async");
45     let (subscriber, handle) = subscriber::mock()
46         .new_span(span.clone())
47         .enter(span.clone())
48         .event(
49             event::mock()
50                 .with_fields(field::mock("awaiting").with_value(&true))
51                 .at_level(Level::TRACE),
52         )
53         .exit(span.clone())
54         .enter(span.clone())
55         .event(event::mock().at_level(Level::ERROR))
56         .exit(span.clone())
57         .drop_span(span)
58         .done()
59         .run_with_handle();
60     with_default(subscriber, || {
61         block_on_future(async { err_async(2).await }).ok();
62     });
63     handle.assert_finished();
64 }
65