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()9 fn 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()23 fn 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()37 fn 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()51 fn 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() -> Runtime91 fn rt() -> Runtime {
92     tokio::runtime::Builder::new_current_thread()
93         .build()
94         .unwrap()
95 }
96