• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #![warn(rust_2018_idioms)]
2 #![cfg(feature = "full")]
3 
4 use tokio::runtime::Runtime;
5 
6 #[test]
basic_enter()7 fn 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()20 fn 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()33 fn 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()46 fn 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() -> Runtime86 fn rt() -> Runtime {
87     tokio::runtime::Builder::new_current_thread()
88         .build()
89         .unwrap()
90 }
91