use super::super::core::IoReactor;
use std::sync::atomic::Ordering;
#[test]
fn test_reactor_metrics() {
let reactor = IoReactor::new().unwrap();
let metrics = reactor.metrics();
assert_eq!(metrics.events_processed.load(Ordering::Relaxed), 0);
assert_eq!(metrics.peak_fd_count.load(Ordering::Relaxed), 0);
}
#[test]
fn with_active_restores_thread_local_on_panic() {
let outer = IoReactor::new().expect("outer reactor");
let inner = IoReactor::new().expect("inner reactor");
outer.with_active(|| {
let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
inner.with_active(|| panic!("boom"));
}));
let payload = result.expect_err("inner closure must have panicked");
assert_eq!(payload.downcast_ref::<&str>(), Some(&"boom"));
let restored = IoReactor::with_current(|active| {
active.is_some_and(|active| std::ptr::eq(active, &outer))
});
assert!(
restored,
"thread-local must be restored to the outer reactor after panic"
);
});
}