tests(client): make retryable request tests more reliable
This commit is contained in:
@@ -36,6 +36,8 @@ mod dns;
|
||||
mod pool;
|
||||
#[cfg(feature = "compat")]
|
||||
pub mod compat;
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
/// A Client to make outgoing HTTP requests.
|
||||
pub struct Client<C, B = proto::Body> {
|
||||
|
||||
47
src/client/tests.rs
Normal file
47
src/client/tests.rs
Normal file
@@ -0,0 +1,47 @@
|
||||
extern crate pretty_env_logger;
|
||||
|
||||
use futures::Async;
|
||||
use futures::future::poll_fn;
|
||||
use tokio::reactor::Core;
|
||||
|
||||
use mock::MockConnector;
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn retryable_request() {
|
||||
let _ = pretty_env_logger::try_init();
|
||||
let mut core = Core::new().unwrap();
|
||||
|
||||
let mut connector = MockConnector::new();
|
||||
|
||||
let sock1 = connector.mock("http://mock.local/a");
|
||||
let sock2 = connector.mock("http://mock.local/b");
|
||||
|
||||
let client = Client::configure()
|
||||
.connector(connector)
|
||||
.build(&core.handle());
|
||||
|
||||
|
||||
{
|
||||
let res1 = client.get("http://mock.local/a".parse().unwrap());
|
||||
let srv1 = poll_fn(|| {
|
||||
try_ready!(sock1.read(&mut [0u8; 512]));
|
||||
try_ready!(sock1.write(b"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"));
|
||||
Ok(Async::Ready(()))
|
||||
});
|
||||
core.run(res1.join(srv1)).expect("res1");
|
||||
}
|
||||
drop(sock1);
|
||||
|
||||
let res2 = client.get("http://mock.local/b".parse().unwrap())
|
||||
.map(|res| {
|
||||
assert_eq!(res.status().as_u16(), 222);
|
||||
});
|
||||
let srv2 = poll_fn(|| {
|
||||
try_ready!(sock2.read(&mut [0u8; 512]));
|
||||
try_ready!(sock2.write(b"HTTP/1.1 222 OK\r\nContent-Length: 0\r\n\r\n"));
|
||||
Ok(Async::Ready(()))
|
||||
});
|
||||
|
||||
core.run(res2.join(srv2)).expect("res2");
|
||||
}
|
||||
Reference in New Issue
Block a user