use super::core::IoReactor;
use std::sync::atomic::Ordering;
#[test]
fn test_reactor_creation() {
let reactor = IoReactor::new();
assert!(reactor.is_ok());
}
#[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"));
}));
assert!(result.is_err(), "inner closure must have panicked");
let active = IoReactor::get_active().expect("outer is still active");
assert!(
std::ptr::eq(active, &outer),
"thread-local must be restored to the outer reactor after panic"
);
});
}