Skip to content

Commit e4ebf44

Browse files
committed
chore(tests): change tests to use current_thread runtime
1 parent 9a28268 commit e4ebf44

File tree

6 files changed

+200
-237
lines changed

6 files changed

+200
-237
lines changed

Diff for: benches/end_to_end.rs

+8-11
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ extern crate tokio;
99
use std::net::SocketAddr;
1010

1111
use futures::{Future, Stream};
12-
use tokio::runtime::Runtime;
12+
use tokio::runtime::current_thread::Runtime;
1313
use tokio::net::TcpListener;
1414

1515
use hyper::{Body, Method, Request, Response};
@@ -22,22 +22,21 @@ fn get_one_at_a_time(b: &mut test::Bencher) {
2222
let mut rt = Runtime::new().unwrap();
2323
let addr = spawn_hello(&mut rt);
2424

25-
let connector = HttpConnector::new_with_handle(1, rt.reactor().clone());
25+
let connector = HttpConnector::new(1);
2626
let client = hyper::Client::builder()
27-
.executor(rt.executor())
2827
.build::<_, Body>(connector);
2928

3029
let url: hyper::Uri = format!("http://{}/get", addr).parse().unwrap();
3130

3231
b.bytes = 160 * 2 + PHRASE.len() as u64;
3332
b.iter(move || {
34-
client.get(url.clone())
33+
rt.block_on(client.get(url.clone())
3534
.and_then(|res| {
3635
res.into_body().for_each(|_chunk| {
3736
Ok(())
3837
})
39-
})
40-
.wait().expect("client wait");
38+
}))
39+
.expect("client wait");
4140
});
4241
}
4342

@@ -46,9 +45,8 @@ fn post_one_at_a_time(b: &mut test::Bencher) {
4645
let mut rt = Runtime::new().unwrap();
4746
let addr = spawn_hello(&mut rt);
4847

49-
let connector = HttpConnector::new_with_handle(1, rt.reactor().clone());
48+
let connector = HttpConnector::new(1);
5049
let client = hyper::Client::builder()
51-
.executor(rt.executor())
5250
.build::<_, Body>(connector);
5351

5452
let url: hyper::Uri = format!("http://{}/post", addr).parse().unwrap();
@@ -59,12 +57,11 @@ fn post_one_at_a_time(b: &mut test::Bencher) {
5957
let mut req = Request::new(post.into());
6058
*req.method_mut() = Method::POST;
6159
*req.uri_mut() = url.clone();
62-
client.request(req).and_then(|res| {
60+
rt.block_on(client.request(req).and_then(|res| {
6361
res.into_body().for_each(|_chunk| {
6462
Ok(())
6563
})
66-
}).wait().expect("client wait");
67-
64+
})).expect("client wait");
6865
});
6966
}
7067

Diff for: src/client/pool.rs

+17-8
Original file line numberDiff line numberDiff line change
@@ -805,20 +805,29 @@ mod tests {
805805
#[cfg(feature = "runtime")]
806806
#[test]
807807
fn test_pool_timer_removes_expired() {
808-
use std::sync::Arc;
809-
let runtime = ::tokio::runtime::Runtime::new().unwrap();
810-
let executor = runtime.executor();
811-
let pool = Pool::new(true, Some(Duration::from_millis(100)), &Exec::Executor(Arc::new(executor)));
808+
use std::time::Instant;
809+
use tokio_timer::Delay;
810+
let mut rt = ::tokio::runtime::current_thread::Runtime::new().unwrap();
811+
let pool = Pool::new(true, Some(Duration::from_millis(100)), &Exec::Default);
812812

813813
let key = (Arc::new("foo".to_string()), Ver::Http1);
814814

815-
pool.pooled(c(key.clone()), Uniq(41));
816-
pool.pooled(c(key.clone()), Uniq(5));
817-
pool.pooled(c(key.clone()), Uniq(99));
815+
// Since pool.pooled() will be calling spawn on drop, need to be sure
816+
// those drops are called while `rt` is the current executor. To do so,
817+
// call those inside a future.
818+
rt.block_on(::futures::future::lazy(|| {
819+
pool.pooled(c(key.clone()), Uniq(41));
820+
pool.pooled(c(key.clone()), Uniq(5));
821+
pool.pooled(c(key.clone()), Uniq(99));
822+
Ok::<_, ()>(())
823+
})).unwrap();
818824

819825
assert_eq!(pool.inner.connections.lock().unwrap().idle.get(&key).map(|entries| entries.len()), Some(3));
820826

821-
::std::thread::sleep(Duration::from_millis(400)); // allow for too-good resolution
827+
// Let the timer tick passed the expiration...
828+
rt
829+
.block_on(Delay::new(Instant::now() + Duration::from_millis(200)))
830+
.expect("rt block_on 200ms");
822831

823832
assert!(pool.inner.connections.lock().unwrap().idle.get(&key).is_none());
824833
}

Diff for: src/client/tests.rs

+8-15
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
#![cfg(feature = "runtime")]
22
extern crate pretty_env_logger;
33

4-
use std::thread;
5-
use std::time::Duration;
6-
74
use futures::Async;
85
use futures::future::poll_fn;
9-
use tokio::executor::thread_pool::{Builder as ThreadPoolBuilder};
6+
use tokio::runtime::current_thread::Runtime;
107

118
use mock::MockConnector;
129
use super::*;
@@ -15,14 +12,13 @@ use super::*;
1512
fn retryable_request() {
1613
let _ = pretty_env_logger::try_init();
1714

18-
let executor = ThreadPoolBuilder::new().pool_size(1).build();
15+
let mut rt = Runtime::new().expect("new rt");
1916
let mut connector = MockConnector::new();
2017

2118
let sock1 = connector.mock("http://mock.local");
2219
let sock2 = connector.mock("http://mock.local");
2320

2421
let client = Client::builder()
25-
.executor(executor.sender().clone())
2622
.build::<_, ::Body>(connector);
2723

2824
client.pool.no_timer();
@@ -39,7 +35,7 @@ fn retryable_request() {
3935
try_ready!(sock1.write(b"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"));
4036
Ok(Async::Ready(()))
4137
}).map_err(|e: ::std::io::Error| panic!("srv1 poll_fn error: {}", e));
42-
res1.join(srv1).wait().expect("res1");
38+
rt.block_on(res1.join(srv1)).expect("res1");
4339
}
4440
drop(sock1);
4541

@@ -57,20 +53,19 @@ fn retryable_request() {
5753
Ok(Async::Ready(()))
5854
}).map_err(|e: ::std::io::Error| panic!("srv2 poll_fn error: {}", e));
5955

60-
res2.join(srv2).wait().expect("res2");
56+
rt.block_on(res2.join(srv2)).expect("res2");
6157
}
6258

6359
#[test]
6460
fn conn_reset_after_write() {
6561
let _ = pretty_env_logger::try_init();
6662

67-
let executor = ThreadPoolBuilder::new().pool_size(1).build();
63+
let mut rt = Runtime::new().expect("new rt");
6864
let mut connector = MockConnector::new();
6965

7066
let sock1 = connector.mock("http://mock.local");
7167

7268
let client = Client::builder()
73-
.executor(executor.sender().clone())
7469
.build::<_, ::Body>(connector);
7570

7671
client.pool.no_timer();
@@ -88,12 +83,9 @@ fn conn_reset_after_write() {
8883
try_ready!(sock1.write(b"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"));
8984
Ok(Async::Ready(()))
9085
}).map_err(|e: ::std::io::Error| panic!("srv1 poll_fn error: {}", e));
91-
res1.join(srv1).wait().expect("res1");
86+
rt.block_on(res1.join(srv1)).expect("res1");
9287
}
9388

94-
// sleep to allow some time for the connection to return to the pool
95-
thread::sleep(Duration::from_millis(10));
96-
9789
let req = Request::builder()
9890
.uri("http://mock.local/a")
9991
.body(Default::default())
@@ -111,9 +103,10 @@ fn conn_reset_after_write() {
111103
sock1.take();
112104
Ok(Async::Ready(()))
113105
}).map_err(|e: ::std::io::Error| panic!("srv2 poll_fn error: {}", e));
114-
let err = res2.join(srv2).wait().expect_err("res2");
106+
let err = rt.block_on(res2.join(srv2)).expect_err("res2");
115107
match err.kind() {
116108
&::error::Kind::Incomplete => (),
117109
other => panic!("expected Incomplete, found {:?}", other)
118110
}
119111
}
112+

0 commit comments

Comments
 (0)