Skip to content

Commit 33d8334

Browse files
committed
Use a single runtime per test
1 parent 902a1ca commit 33d8334

File tree

3 files changed

+38
-37
lines changed

3 files changed

+38
-37
lines changed

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,5 @@ semver = "0.5" # Must match version in conduit for now
1818
tokio-threadpool = "0.1.12"
1919

2020
[dev-dependencies]
21-
conduit = "0.8"
2221
conduit-router = "0.8"
2322
tokio = "0.1"

src/lib.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
//! use tokio::runtime::Runtime;
2020
//!
2121
//! fn main() {
22-
//! let a = ();
2322
//! let app = build_conduit_handler();
2423
//! let addr = ([127, 0, 0, 1], 12345).into();
2524
//! let server = Server::bind(&addr, app).map_err(|e| {
@@ -36,21 +35,18 @@
3635
//! # Endpoint()
3736
//! }
3837
//! #
39-
//! # use std::collections::HashMap;
40-
//! # use std::error::Error;
41-
//! # use std::io::Cursor;
38+
//! # use std::{collections, error, io};
4239
//! #
4340
//! # use conduit::{Request, Response};
4441
//! #
4542
//! # struct Endpoint();
4643
//! #
4744
//! # impl Handler for Endpoint {
48-
//! # fn call(&self, _: &mut dyn Request) -> Result<Response, Box<dyn Error + Send>> {
49-
//! # let body = "";
45+
//! # fn call(&self, _: &mut dyn Request) -> Result<Response, Box<dyn error::Error + Send>> {
5046
//! # Ok(Response {
5147
//! # status: (200, "OK"),
52-
//! # headers: HashMap::new(),
53-
//! # body: Box::new(Cursor::new(body)),
48+
//! # headers: collections::HashMap::new(),
49+
//! # body: Box::new(io::Cursor::new("")),
5450
//! # })
5551
//! # }
5652
//! # }

src/tests.rs

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ use std::error::Error;
33
use std::io::Cursor;
44

55
use conduit::{Handler, Request, Response};
6-
use futures::{Future, Stream};
7-
use hyper;
6+
use futures::{future, Future, Stream};
87

98
struct OkResult;
109
impl Handler for OkResult {
@@ -73,25 +72,28 @@ fn build_headers(msg: &str) -> HashMap<String, Vec<String>> {
7372
headers
7473
}
7574

76-
fn build_threadpool() -> tokio::runtime::Runtime {
77-
tokio::runtime::Builder::new()
75+
fn block_on<F>(f: F)
76+
where
77+
F: FnOnce() -> () + Send + 'static,
78+
{
79+
let mut rt = tokio::runtime::Builder::new()
7880
.core_threads(1)
7981
.blocking_threads(1)
8082
.build()
81-
.unwrap()
83+
.unwrap();
84+
rt.spawn(futures::lazy(move || {
85+
f();
86+
future::ok(())
87+
}));
88+
rt.shutdown_on_idle().wait().unwrap();
8289
}
8390

8491
fn simulate_request<H: Handler>(handler: H) -> hyper::Response<hyper::Body> {
8592
use hyper::service::{NewService, Service};
8693

87-
let mut pool = build_threadpool();
88-
89-
pool.block_on(futures::lazy(|| {
90-
let new_service = super::Service::new(handler);
91-
let mut service = new_service.new_service().wait().unwrap();
92-
service.call(hyper::Request::default()).wait()
93-
}))
94-
.unwrap()
94+
let new_service = super::Service::new(handler);
95+
let mut service = new_service.new_service().wait().unwrap();
96+
service.call(hyper::Request::default()).wait().unwrap()
9597
}
9698

9799
fn into_chunk(resp: hyper::Response<hyper::Body>) -> hyper::Chunk {
@@ -107,37 +109,43 @@ fn assert_generic_err(resp: hyper::Response<hyper::Body>) {
107109

108110
#[test]
109111
fn valid_ok_response() {
110-
let resp = simulate_request(OkResult);
111-
assert_eq!(resp.status(), 200);
112-
assert_eq!(resp.headers().len(), 1);
113-
let full_body = into_chunk(resp);
114-
assert_eq!(&*full_body, b"Hello, world!");
112+
block_on(|| {
113+
let resp = simulate_request(OkResult);
114+
assert_eq!(resp.status(), 200);
115+
assert_eq!(resp.headers().len(), 1);
116+
let full_body = into_chunk(resp);
117+
assert_eq!(&*full_body, b"Hello, world!");
118+
})
115119
}
116120

117121
#[test]
118122
fn invalid_ok_responses() {
119-
assert_generic_err(simulate_request(InvalidHeader));
120-
assert_generic_err(simulate_request(InvalidStatus));
123+
block_on(|| {
124+
assert_generic_err(simulate_request(InvalidHeader));
125+
assert_generic_err(simulate_request(InvalidStatus));
126+
})
121127
}
122128

123129
#[test]
124130
fn err_responses() {
125-
assert_generic_err(simulate_request(ErrorResult));
131+
block_on(|| {
132+
assert_generic_err(simulate_request(ErrorResult));
133+
})
126134
}
127135

128136
#[ignore] // catch_unwind not yet implemented
129137
#[test]
130138
fn recover_from_panic() {
131-
assert_generic_err(simulate_request(Panic));
139+
block_on(|| {
140+
assert_generic_err(simulate_request(Panic));
141+
})
132142
}
133143

134144
#[test]
135145
fn normalize_path() {
136146
use hyper::service::{NewService, Service};
137147

138-
let mut pool = build_threadpool();
139-
140-
pool.block_on(futures::lazy(|| {
148+
block_on(|| {
141149
let new_service = super::Service::new(AssertPathNormalized);
142150
let mut service = new_service.new_service().wait().unwrap();
143151
let req = hyper::Request::put("//removed/.././.././normalized")
@@ -153,7 +161,5 @@ fn normalize_path() {
153161
let resp = service.call(req).wait().unwrap();
154162
assert_eq!(resp.status(), 200);
155163
assert_eq!(resp.headers().len(), 1);
156-
Ok::<_, ()>(())
157-
}))
158-
.unwrap()
164+
})
159165
}

0 commit comments

Comments
 (0)