Add tests ensuring zero-Duration timeouts result in errors.

Part of https://github.com/rust-lang/rust/issues/48311
This commit is contained in:
Corey Farwell
2018-02-18 16:08:48 -05:00
parent 1ad094d81c
commit d17d645ad7
3 changed files with 77 additions and 1 deletions

View File

@@ -1545,6 +1545,26 @@ mod tests {
drop(listener); drop(listener);
} }
// Ensure the `set_read_timeout` and `set_write_timeout` calls return errors
// when passed zero Durations
#[test]
fn test_timeout_zero_duration() {
let addr = next_test_ip4();
let listener = t!(TcpListener::bind(&addr));
let stream = t!(TcpStream::connect(&addr));
let result = stream.set_write_timeout(Some(Duration::new(0, 0)));
let err = result.unwrap_err();
assert_eq!(err.kind(), ErrorKind::InvalidInput);
let result = stream.set_read_timeout(Some(Duration::new(0, 0)));
let err = result.unwrap_err();
assert_eq!(err.kind(), ErrorKind::InvalidInput);
drop(listener);
}
#[test] #[test]
fn nodelay() { fn nodelay() {
let addr = next_test_ip4(); let addr = next_test_ip4();

View File

@@ -1024,6 +1024,23 @@ mod tests {
assert!(start.elapsed() > Duration::from_millis(400)); assert!(start.elapsed() > Duration::from_millis(400));
} }
// Ensure the `set_read_timeout` and `set_write_timeout` calls return errors
// when passed zero Durations
#[test]
fn test_timeout_zero_duration() {
let addr = next_test_ip4();
let socket = t!(UdpSocket::bind(&addr));
let result = socket.set_write_timeout(Some(Duration::new(0, 0)));
let err = result.unwrap_err();
assert_eq!(err.kind(), ErrorKind::InvalidInput);
let result = socket.set_read_timeout(Some(Duration::new(0, 0)));
let err = result.unwrap_err();
assert_eq!(err.kind(), ErrorKind::InvalidInput);
}
#[test] #[test]
fn connect_send_recv() { fn connect_send_recv() {
let addr = next_test_ip4(); let addr = next_test_ip4();

View File

@@ -1410,7 +1410,7 @@ impl IntoRawFd for UnixDatagram {
#[cfg(all(test, not(target_os = "emscripten")))] #[cfg(all(test, not(target_os = "emscripten")))]
mod test { mod test {
use thread; use thread;
use io; use io::{self, ErrorKind};
use io::prelude::*; use io::prelude::*;
use time::Duration; use time::Duration;
use sys_common::io::test::tmpdir; use sys_common::io::test::tmpdir;
@@ -1613,6 +1613,27 @@ mod test {
assert!(kind == io::ErrorKind::WouldBlock || kind == io::ErrorKind::TimedOut); assert!(kind == io::ErrorKind::WouldBlock || kind == io::ErrorKind::TimedOut);
} }
// Ensure the `set_read_timeout` and `set_write_timeout` calls return errors
// when passed zero Durations
#[test]
fn test_unix_stream_timeout_zero_duration() {
let dir = tmpdir();
let socket_path = dir.path().join("sock");
let listener = or_panic!(UnixListener::bind(&socket_path));
let stream = or_panic!(UnixStream::connect(&socket_path));
let result = stream.set_write_timeout(Some(Duration::new(0, 0)));
let err = result.unwrap_err();
assert_eq!(err.kind(), ErrorKind::InvalidInput);
let result = stream.set_read_timeout(Some(Duration::new(0, 0)));
let err = result.unwrap_err();
assert_eq!(err.kind(), ErrorKind::InvalidInput);
drop(listener);
}
#[test] #[test]
fn test_unix_datagram() { fn test_unix_datagram() {
let dir = tmpdir(); let dir = tmpdir();
@@ -1712,6 +1733,24 @@ mod test {
thread.join().unwrap(); thread.join().unwrap();
} }
// Ensure the `set_read_timeout` and `set_write_timeout` calls return errors
// when passed zero Durations
#[test]
fn test_unix_datagram_timeout_zero_duration() {
let dir = tmpdir();
let path = dir.path().join("sock");
let datagram = or_panic!(UnixDatagram::bind(&path));
let result = datagram.set_write_timeout(Some(Duration::new(0, 0)));
let err = result.unwrap_err();
assert_eq!(err.kind(), ErrorKind::InvalidInput);
let result = datagram.set_read_timeout(Some(Duration::new(0, 0)));
let err = result.unwrap_err();
assert_eq!(err.kind(), ErrorKind::InvalidInput);
}
#[test] #[test]
fn abstract_namespace_not_allowed() { fn abstract_namespace_not_allowed() {
assert!(UnixStream::connect("\0asdf").is_err()); assert!(UnixStream::connect("\0asdf").is_err());