chore(tests): change tests to use current_thread runtime
This commit is contained in:
		| @@ -805,20 +805,29 @@ mod tests { | ||||
|     #[cfg(feature = "runtime")] | ||||
|     #[test] | ||||
|     fn test_pool_timer_removes_expired() { | ||||
|         use std::sync::Arc; | ||||
|         let runtime = ::tokio::runtime::Runtime::new().unwrap(); | ||||
|         let executor = runtime.executor(); | ||||
|         let pool = Pool::new(true, Some(Duration::from_millis(100)), &Exec::Executor(Arc::new(executor))); | ||||
|         use std::time::Instant; | ||||
|         use tokio_timer::Delay; | ||||
|         let mut rt = ::tokio::runtime::current_thread::Runtime::new().unwrap(); | ||||
|         let pool = Pool::new(true, Some(Duration::from_millis(100)), &Exec::Default); | ||||
|  | ||||
|         let key = (Arc::new("foo".to_string()), Ver::Http1); | ||||
|  | ||||
|         pool.pooled(c(key.clone()), Uniq(41)); | ||||
|         pool.pooled(c(key.clone()), Uniq(5)); | ||||
|         pool.pooled(c(key.clone()), Uniq(99)); | ||||
|         // Since pool.pooled() will be calling spawn on drop, need to be sure | ||||
|         // those drops are called while `rt` is the current executor. To do so, | ||||
|         // call those inside a future. | ||||
|         rt.block_on(::futures::future::lazy(|| { | ||||
|             pool.pooled(c(key.clone()), Uniq(41)); | ||||
|             pool.pooled(c(key.clone()), Uniq(5)); | ||||
|             pool.pooled(c(key.clone()), Uniq(99)); | ||||
|             Ok::<_, ()>(()) | ||||
|         })).unwrap(); | ||||
|  | ||||
|         assert_eq!(pool.inner.connections.lock().unwrap().idle.get(&key).map(|entries| entries.len()), Some(3)); | ||||
|  | ||||
|         ::std::thread::sleep(Duration::from_millis(400)); // allow for too-good resolution | ||||
|         // Let the timer tick passed the expiration... | ||||
|         rt | ||||
|             .block_on(Delay::new(Instant::now() + Duration::from_millis(200))) | ||||
|             .expect("rt block_on 200ms"); | ||||
|  | ||||
|         assert!(pool.inner.connections.lock().unwrap().idle.get(&key).is_none()); | ||||
|     } | ||||
|   | ||||
| @@ -1,12 +1,9 @@ | ||||
| #![cfg(feature = "runtime")] | ||||
| extern crate pretty_env_logger; | ||||
|  | ||||
| use std::thread; | ||||
| use std::time::Duration; | ||||
|  | ||||
| use futures::Async; | ||||
| use futures::future::poll_fn; | ||||
| use tokio::executor::thread_pool::{Builder as ThreadPoolBuilder}; | ||||
| use tokio::runtime::current_thread::Runtime; | ||||
|  | ||||
| use mock::MockConnector; | ||||
| use super::*; | ||||
| @@ -15,14 +12,13 @@ use super::*; | ||||
| fn retryable_request() { | ||||
|     let _ = pretty_env_logger::try_init(); | ||||
|  | ||||
|     let executor = ThreadPoolBuilder::new().pool_size(1).build(); | ||||
|     let mut rt = Runtime::new().expect("new rt"); | ||||
|     let mut connector = MockConnector::new(); | ||||
|  | ||||
|     let sock1 = connector.mock("http://mock.local"); | ||||
|     let sock2 = connector.mock("http://mock.local"); | ||||
|  | ||||
|     let client = Client::builder() | ||||
|         .executor(executor.sender().clone()) | ||||
|         .build::<_, ::Body>(connector); | ||||
|  | ||||
|     client.pool.no_timer(); | ||||
| @@ -39,7 +35,7 @@ fn retryable_request() { | ||||
|             try_ready!(sock1.write(b"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n")); | ||||
|             Ok(Async::Ready(())) | ||||
|         }).map_err(|e: ::std::io::Error| panic!("srv1 poll_fn error: {}", e)); | ||||
|         res1.join(srv1).wait().expect("res1"); | ||||
|         rt.block_on(res1.join(srv1)).expect("res1"); | ||||
|     } | ||||
|     drop(sock1); | ||||
|  | ||||
| @@ -57,20 +53,19 @@ fn retryable_request() { | ||||
|         Ok(Async::Ready(())) | ||||
|     }).map_err(|e: ::std::io::Error| panic!("srv2 poll_fn error: {}", e)); | ||||
|  | ||||
|     res2.join(srv2).wait().expect("res2"); | ||||
|     rt.block_on(res2.join(srv2)).expect("res2"); | ||||
| } | ||||
|  | ||||
| #[test] | ||||
| fn conn_reset_after_write() { | ||||
|     let _ = pretty_env_logger::try_init(); | ||||
|  | ||||
|     let executor = ThreadPoolBuilder::new().pool_size(1).build(); | ||||
|     let mut rt = Runtime::new().expect("new rt"); | ||||
|     let mut connector = MockConnector::new(); | ||||
|  | ||||
|     let sock1 = connector.mock("http://mock.local"); | ||||
|  | ||||
|     let client = Client::builder() | ||||
|         .executor(executor.sender().clone()) | ||||
|         .build::<_, ::Body>(connector); | ||||
|  | ||||
|     client.pool.no_timer(); | ||||
| @@ -88,12 +83,9 @@ fn conn_reset_after_write() { | ||||
|             try_ready!(sock1.write(b"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n")); | ||||
|             Ok(Async::Ready(())) | ||||
|         }).map_err(|e: ::std::io::Error| panic!("srv1 poll_fn error: {}", e)); | ||||
|         res1.join(srv1).wait().expect("res1"); | ||||
|         rt.block_on(res1.join(srv1)).expect("res1"); | ||||
|     } | ||||
|  | ||||
|     // sleep to allow some time for the connection to return to the pool | ||||
|     thread::sleep(Duration::from_millis(10)); | ||||
|  | ||||
|     let req = Request::builder() | ||||
|         .uri("http://mock.local/a") | ||||
|         .body(Default::default()) | ||||
| @@ -111,9 +103,10 @@ fn conn_reset_after_write() { | ||||
|         sock1.take(); | ||||
|         Ok(Async::Ready(())) | ||||
|     }).map_err(|e: ::std::io::Error| panic!("srv2 poll_fn error: {}", e)); | ||||
|     let err = res2.join(srv2).wait().expect_err("res2"); | ||||
|     let err = rt.block_on(res2.join(srv2)).expect_err("res2"); | ||||
|     match err.kind() { | ||||
|         &::error::Kind::Incomplete => (), | ||||
|         other => panic!("expected Incomplete, found {:?}", other) | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user