Auto merge of #56394 - cuviper:interrupted-timeout, r=sfackler
Deal with EINTR in net timeout tests We've seen sporadic QE failures in the timeout tests on this assertion: assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut); So there's an error, but not either of the expected kinds. Adding a format to show the kind revealed `ErrorKind::Interrupted` (`EINTR`). For the cases that were using `read`, we can just use `read_exact` to keep trying after interruption. For those using `recv_from`, we have to manually loop until we get a non-interrupted result.
This commit is contained in:
commit
25c375413a
3 changed files with 28 additions and 12 deletions
|
@ -1548,8 +1548,9 @@ mod tests {
|
|||
|
||||
let mut buf = [0; 10];
|
||||
let start = Instant::now();
|
||||
let kind = stream.read(&mut buf).err().expect("expected error").kind();
|
||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
|
||||
let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
|
||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
|
||||
"unexpected_error: {:?}", kind);
|
||||
assert!(start.elapsed() > Duration::from_millis(400));
|
||||
drop(listener);
|
||||
}
|
||||
|
@ -1570,8 +1571,9 @@ mod tests {
|
|||
assert_eq!(b"hello world", &buf[..]);
|
||||
|
||||
let start = Instant::now();
|
||||
let kind = stream.read(&mut buf).err().expect("expected error").kind();
|
||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
|
||||
let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
|
||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
|
||||
"unexpected_error: {:?}", kind);
|
||||
assert!(start.elapsed() > Duration::from_millis(400));
|
||||
drop(listener);
|
||||
}
|
||||
|
|
|
@ -1030,8 +1030,14 @@ mod tests {
|
|||
let mut buf = [0; 10];
|
||||
|
||||
let start = Instant::now();
|
||||
let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
|
||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
|
||||
loop {
|
||||
let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
|
||||
if kind != ErrorKind::Interrupted {
|
||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
|
||||
"unexpected_error: {:?}", kind);
|
||||
break;
|
||||
}
|
||||
}
|
||||
assert!(start.elapsed() > Duration::from_millis(400));
|
||||
}
|
||||
|
||||
|
@ -1049,8 +1055,14 @@ mod tests {
|
|||
assert_eq!(b"hello world", &buf[..]);
|
||||
|
||||
let start = Instant::now();
|
||||
let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
|
||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
|
||||
loop {
|
||||
let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
|
||||
if kind != ErrorKind::Interrupted {
|
||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
|
||||
"unexpected_error: {:?}", kind);
|
||||
break;
|
||||
}
|
||||
}
|
||||
assert!(start.elapsed() > Duration::from_millis(400));
|
||||
}
|
||||
|
||||
|
|
|
@ -1654,8 +1654,9 @@ mod test {
|
|||
or_panic!(stream.set_read_timeout(Some(Duration::from_millis(1000))));
|
||||
|
||||
let mut buf = [0; 10];
|
||||
let kind = stream.read(&mut buf).err().expect("expected error").kind();
|
||||
assert!(kind == io::ErrorKind::WouldBlock || kind == io::ErrorKind::TimedOut);
|
||||
let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
|
||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
|
||||
"unexpected_error: {:?}", kind);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -1675,8 +1676,9 @@ mod test {
|
|||
or_panic!(stream.read(&mut buf));
|
||||
assert_eq!(b"hello world", &buf[..]);
|
||||
|
||||
let kind = stream.read(&mut buf).err().expect("expected error").kind();
|
||||
assert!(kind == io::ErrorKind::WouldBlock || kind == io::ErrorKind::TimedOut);
|
||||
let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
|
||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
|
||||
"unexpected_error: {:?}", kind);
|
||||
}
|
||||
|
||||
// Ensure the `set_read_timeout` and `set_write_timeout` calls return errors
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue