Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Always use a timeout calling Poll::poll in tests #1230

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions tests/close_on_drop.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#![cfg(feature = "tcp")]

use self::TestState::{AfterRead, Initial};
use log::debug;
use mio::net::{TcpListener, TcpStream};
use mio::{Events, Interest, Poll, Token};
use std::io::Read;

mod util;
use self::TestState::{AfterRead, Initial};
use util::{any_local_address, init};
use util::{any_local_address, init, NO_TIMEOUT};

const SERVER: Token = Token(0);
const CLIENT: Token = Token(1);
Expand Down Expand Up @@ -112,7 +113,8 @@ pub fn close_on_drop() {

// == Run test
while !handler.shutdown {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
if event.is_readable() {
Expand Down
4 changes: 3 additions & 1 deletion tests/poll.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ mod util;

use util::{
any_local_address, assert_send, assert_sync, expect_events, init, init_with_poll, ExpectEvent,
NO_TIMEOUT,
};

const ID1: Token = Token(1);
Expand Down Expand Up @@ -142,7 +143,8 @@ fn drop_cancels_interest_and_shuts_down() {
.unwrap();
let mut events = Events::with_capacity(16);
'outer: loop {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");
for event in &events {
if event.token() == Token(1) {
// connected
Expand Down
5 changes: 3 additions & 2 deletions tests/registering.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use std::thread::sleep;
use std::time::Duration;

mod util;
use util::{any_local_address, init};
use util::{any_local_address, init, NO_TIMEOUT};

const SERVER: Token = Token(0);
const CLIENT: Token = Token(1);
Expand Down Expand Up @@ -91,7 +91,8 @@ pub fn register_deregister() {
let mut handler = TestHandler::new(server, client);

loop {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

if let Some(event) = events.iter().next() {
if event.is_readable() {
Expand Down
9 changes: 5 additions & 4 deletions tests/regressions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use std::time::Duration;
use std::{net, thread};

mod util;
use util::{any_local_address, init, init_with_poll};
use util::{any_local_address, init, init_with_poll, NO_TIMEOUT};

const ID1: Token = Token(1);
const WAKE_TOKEN: Token = Token(10);
Expand All @@ -35,7 +35,8 @@ fn issue_776() {
.unwrap();
let mut events = Events::with_capacity(16);
'outer: loop {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");
for event in &events {
if event.token() == Token(1) {
// connected
Expand Down Expand Up @@ -68,7 +69,7 @@ fn issue_1205() {
.register(&mut listener, ID1, Interest::READABLE)
.unwrap();

poll.poll(&mut events, Some(std::time::Duration::from_millis(0)))
poll.poll(&mut events, Some(Duration::from_millis(0)))
.unwrap();
assert!(events.iter().count() == 0);

Expand All @@ -82,7 +83,7 @@ fn issue_1205() {
waker1.wake().expect("unable to wake");
});

poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();

// the poll should return only one event that being the waker event.
// the poll should not retrieve event for the listener above because it was
Expand Down
65 changes: 33 additions & 32 deletions tests/tcp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use std::time::Duration;
mod util;
use util::{
any_local_address, assert_send, assert_sync, expect_events, expect_no_events, init,
init_with_poll, ExpectEvent,
init_with_poll, ExpectEvent, NO_TIMEOUT,
};

const LISTEN: Token = Token(0);
Expand Down Expand Up @@ -63,7 +63,8 @@ fn accept() {
shutdown: false,
};
while !h.shutdown {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
h.hit = true;
Expand Down Expand Up @@ -113,7 +114,8 @@ fn connect() {
shutdown: false,
};
while !h.shutdown {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
assert_eq!(event.token(), Token(1));
Expand All @@ -131,7 +133,8 @@ fn connect() {
rx2.recv().unwrap();
h.shutdown = false;
while !h.shutdown {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
assert_eq!(event.token(), Token(1));
Expand Down Expand Up @@ -186,7 +189,8 @@ fn read() {
shutdown: false,
};
while !h.shutdown {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
assert_eq!(event.token(), Token(1));
Expand Down Expand Up @@ -245,7 +249,8 @@ fn peek() {
shutdown: false,
};
while !h.shutdown {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
assert_eq!(event.token(), Token(1));
Expand Down Expand Up @@ -310,7 +315,8 @@ fn write() {
shutdown: false,
};
while !h.shutdown {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
assert_eq!(event.token(), Token(1));
Expand Down Expand Up @@ -358,7 +364,8 @@ fn connect_then_close() {
shutdown: false,
};
while !h.shutdown {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
if event.token() == Token(1) {
Expand Down Expand Up @@ -440,7 +447,8 @@ fn multiple_writes_immediate_success() {

// Wait for our TCP stream to connect
'outer: loop {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");
for event in events.iter() {
if event.token() == Token(1) && event.is_writable() {
break 'outer;
Expand Down Expand Up @@ -495,7 +503,8 @@ fn connection_reset_by_peer() {
// Wait for listener to be ready
let mut server;
'outer: loop {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
if event.token() == Token(0) {
Expand Down Expand Up @@ -523,7 +532,8 @@ fn connection_reset_by_peer() {
.unwrap();

loop {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
if event.token() == Token(3) {
Expand Down Expand Up @@ -563,7 +573,8 @@ fn connect_error() {
.unwrap();

'outer: loop {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
if event.token() == Token(0) {
Expand Down Expand Up @@ -598,7 +609,8 @@ fn write_error() {
.unwrap();

let mut wait_writable = || 'outer: loop {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
if event.token() == Token(0) && event.is_writable() {
Expand Down Expand Up @@ -731,7 +743,8 @@ fn local_addr_ready() {
};

while !handler.shutdown {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
match event.token() {
Expand Down Expand Up @@ -784,9 +797,7 @@ fn write_then_drop() {
.unwrap();

let mut events = Events::with_capacity(1024);
while events.is_empty() {
poll.poll(&mut events, None).unwrap();
}
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert_eq!(events.iter().count(), 1);
assert_eq!(events.iter().next().unwrap().token(), Token(1));

Expand All @@ -797,9 +808,7 @@ fn write_then_drop() {
.unwrap();

let mut events = Events::with_capacity(1024);
while events.is_empty() {
poll.poll(&mut events, None).unwrap();
}
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert_eq!(events.iter().count(), 1);
assert_eq!(events.iter().next().unwrap().token(), Token(2));

Expand All @@ -811,9 +820,7 @@ fn write_then_drop() {
.unwrap();

let mut events = Events::with_capacity(1024);
while events.is_empty() {
poll.poll(&mut events, None).unwrap();
}
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert_eq!(events.iter().count(), 1);
assert_eq!(events.iter().next().unwrap().token(), Token(3));

Expand All @@ -839,9 +846,7 @@ fn write_then_deregister() {
.unwrap();

let mut events = Events::with_capacity(1024);
while events.is_empty() {
poll.poll(&mut events, None).unwrap();
}
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert_eq!(events.iter().count(), 1);
assert_eq!(events.iter().next().unwrap().token(), Token(1));

Expand All @@ -852,9 +857,7 @@ fn write_then_deregister() {
.unwrap();

let mut events = Events::with_capacity(1024);
while events.is_empty() {
poll.poll(&mut events, None).unwrap();
}
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert_eq!(events.iter().count(), 1);
assert_eq!(events.iter().next().unwrap().token(), Token(2));

Expand All @@ -866,9 +869,7 @@ fn write_then_deregister() {
.unwrap();

let mut events = Events::with_capacity(1024);
while events.is_empty() {
poll.poll(&mut events, None).unwrap();
}
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert_eq!(events.iter().count(), 1);
assert_eq!(events.iter().next().unwrap().token(), Token(3));

Expand Down
7 changes: 5 additions & 2 deletions tests/udp_socket.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ mod util;
use util::{
any_local_address, any_local_ipv6_address, assert_error, assert_send, assert_sync,
assert_would_block, expect_events, expect_no_events, init, init_with_poll, ExpectEvent,
NO_TIMEOUT,
};

const DATA1: &[u8] = b"Hello world!";
Expand Down Expand Up @@ -751,7 +752,8 @@ fn send_recv_udp(mut tx: UdpSocket, mut rx: UdpSocket, connected: bool) {
let mut handler = UdpHandlerSendRecv::new(tx, rx, connected, "hello world");

while !handler.shutdown {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
if event.is_readable() {
Expand Down Expand Up @@ -954,7 +956,8 @@ pub fn multicast() {
info!("Starting event loop to test with...");

while !handler.shutdown {
poll.poll(&mut events, None).unwrap();
poll.poll(&mut events, NO_TIMEOUT).unwrap();
assert!(!events.is_empty(), "expected at least one event");

for event in &events {
if event.is_readable() {
Expand Down
10 changes: 10 additions & 0 deletions tests/util/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,16 @@ use log::{error, warn};
use mio::event::Event;
use mio::{Events, Interest, Poll, Token};

/// This timeout represents cases where we want to use no timeout, i.e. `None`,
/// but we don't actually want to use no timeout as that could cause a failing
/// test, one in which an event never comes, to run forever. This causes the CI
/// to remain idle, up to one hour, after which its forcefully killed. This
/// leaves us with a single line of logs; `test $name has been running for over
/// 60 seconds`, not the best debugging experience. Instead we use this high,
/// but not infinite, timeout after which assertions (that check the returned
/// events) should start failing.
pub const NO_TIMEOUT: Option<Duration> = Some(Duration::from_secs(10));

pub fn init() {
static INIT: Once = Once::new();

Expand Down