Add test to tower-timeout

This commit is contained in:
David Barsky 2019-12-20 14:14:35 -05:00
parent 7b48479bd2
commit 00e23a140f
2 changed files with 33 additions and 1 deletions

View File

@ -22,7 +22,9 @@ categories = ["asynchronous", "network-programming"]
edition = "2018"
[dependencies]
tokio = { version = "0.2", features = ["time", "test-util"] }
tokio-test = "0.2"
tower-service = "0.3"
tower-layer = "0.3"
tokio = { version = "0.2", features = ["time"] }
tower-test = { path = "../tower-test" }
pin-project = "0.4"

View File

@ -0,0 +1,30 @@
use tokio::time::{self, Duration};
use tokio_test::{assert_err, assert_ready_ok};
use tower_test::{
assert_request_eq,
mock::{self, Spawn},
};
use tower_timeout::{Timeout, TimeoutLayer};
type Err = Box<dyn std::error::Error + Send + Sync + 'static>;
#[tokio::test]
async fn timeout() -> Result<(), Err> {
time::pause();
let timeout = TimeoutLayer::new(Duration::from_millis(100));
let (mut service, mut handle): (Spawn<Timeout<_>>, _) = mock::spawn_layer(timeout);
assert_ready_ok!(service.poll_ready());
let response = service.call("hello");
assert_request_eq!(handle, "hello").send_response("world");
assert_eq!(response.await?, "world");
assert_ready_ok!(service.poll_ready());
let response = service.call("two");
time::advance(Duration::from_millis(200)).await;
assert_err!(response.await);
Ok(())
}