#[test]
fn span_macros_compile() {
let _g = crate::trace_span!("my_span", field = 1u32).entered();
let _g2 = crate::debug_span!("x", a = 1u32).entered();
let _g3 = crate::info_span!("y").entered();
}
#[test]
fn macros_compile() {
let _n = 1_usize;
let _e = "something went wrong";
crate::trace!(field = 0, "trace structured");
crate::debug!("n={}", _n);
crate::info!(field = _n, "info structured");
crate::warn!("warn positional {}", 42u32);
crate::error!("e={}", _e);
crate::debug!(x = 1u32, "msg");
crate::warn!(field = 2u32, "msg");
}
#[test]
fn noop_macros_consume_non_underscore_vars() {
let count = 42_u64;
let err = "oops";
let detail = core::f64::consts::E;
crate::trace!(count = count, "count is {}", count);
crate::debug!(err = %err, "error detail: {}", err);
crate::info!(detail = ?detail, "detail = {}", detail);
crate::warn!(err = err, count = count, "warn: {} {}", err, count);
crate::error!("error: {} {} {}", err, count, detail);
crate::debug!(%err);
crate::warn!(?detail);
crate::info!(target: "my_target", count = count, "msg");
let span_field = 99_u32;
let _guard = crate::trace_span!("my_span", field = span_field).entered();
let _guard2 = crate::debug_span!("x", a = span_field).entered();
let _guard3 = crate::info_span!("y").entered();
}
#[cfg(not(feature = "tracing"))]
#[test]
fn noop_macros_consume_non_literal_target() {
use core::sync::atomic::{AtomicBool, Ordering::SeqCst};
let tgt = "my_module";
crate::debug!(target: tgt, "message");
crate::warn!(target: tgt, x = 1u32, "msg {}", 42u32);
static TARGET_EVALED: AtomicBool = AtomicBool::new(false);
fn make_target() -> &'static str {
TARGET_EVALED.store(true, SeqCst);
"side_effect_target"
}
crate::info!(target: make_target(), "message");
assert!(
!TARGET_EVALED.load(SeqCst),
"target: expression must not be evaluated in no-op build"
);
}
#[cfg(not(feature = "tracing"))]
#[test]
fn noop_macros_do_not_evaluate_args() {
use core::sync::atomic::{AtomicBool, Ordering::SeqCst};
static RAN: AtomicBool = AtomicBool::new(false);
fn side_effect() -> u32 {
RAN.store(true, SeqCst);
42
}
crate::debug!(value = side_effect(), "msg");
assert!(!RAN.load(SeqCst), "key=value form evaluated side_effect()");
crate::debug!("positional {}", side_effect());
assert!(!RAN.load(SeqCst), "positional form evaluated side_effect()");
crate::info!(v = %side_effect(), "msg");
assert!(!RAN.load(SeqCst), "display form evaluated side_effect()");
crate::warn!(v = ?side_effect(), "msg");
assert!(!RAN.load(SeqCst), "debug form evaluated side_effect()");
crate::error!(%side_effect());
assert!(!RAN.load(SeqCst), "bare % form evaluated side_effect()");
crate::trace!(?side_effect());
assert!(!RAN.load(SeqCst), "bare ? form evaluated side_effect()");
let _g = crate::info_span!("s", field = side_effect()).entered();
assert!(!RAN.load(SeqCst), "span macro evaluated side_effect()");
}
#[cfg(feature = "stats")]
#[test]
fn stats_round_trip() {
use crate::stats::Stats;
let s = Stats::default();
s.packets_rx(3);
s.parse_errors(1);
s.incr_cache_size(5);
s.decr_cache_size(2);
let snap = s.snapshot();
assert_eq!(snap.packets_rx, 3);
assert_eq!(snap.parse_errors, 1);
assert_eq!(snap.cache_size, 3);
assert_eq!(snap.packets_tx, 0);
assert_eq!(snap.services_established, 0);
}
#[cfg(feature = "stats")]
#[test]
fn snapshot_eq() {
use crate::stats::Stats;
let s = Stats::default();
let a = s.snapshot();
let b = s.snapshot();
assert_eq!(a, b);
}