diff --git a/tests/tcp_stream.rs b/tests/tcp_stream.rs index 433de7d12..3907cac12 100644 --- a/tests/tcp_stream.rs +++ b/tests/tcp_stream.rs @@ -876,3 +876,48 @@ fn send_oob_data(stream: &S, data: &[u8]) -> io::Result { } } } + +#[test] +#[cfg(windows)] +fn peek_readiness() { + let mut buf = [0; 1024]; + let (mut poll, mut events) = init_with_poll(); + + let listener = net::TcpListener::bind(any_local_address()).unwrap(); + let sockaddr = listener.local_addr().unwrap(); + let thread_handle = thread::spawn(move || listener.accept().unwrap()); + let stream1 = net::TcpStream::connect(sockaddr).unwrap(); + let (mut stream2, _) = thread_handle.join().unwrap(); + + stream1.set_nonblocking(true).unwrap(); + let mut stream1 = TcpStream::from_std(stream1); + + poll.registry() + .register(&mut stream1, ID1, Interest::READABLE) + .unwrap(); + + expect_no_events(&mut poll, &mut events); + assert_would_block(stream1.peek(&mut buf)); + + assert_eq!(stream2.write(&[0]).unwrap(), 1); + expect_events( + &mut poll, + &mut events, + vec![ExpectEvent::new(ID1, Readiness::READABLE)], + ); + //assert_eq!(stream1.peek(&mut buf).unwrap(), 1); + + assert_eq!(stream2.write(&[0]).unwrap(), 1); + expect_no_events(&mut poll, &mut events); + assert_eq!(stream1.peek(&mut buf).unwrap(), 2); + assert_eq!(stream1.read(&mut buf).unwrap(), 2); + assert_would_block(stream1.peek(&mut buf)); + + drop(stream2); + expect_events( + &mut poll, + &mut events, + vec![ExpectEvent::new(ID1, Readiness::READABLE)], + ); + assert_eq!(stream1.peek(&mut buf).unwrap(), 0); +} diff --git a/tests/util/mod.rs b/tests/util/mod.rs index 858c146cc..8064afcc7 100644 --- a/tests/util/mod.rs +++ b/tests/util/mod.rs @@ -134,6 +134,7 @@ impl From for Readiness { } } +#[track_caller] pub fn expect_events(poll: &mut Poll, events: &mut Events, mut expected: Vec) { // In a lot of calls we expect more then one event, but it could be that // poll returns the first event only in a single call. To be a bit more @@ -165,6 +166,7 @@ pub fn expect_events(poll: &mut Poll, events: &mut Events, mut expected: Vec