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