]> git.proxmox.com Git - rustc.git/blob - vendor/tracing-subscriber-0.3.3/tests/reload.rs
New upstream version 1.68.2+dfsg1
[rustc.git] / vendor / tracing-subscriber-0.3.3 / tests / reload.rs
1 #![cfg(feature = "reload")]
2 use std::sync::atomic::{AtomicUsize, Ordering};
3 use tracing_core::{
4 span::{Attributes, Id, Record},
5 subscriber::Interest,
6 Event, Metadata, Subscriber,
7 };
8 use tracing_subscriber::{layer, prelude::*, reload::*};
9
10 pub struct NopSubscriber;
11
12 impl Subscriber for NopSubscriber {
13 fn register_callsite(&self, _: &'static Metadata<'static>) -> Interest {
14 Interest::never()
15 }
16
17 fn enabled(&self, _: &Metadata<'_>) -> bool {
18 false
19 }
20
21 fn new_span(&self, _: &Attributes<'_>) -> Id {
22 Id::from_u64(1)
23 }
24
25 fn record(&self, _: &Id, _: &Record<'_>) {}
26 fn record_follows_from(&self, _: &Id, _: &Id) {}
27 fn event(&self, _: &Event<'_>) {}
28 fn enter(&self, _: &Id) {}
29 fn exit(&self, _: &Id) {}
30 }
31
32 #[test]
33 fn reload_handle() {
34 static FILTER1_CALLS: AtomicUsize = AtomicUsize::new(0);
35 static FILTER2_CALLS: AtomicUsize = AtomicUsize::new(0);
36
37 enum Filter {
38 One,
39 Two,
40 }
41
42 impl<S: Subscriber> tracing_subscriber::Layer<S> for Filter {
43 fn register_callsite(&self, m: &Metadata<'_>) -> Interest {
44 println!("REGISTER: {:?}", m);
45 Interest::sometimes()
46 }
47
48 fn enabled(&self, m: &Metadata<'_>, _: layer::Context<'_, S>) -> bool {
49 println!("ENABLED: {:?}", m);
50 match self {
51 Filter::One => FILTER1_CALLS.fetch_add(1, Ordering::SeqCst),
52 Filter::Two => FILTER2_CALLS.fetch_add(1, Ordering::SeqCst),
53 };
54 true
55 }
56 }
57 fn event() {
58 tracing::trace!("my event");
59 }
60
61 let (layer, handle) = Layer::new(Filter::One);
62
63 let subscriber = tracing_core::dispatcher::Dispatch::new(layer.with_subscriber(NopSubscriber));
64
65 tracing_core::dispatcher::with_default(&subscriber, || {
66 assert_eq!(FILTER1_CALLS.load(Ordering::SeqCst), 0);
67 assert_eq!(FILTER2_CALLS.load(Ordering::SeqCst), 0);
68
69 event();
70
71 assert_eq!(FILTER1_CALLS.load(Ordering::SeqCst), 1);
72 assert_eq!(FILTER2_CALLS.load(Ordering::SeqCst), 0);
73
74 handle.reload(Filter::Two).expect("should reload");
75
76 event();
77
78 assert_eq!(FILTER1_CALLS.load(Ordering::SeqCst), 1);
79 assert_eq!(FILTER2_CALLS.load(Ordering::SeqCst), 1);
80 })
81 }