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 mut buf = [0; 10];
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
let kind = stream.read(&mut buf).err().expect("expected error").kind();
|
let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
|
||||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
|
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
|
||||||
|
"unexpected_error: {:?}", kind);
|
||||||
assert!(start.elapsed() > Duration::from_millis(400));
|
assert!(start.elapsed() > Duration::from_millis(400));
|
||||||
drop(listener);
|
drop(listener);
|
||||||
}
|
}
|
||||||
|
@ -1570,8 +1571,9 @@ mod tests {
|
||||||
assert_eq!(b"hello world", &buf[..]);
|
assert_eq!(b"hello world", &buf[..]);
|
||||||
|
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
let kind = stream.read(&mut buf).err().expect("expected error").kind();
|
let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
|
||||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
|
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
|
||||||
|
"unexpected_error: {:?}", kind);
|
||||||
assert!(start.elapsed() > Duration::from_millis(400));
|
assert!(start.elapsed() > Duration::from_millis(400));
|
||||||
drop(listener);
|
drop(listener);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1030,8 +1030,14 @@ mod tests {
|
||||||
let mut buf = [0; 10];
|
let mut buf = [0; 10];
|
||||||
|
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
|
loop {
|
||||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
|
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));
|
assert!(start.elapsed() > Duration::from_millis(400));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1049,8 +1055,14 @@ mod tests {
|
||||||
assert_eq!(b"hello world", &buf[..]);
|
assert_eq!(b"hello world", &buf[..]);
|
||||||
|
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
let kind = stream.recv_from(&mut buf).err().expect("expected error").kind();
|
loop {
|
||||||
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
|
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));
|
assert!(start.elapsed() > Duration::from_millis(400));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1654,8 +1654,9 @@ mod test {
|
||||||
or_panic!(stream.set_read_timeout(Some(Duration::from_millis(1000))));
|
or_panic!(stream.set_read_timeout(Some(Duration::from_millis(1000))));
|
||||||
|
|
||||||
let mut buf = [0; 10];
|
let mut buf = [0; 10];
|
||||||
let kind = stream.read(&mut buf).err().expect("expected error").kind();
|
let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
|
||||||
assert!(kind == io::ErrorKind::WouldBlock || kind == io::ErrorKind::TimedOut);
|
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
|
||||||
|
"unexpected_error: {:?}", kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -1675,8 +1676,9 @@ mod test {
|
||||||
or_panic!(stream.read(&mut buf));
|
or_panic!(stream.read(&mut buf));
|
||||||
assert_eq!(b"hello world", &buf[..]);
|
assert_eq!(b"hello world", &buf[..]);
|
||||||
|
|
||||||
let kind = stream.read(&mut buf).err().expect("expected error").kind();
|
let kind = stream.read_exact(&mut buf).err().expect("expected error").kind();
|
||||||
assert!(kind == io::ErrorKind::WouldBlock || kind == io::ErrorKind::TimedOut);
|
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut,
|
||||||
|
"unexpected_error: {:?}", kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure the `set_read_timeout` and `set_write_timeout` calls return errors
|
// Ensure the `set_read_timeout` and `set_write_timeout` calls return errors
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue