40 lines
1.1 KiB
Rust
40 lines
1.1 KiB
Rust
#![cfg(feature = "load-shed")]
|
|
#[path = "../support.rs"]
|
|
mod support;
|
|
|
|
use tokio_test::{assert_ready_err, assert_ready_ok, task};
|
|
use tower::load_shed::LoadShedLayer;
|
|
use tower_test::{assert_request_eq, mock};
|
|
|
|
#[tokio::test(flavor = "current_thread")]
|
|
async fn when_ready() {
|
|
let _t = support::trace_init();
|
|
|
|
let layer = LoadShedLayer::new();
|
|
let (mut service, mut handle) = mock::spawn_layer(layer);
|
|
|
|
assert_ready_ok!(service.poll_ready(), "overload always reports ready");
|
|
|
|
let mut response = task::spawn(service.call("hello"));
|
|
|
|
assert_request_eq!(handle, "hello").send_response("world");
|
|
assert_eq!(assert_ready_ok!(response.poll()), "world");
|
|
}
|
|
|
|
#[tokio::test(flavor = "current_thread")]
|
|
async fn when_not_ready() {
|
|
let _t = support::trace_init();
|
|
|
|
let layer = LoadShedLayer::new();
|
|
let (mut service, mut handle) = mock::spawn_layer::<_, (), _>(layer);
|
|
|
|
handle.allow(0);
|
|
|
|
assert_ready_ok!(service.poll_ready(), "overload always reports ready");
|
|
|
|
let mut fut = task::spawn(service.call("hello"));
|
|
|
|
let err = assert_ready_err!(fut.poll());
|
|
assert!(err.is::<tower::load_shed::error::Overloaded>());
|
|
}
|