1 #![warn(rust_2018_idioms)] 2 #![cfg(feature = "full")] 3 4 use tokio::net::TcpListener; 5 use tokio::runtime; 6 use tokio_test::{assert_err, assert_pending, assert_ready, task}; 7 8 #[test] tcp_doesnt_block()9fn tcp_doesnt_block() { 10 let rt = rt(); 11 12 let mut listener = rt.enter(|| { 13 let listener = std::net::TcpListener::bind("127.0.0.1:0").unwrap(); 14 TcpListener::from_std(listener).unwrap() 15 }); 16 17 drop(rt); 18 19 let mut task = task::spawn(async move { 20 assert_err!(listener.accept().await); 21 }); 22 23 assert_ready!(task.poll()); 24 } 25 26 #[test] drop_wakes()27fn drop_wakes() { 28 let rt = rt(); 29 30 let mut listener = rt.enter(|| { 31 let listener = std::net::TcpListener::bind("127.0.0.1:0").unwrap(); 32 TcpListener::from_std(listener).unwrap() 33 }); 34 35 let mut task = task::spawn(async move { 36 assert_err!(listener.accept().await); 37 }); 38 39 assert_pending!(task.poll()); 40 41 drop(rt); 42 43 assert!(task.is_woken()); 44 assert_ready!(task.poll()); 45 } 46 rt() -> runtime::Runtime47fn rt() -> runtime::Runtime { 48 runtime::Builder::new() 49 .basic_scheduler() 50 .enable_all() 51 .build() 52 .unwrap() 53 } 54