| use tracing::{subscriber::with_default, Id, Level}; | |
| use tracing_attributes::instrument; | |
| use tracing_mock::*; | |
| #[instrument] | |
| fn with_default_parent() {} | |
| #[instrument(parent = parent_span, skip(parent_span))] | |
| fn with_explicit_parent<P>(parent_span: P) | |
| where | |
| P: Into<Option<Id>>, | |
| { | |
| } | |
| #[test] | |
| fn default_parent_test() { | |
| let contextual_parent = expect::span().named("contextual_parent"); | |
| let child = expect::span().named("with_default_parent"); | |
| let (subscriber, handle) = subscriber::mock() | |
| .new_span( | |
| contextual_parent | |
| .clone() | |
| .with_contextual_parent(None) | |
| .with_explicit_parent(None), | |
| ) | |
| .new_span( | |
| child | |
| .clone() | |
| .with_contextual_parent(Some("contextual_parent")) | |
| .with_explicit_parent(None), | |
| ) | |
| .enter(child.clone()) | |
| .exit(child.clone()) | |
| .enter(contextual_parent.clone()) | |
| .new_span( | |
| child | |
| .clone() | |
| .with_contextual_parent(Some("contextual_parent")) | |
| .with_explicit_parent(None), | |
| ) | |
| .enter(child.clone()) | |
| .exit(child) | |
| .exit(contextual_parent) | |
| .only() | |
| .run_with_handle(); | |
| with_default(subscriber, || { | |
| let contextual_parent = tracing::span!(Level::TRACE, "contextual_parent"); | |
| with_default_parent(); | |
| contextual_parent.in_scope(|| { | |
| with_default_parent(); | |
| }); | |
| }); | |
| handle.assert_finished(); | |
| } | |
| #[test] | |
| fn explicit_parent_test() { | |
| let contextual_parent = expect::span().named("contextual_parent"); | |
| let explicit_parent = expect::span().named("explicit_parent"); | |
| let child = expect::span().named("with_explicit_parent"); | |
| let (subscriber, handle) = subscriber::mock() | |
| .new_span( | |
| contextual_parent | |
| .clone() | |
| .with_contextual_parent(None) | |
| .with_explicit_parent(None), | |
| ) | |
| .new_span( | |
| explicit_parent | |
| .with_contextual_parent(None) | |
| .with_explicit_parent(None), | |
| ) | |
| .enter(contextual_parent.clone()) | |
| .new_span( | |
| child | |
| .clone() | |
| .with_contextual_parent(Some("contextual_parent")) | |
| .with_explicit_parent(Some("explicit_parent")), | |
| ) | |
| .enter(child.clone()) | |
| .exit(child) | |
| .exit(contextual_parent) | |
| .only() | |
| .run_with_handle(); | |
| with_default(subscriber, || { | |
| let contextual_parent = tracing::span!(Level::INFO, "contextual_parent"); | |
| let explicit_parent = tracing::span!(Level::INFO, "explicit_parent"); | |
| contextual_parent.in_scope(|| { | |
| with_explicit_parent(&explicit_parent); | |
| }); | |
| }); | |
| handle.assert_finished(); | |
| } |