• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use super::*;
2 use tracing_mock::{expect, layer::MockLayer};
3 
4 #[test]
basic_trees()5 fn basic_trees() {
6     let (with_target, with_target_handle) = layer::named("info_with_target")
7         .event(
8             expect::event()
9                 .at_level(Level::INFO)
10                 .with_target("my_target"),
11         )
12         .only()
13         .run_with_handle();
14 
15     let (info, info_handle) = layer::named("info")
16         .event(
17             expect::event()
18                 .at_level(Level::INFO)
19                 .with_target(module_path!()),
20         )
21         .event(
22             expect::event()
23                 .at_level(Level::INFO)
24                 .with_target("my_target"),
25         )
26         .only()
27         .run_with_handle();
28 
29     let (all, all_handle) = layer::named("all")
30         .event(
31             expect::event()
32                 .at_level(Level::INFO)
33                 .with_target(module_path!()),
34         )
35         .event(expect::event().at_level(Level::TRACE))
36         .event(
37             expect::event()
38                 .at_level(Level::INFO)
39                 .with_target("my_target"),
40         )
41         .event(
42             expect::event()
43                 .at_level(Level::TRACE)
44                 .with_target("my_target"),
45         )
46         .only()
47         .run_with_handle();
48 
49     let info_tree = info
50         .and_then(
51             with_target.with_filter(filter::filter_fn(|meta| dbg!(meta.target()) == "my_target")),
52         )
53         .with_filter(LevelFilter::INFO);
54 
55     let subscriber = tracing_subscriber::registry().with(info_tree).with(all);
56     let _guard = dbg!(subscriber).set_default();
57 
58     tracing::info!("hello world");
59     tracing::trace!("hello trace");
60     tracing::info!(target: "my_target", "hi to my target");
61     tracing::trace!(target: "my_target", "hi to my target at trace");
62 
63     all_handle.assert_finished();
64     info_handle.assert_finished();
65     with_target_handle.assert_finished();
66 }
67 
68 #[test]
filter_span_scopes()69 fn filter_span_scopes() {
70     fn target_layer(target: &'static str) -> (MockLayer, subscriber::MockHandle) {
71         layer::named(format!("target_{}", target))
72             .enter(expect::span().with_target(target).at_level(Level::INFO))
73             .event(
74                 expect::event()
75                     .with_fields(expect::msg("hello world"))
76                     .in_scope(vec![expect::span()
77                         .with_target(target)
78                         .at_level(Level::INFO)]),
79             )
80             .exit(expect::span().with_target(target).at_level(Level::INFO))
81             .only()
82             .run_with_handle()
83     }
84 
85     let (a_layer, a_handle) = target_layer("a");
86     let (b_layer, b_handle) = target_layer("b");
87     let (info_layer, info_handle) = layer::named("info")
88         .enter(expect::span().with_target("b").at_level(Level::INFO))
89         .enter(expect::span().with_target("a").at_level(Level::INFO))
90         .event(
91             expect::event()
92                 .with_fields(expect::msg("hello world"))
93                 .in_scope(vec![
94                     expect::span().with_target("a").at_level(Level::INFO),
95                     expect::span().with_target("b").at_level(Level::INFO),
96                 ]),
97         )
98         .exit(expect::span().with_target("a").at_level(Level::INFO))
99         .exit(expect::span().with_target("b").at_level(Level::INFO))
100         .only()
101         .run_with_handle();
102 
103     let full_scope = vec![
104         expect::span().with_target("b").at_level(Level::TRACE),
105         expect::span().with_target("a").at_level(Level::INFO),
106         expect::span().with_target("b").at_level(Level::INFO),
107         expect::span().with_target("a").at_level(Level::TRACE),
108     ];
109     let (all_layer, all_handle) = layer::named("all")
110         .enter(expect::span().with_target("a").at_level(Level::TRACE))
111         .enter(expect::span().with_target("b").at_level(Level::INFO))
112         .enter(expect::span().with_target("a").at_level(Level::INFO))
113         .enter(expect::span().with_target("b").at_level(Level::TRACE))
114         .event(
115             expect::event()
116                 .with_fields(expect::msg("hello world"))
117                 .in_scope(full_scope.clone()),
118         )
119         .event(
120             expect::event()
121                 .with_fields(expect::msg("hello to my target"))
122                 .with_target("a")
123                 .in_scope(full_scope.clone()),
124         )
125         .event(
126             expect::event()
127                 .with_fields(expect::msg("hello to my target"))
128                 .with_target("b")
129                 .in_scope(full_scope),
130         )
131         .exit(expect::span().with_target("b").at_level(Level::TRACE))
132         .exit(expect::span().with_target("a").at_level(Level::INFO))
133         .exit(expect::span().with_target("b").at_level(Level::INFO))
134         .exit(expect::span().with_target("a").at_level(Level::TRACE))
135         .only()
136         .run_with_handle();
137 
138     let a_layer = a_layer.with_filter(filter::filter_fn(|meta| {
139         let target = meta.target();
140         target == "a" || target == module_path!()
141     }));
142 
143     let b_layer = b_layer.with_filter(filter::filter_fn(|meta| {
144         let target = meta.target();
145         target == "b" || target == module_path!()
146     }));
147 
148     let info_tree = info_layer
149         .and_then(a_layer)
150         .and_then(b_layer)
151         .with_filter(LevelFilter::INFO);
152 
153     let subscriber = tracing_subscriber::registry()
154         .with(info_tree)
155         .with(all_layer);
156     let _guard = dbg!(subscriber).set_default();
157 
158     {
159         let _a1 = tracing::trace_span!(target: "a", "a/trace").entered();
160         let _b1 = tracing::info_span!(target: "b", "b/info").entered();
161         let _a2 = tracing::info_span!(target: "a", "a/info").entered();
162         let _b2 = tracing::trace_span!(target: "b", "b/trace").entered();
163         tracing::info!("hello world");
164         tracing::debug!(target: "a", "hello to my target");
165         tracing::debug!(target: "b", "hello to my target");
166     }
167 
168     all_handle.assert_finished();
169     info_handle.assert_finished();
170     a_handle.assert_finished();
171     b_handle.assert_finished();
172 }
173