1 #![warn(rust_2018_idioms)] 2 #![cfg(feature = "full")] 3 4 use tokio::runtime::Runtime; 5 6 #[test] basic_enter()7fn basic_enter() { 8 let rt1 = rt(); 9 let rt2 = rt(); 10 11 let enter1 = rt1.enter(); 12 let enter2 = rt2.enter(); 13 14 drop(enter2); 15 drop(enter1); 16 } 17 18 #[test] 19 #[should_panic] interleave_enter_different_rt()20fn interleave_enter_different_rt() { 21 let rt1 = rt(); 22 let rt2 = rt(); 23 24 let enter1 = rt1.enter(); 25 let enter2 = rt2.enter(); 26 27 drop(enter1); 28 drop(enter2); 29 } 30 31 #[test] 32 #[should_panic] interleave_enter_same_rt()33fn interleave_enter_same_rt() { 34 let rt1 = rt(); 35 36 let _enter1 = rt1.enter(); 37 let enter2 = rt1.enter(); 38 let enter3 = rt1.enter(); 39 40 drop(enter2); 41 drop(enter3); 42 } 43 44 #[test] 45 #[cfg(not(target_os = "wasi"))] interleave_then_enter()46fn interleave_then_enter() { 47 let _ = std::panic::catch_unwind(|| { 48 let rt1 = rt(); 49 let rt2 = rt(); 50 51 let enter1 = rt1.enter(); 52 let enter2 = rt2.enter(); 53 54 drop(enter1); 55 drop(enter2); 56 }); 57 58 // Can still enter 59 let rt3 = rt(); 60 let _enter = rt3.enter(); 61 } 62 63 #[cfg(tokio_unstable)] 64 mod unstable { 65 use super::*; 66 67 #[test] runtime_id_is_same()68 fn runtime_id_is_same() { 69 let rt = rt(); 70 71 let handle1 = rt.handle(); 72 let handle2 = rt.handle(); 73 74 assert_eq!(handle1.id(), handle2.id()); 75 } 76 77 #[test] runtime_ids_different()78 fn runtime_ids_different() { 79 let rt1 = rt(); 80 let rt2 = rt(); 81 82 assert_ne!(rt1.handle().id(), rt2.handle().id()); 83 } 84 } 85 rt() -> Runtime86fn rt() -> Runtime { 87 tokio::runtime::Builder::new_current_thread() 88 .build() 89 .unwrap() 90 } 91