use std::io; use std::net::TcpListener; use std::thread; use std::time::Duration; #[test] fn request_fails_due_to_read_timeout() { let listener = TcpListener::bind("localhost:0").unwrap(); let port = listener.local_addr().unwrap().port(); let thread = thread::spawn(move || { let _stream = listener.accept().unwrap(); thread::sleep(Duration::from_millis(500)); }); let result = attohttpc::get(format!("http://localhost:{port}")) .read_timeout(Duration::from_millis(100)) .send(); match result { Err(err) => match err.kind() { attohttpc::ErrorKind::Io(err) => match err.kind() { io::ErrorKind::TimedOut | io::ErrorKind::WouldBlock => (), err => panic!("Unexpected I/O error: {:?}", err), }, err => panic!("Unexpected error: {:?}", err), }, Ok(resp) => panic!("Unexpected response: {:?}", resp), } thread.join().unwrap(); } #[test] fn request_fails_due_to_timeout() { let listener = TcpListener::bind("localhost:0").unwrap(); let port = listener.local_addr().unwrap().port(); let thread = thread::spawn(move || { let _stream = listener.accept().unwrap(); thread::sleep(Duration::from_millis(500)); }); let result = attohttpc::get(format!("http://localhost:{port}")) .timeout(Duration::from_millis(100)) .send(); match result { Err(err) => match err.kind() { attohttpc::ErrorKind::Io(err) => match err.kind() { io::ErrorKind::TimedOut => (), err => panic!("Unexpected I/O error: {:?}", err), }, err => panic!("Unexpected error: {:?}", err), }, Ok(resp) => panic!("Unexpected response: {:?}", resp), } thread.join().unwrap(); }