Mock Backend
struct MockBackend {
failure_rate: f64,
}
impl Service<Request> for MockBackend {
fn call(&mut self, _req: Request) -> BoxFuture<Result<Response, Error>> {
let rate = self.failure_rate;
Box::pin(async move {
sleep(Duration::from_millis(50 + rand::random::<u64>() % 200)).await;
if rand::random::<f64>() < rate {
Err(Error::Transient("backend overloaded"))
} else {
Ok(Response::new(200, "ok"))
}
})
}
}