Skip to content

Commit 976fa55

Browse files
authored
mock: add test case for layer not calling on_register_dispatch (#3415)
Add negative test to tracing mock for Layer not calling `on_register_dispatch`
1 parent 8bc008c commit 976fa55

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

tracing-mock/tests/on_register_dispatch.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,49 @@ fn layer_multiple_expectations() {
6161
drop(_subscriber);
6262
handle.assert_finished();
6363
}
64+
65+
#[cfg(feature = "tracing-subscriber")]
66+
#[test]
67+
#[should_panic(expected = "expected on_register_dispatch to be called")]
68+
fn layer_on_register_dispatch_not_propagated() {
69+
use tracing::error;
70+
use tracing_mock::layer;
71+
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, Layer};
72+
73+
/// A layer that wraps another layer but does NOT propagate on_register_dispatch
74+
struct BadLayer<L> {
75+
inner: L,
76+
}
77+
78+
impl<S, L> Layer<S> for BadLayer<L>
79+
where
80+
S: tracing_core::Subscriber,
81+
L: Layer<S>,
82+
{
83+
// Intentionally NOT implementing on_register_dispatch to test the failure case
84+
// The default implementation does nothing, so the inner layer won't receive the call
85+
86+
fn on_event(
87+
&self,
88+
event: &tracing_core::Event<'_>,
89+
ctx: tracing_subscriber::layer::Context<'_, S>,
90+
) {
91+
self.inner.on_event(event, ctx);
92+
}
93+
}
94+
95+
let (mock_layer, handle) = layer::named("inner")
96+
.on_register_dispatch()
97+
.run_with_handle();
98+
99+
let bad_layer = BadLayer { inner: mock_layer };
100+
101+
let _subscriber = tracing_subscriber::registry().with(bad_layer).set_default();
102+
103+
// This event will be sent to the mock layer, which expects on_register_dispatch first
104+
error!("send an event");
105+
106+
drop(_subscriber);
107+
108+
handle.assert_finished();
109+
}

0 commit comments

Comments
 (0)