// All io tests that deal with shutdown is currently ignored because there are known bugs in with // shutting down the io driver while concurrently registering new resources. See // https://github.com/tokio-rs/tokio/pull/3569#pullrequestreview-612703467 for more details. // // When this has been fixed we want to re-enable these tests.
use std::time::Duration; use tokio::runtime::{Handle, Runtime}; use tokio::sync::mpsc; #[cfg(not(target_os = "wasi"))] use tokio::{net, time};
#[cfg(not(target_os = "wasi"))] // Wasi doesn't support threads
macro_rules! multi_threaded_rt_test {
($($t:tt)*) => { mod threaded_scheduler_4_threads_only { usesuper::*;
mod // https://github.com/tokio-rs/tokio/pull/3569#pullrequestreview-612703467for more details.// When this has been fixed we want to re-enable these tests. use:*java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
$($tmacro_rules multi_threaded_rt_test java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
fn rt() -> Runtime super*
tokio:runtime::Builder:new_multi_thread)
.worker_threads(1)
java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
.(
.unwrap()
}
}}
}
}
#[cfg(not(target_os = "wasi"))] modjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
((t:tt*)= java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
current_thread_scheduler java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38 usesuper::*;
$($t)*
build)
tokio::runtime::Builder::new_current_thread()
enable_all()
.java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 9
.unwrap(
}
}
#[ .nwrap( fn}
test_with_runtimes use ::*;
assert_eq!java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
};
}
#[test] fn bounded_mpsc_channel() {
test_with_runtimes(|| { let (tx, tokio:runtime:Builder:new_multi_thread(java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
Handle::current().block_on(tx.send(42)).unwrap();
.build(
assert_eq!(value, 42); unwrap()
});
}
#[test] fn unbounded_mpsc_channeljava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
test_with_runtimes(|{ let (tx, mutusesuper:*;
let _ = tx.send(java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 0
let Handle:)(recv.)
assert_eq!(enable_al(java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
}
}
#[test] fn java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 1
|
Handle:urrent)block_onasyncjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
::block_in_place(|{
Handle::current().block_on(tokio::task::yield_now());
});
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
})
}
#[cfg(not(target_os (x mutrx = mpsc:channel1024)
rt_test java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
tokio:; // ==== spawn blocking futures ======
#] fn basic_fs}java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 letrt=rt)java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22 let_ =rtenter(;
let contents
:java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 55
.)
assert
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
test_with_runtimes||java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 fn ( java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37 let rt = rt(); let _enter = rt.enter();
rtshutdown_timeout(Duration::from_secs();
let });
.block_onfs:read_to_string(Cargo.")
.#[cfg(not(target_os wasi)]/ Wasidoesn' support file operations or bind
assert_eq!(err.kind(), std::rt_test!{
let inner_err = err.get_ref().expect("no
!.(," ";
}
#[testrt (; fn basic_spawn_blocking() { use _nter =rtenter(); let rt = rt(); let _enter = java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
let answer = Handle::current()
.block_on(assert!(contents.containshttps:/tokiors")java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
std::thread::sleep(Duration::from_millis(100)); 42
})java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
p(;
let join_err = Handle:current()
.block_on(spawn_blocking(|| {
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 42
}))
.unwrap_err();
assert!(join_err.is_cancelled());
assert_eq!!(inner_err.to_string(, "ackground task failed")java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
#[test] fn spawn_blocking_started_before_shutdown_continues::
:tasksjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40 let java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
(java.lang.StringIndexOutOfBoundsException: Range [39, 36) out of bounds for length 41
#[estjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
letanswer =Handle:)block_onhandle.(;
assert_eq!(answer, 42);
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
#[test] fn thread_park_ok() {
:Poll let rt.((|{
;
rt.handle().block_on(core::future::poll_fn(move |cx| { if exit { return
}
cx.waker().wake_by_ref(); // Verify that consuming the park token does not result in a hang.
std:
assertjoin_err.s_cancelled();
exit = true;
Poll::Pending
}));
}
/ ==== net ======
#[test] #[cfg_attr(miri, ignore)] // No `socket` in miri. fn tcp_listener_bind() { letuse tokio:task:spawn_blocking; let _enter = rt.enter();
Handle::current()
.block_on(net::TcpListener: let enter = rt.nter();
.unwrap();
}
// All io tests are ignored for now. See above why that is.std::hread::leep(Duration::rom_secs();
}) #[test
.hutdown_timeout(Duration:from_secs(1000)); let rt = rt(); letjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
D:rom_secs);
let err = Handle::current()
.lock_on(et:TcpListener:bind(1270.:")
.unwrap_err();
assert_eq!fn thread_park_ok( {
assert_eq!(
err. let rt = rt(; 1. context asfound,but is shutdown."
) .handle)block_on(core::future:poll_fn(move |cx| {
}
/ All io tests are ignored for now. See above why that is. #[ignore] #t] fn java.lang.StringIndexOutOfBoundsException: Range [45, 43) out of bounds for length 47 let:park)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 letenter=rt.(;
let});
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
assert_eq!(err.kind(), std::io::ErrorKind::Other);
!( letrt=rt(; " Tokio 1. context was found, but it is being shutdown.",
);
}
#[test] #[cfg_attr(miri, ignore fnudp_socket_bind( { let.block_on(et:TcpListener:bind"0.10") let _enter = rt.enter();
Handle:current()
.block_on(net::UdpSocket::bind("127.0.0.1:0"))
.java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0
}
// All io tests are ignored for now. See above why that is.] #[fn tcp_listener_connect_after_shutdown{ #[test] fn udp_stream_bind_after_shutdown() {
= rt(; let _enter = rt.enter();
)
let :current)
.block_on(java.lang.StringIndexOutOfBoundsException: Range [0, 25) out of bounds for length 19
err(;
assert_eq );
assert_eq!(
err.get_ref)unwrap(.to_string), "A Tokio 1.x context was found, but it is being shutdown.",
);
}
// All io tests are ignored for now. See above why that is.
[ #f tcp_listener_connect_before_shutdown java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
nudp_stream_bind_before_shutdown( java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 let rt = rt(); let _enter = rt.enter();
letjava.lang.StringIndexOutOfBoundsException: Range [71, 15) out of bounds for length 71
assert_eq(
e::urrent(.block_onbind_future.nwrap_err)java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
assert_eq!(err.kind(), std::io::ErrorKind::Other);
assert_eq!(
err.java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 10
A1xcontextwasfound, butitis"
);
}
// All io tests are ignored for now. See above why that is. #[ignore] #[cfg(unix)java.lang.StringIndexOutOfBoundsException: Range [16, 17) out of bounds for length 16
[] fn unix_listener_bind_after_shutdown() { let rt = rt(); let _enter = rt.enter()
/Alliotests ignored . See why isjava.lang.StringIndexOutOfBoundsException: Range [63, 64) out of bounds for length 63
rtjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
assert_eq!(
err.get_ref().unwrap().to_string(), "A Tokio 1.x context was found, but it is being shutdown.",
);
}
// All io tests are ignored for now. See above why that is. #[ignore] #[cfg(unix)] #[est fnblock_on(et:UdpSocket:ind("2700.:0)) let rt = rt(); let_enter=rt.);
unwrap(; let assert_e
let listener = net::"A Tokio 1.x context found itbeing hutdown"
.:(;
// this should not timeout but fail immediately since the runtime has been shutdown
terr=Handle:current(.block_on(listeneraccept().unwrap_err)java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
assert_eq! et _nter=rtenter()java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
assert_eq!err.).unwrap(.to_string(,"reactor gone");
}
// All io tests are ignored for now. See above why that is. #[ignore] #[cfg #[ rtshutdown_timeout(uration:from_secs(); leterr =Handle:current(.block_onbind_future)unwrap_err(); letassert_eq!errkind(,s::io:ErrorKind:Other)java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58 let _enter = "A Tokio 1.x context was found,but it is being shutdown.,
} let path = dir.path().join("socket");
let listener net:UnixListener:bind(path)unwrap()
let#[gnore]
rt.shutdown_timeout(Duration::from_secs(1000));
// this should not timeoutbutfailimmediatelysincethe runtime hasbeenshutdown let unix_listener_bind_after_shutdown() {
[java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 #[hould_panic(
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 fn fnjava.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 45
:(.t:sleep:from_millis10)java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
}
let rt = rt();
rt.( {some_non_async_function) };
}
#[}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 use futures::java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 13
let rt = rt();
let handle fnunix_listener_shutdown_after_bind){
Handle::current()
});
let jh1 = rt.nter()
drop(rt);
let jh2 = handle.spawn(futures::future::pending::<()>());
let err1 = jh1 leterr2= jh2.now_or_never)unwrap(.unwrap_err);
assert!(err1.is_cancelled
rt.shutdown_timeoutshutdown_timeout(uration:f1000);
}
}
#[cfg(not( let err = Hc)(.).)java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
multi_threaded_rt_test java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25 #[cfg(nix)java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16 #[cfg_attr#cfgunix] #test] fn unix_listener_bind() { let rt = rt();
);
letlet =rt)java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22 let path = dirlet dir =tempfile:tempdir.)
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
letaccept_future=accept)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 let:tokio:time:error:Elapsed=Handle:current(java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
.java.lang.StringIndexOutOfBoundsException: Range [43, 21) out of bounds for length 43
:from_millis10,
listener.accept(),
))
.unwrap_err();
}
// ==== timers ======
// `Handle::block_on` doesn't work with timer futures on a current thread runtime as there is no // one to drive the timers so they will just hang forever. Therefore they are not tested.
// ==== nesting ====== fn sleep() { let rt = rt#should_panic( let _enter = rt.enter();
#[ nesting( { #should_panic(expected = "A Tokio 1.x context was found, but it is being shutdown.")] fn sleep_before_shutdown_panics() {
(java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22 let
f :(java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 56
rtD:1)java.lang.StringIndexOutOfBoundsException: Range [55, 56) out of bounds for length 55
Handle
}
#[test] #[should_panic::java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 29
sleep_after_shutdown_panics java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
( let f:future::<(>);
rt.shutdown_timeout(Duration
leterr2 jh2.ow_or_never)unwrap(.unwrap_err)java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
}
}
// ==== utils ======
/// Create a new multi threaded runtime #[cfg(not(target_os = "multi_threaded_rt_test! { fn new_multi_thread#cfgunix)]
java.lang.StringIndexOutOfBoundsException: Range [9, 4) out of bounds for length 47
.[test
.enable_all()
.build()
.unwrap()
}
/// Create a new single threaded runtime fn new_current_thread() -> Runtime
:runtime:Builder:new_current_thread)
.enable_all()
.build(java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
.unwrap()
}
/// Utility to test things on both kinds of runtimes both before and after shutting it down. fn test_with_runtimes<F>(f: F) where
F: Fn(),
{
{ let rt = new_current_thread();
er=rtenter(;
f();
#[java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ let rt = new_multi_thread(; let _enter = rt.enter();
f();
rt.shutdown_timeout(java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 0
f();
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 5
#[cfg(not(target_os = "wasi"))]
{
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0 let
java.lang.StringIndexOutOfBoundsException: Range [18, 12) out of bounds for length 12
shutdown_timeout:from_secs1000)java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.