forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![warn(rust_2018_idioms)]
 | |
| #![cfg(all(feature = "full", not(tokio_wasi)))] // Wasi does not support bind
 | |
| 
 | |
| use tokio::net::TcpListener;
 | |
| use tokio::runtime;
 | |
| use tokio_test::{assert_err, assert_pending, assert_ready, task};
 | |
| 
 | |
| #[test]
 | |
| fn tcp_doesnt_block() {
 | |
|     let rt = rt();
 | |
| 
 | |
|     let listener = {
 | |
|         let _enter = rt.enter();
 | |
|         let listener = std::net::TcpListener::bind("127.0.0.1:0").unwrap();
 | |
|         TcpListener::from_std(listener).unwrap()
 | |
|     };
 | |
| 
 | |
|     drop(rt);
 | |
| 
 | |
|     let mut task = task::spawn(async move {
 | |
|         assert_err!(listener.accept().await);
 | |
|     });
 | |
| 
 | |
|     assert_ready!(task.poll());
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn drop_wakes() {
 | |
|     let rt = rt();
 | |
| 
 | |
|     let listener = {
 | |
|         let _enter = rt.enter();
 | |
|         let listener = std::net::TcpListener::bind("127.0.0.1:0").unwrap();
 | |
|         TcpListener::from_std(listener).unwrap()
 | |
|     };
 | |
| 
 | |
|     let mut task = task::spawn(async move {
 | |
|         assert_err!(listener.accept().await);
 | |
|     });
 | |
| 
 | |
|     assert_pending!(task.poll());
 | |
| 
 | |
|     drop(rt);
 | |
| 
 | |
|     assert!(task.is_woken());
 | |
|     assert_ready!(task.poll());
 | |
| }
 | |
| 
 | |
| fn rt() -> runtime::Runtime {
 | |
|     runtime::Builder::new_current_thread()
 | |
|         .enable_all()
 | |
|         .build()
 | |
|         .unwrap()
 | |
| }
 | 
