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