Skip to content

Commit

Permalink
Add test for "AuthenticationMiddleware was called already"
Browse files Browse the repository at this point in the history
  • Loading branch information
boydjohnson committed Jun 4, 2020
1 parent 9b88008 commit f85bd26
Showing 1 changed file with 68 additions and 0 deletions.
68 changes: 68 additions & 0 deletions actix-web-httpauth/src/middleware.rs
Expand Up @@ -256,3 +256,71 @@ where
Poll::Ready(Ok((req, credentials)))
}
}

#[cfg(test)]
mod tests {
use super::*;
use actix_web::test::TestRequest;
use actix_service::{into_service, Service};
use futures_util::join;
use crate::extractors::bearer::BearerAuth;
use actix_web::error;


#[actix_rt::test]
async fn test_middleware_mutex() {
let mut middleware = AuthenticationMiddleware {
service: Arc::new(Mutex::new(into_service(|_: ServiceRequest| {
async move {
actix_rt::time::delay_for(std::time::Duration::from_secs(1)).await;
Err::<ServiceResponse, _>(error::ErrorBadRequest("error"))
}}))),
process_fn: Arc::new(|req, _: BearerAuth| async {
Ok(req) }),
_extractor: PhantomData,
};

let req = TestRequest::with_header("Authorization", "Bearer 1").to_srv_request();

let f = middleware.call(req);

let res = futures_util::future::lazy(|cx| middleware.poll_ready(cx) );


assert!(join!(f, res).0.is_err());
}

#[actix_rt::test]
async fn test_middleware_mutex_several_orders() {
let mut middleware = AuthenticationMiddleware {
service: Arc::new(Mutex::new(into_service(|_: ServiceRequest| {
async move {
actix_rt::time::delay_for(std::time::Duration::from_secs(1)).await;
Err::<ServiceResponse, _>(error::ErrorBadRequest("error"))
}}))),
process_fn: Arc::new(|req, _: BearerAuth| async {
Ok(req) }),
_extractor: PhantomData,
};

let req = TestRequest::with_header("Authorization", "Bearer 1").to_srv_request();

let f1 = middleware.call(req);

let req = TestRequest::with_header("Authorization", "Bearer 1").to_srv_request();

let f2 = middleware.call(req);

let req = TestRequest::with_header("Authorization", "Bearer 1").to_srv_request();

let f3 = middleware.call(req);

let res = futures_util::future::lazy(|cx| middleware.poll_ready(cx));

let result = join!(f1, f2, f3, res);

assert!(result.0.is_err());
assert!(result.1.is_err());
assert!(result.2.is_err());
}
}

0 comments on commit f85bd26

Please sign in to comment.