11use nix:: poll:: { EventFlags , poll, PollFd } ;
22use nix:: sys:: signal:: SigSet ;
33use nix:: sys:: time:: { TimeSpec , TimeValLike } ;
4- use nix:: unistd:: { write, pipe} ;
4+ use nix:: unistd:: { write, pipe, close } ;
55
66#[ test]
77fn test_poll ( ) {
@@ -21,6 +21,24 @@ fn test_poll() {
2121 assert ! ( fds[ 0 ] . revents( ) . unwrap( ) . contains( EventFlags :: POLLIN ) ) ;
2222}
2323
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+
2442// ppoll(2) is the same as poll except for how it handles timeouts and signals.
2543// Repeating the test for poll(2) should be sufficient to check that our
2644// bindings are correct.
0 commit comments