]>
Commit | Line | Data |
---|---|---|
c295e0f8 XL |
1 | #![cfg(feature = "registry")] |
2 | mod support; | |
3 | use self::support::*; | |
4 | use tracing::Level; | |
5 | use tracing_subscriber::{filter::DynFilterFn, prelude::*}; | |
6 | ||
7 | #[test] | |
8 | fn layer_filters() { | |
9 | let (unfiltered, unfiltered_handle) = unfiltered("unfiltered"); | |
10 | let (filtered, filtered_handle) = filtered("filtered"); | |
11 | ||
12 | let _subscriber = tracing_subscriber::registry() | |
13 | .with(unfiltered) | |
14 | .with(filtered.with_filter(filter())) | |
15 | .set_default(); | |
16 | ||
17 | events(); | |
18 | ||
19 | unfiltered_handle.assert_finished(); | |
20 | filtered_handle.assert_finished(); | |
21 | } | |
22 | ||
23 | #[test] | |
24 | fn layered_layer_filters() { | |
25 | let (unfiltered1, unfiltered1_handle) = unfiltered("unfiltered_1"); | |
26 | let (unfiltered2, unfiltered2_handle) = unfiltered("unfiltered_2"); | |
27 | let unfiltered = unfiltered1.and_then(unfiltered2); | |
28 | ||
29 | let (filtered1, filtered1_handle) = filtered("filtered_1"); | |
30 | let (filtered2, filtered2_handle) = filtered("filtered_2"); | |
31 | let filtered = filtered1 | |
32 | .with_filter(filter()) | |
33 | .and_then(filtered2.with_filter(filter())); | |
34 | ||
35 | let _subscriber = tracing_subscriber::registry() | |
36 | .with(unfiltered) | |
37 | .with(filtered) | |
38 | .set_default(); | |
39 | ||
40 | events(); | |
41 | ||
42 | unfiltered1_handle.assert_finished(); | |
43 | unfiltered2_handle.assert_finished(); | |
44 | filtered1_handle.assert_finished(); | |
45 | filtered2_handle.assert_finished(); | |
46 | } | |
47 | ||
48 | #[test] | |
49 | fn out_of_order() { | |
50 | let (unfiltered1, unfiltered1_handle) = unfiltered("unfiltered_1"); | |
51 | let (unfiltered2, unfiltered2_handle) = unfiltered("unfiltered_2"); | |
52 | ||
53 | let (filtered1, filtered1_handle) = filtered("filtered_1"); | |
54 | let (filtered2, filtered2_handle) = filtered("filtered_2"); | |
55 | ||
56 | let _subscriber = tracing_subscriber::registry() | |
57 | .with(unfiltered1) | |
58 | .with(filtered1.with_filter(filter())) | |
59 | .with(unfiltered2) | |
60 | .with(filtered2.with_filter(filter())) | |
61 | .set_default(); | |
62 | events(); | |
63 | ||
64 | unfiltered1_handle.assert_finished(); | |
65 | unfiltered2_handle.assert_finished(); | |
66 | filtered1_handle.assert_finished(); | |
67 | filtered2_handle.assert_finished(); | |
68 | } | |
69 | ||
70 | #[test] | |
71 | fn mixed_layered() { | |
72 | let (unfiltered1, unfiltered1_handle) = unfiltered("unfiltered_1"); | |
73 | let (unfiltered2, unfiltered2_handle) = unfiltered("unfiltered_2"); | |
74 | let (filtered1, filtered1_handle) = filtered("filtered_1"); | |
75 | let (filtered2, filtered2_handle) = filtered("filtered_2"); | |
76 | ||
77 | let layered1 = filtered1.with_filter(filter()).and_then(unfiltered1); | |
78 | let layered2 = unfiltered2.and_then(filtered2.with_filter(filter())); | |
79 | ||
80 | let _subscriber = tracing_subscriber::registry() | |
81 | .with(layered1) | |
82 | .with(layered2) | |
83 | .set_default(); | |
84 | ||
85 | events(); | |
86 | ||
87 | unfiltered1_handle.assert_finished(); | |
88 | unfiltered2_handle.assert_finished(); | |
89 | filtered1_handle.assert_finished(); | |
90 | filtered2_handle.assert_finished(); | |
91 | } | |
92 | ||
93 | fn events() { | |
94 | tracing::trace!("hello trace"); | |
95 | tracing::debug!("hello debug"); | |
96 | tracing::info!("hello info"); | |
97 | tracing::warn!("hello warn"); | |
98 | tracing::error!("hello error"); | |
99 | } | |
100 | ||
101 | fn filter<S>() -> DynFilterFn<S> { | |
102 | DynFilterFn::new(|metadata, _| metadata.level() <= &Level::INFO) | |
103 | } | |
104 | ||
105 | fn unfiltered(name: &str) -> (ExpectLayer, subscriber::MockHandle) { | |
106 | layer::named(name) | |
107 | .event(event::mock().at_level(Level::TRACE)) | |
108 | .event(event::mock().at_level(Level::DEBUG)) | |
109 | .event(event::mock().at_level(Level::INFO)) | |
110 | .event(event::mock().at_level(Level::WARN)) | |
111 | .event(event::mock().at_level(Level::ERROR)) | |
112 | .done() | |
113 | .run_with_handle() | |
114 | } | |
115 | ||
116 | fn filtered(name: &str) -> (ExpectLayer, subscriber::MockHandle) { | |
117 | layer::named(name) | |
118 | .event(event::mock().at_level(Level::INFO)) | |
119 | .event(event::mock().at_level(Level::WARN)) | |
120 | .event(event::mock().at_level(Level::ERROR)) | |
121 | .done() | |
122 | .run_with_handle() | |
123 | } |