• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use nix::sys::select::*;
2 use nix::sys::signal::SigSet;
3 use nix::sys::time::{TimeSpec, TimeValLike};
4 use nix::unistd::{pipe, write};
5 
6 #[test]
test_pselect()7 pub fn test_pselect() {
8     let _mtx = crate::SIGNAL_MTX.lock();
9 
10     let (r1, w1) = pipe().unwrap();
11     write(w1, b"hi!").unwrap();
12     let (r2, _w2) = pipe().unwrap();
13 
14     let mut fd_set = FdSet::new();
15     fd_set.insert(r1);
16     fd_set.insert(r2);
17 
18     let timeout = TimeSpec::seconds(10);
19     let sigmask = SigSet::empty();
20     assert_eq!(
21         1,
22         pselect(None, &mut fd_set, None, None, &timeout, &sigmask).unwrap()
23     );
24     assert!(fd_set.contains(r1));
25     assert!(!fd_set.contains(r2));
26 }
27 
28 #[test]
test_pselect_nfds2()29 pub fn test_pselect_nfds2() {
30     let (r1, w1) = pipe().unwrap();
31     write(w1, b"hi!").unwrap();
32     let (r2, _w2) = pipe().unwrap();
33 
34     let mut fd_set = FdSet::new();
35     fd_set.insert(r1);
36     fd_set.insert(r2);
37 
38     let timeout = TimeSpec::seconds(10);
39     assert_eq!(
40         1,
41         pselect(
42             ::std::cmp::max(r1, r2) + 1,
43             &mut fd_set,
44             None,
45             None,
46             &timeout,
47             None
48         )
49         .unwrap()
50     );
51     assert!(fd_set.contains(r1));
52     assert!(!fd_set.contains(r2));
53 }
54 
55 macro_rules! generate_fdset_bad_fd_tests {
56     ($fd:expr, $($method:ident),* $(,)?) => {
57         $(
58             #[test]
59             #[should_panic]
60             fn $method() {
61                 FdSet::new().$method($fd);
62             }
63         )*
64     }
65 }
66 
67 mod test_fdset_negative_fd {
68     use super::*;
69     generate_fdset_bad_fd_tests!(-1, insert, remove, contains);
70 }
71 
72 mod test_fdset_too_large_fd {
73     use super::*;
74     use std::convert::TryInto;
75     generate_fdset_bad_fd_tests!(
76         FD_SETSIZE.try_into().unwrap(),
77         insert,
78         remove,
79         contains,
80     );
81 }
82