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 Jonas Platte
parent 092719c217
commit 296dfe1a40
No known key found for this signature in database
GPG key ID: 7D261D771D915378

View file

@ -3,6 +3,7 @@ use crate::{
error_handling::HandleErrorLayer,
extract::{self, DefaultBodyLimit, FromRef, Path, State},
handler::{Handler, HandlerWithoutStateExt},
middleware::{self, Next},
response::{IntoResponse, Response},
routing::{
delete, get, get_service, on, on_service, patch, patch_service,
@ -922,6 +923,26 @@ async fn state_isnt_cloned_too_much() {
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]
async fn logging_rejections() {
#[derive(Deserialize, Eq, PartialEq, Debug)]