mirror of
https://github.com/fafhrd91/actix-web
synced 2024-11-27 17:52:56 +01:00
add middleware composition tests (#2375)
This commit is contained in:
parent
ae35e69382
commit
dade818eba
@ -6,8 +6,10 @@
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
* Remove slice creation pointing to potential uninitialized data on h1 encoder. [#2364]
|
* Remove slice creation pointing to potential uninitialized data on h1 encoder. [#2364]
|
||||||
|
* Remove `Into<Error>` bound on `Encoder` body types. [#2375]
|
||||||
|
|
||||||
[#2364]: https://github.com/actix/actix-web/pull/2364
|
[#2364]: https://github.com/actix/actix-web/pull/2364
|
||||||
|
[#2375]: https://github.com/actix/actix-web/pull/2375
|
||||||
|
|
||||||
|
|
||||||
## 3.0.0-beta.8 - 2021-08-09
|
## 3.0.0-beta.8 - 2021-08-09
|
||||||
|
@ -11,8 +11,6 @@ use bytes::{Bytes, BytesMut};
|
|||||||
use futures_core::ready;
|
use futures_core::ready;
|
||||||
use pin_project_lite::pin_project;
|
use pin_project_lite::pin_project;
|
||||||
|
|
||||||
use crate::error::Error;
|
|
||||||
|
|
||||||
use super::BodySize;
|
use super::BodySize;
|
||||||
|
|
||||||
/// An interface for response bodies.
|
/// An interface for response bodies.
|
||||||
@ -47,7 +45,6 @@ impl MessageBody for () {
|
|||||||
impl<B> MessageBody for Box<B>
|
impl<B> MessageBody for Box<B>
|
||||||
where
|
where
|
||||||
B: MessageBody + Unpin,
|
B: MessageBody + Unpin,
|
||||||
B::Error: Into<Error>,
|
|
||||||
{
|
{
|
||||||
type Error = B::Error;
|
type Error = B::Error;
|
||||||
|
|
||||||
@ -66,7 +63,6 @@ where
|
|||||||
impl<B> MessageBody for Pin<Box<B>>
|
impl<B> MessageBody for Pin<Box<B>>
|
||||||
where
|
where
|
||||||
B: MessageBody,
|
B: MessageBody,
|
||||||
B::Error: Into<Error>,
|
|
||||||
{
|
{
|
||||||
type Error = B::Error;
|
type Error = B::Error;
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ use crate::{
|
|||||||
header::{ContentEncoding, CONTENT_ENCODING},
|
header::{ContentEncoding, CONTENT_ENCODING},
|
||||||
HeaderValue, StatusCode,
|
HeaderValue, StatusCode,
|
||||||
},
|
},
|
||||||
Error, ResponseHead,
|
ResponseHead,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::Writer;
|
use super::Writer;
|
||||||
@ -107,7 +107,6 @@ enum EncoderBody<B> {
|
|||||||
impl<B> MessageBody for EncoderBody<B>
|
impl<B> MessageBody for EncoderBody<B>
|
||||||
where
|
where
|
||||||
B: MessageBody,
|
B: MessageBody,
|
||||||
B::Error: Into<Error>,
|
|
||||||
{
|
{
|
||||||
type Error = EncoderError<B::Error>;
|
type Error = EncoderError<B::Error>;
|
||||||
|
|
||||||
@ -142,7 +141,6 @@ where
|
|||||||
impl<B> MessageBody for Encoder<B>
|
impl<B> MessageBody for Encoder<B>
|
||||||
where
|
where
|
||||||
B: MessageBody,
|
B: MessageBody,
|
||||||
B::Error: Into<Error>,
|
|
||||||
{
|
{
|
||||||
type Error = EncoderError<B::Error>;
|
type Error = EncoderError<B::Error>;
|
||||||
|
|
||||||
|
@ -65,7 +65,9 @@ where
|
|||||||
let next =
|
let next =
|
||||||
match this.body.as_mut().as_pin_mut().unwrap().poll_next(cx) {
|
match this.body.as_mut().as_pin_mut().unwrap().poll_next(cx) {
|
||||||
Poll::Ready(Some(Ok(item))) => Poll::Ready(Some(item)),
|
Poll::Ready(Some(Ok(item))) => Poll::Ready(Some(item)),
|
||||||
Poll::Ready(Some(Err(err))) => return Poll::Ready(Err(err.into())),
|
Poll::Ready(Some(Err(err))) => {
|
||||||
|
return Poll::Ready(Err(err.into()))
|
||||||
|
}
|
||||||
Poll::Ready(None) => Poll::Ready(None),
|
Poll::Ready(None) => Poll::Ready(None),
|
||||||
Poll::Pending => Poll::Pending,
|
Poll::Pending => Poll::Pending,
|
||||||
};
|
};
|
||||||
|
@ -19,3 +19,43 @@ mod compress;
|
|||||||
|
|
||||||
#[cfg(feature = "__compress")]
|
#[cfg(feature = "__compress")]
|
||||||
pub use self::compress::Compress;
|
pub use self::compress::Compress;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::{http::StatusCode, App};
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn common_combinations() {
|
||||||
|
// ensure there's no reason that the built-in middleware cannot compose
|
||||||
|
|
||||||
|
let _ = App::new()
|
||||||
|
.wrap(Compat::new(Logger::default()))
|
||||||
|
.wrap(Condition::new(true, DefaultHeaders::new()))
|
||||||
|
.wrap(DefaultHeaders::new().header("X-Test2", "X-Value2"))
|
||||||
|
.wrap(ErrorHandlers::new().handler(StatusCode::FORBIDDEN, |res| {
|
||||||
|
Ok(ErrorHandlerResponse::Response(res))
|
||||||
|
}))
|
||||||
|
.wrap(Logger::default())
|
||||||
|
.wrap(NormalizePath::new(TrailingSlash::Trim));
|
||||||
|
|
||||||
|
let _ = App::new()
|
||||||
|
.wrap(NormalizePath::new(TrailingSlash::Trim))
|
||||||
|
.wrap(Logger::default())
|
||||||
|
.wrap(ErrorHandlers::new().handler(StatusCode::FORBIDDEN, |res| {
|
||||||
|
Ok(ErrorHandlerResponse::Response(res))
|
||||||
|
}))
|
||||||
|
.wrap(DefaultHeaders::new().header("X-Test2", "X-Value2"))
|
||||||
|
.wrap(Condition::new(true, DefaultHeaders::new()))
|
||||||
|
.wrap(Compat::new(Logger::default()));
|
||||||
|
|
||||||
|
#[cfg(feature = "__compress")]
|
||||||
|
{
|
||||||
|
let _ = App::new().wrap(Compress::default()).wrap(Logger::default());
|
||||||
|
let _ = App::new().wrap(Logger::default()).wrap(Compress::default());
|
||||||
|
let _ = App::new().wrap(Compat::new(Compress::default()));
|
||||||
|
let _ = App::new().wrap(Condition::new(true, Compat::new(Compress::default())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user