62 lines
1.5 KiB
Rust
62 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() == None);
|
|
}
|