use std::{thread, time::Duration};
use tokio_test::{assert_pending, assert_ready, assert_ready_err, assert_ready_ok};
use tower_spawn_ready::SpawnReadyLayer;
use tower_test::mock;
#[tokio::test]
async fn when_inner_is_not_ready() {
let layer = SpawnReadyLayer::new();
let (mut service, mut handle) = mock::spawn_layer::<(), (), _>(layer);
handle.allow(0);
assert_pending!(service.poll_ready());
handle.allow(1);
thread::sleep(Duration::from_millis(100));
assert_ready_ok!(service.poll_ready());
}
#[tokio::test]
async fn when_inner_fails() {
let layer = SpawnReadyLayer::new();
let (mut service, mut handle) = mock::spawn_layer::<(), (), _>(layer);
handle.allow(0);
handle.send_error("foobar");
assert_eq!(
assert_ready_err!(service.poll_ready()).to_string(),
"foobar"
);
}