Add test to cover state cloning in layer

This commit is contained in:
Yann Simon 2024-10-10 11:34:01 +02:00 committed by Yann Simon
parent 1e118ccca9
commit 2dc164b4f8

View file

@ -3,6 +3,7 @@ use crate::{
error_handling::HandleErrorLayer, error_handling::HandleErrorLayer,
extract::{self, DefaultBodyLimit, FromRef, Path, State}, extract::{self, DefaultBodyLimit, FromRef, Path, State},
handler::{Handler, HandlerWithoutStateExt}, handler::{Handler, HandlerWithoutStateExt},
middleware::{self, Next},
response::{IntoResponse, Response}, response::{IntoResponse, Response},
routing::{ routing::{
delete, get, get_service, on, on_service, patch, patch_service, delete, get, get_service, on, on_service, patch, patch_service,
@ -924,6 +925,26 @@ async fn state_isnt_cloned_too_much() {
assert_eq!(state.count(), 3); assert_eq!(state.count(), 3);
} }
#[crate::test]
async fn state_isnt_cloned_too_much_in_layer() {
async fn layer(State(_): State<CountingCloneableState>, req: Request, next: Next) -> Response {
next.run(req).await
}
let state = CountingCloneableState::new();
let app = Router::new().layer(middleware::from_fn_with_state(state.clone(), layer));
let client = TestClient::new(app);
// ignore clones made during setup
state.setup_done();
client.get("/").await;
assert_eq!(state.count(), 4);
}
#[crate::test] #[crate::test]
async fn logging_rejections() { async fn logging_rejections() {
#[derive(Deserialize, Eq, PartialEq, Debug)] #[derive(Deserialize, Eq, PartialEq, Debug)]