Clearly document applying DefaultBodyLimit to individual routes (#2157)

This commit is contained in:
David Pedersen
2023-09-16 22:24:00 +02:00
parent e2fa5889eb
commit e4fc2f235a
2 changed files with 91 additions and 0 deletions
+69
View File
@@ -743,6 +743,75 @@ async fn changing_the_default_limit() {
assert_eq!(res.status(), StatusCode::PAYLOAD_TOO_LARGE);
}
#[crate::test]
async fn changing_the_default_limit_differently_on_different_routes() {
let limit1 = 2;
let limit2 = 10;
let app = Router::new()
.route(
"/limit1",
post(|_: Bytes| async {}).layer(DefaultBodyLimit::max(limit1)),
)
.route(
"/limit2",
post(|_: Bytes| async {}).layer(DefaultBodyLimit::max(limit2)),
)
.route("/default", post(|_: Bytes| async {}));
let client = TestClient::new(app);
let res = client
.post("/limit1")
.body(reqwest::Body::from("a".repeat(limit1)))
.send()
.await;
assert_eq!(res.status(), StatusCode::OK);
let res = client
.post("/limit1")
.body(reqwest::Body::from("a".repeat(limit2)))
.send()
.await;
assert_eq!(res.status(), StatusCode::PAYLOAD_TOO_LARGE);
let res = client
.post("/limit2")
.body(reqwest::Body::from("a".repeat(limit1)))
.send()
.await;
assert_eq!(res.status(), StatusCode::OK);
let res = client
.post("/limit2")
.body(reqwest::Body::from("a".repeat(limit2)))
.send()
.await;
assert_eq!(res.status(), StatusCode::OK);
let res = client
.post("/limit2")
.body(reqwest::Body::from("a".repeat(limit1 + limit2)))
.send()
.await;
assert_eq!(res.status(), StatusCode::PAYLOAD_TOO_LARGE);
let res = client
.post("/default")
.body(reqwest::Body::from("a".repeat(limit1 + limit2)))
.send()
.await;
assert_eq!(res.status(), StatusCode::OK);
let res = client
.post("/default")
// `DEFAULT_LIMIT` is 2mb so make a body larger than that
.body(reqwest::Body::from("a".repeat(3_000_000)))
.send()
.await;
assert_eq!(res.status(), StatusCode::PAYLOAD_TOO_LARGE);
}
#[crate::test]
async fn limited_body_with_streaming_body() {
const LIMIT: usize = 3;