1
1
use nix:: poll:: { EventFlags , poll, PollFd } ;
2
2
use nix:: sys:: signal:: SigSet ;
3
3
use nix:: sys:: time:: { TimeSpec , TimeValLike } ;
4
- use nix:: unistd:: { write, pipe} ;
4
+ use nix:: unistd:: { write, pipe, close } ;
5
5
6
6
#[ test]
7
7
fn test_poll ( ) {
@@ -21,6 +21,24 @@ fn test_poll() {
21
21
assert ! ( fds[ 0 ] . revents( ) . unwrap( ) . contains( EventFlags :: POLLIN ) ) ;
22
22
}
23
23
24
+ #[ test]
25
+ fn test_poll_debug ( ) {
26
+ assert_eq ! ( format!( "{:?}" , PollFd :: new( 0 , EventFlags :: empty( ) ) ) ,
27
+ "PollFd { fd: 0, events: (empty), revents: (empty) }" ) ;
28
+ assert_eq ! ( format!( "{:?}" , PollFd :: new( 1 , EventFlags :: POLLIN ) ) ,
29
+ "PollFd { fd: 1, events: POLLIN, revents: (empty) }" ) ;
30
+
31
+ // Testing revents requires doing some I/O
32
+ let ( r, w) = pipe ( ) . unwrap ( ) ;
33
+ let mut fds = [ PollFd :: new ( r, EventFlags :: POLLIN ) ] ;
34
+ write ( w, b" " ) . unwrap ( ) ;
35
+ close ( w) . unwrap ( ) ;
36
+ poll ( & mut fds, -1 ) . unwrap ( ) ;
37
+ assert_eq ! ( format!( "{:?}" , fds[ 0 ] ) ,
38
+ format!( "PollFd {{ fd: {}, events: POLLIN, revents: POLLIN | POLLHUP }}" , r) ) ;
39
+ close ( r) . unwrap ( ) ;
40
+ }
41
+
24
42
// ppoll(2) is the same as poll except for how it handles timeouts and signals.
25
43
// Repeating the test for poll(2) should be sufficient to check that our
26
44
// bindings are correct.
0 commit comments