File: multiple_max_level_hints.rs

package info (click to toggle)
rustc 1.85.0%2Bdfsg3-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, forky, sid, trixie
  • size: 893,396 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,051; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (69 lines) | stat: -rw-r--r-- 2,649 bytes parent folder | download | duplicates (37)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#![cfg(feature = "std")]

use tracing::Level;
use tracing_mock::*;

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn multiple_max_level_hints() {
    // This test ensures that when multiple subscribers are active, their max
    // level hints are handled correctly. The global max level should be the
    // maximum of the level filters returned by the two `Subscriber`'s
    // `max_level_hint` method.
    //
    // In this test, we create a subscriber whose max level is `INFO`, and
    // another whose max level is `DEBUG`. We then add an assertion to both of
    // those subscribers' `enabled` method that no metadata for `TRACE` spans or
    // events are filtered, since they are disabled by the global max filter.

    fn do_events() {
        tracing::info!("doing a thing that you might care about");
        tracing::debug!("charging turboencabulator with interocitor");
        tracing::warn!("extremely serious warning, pay attention");
        tracing::trace!("interocitor charge level is 10%");
        tracing::error!("everything is on fire");
    }

    let (subscriber1, handle1) = subscriber::mock()
        .named("subscriber1")
        .with_max_level_hint(Level::INFO)
        .with_filter(|meta| {
            let level = dbg!(meta.level());
            assert!(
                level <= &Level::DEBUG,
                "a TRACE event was dynamically filtered by subscriber1"
            );
            level <= &Level::INFO
        })
        .event(event::mock().at_level(Level::INFO))
        .event(event::mock().at_level(Level::WARN))
        .event(event::mock().at_level(Level::ERROR))
        .done()
        .run_with_handle();
    let (subscriber2, handle2) = subscriber::mock()
        .named("subscriber2")
        .with_max_level_hint(Level::DEBUG)
        .with_filter(|meta| {
            let level = dbg!(meta.level());
            assert!(
                level <= &Level::DEBUG,
                "a TRACE event was dynamically filtered by subscriber2"
            );
            level <= &Level::DEBUG
        })
        .event(event::mock().at_level(Level::INFO))
        .event(event::mock().at_level(Level::DEBUG))
        .event(event::mock().at_level(Level::WARN))
        .event(event::mock().at_level(Level::ERROR))
        .done()
        .run_with_handle();

    let dispatch1 = tracing::Dispatch::new(subscriber1);

    tracing::dispatcher::with_default(&dispatch1, do_events);
    handle1.assert_finished();

    let dispatch2 = tracing::Dispatch::new(subscriber2);
    tracing::dispatcher::with_default(&dispatch2, do_events);
    handle2.assert_finished();
}