1 #![cfg(feature = "load-shed")]
2 #[path = "../support.rs"]
3 mod support;
4 
5 use tokio_test::{assert_ready_err, assert_ready_ok, task};
6 use tower::load_shed::LoadShedLayer;
7 use tower_test::{assert_request_eq, mock};
8 
9 #[tokio::test(flavor = "current_thread")]
when_ready()10 async fn when_ready() {
11     let _t = support::trace_init();
12 
13     let layer = LoadShedLayer::new();
14     let (mut service, mut handle) = mock::spawn_layer(layer);
15 
16     assert_ready_ok!(service.poll_ready(), "overload always reports ready");
17 
18     let mut response = task::spawn(service.call("hello"));
19 
20     assert_request_eq!(handle, "hello").send_response("world");
21     assert_eq!(assert_ready_ok!(response.poll()), "world");
22 }
23 
24 #[tokio::test(flavor = "current_thread")]
when_not_ready()25 async fn when_not_ready() {
26     let _t = support::trace_init();
27 
28     let layer = LoadShedLayer::new();
29     let (mut service, mut handle) = mock::spawn_layer::<_, (), _>(layer);
30 
31     handle.allow(0);
32 
33     assert_ready_ok!(service.poll_ready(), "overload always reports ready");
34 
35     let mut fut = task::spawn(service.call("hello"));
36 
37     let err = assert_ready_err!(fut.poll());
38     assert!(err.is::<tower::load_shed::error::Overloaded>());
39 }
40