xref: /third_party/rust/crates/nix/test/sys/test_timerfd.rs (revision 3da5c369)
  • Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
  • only in /third_party/rust/crates/nix/test/sys/
1use nix::sys::time::{TimeSpec, TimeValLike};
2use nix::sys::timerfd::{
3    ClockId, Expiration, TimerFd, TimerFlags, TimerSetTimeFlags,
4};
5use std::time::Instant;
6
7#[test]
8pub fn test_timerfd_oneshot() {
9    let timer =
10        TimerFd::new(ClockId::CLOCK_MONOTONIC, TimerFlags::empty()).unwrap();
11
12    let before = Instant::now();
13
14    timer
15        .set(
16            Expiration::OneShot(TimeSpec::seconds(1)),
17            TimerSetTimeFlags::empty(),
18        )
19        .unwrap();
20
21    timer.wait().unwrap();
22
23    let millis = before.elapsed().as_millis();
24    assert!(millis > 900);
25}
26
27#[test]
28pub fn test_timerfd_interval() {
29    let timer =
30        TimerFd::new(ClockId::CLOCK_MONOTONIC, TimerFlags::empty()).unwrap();
31
32    let before = Instant::now();
33    timer
34        .set(
35            Expiration::IntervalDelayed(
36                TimeSpec::seconds(1),
37                TimeSpec::seconds(2),
38            ),
39            TimerSetTimeFlags::empty(),
40        )
41        .unwrap();
42
43    timer.wait().unwrap();
44
45    let start_delay = before.elapsed().as_millis();
46    assert!(start_delay > 900);
47
48    timer.wait().unwrap();
49
50    let interval_delay = before.elapsed().as_millis();
51    assert!(interval_delay > 2900);
52}
53
54#[test]
55pub fn test_timerfd_unset() {
56    let timer =
57        TimerFd::new(ClockId::CLOCK_MONOTONIC, TimerFlags::empty()).unwrap();
58
59    timer
60        .set(
61            Expiration::OneShot(TimeSpec::seconds(1)),
62            TimerSetTimeFlags::empty(),
63        )
64        .unwrap();
65
66    timer.unset().unwrap();
67
68    assert!(timer.get().unwrap().is_none());
69}
70

Indexes created Thu Nov 07 10:32:03 CST 2024