1 use nix::sys::select::*;
2 use nix::unistd::{pipe, write};
3 use nix::sys::signal::SigSet;
4 use nix::sys::time::{TimeSpec, TimeValLike};
5 
6 #[test]
test_pselect()7 pub fn test_pselect() {
8     let _mtx = crate::SIGNAL_MTX
9         .lock()
10         .expect("Mutex got poisoned by another test");
11 
12     let (r1, w1) = pipe().unwrap();
13     write(w1, b"hi!").unwrap();
14     let (r2, _w2) = pipe().unwrap();
15 
16     let mut fd_set = FdSet::new();
17     fd_set.insert(r1);
18     fd_set.insert(r2);
19 
20     let timeout = TimeSpec::seconds(10);
21     let sigmask = SigSet::empty();
22     assert_eq!(
23         1,
24         pselect(None, &mut fd_set, None, None, &timeout, &sigmask).unwrap()
25     );
26     assert!(fd_set.contains(r1));
27     assert!(!fd_set.contains(r2));
28 }
29 
30 #[test]
test_pselect_nfds2()31 pub fn test_pselect_nfds2() {
32     let (r1, w1) = pipe().unwrap();
33     write(w1, b"hi!").unwrap();
34     let (r2, _w2) = pipe().unwrap();
35 
36     let mut fd_set = FdSet::new();
37     fd_set.insert(r1);
38     fd_set.insert(r2);
39 
40     let timeout = TimeSpec::seconds(10);
41     assert_eq!(
42         1,
43         pselect(
44             ::std::cmp::max(r1, r2) + 1,
45             &mut fd_set,
46             None,
47             None,
48             &timeout,
49             None
50         ).unwrap()
51     );
52     assert!(fd_set.contains(r1));
53     assert!(!fd_set.contains(r2));
54 }
55