83 lines
2.4 KiB
Rust
83 lines
2.4 KiB
Rust
#![warn(rust_2018_idioms)]
|
|
#![cfg(feature = "full")]
|
|
#![cfg(not(miri))] // No socket in miri.
|
|
|
|
use std::io;
|
|
use tokio::net::TcpListener;
|
|
use tokio::runtime::Builder;
|
|
|
|
fn rt() -> tokio::runtime::Runtime {
|
|
Builder::new_current_thread().enable_all().build().unwrap()
|
|
}
|
|
|
|
#[test]
|
|
fn test_is_rt_shutdown_err() {
|
|
let rt1 = rt();
|
|
let rt2 = rt();
|
|
|
|
let listener = rt1.block_on(async { TcpListener::bind("127.0.0.1:0").await.unwrap() });
|
|
|
|
drop(rt1);
|
|
|
|
rt2.block_on(async {
|
|
let res = listener.accept().await;
|
|
assert!(res.is_err());
|
|
let err = res.as_ref().unwrap_err();
|
|
assert!(tokio::runtime::is_rt_shutdown_err(err));
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn test_is_not_rt_shutdown_err() {
|
|
let err = io::Error::new(io::ErrorKind::Other, "some other error");
|
|
assert!(!tokio::runtime::is_rt_shutdown_err(&err));
|
|
|
|
let err = io::Error::new(io::ErrorKind::NotFound, "not found");
|
|
assert!(!tokio::runtime::is_rt_shutdown_err(&err));
|
|
}
|
|
|
|
#[test]
|
|
#[cfg_attr(panic = "abort", ignore)]
|
|
fn test_join_error_panic() {
|
|
let rt = rt();
|
|
let handle = rt.spawn(async {
|
|
panic!("oops");
|
|
});
|
|
|
|
let join_err = rt.block_on(handle).unwrap_err();
|
|
let io_err: io::Error = join_err.into();
|
|
assert!(!tokio::runtime::is_rt_shutdown_err(&io_err));
|
|
}
|
|
|
|
#[test]
|
|
fn test_join_error_cancelled() {
|
|
let rt = rt();
|
|
let handle = rt.spawn(async {
|
|
std::future::pending::<()>().await;
|
|
});
|
|
handle.abort();
|
|
let join_err = rt.block_on(handle).unwrap_err();
|
|
let io_err: io::Error = join_err.into();
|
|
assert!(!tokio::runtime::is_rt_shutdown_err(&io_err));
|
|
}
|
|
|
|
#[test]
|
|
fn test_other_error_kinds_and_strings() {
|
|
// TimedOut
|
|
let err = io::Error::new(io::ErrorKind::TimedOut, "timed out");
|
|
assert!(!tokio::runtime::is_rt_shutdown_err(&err));
|
|
|
|
// Interrupted
|
|
let err = io::Error::from(io::ErrorKind::Interrupted);
|
|
assert!(!tokio::runtime::is_rt_shutdown_err(&err));
|
|
|
|
// String that contains the shutdown message but has a prefix/suffix
|
|
let msg = "A Tokio 1.x context was found, but it is being shutdown. (extra info)";
|
|
let err = io::Error::new(io::ErrorKind::Other, msg);
|
|
assert!(!tokio::runtime::is_rt_shutdown_err(&err));
|
|
|
|
let msg = "Error: A Tokio 1.x context was found, but it is being shutdown.";
|
|
let err = io::Error::new(io::ErrorKind::Other, msg);
|
|
assert!(!tokio::runtime::is_rt_shutdown_err(&err));
|
|
}
|