69 lines
1.5 KiB
Rust
69 lines
1.5 KiB
Rust
use nix::sys::time::{TimeSpec, TimeValLike};
|
|
use nix::sys::timerfd::{
|
|
ClockId, Expiration, TimerFd, TimerFlags, TimerSetTimeFlags,
|
|
};
|
|
use std::time::Instant;
|
|
|
|
#[test]
|
|
pub fn test_timerfd_oneshot() {
|
|
let timer =
|
|
TimerFd::new(ClockId::CLOCK_MONOTONIC, TimerFlags::empty()).unwrap();
|
|
|
|
let before = Instant::now();
|
|
|
|
timer
|
|
.set(
|
|
Expiration::OneShot(TimeSpec::seconds(1)),
|
|
TimerSetTimeFlags::empty(),
|
|
)
|
|
.unwrap();
|
|
|
|
timer.wait().unwrap();
|
|
|
|
let millis = before.elapsed().as_millis();
|
|
assert!(millis > 900);
|
|
}
|
|
|
|
#[test]
|
|
pub fn test_timerfd_interval() {
|
|
let timer =
|
|
TimerFd::new(ClockId::CLOCK_MONOTONIC, TimerFlags::empty()).unwrap();
|
|
|
|
let before = Instant::now();
|
|
timer
|
|
.set(
|
|
Expiration::IntervalDelayed(
|
|
TimeSpec::seconds(1),
|
|
TimeSpec::seconds(2),
|
|
),
|
|
TimerSetTimeFlags::empty(),
|
|
)
|
|
.unwrap();
|
|
|
|
timer.wait().unwrap();
|
|
|
|
let start_delay = before.elapsed().as_millis();
|
|
assert!(start_delay > 900);
|
|
|
|
timer.wait().unwrap();
|
|
|
|
let interval_delay = before.elapsed().as_millis();
|
|
assert!(interval_delay > 2900);
|
|
}
|
|
|
|
#[test]
|
|
pub fn test_timerfd_unset() {
|
|
let timer =
|
|
TimerFd::new(ClockId::CLOCK_MONOTONIC, TimerFlags::empty()).unwrap();
|
|
|
|
timer
|
|
.set(
|
|
Expiration::OneShot(TimeSpec::seconds(1)),
|
|
TimerSetTimeFlags::empty(),
|
|
)
|
|
.unwrap();
|
|
|
|
timer.unset().unwrap();
|
|
|
|
assert!(timer.get().unwrap().is_none());
|
|
}
|