mirror of
https://github.com/actix/actix-web.git
synced 2024-12-26 01:50:35 +00:00
remove impl Future for HttpResponse (#2601)
This commit is contained in:
parent
50894e392e
commit
d7c5c966d2
13 changed files with 182 additions and 139 deletions
|
@ -1,6 +1,10 @@
|
|||
# Changes
|
||||
|
||||
## Unreleased - 2021-xx-xx
|
||||
### Removed
|
||||
- `impl Future for HttpResponse`. [#2601]
|
||||
|
||||
[#2601]: https://github.com/actix/actix-web/pull/2601
|
||||
|
||||
|
||||
## 4.0.0-beta.21 - 2022-01-21
|
||||
|
|
|
@ -106,7 +106,7 @@ mod tests {
|
|||
let req = TestRequest::default()
|
||||
.insert_header((header::IF_MODIFIED_SINCE, since))
|
||||
.to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(resp.status(), StatusCode::NOT_MODIFIED);
|
||||
}
|
||||
|
||||
|
@ -118,7 +118,7 @@ mod tests {
|
|||
let req = TestRequest::default()
|
||||
.insert_header((header::IF_MODIFIED_SINCE, since))
|
||||
.to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(resp.status(), StatusCode::NOT_MODIFIED);
|
||||
}
|
||||
|
||||
|
@ -131,7 +131,7 @@ mod tests {
|
|||
.insert_header((header::IF_NONE_MATCH, "miss_etag"))
|
||||
.insert_header((header::IF_MODIFIED_SINCE, since))
|
||||
.to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_ne!(resp.status(), StatusCode::NOT_MODIFIED);
|
||||
}
|
||||
|
||||
|
@ -143,7 +143,7 @@ mod tests {
|
|||
let req = TestRequest::default()
|
||||
.insert_header((header::IF_UNMODIFIED_SINCE, since))
|
||||
.to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(resp.status(), StatusCode::OK);
|
||||
}
|
||||
|
||||
|
@ -155,7 +155,7 @@ mod tests {
|
|||
let req = TestRequest::default()
|
||||
.insert_header((header::IF_UNMODIFIED_SINCE, since))
|
||||
.to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(resp.status(), StatusCode::PRECONDITION_FAILED);
|
||||
}
|
||||
|
||||
|
@ -172,7 +172,7 @@ mod tests {
|
|||
}
|
||||
|
||||
let req = TestRequest::default().to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(
|
||||
resp.headers().get(header::CONTENT_TYPE).unwrap(),
|
||||
"text/x-toml"
|
||||
|
@ -196,7 +196,7 @@ mod tests {
|
|||
}
|
||||
|
||||
let req = TestRequest::default().to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(
|
||||
resp.headers().get(header::CONTENT_DISPOSITION).unwrap(),
|
||||
"inline; filename=\"Cargo.toml\""
|
||||
|
@ -207,7 +207,7 @@ mod tests {
|
|||
.unwrap()
|
||||
.disable_content_disposition();
|
||||
let req = TestRequest::default().to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert!(resp.headers().get(header::CONTENT_DISPOSITION).is_none());
|
||||
}
|
||||
|
||||
|
@ -235,7 +235,7 @@ mod tests {
|
|||
}
|
||||
|
||||
let req = TestRequest::default().to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(
|
||||
resp.headers().get(header::CONTENT_TYPE).unwrap(),
|
||||
"text/x-toml"
|
||||
|
@ -261,7 +261,7 @@ mod tests {
|
|||
}
|
||||
|
||||
let req = TestRequest::default().to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(
|
||||
resp.headers().get(header::CONTENT_TYPE).unwrap(),
|
||||
"text/xml"
|
||||
|
@ -284,7 +284,7 @@ mod tests {
|
|||
}
|
||||
|
||||
let req = TestRequest::default().to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(
|
||||
resp.headers().get(header::CONTENT_TYPE).unwrap(),
|
||||
"image/png"
|
||||
|
@ -300,7 +300,7 @@ mod tests {
|
|||
let file = NamedFile::open_async("tests/test.js").await.unwrap();
|
||||
|
||||
let req = TestRequest::default().to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(
|
||||
resp.headers().get(header::CONTENT_TYPE).unwrap(),
|
||||
"application/javascript; charset=utf-8"
|
||||
|
@ -330,7 +330,7 @@ mod tests {
|
|||
}
|
||||
|
||||
let req = TestRequest::default().to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(
|
||||
resp.headers().get(header::CONTENT_TYPE).unwrap(),
|
||||
"image/png"
|
||||
|
@ -353,7 +353,7 @@ mod tests {
|
|||
}
|
||||
|
||||
let req = TestRequest::default().to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(
|
||||
resp.headers().get(header::CONTENT_TYPE).unwrap(),
|
||||
"application/octet-stream"
|
||||
|
@ -379,7 +379,7 @@ mod tests {
|
|||
}
|
||||
|
||||
let req = TestRequest::default().to_http_request();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(
|
||||
resp.headers().get(header::CONTENT_TYPE).unwrap(),
|
||||
"text/x-toml"
|
||||
|
@ -633,7 +633,7 @@ mod tests {
|
|||
async fn test_named_file_allowed_method() {
|
||||
let req = TestRequest::default().method(Method::GET).to_http_request();
|
||||
let file = NamedFile::open_async("Cargo.toml").await.unwrap();
|
||||
let resp = file.respond_to(&req).await.unwrap();
|
||||
let resp = file.respond_to(&req);
|
||||
assert_eq!(resp.status(), StatusCode::OK);
|
||||
}
|
||||
|
||||
|
|
|
@ -228,11 +228,10 @@ mod tests {
|
|||
|
||||
#[actix_rt::test]
|
||||
async fn test_default_resource() {
|
||||
let srv =
|
||||
init_service(App::new().service(web::resource("/test").to(|| {
|
||||
HttpResponse::Ok().streaming(HttpContext::create(MyActor { count: 0 }))
|
||||
})))
|
||||
.await;
|
||||
let srv = init_service(App::new().service(web::resource("/test").to(|| async {
|
||||
HttpResponse::Ok().streaming(HttpContext::create(MyActor { count: 0 }))
|
||||
})))
|
||||
.await;
|
||||
|
||||
let req = TestRequest::with_uri("/test").to_request();
|
||||
let resp = call_service(&srv, req).await;
|
||||
|
|
|
@ -30,7 +30,9 @@ const STR: &str = const_str::repeat!(S, 100);
|
|||
#[actix_rt::test]
|
||||
async fn test_simple() {
|
||||
let srv = actix_test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| HttpResponse::Ok().body(STR))))
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(|| async { HttpResponse::Ok().body(STR) })),
|
||||
)
|
||||
});
|
||||
|
||||
let request = srv.get("/").insert_header(("x-test", "111")).send();
|
||||
|
@ -93,7 +95,7 @@ async fn test_timeout() {
|
|||
let srv = actix_test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| async {
|
||||
actix_rt::time::sleep(Duration::from_millis(200)).await;
|
||||
Ok::<_, Error>(HttpResponse::Ok().body(STR))
|
||||
HttpResponse::Ok().body(STR)
|
||||
})))
|
||||
});
|
||||
|
||||
|
@ -118,7 +120,7 @@ async fn test_timeout_override() {
|
|||
let srv = actix_test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| async {
|
||||
actix_rt::time::sleep(Duration::from_millis(200)).await;
|
||||
Ok::<_, Error>(HttpResponse::Ok().body(STR))
|
||||
HttpResponse::Ok().body(STR)
|
||||
})))
|
||||
});
|
||||
|
||||
|
@ -295,10 +297,9 @@ async fn test_connection_server_close() {
|
|||
})
|
||||
.and_then(
|
||||
HttpService::new(map_config(
|
||||
App::new().service(
|
||||
web::resource("/")
|
||||
.route(web::to(|| HttpResponse::Ok().force_close().finish())),
|
||||
),
|
||||
App::new().service(web::resource("/").route(web::to(|| async {
|
||||
HttpResponse::Ok().force_close().finish()
|
||||
}))),
|
||||
|_| AppConfig::default(),
|
||||
))
|
||||
.tcp(),
|
||||
|
@ -336,7 +337,8 @@ async fn test_connection_wait_queue() {
|
|||
.and_then(
|
||||
HttpService::new(map_config(
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(|| HttpResponse::Ok().body(STR))),
|
||||
web::resource("/")
|
||||
.route(web::to(|| async { HttpResponse::Ok().body(STR) })),
|
||||
),
|
||||
|_| AppConfig::default(),
|
||||
))
|
||||
|
@ -383,10 +385,9 @@ async fn test_connection_wait_queue_force_close() {
|
|||
})
|
||||
.and_then(
|
||||
HttpService::new(map_config(
|
||||
App::new().service(
|
||||
web::resource("/")
|
||||
.route(web::to(|| HttpResponse::Ok().force_close().body(STR))),
|
||||
),
|
||||
App::new().service(web::resource("/").route(web::to(|| async {
|
||||
HttpResponse::Ok().force_close().body(STR)
|
||||
}))),
|
||||
|_| AppConfig::default(),
|
||||
))
|
||||
.tcp(),
|
||||
|
@ -445,7 +446,9 @@ async fn test_no_decompress() {
|
|||
let srv = actix_test::start(|| {
|
||||
App::new()
|
||||
.wrap(actix_web::middleware::Compress::default())
|
||||
.service(web::resource("/").route(web::to(|| HttpResponse::Ok().body(STR))))
|
||||
.service(
|
||||
web::resource("/").route(web::to(|| async { HttpResponse::Ok().body(STR) })),
|
||||
)
|
||||
});
|
||||
|
||||
let mut res = awc::Client::new()
|
||||
|
@ -479,7 +482,7 @@ async fn test_no_decompress() {
|
|||
#[actix_rt::test]
|
||||
async fn test_client_gzip_encoding() {
|
||||
let srv = actix_test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| async {
|
||||
HttpResponse::Ok()
|
||||
.insert_header(header::ContentEncoding::Gzip)
|
||||
.body(utils::gzip::encode(STR))
|
||||
|
@ -499,7 +502,7 @@ async fn test_client_gzip_encoding() {
|
|||
#[actix_rt::test]
|
||||
async fn test_client_gzip_encoding_large() {
|
||||
let srv = actix_test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| async {
|
||||
HttpResponse::Ok()
|
||||
.insert_header(header::ContentEncoding::Gzip)
|
||||
.body(utils::gzip::encode(STR.repeat(10)))
|
||||
|
@ -525,7 +528,7 @@ async fn test_client_gzip_encoding_large_random() {
|
|||
.collect::<String>();
|
||||
|
||||
let srv = actix_test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|data: Bytes| {
|
||||
App::new().service(web::resource("/").route(web::to(|data: Bytes| async {
|
||||
HttpResponse::Ok()
|
||||
.insert_header(header::ContentEncoding::Gzip)
|
||||
.body(utils::gzip::encode(data))
|
||||
|
@ -545,7 +548,7 @@ async fn test_client_gzip_encoding_large_random() {
|
|||
#[actix_rt::test]
|
||||
async fn test_client_brotli_encoding() {
|
||||
let srv = actix_test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|data: Bytes| {
|
||||
App::new().service(web::resource("/").route(web::to(|data: Bytes| async {
|
||||
HttpResponse::Ok()
|
||||
.insert_header(("content-encoding", "br"))
|
||||
.body(utils::brotli::encode(data))
|
||||
|
@ -571,10 +574,10 @@ async fn test_client_brotli_encoding_large_random() {
|
|||
.collect::<String>();
|
||||
|
||||
let srv = actix_test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|data: Bytes| {
|
||||
App::new().service(web::resource("/").route(web::to(|data: Bytes| async {
|
||||
HttpResponse::Ok()
|
||||
.insert_header(header::ContentEncoding::Brotli)
|
||||
.body(utils::brotli::encode(&data))
|
||||
.body(utils::brotli::encode(data))
|
||||
})))
|
||||
});
|
||||
|
||||
|
@ -590,7 +593,9 @@ async fn test_client_brotli_encoding_large_random() {
|
|||
#[actix_rt::test]
|
||||
async fn test_client_deflate_encoding() {
|
||||
let srv = actix_test::start(|| {
|
||||
App::new().default_service(web::to(|body: Bytes| HttpResponse::Ok().body(body)))
|
||||
App::new().default_service(web::to(|body: Bytes| async {
|
||||
HttpResponse::Ok().body(body)
|
||||
}))
|
||||
});
|
||||
|
||||
let req = srv
|
||||
|
@ -614,7 +619,9 @@ async fn test_client_deflate_encoding_large_random() {
|
|||
.collect::<String>();
|
||||
|
||||
let srv = actix_test::start(|| {
|
||||
App::new().default_service(web::to(|body: Bytes| HttpResponse::Ok().body(body)))
|
||||
App::new().default_service(web::to(|body: Bytes| async {
|
||||
HttpResponse::Ok().body(body)
|
||||
}))
|
||||
});
|
||||
|
||||
let req = srv
|
||||
|
@ -632,7 +639,7 @@ async fn test_client_deflate_encoding_large_random() {
|
|||
#[actix_rt::test]
|
||||
async fn test_client_streaming_explicit() {
|
||||
let srv = actix_test::start(|| {
|
||||
App::new().default_service(web::to(|body: web::Payload| {
|
||||
App::new().default_service(web::to(|body: web::Payload| async {
|
||||
HttpResponse::Ok().streaming(body)
|
||||
}))
|
||||
});
|
||||
|
@ -654,7 +661,7 @@ async fn test_client_streaming_explicit() {
|
|||
#[actix_rt::test]
|
||||
async fn test_body_streaming_implicit() {
|
||||
let srv = actix_test::start(|| {
|
||||
App::new().default_service(web::to(|| {
|
||||
App::new().default_service(web::to(|| async {
|
||||
let body =
|
||||
stream::once(async { Ok::<_, Infallible>(Bytes::from_static(STR.as_bytes())) });
|
||||
HttpResponse::Ok().streaming(body)
|
||||
|
|
|
@ -33,8 +33,9 @@ fn bench_async_burst(c: &mut Criterion) {
|
|||
|
||||
let srv = rt.block_on(async {
|
||||
actix_test::start(|| {
|
||||
App::new()
|
||||
.service(web::resource("/").route(web::to(|| HttpResponse::Ok().body(STR))))
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(|| async { HttpResponse::Ok().body(STR) })),
|
||||
)
|
||||
})
|
||||
});
|
||||
|
||||
|
|
12
src/guard.rs
12
src/guard.rs
|
@ -373,7 +373,9 @@ impl Guard for HeaderGuard {
|
|||
///
|
||||
/// web::scope("/admin")
|
||||
/// .guard(Host("admin.rust-lang.org").scheme("https"))
|
||||
/// .default_service(web::to(|| HttpResponse::Ok().body("admin connection is secure")));
|
||||
/// .default_service(web::to(|| async {
|
||||
/// HttpResponse::Ok().body("admin connection is secure")
|
||||
/// }));
|
||||
/// ```
|
||||
///
|
||||
/// The `Host` guard can be used to set up some form of [virtual hosting] within a single app.
|
||||
|
@ -388,12 +390,16 @@ impl Guard for HeaderGuard {
|
|||
/// .service(
|
||||
/// web::scope("")
|
||||
/// .guard(guard::Host("www.rust-lang.org"))
|
||||
/// .default_service(web::to(|| HttpResponse::Ok().body("marketing site"))),
|
||||
/// .default_service(web::to(|| async {
|
||||
/// HttpResponse::Ok().body("marketing site")
|
||||
/// })),
|
||||
/// )
|
||||
/// .service(
|
||||
/// web::scope("")
|
||||
/// .guard(guard::Host("play.rust-lang.org"))
|
||||
/// .default_service(web::to(|| HttpResponse::Ok().body("playground frontend"))),
|
||||
/// .default_service(web::to(|| async {
|
||||
/// HttpResponse::Ok().body("playground frontend")
|
||||
/// })),
|
||||
/// );
|
||||
/// ```
|
||||
///
|
||||
|
|
|
@ -52,7 +52,7 @@ use crate::{
|
|||
///
|
||||
/// let app = App::new()
|
||||
/// .wrap(middleware::Compress::default())
|
||||
/// .default_service(web::to(|| HttpResponse::Ok().body("hello world")));
|
||||
/// .default_service(web::to(|| async { HttpResponse::Ok().body("hello world") }));
|
||||
/// ```
|
||||
///
|
||||
/// Pre-compressed Gzip file being served from disk with correct headers added to bypass middleware:
|
||||
|
|
|
@ -206,10 +206,10 @@ where
|
|||
/// Register a new route and add handler. This route matches all requests.
|
||||
///
|
||||
/// ```
|
||||
/// use actix_web::*;
|
||||
/// use actix_web::{App, HttpRequest, HttpResponse, web};
|
||||
///
|
||||
/// fn index(req: HttpRequest) -> HttpResponse {
|
||||
/// unimplemented!()
|
||||
/// async fn index(req: HttpRequest) -> HttpResponse {
|
||||
/// todo!()
|
||||
/// }
|
||||
///
|
||||
/// App::new().service(web::resource("/").to(index));
|
||||
|
@ -219,7 +219,7 @@ where
|
|||
///
|
||||
/// ```
|
||||
/// # use actix_web::*;
|
||||
/// # fn index(req: HttpRequest) -> HttpResponse { unimplemented!() }
|
||||
/// # async fn index(req: HttpRequest) -> HttpResponse { todo!() }
|
||||
/// App::new().service(web::resource("/").route(web::route().to(index)));
|
||||
/// ```
|
||||
pub fn to<F, Args>(mut self, handler: F) -> Self
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
use std::{
|
||||
cell::{Ref, RefMut},
|
||||
fmt,
|
||||
future::Future,
|
||||
mem,
|
||||
pin::Pin,
|
||||
task::{Context, Poll},
|
||||
};
|
||||
|
||||
use actix_http::{
|
||||
|
@ -337,24 +333,39 @@ impl<B> From<HttpResponse<B>> for Response<B> {
|
|||
}
|
||||
}
|
||||
|
||||
// Future is only implemented for BoxBody payload type because it's the most useful for making
|
||||
// simple handlers without async blocks. Making it generic over all MessageBody types requires a
|
||||
// future impl on Response which would cause it's body field to be, undesirably, Option<B>.
|
||||
//
|
||||
// This impl is not particularly efficient due to the Response construction and should probably
|
||||
// not be invoked if performance is important. Prefer an async fn/block in such cases.
|
||||
impl Future for HttpResponse<BoxBody> {
|
||||
type Output = Result<Response<BoxBody>, Error>;
|
||||
// Rationale for cfg(test): this impl causes false positives on a clippy lint (async_yields_async)
|
||||
// when returning an HttpResponse from an async function/closure and it's not very useful outside of
|
||||
// tests anyway.
|
||||
#[cfg(test)]
|
||||
mod response_fut_impl {
|
||||
use std::{
|
||||
future::Future,
|
||||
mem,
|
||||
pin::Pin,
|
||||
task::{Context, Poll},
|
||||
};
|
||||
|
||||
fn poll(mut self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Self::Output> {
|
||||
if let Some(err) = self.error.take() {
|
||||
return Poll::Ready(Err(err));
|
||||
use super::*;
|
||||
|
||||
// Future is only implemented for BoxBody payload type because it's the most useful for making
|
||||
// simple handlers without async blocks. Making it generic over all MessageBody types requires a
|
||||
// future impl on Response which would cause it's body field to be, undesirably, Option<B>.
|
||||
//
|
||||
// This impl is not particularly efficient due to the Response construction and should probably
|
||||
// not be invoked if performance is important. Prefer an async fn/block in such cases.
|
||||
impl Future for HttpResponse<BoxBody> {
|
||||
type Output = Result<Response<BoxBody>, Error>;
|
||||
|
||||
fn poll(mut self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Self::Output> {
|
||||
if let Some(err) = self.error.take() {
|
||||
return Poll::Ready(Err(err));
|
||||
}
|
||||
|
||||
Poll::Ready(Ok(mem::replace(
|
||||
&mut self.res,
|
||||
Response::new(StatusCode::default()),
|
||||
)))
|
||||
}
|
||||
|
||||
Poll::Ready(Ok(mem::replace(
|
||||
&mut self.res,
|
||||
Response::new(StatusCode::default()),
|
||||
)))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -219,7 +219,7 @@ impl PayloadConfig {
|
|||
}
|
||||
}
|
||||
|
||||
/// Set maximum accepted payload size in bytes. The default limit is 256kB.
|
||||
/// Set maximum accepted payload size in bytes. The default limit is 256KiB.
|
||||
pub fn limit(mut self, limit: usize) -> Self {
|
||||
self.limit = limit;
|
||||
self
|
||||
|
@ -261,14 +261,14 @@ impl PayloadConfig {
|
|||
}
|
||||
}
|
||||
|
||||
const DEFAULT_CONFIG_LIMIT: usize = 262_144; // 2^18 bytes (~256kB)
|
||||
|
||||
/// Allow shared refs used as defaults.
|
||||
const DEFAULT_CONFIG: PayloadConfig = PayloadConfig {
|
||||
limit: DEFAULT_CONFIG_LIMIT,
|
||||
mimetype: None,
|
||||
};
|
||||
|
||||
const DEFAULT_CONFIG_LIMIT: usize = 262_144; // 2^18 bytes (~256kB)
|
||||
|
||||
impl Default for PayloadConfig {
|
||||
fn default() -> Self {
|
||||
DEFAULT_CONFIG.clone()
|
||||
|
|
|
@ -19,10 +19,13 @@ macro_rules! test_server {
|
|||
actix_test::start(|| {
|
||||
App::new()
|
||||
.wrap(Compress::default())
|
||||
.route("/static", web::to(|| HttpResponse::Ok().body(LOREM)))
|
||||
.route(
|
||||
"/static",
|
||||
web::to(|| async { HttpResponse::Ok().body(LOREM) }),
|
||||
)
|
||||
.route(
|
||||
"/static-gzip",
|
||||
web::to(|| {
|
||||
web::to(|| async {
|
||||
HttpResponse::Ok()
|
||||
// signal to compressor that content should not be altered
|
||||
// signal to client that content is encoded
|
||||
|
@ -32,7 +35,7 @@ macro_rules! test_server {
|
|||
)
|
||||
.route(
|
||||
"/static-br",
|
||||
web::to(|| {
|
||||
web::to(|| async {
|
||||
HttpResponse::Ok()
|
||||
// signal to compressor that content should not be altered
|
||||
// signal to client that content is encoded
|
||||
|
@ -42,7 +45,7 @@ macro_rules! test_server {
|
|||
)
|
||||
.route(
|
||||
"/static-zstd",
|
||||
web::to(|| {
|
||||
web::to(|| async {
|
||||
HttpResponse::Ok()
|
||||
// signal to compressor that content should not be altered
|
||||
// signal to client that content is encoded
|
||||
|
@ -52,7 +55,7 @@ macro_rules! test_server {
|
|||
)
|
||||
.route(
|
||||
"/static-xz",
|
||||
web::to(|| {
|
||||
web::to(|| async {
|
||||
HttpResponse::Ok()
|
||||
// signal to compressor that content should not be altered
|
||||
// signal to client that content is encoded as 7zip
|
||||
|
@ -62,7 +65,7 @@ macro_rules! test_server {
|
|||
)
|
||||
.route(
|
||||
"/echo",
|
||||
web::to(|body: Bytes| HttpResponse::Ok().body(body)),
|
||||
web::to(|body: Bytes| async move { HttpResponse::Ok().body(body) }),
|
||||
)
|
||||
})
|
||||
};
|
||||
|
|
|
@ -18,7 +18,8 @@ async fn test_start() {
|
|||
.block_on(async {
|
||||
let srv = HttpServer::new(|| {
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(|| HttpResponse::Ok().body("test"))),
|
||||
web::resource("/")
|
||||
.route(web::to(|| async { HttpResponse::Ok().body("test") })),
|
||||
)
|
||||
})
|
||||
.workers(1)
|
||||
|
@ -93,7 +94,7 @@ async fn test_start_ssl() {
|
|||
let srv = HttpServer::new(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|req: HttpRequest| {
|
||||
assert!(req.app_config().secure());
|
||||
HttpResponse::Ok().body("test")
|
||||
async { HttpResponse::Ok().body("test") }
|
||||
})))
|
||||
})
|
||||
.workers(1)
|
||||
|
|
|
@ -93,7 +93,9 @@ impl futures_core::stream::Stream for TestBody {
|
|||
#[actix_rt::test]
|
||||
async fn test_body() {
|
||||
let srv = actix_test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| HttpResponse::Ok().body(STR))))
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(|| async { HttpResponse::Ok().body(STR) })),
|
||||
)
|
||||
});
|
||||
|
||||
let mut res = srv.get("/").send().await.unwrap();
|
||||
|
@ -160,9 +162,12 @@ async fn body_gzip_large() {
|
|||
let srv = actix_test::start_with(actix_test::config().h1(), move || {
|
||||
let data = srv_data.clone();
|
||||
|
||||
App::new().wrap(Compress::default()).service(
|
||||
web::resource("/").route(web::to(move || HttpResponse::Ok().body(data.clone()))),
|
||||
)
|
||||
App::new()
|
||||
.wrap(Compress::default())
|
||||
.service(web::resource("/").route(web::to(move || {
|
||||
let data = data.clone();
|
||||
async move { HttpResponse::Ok().body(data.clone()) }
|
||||
})))
|
||||
});
|
||||
|
||||
let mut res = srv
|
||||
|
@ -191,9 +196,12 @@ async fn test_body_gzip_large_random() {
|
|||
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), move || {
|
||||
let data = srv_data.clone();
|
||||
App::new().wrap(Compress::default()).service(
|
||||
web::resource("/").route(web::to(move || HttpResponse::Ok().body(data.clone()))),
|
||||
)
|
||||
App::new()
|
||||
.wrap(Compress::default())
|
||||
.service(web::resource("/").route(web::to(move || {
|
||||
let data = data.clone();
|
||||
async move { HttpResponse::Ok().body(data.clone()) }
|
||||
})))
|
||||
});
|
||||
|
||||
let mut res = srv
|
||||
|
@ -216,7 +224,7 @@ async fn test_body_chunked_implicit() {
|
|||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new()
|
||||
.wrap(Compress::default())
|
||||
.service(web::resource("/").route(web::get().to(move || {
|
||||
.service(web::resource("/").route(web::get().to(|| async {
|
||||
HttpResponse::Ok()
|
||||
.streaming(TestBody::new(Bytes::from_static(STR.as_ref()), 24))
|
||||
})))
|
||||
|
@ -246,7 +254,7 @@ async fn test_body_br_streaming() {
|
|||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new()
|
||||
.wrap(Compress::default())
|
||||
.service(web::resource("/").route(web::to(move || {
|
||||
.service(web::resource("/").route(web::to(|| async {
|
||||
HttpResponse::Ok()
|
||||
.streaming(TestBody::new(Bytes::from_static(STR.as_ref()), 24))
|
||||
})))
|
||||
|
@ -271,7 +279,8 @@ async fn test_body_br_streaming() {
|
|||
async fn test_head_binary() {
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new().service(
|
||||
web::resource("/").route(web::head().to(move || HttpResponse::Ok().body(STR))),
|
||||
web::resource("/")
|
||||
.route(web::head().to(move || async { HttpResponse::Ok().body(STR) })),
|
||||
)
|
||||
});
|
||||
|
||||
|
@ -290,7 +299,7 @@ async fn test_head_binary() {
|
|||
#[actix_rt::test]
|
||||
async fn test_no_chunking() {
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new().service(web::resource("/").route(web::to(move || {
|
||||
App::new().service(web::resource("/").route(web::to(move || async {
|
||||
HttpResponse::Ok()
|
||||
.no_chunking(STR.len() as u64)
|
||||
.streaming(TestBody::new(Bytes::from_static(STR.as_ref()), 24))
|
||||
|
@ -310,9 +319,9 @@ async fn test_no_chunking() {
|
|||
#[actix_rt::test]
|
||||
async fn test_body_deflate() {
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new()
|
||||
.wrap(Compress::default())
|
||||
.service(web::resource("/").route(web::to(move || HttpResponse::Ok().body(STR))))
|
||||
App::new().wrap(Compress::default()).service(
|
||||
web::resource("/").route(web::to(move || async { HttpResponse::Ok().body(STR) })),
|
||||
)
|
||||
});
|
||||
|
||||
let mut res = srv
|
||||
|
@ -333,9 +342,9 @@ async fn test_body_deflate() {
|
|||
#[actix_rt::test]
|
||||
async fn test_body_brotli() {
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new()
|
||||
.wrap(Compress::default())
|
||||
.service(web::resource("/").route(web::to(move || HttpResponse::Ok().body(STR))))
|
||||
App::new().wrap(Compress::default()).service(
|
||||
web::resource("/").route(web::to(move || async { HttpResponse::Ok().body(STR) })),
|
||||
)
|
||||
});
|
||||
|
||||
let mut res = srv
|
||||
|
@ -356,9 +365,9 @@ async fn test_body_brotli() {
|
|||
#[actix_rt::test]
|
||||
async fn test_body_zstd() {
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new()
|
||||
.wrap(Compress::default())
|
||||
.service(web::resource("/").route(web::to(move || HttpResponse::Ok().body(STR))))
|
||||
App::new().wrap(Compress::default()).service(
|
||||
web::resource("/").route(web::to(move || async { HttpResponse::Ok().body(STR) })),
|
||||
)
|
||||
});
|
||||
|
||||
let mut res = srv
|
||||
|
@ -381,7 +390,7 @@ async fn test_body_zstd_streaming() {
|
|||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new()
|
||||
.wrap(Compress::default())
|
||||
.service(web::resource("/").route(web::to(move || {
|
||||
.service(web::resource("/").route(web::to(move || async {
|
||||
HttpResponse::Ok()
|
||||
.streaming(TestBody::new(Bytes::from_static(STR.as_ref()), 24))
|
||||
})))
|
||||
|
@ -405,9 +414,9 @@ async fn test_body_zstd_streaming() {
|
|||
#[actix_rt::test]
|
||||
async fn test_zstd_encoding() {
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(move |body: Bytes| HttpResponse::Ok().body(body))),
|
||||
)
|
||||
App::new().service(web::resource("/").route(web::to(move |body: Bytes| async {
|
||||
HttpResponse::Ok().body(body)
|
||||
})))
|
||||
});
|
||||
|
||||
let request = srv
|
||||
|
@ -435,7 +444,7 @@ async fn test_zstd_encoding_large() {
|
|||
App::new().service(
|
||||
web::resource("/")
|
||||
.app_data(web::PayloadConfig::new(320_000))
|
||||
.route(web::to(move |body: Bytes| {
|
||||
.route(web::to(move |body: Bytes| async {
|
||||
HttpResponse::Ok().streaming(TestBody::new(body, 10240))
|
||||
})),
|
||||
)
|
||||
|
@ -457,9 +466,11 @@ async fn test_zstd_encoding_large() {
|
|||
#[actix_rt::test]
|
||||
async fn test_encoding() {
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new().wrap(Compress::default()).service(
|
||||
web::resource("/").route(web::to(move |body: Bytes| HttpResponse::Ok().body(body))),
|
||||
)
|
||||
App::new()
|
||||
.wrap(Compress::default())
|
||||
.service(web::resource("/").route(web::to(move |body: Bytes| async {
|
||||
HttpResponse::Ok().body(body)
|
||||
})))
|
||||
});
|
||||
|
||||
let request = srv
|
||||
|
@ -478,9 +489,9 @@ async fn test_encoding() {
|
|||
#[actix_rt::test]
|
||||
async fn test_gzip_encoding() {
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(move |body: Bytes| HttpResponse::Ok().body(body))),
|
||||
)
|
||||
App::new().service(web::resource("/").route(web::to(move |body: Bytes| async {
|
||||
HttpResponse::Ok().body(body)
|
||||
})))
|
||||
});
|
||||
|
||||
let request = srv
|
||||
|
@ -500,9 +511,9 @@ async fn test_gzip_encoding() {
|
|||
async fn test_gzip_encoding_large() {
|
||||
let data = STR.repeat(10);
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(move |body: Bytes| HttpResponse::Ok().body(body))),
|
||||
)
|
||||
App::new().service(web::resource("/").route(web::to(move |body: Bytes| async {
|
||||
HttpResponse::Ok().body(body)
|
||||
})))
|
||||
});
|
||||
|
||||
let req = srv
|
||||
|
@ -527,9 +538,9 @@ async fn test_reading_gzip_encoding_large_random() {
|
|||
.collect::<String>();
|
||||
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(move |body: Bytes| HttpResponse::Ok().body(body))),
|
||||
)
|
||||
App::new().service(web::resource("/").route(web::to(move |body: Bytes| async {
|
||||
HttpResponse::Ok().body(body)
|
||||
})))
|
||||
});
|
||||
|
||||
let request = srv
|
||||
|
@ -548,9 +559,9 @@ async fn test_reading_gzip_encoding_large_random() {
|
|||
#[actix_rt::test]
|
||||
async fn test_reading_deflate_encoding() {
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(move |body: Bytes| HttpResponse::Ok().body(body))),
|
||||
)
|
||||
App::new().service(web::resource("/").route(web::to(move |body: Bytes| async {
|
||||
HttpResponse::Ok().body(body)
|
||||
})))
|
||||
});
|
||||
|
||||
let request = srv
|
||||
|
@ -570,9 +581,9 @@ async fn test_reading_deflate_encoding() {
|
|||
async fn test_reading_deflate_encoding_large() {
|
||||
let data = STR.repeat(10);
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(move |body: Bytes| HttpResponse::Ok().body(body))),
|
||||
)
|
||||
App::new().service(web::resource("/").route(web::to(move |body: Bytes| async {
|
||||
HttpResponse::Ok().body(body)
|
||||
})))
|
||||
});
|
||||
|
||||
let request = srv
|
||||
|
@ -597,9 +608,9 @@ async fn test_reading_deflate_encoding_large_random() {
|
|||
.collect::<String>();
|
||||
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(move |body: Bytes| HttpResponse::Ok().body(body))),
|
||||
)
|
||||
App::new().service(web::resource("/").route(web::to(move |body: Bytes| async {
|
||||
HttpResponse::Ok().body(body)
|
||||
})))
|
||||
});
|
||||
|
||||
let request = srv
|
||||
|
@ -619,9 +630,9 @@ async fn test_reading_deflate_encoding_large_random() {
|
|||
#[actix_rt::test]
|
||||
async fn test_brotli_encoding() {
|
||||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(move |body: Bytes| HttpResponse::Ok().body(body))),
|
||||
)
|
||||
App::new().service(web::resource("/").route(web::to(move |body: Bytes| async {
|
||||
HttpResponse::Ok().body(body)
|
||||
})))
|
||||
});
|
||||
|
||||
let request = srv
|
||||
|
@ -649,7 +660,7 @@ async fn test_brotli_encoding_large() {
|
|||
App::new().service(
|
||||
web::resource("/")
|
||||
.app_data(web::PayloadConfig::new(320_000))
|
||||
.route(web::to(move |body: Bytes| {
|
||||
.route(web::to(move |body: Bytes| async {
|
||||
HttpResponse::Ok().streaming(TestBody::new(body, 10240))
|
||||
})),
|
||||
)
|
||||
|
@ -676,7 +687,7 @@ async fn test_brotli_encoding_large_openssl() {
|
|||
let data = STR.repeat(10);
|
||||
let srv =
|
||||
actix_test::start_with(actix_test::config().openssl(openssl_config()), move || {
|
||||
App::new().service(web::resource("/").route(web::to(|bytes: Bytes| {
|
||||
App::new().service(web::resource("/").route(web::to(|bytes: Bytes| async {
|
||||
// echo decompressed request body back in response
|
||||
HttpResponse::Ok()
|
||||
.insert_header(header::ContentEncoding::Identity)
|
||||
|
@ -738,7 +749,7 @@ mod plus_rustls {
|
|||
.collect::<String>();
|
||||
|
||||
let srv = actix_test::start_with(actix_test::config().rustls(tls_config()), || {
|
||||
App::new().service(web::resource("/").route(web::to(|bytes: Bytes| {
|
||||
App::new().service(web::resource("/").route(web::to(|bytes: Bytes| async {
|
||||
// echo decompressed request body back in response
|
||||
HttpResponse::Ok()
|
||||
.insert_header(header::ContentEncoding::Identity)
|
||||
|
@ -770,7 +781,7 @@ async fn test_server_cookies() {
|
|||
use actix_web::http;
|
||||
|
||||
let srv = actix_test::start(|| {
|
||||
App::new().default_service(web::to(|| {
|
||||
App::new().default_service(web::to(|| async {
|
||||
HttpResponse::Ok()
|
||||
.cookie(
|
||||
Cookie::build("first", "first_value")
|
||||
|
@ -911,7 +922,7 @@ async fn test_accept_encoding_no_match() {
|
|||
let srv = actix_test::start_with(actix_test::config().h1(), || {
|
||||
App::new()
|
||||
.wrap(Compress::default())
|
||||
.service(web::resource("/").route(web::to(move || HttpResponse::Ok().finish())))
|
||||
.service(web::resource("/").route(web::to(HttpResponse::Ok)))
|
||||
});
|
||||
|
||||
let mut res = srv
|
||||
|
|
Loading…
Reference in a new issue