mirror of
https://github.com/TECHNOFAB11/jwt-authorizer.git
synced 2025-12-12 08:00:07 +01:00
feature: tests readyness handling
Use a Tower Buffer service/layer to verify the crate handles inner service readyness correctly as the buffer service will panic when being called if it's not ready Signed-off-by: Sjoerd Simons <sjoerd@collabora.com>
This commit is contained in:
parent
1cec99e522
commit
28df895754
3 changed files with 17 additions and 7 deletions
|
|
@ -33,7 +33,7 @@ tonic = { version = "0.9.2", optional = true }
|
||||||
hyper = { version = "0.14", features = ["full"] }
|
hyper = { version = "0.14", features = ["full"] }
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
prost = "0.11.9"
|
prost = "0.11.9"
|
||||||
tower = { version = "0.4", features = ["util"] }
|
tower = { version = "0.4", features = ["util", "buffer"] }
|
||||||
wiremock = "0.5"
|
wiremock = "0.5"
|
||||||
|
|
||||||
[[test]]
|
[[test]]
|
||||||
|
|
|
||||||
|
|
@ -2,17 +2,19 @@ mod common;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
use std::convert::Infallible;
|
||||||
|
|
||||||
use axum::{
|
use axum::{
|
||||||
body::Body,
|
body::Body,
|
||||||
http::{Request, StatusCode},
|
http::{Request, StatusCode},
|
||||||
response::Response,
|
response::Response,
|
||||||
routing::get,
|
routing::get,
|
||||||
Router,
|
BoxError, Router,
|
||||||
};
|
};
|
||||||
use http::{header, HeaderValue};
|
use http::{header, HeaderValue};
|
||||||
use jwt_authorizer::{layer::JwtSource, validation::Validation, JwtAuthorizer, JwtClaims};
|
use jwt_authorizer::{layer::JwtSource, validation::Validation, JwtAuthorizer, JwtClaims};
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use tower::ServiceExt;
|
use tower::{util::MapErrLayer, ServiceExt};
|
||||||
|
|
||||||
use crate::common;
|
use crate::common;
|
||||||
|
|
||||||
|
|
@ -24,8 +26,15 @@ mod tests {
|
||||||
async fn app(jwt_auth: JwtAuthorizer<User>) -> Router {
|
async fn app(jwt_auth: JwtAuthorizer<User>) -> Router {
|
||||||
Router::new().route("/public", get(|| async { "hello" })).route(
|
Router::new().route("/public", get(|| async { "hello" })).route(
|
||||||
"/protected",
|
"/protected",
|
||||||
get(|JwtClaims(user): JwtClaims<User>| async move { format!("hello: {}", user.sub) })
|
get(|JwtClaims(user): JwtClaims<User>| async move { format!("hello: {}", user.sub) }).layer(
|
||||||
.layer(jwt_auth.layer().await.unwrap()),
|
tower_layer::Stack::new(
|
||||||
|
tower_layer::Stack::new(
|
||||||
|
tower::buffer::BufferLayer::new(1),
|
||||||
|
MapErrLayer::new(|e: BoxError| -> Infallible { panic!("{}", e) }),
|
||||||
|
),
|
||||||
|
jwt_auth.layer().await.unwrap(),
|
||||||
|
),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ use http::header::AUTHORIZATION;
|
||||||
use jwt_authorizer::{layer::AsyncAuthorizationService, JwtAuthorizer};
|
use jwt_authorizer::{layer::AsyncAuthorizationService, JwtAuthorizer};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use tonic::{server::UnaryService, transport::NamedService, IntoRequest, Status};
|
use tonic::{server::UnaryService, transport::NamedService, IntoRequest, Status};
|
||||||
use tower::Service;
|
use tower::{buffer::Buffer, Service};
|
||||||
|
|
||||||
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||||
|
|
||||||
|
|
@ -82,10 +82,11 @@ impl NamedService for GreeterServer {
|
||||||
async fn app(
|
async fn app(
|
||||||
jwt_auth: JwtAuthorizer<User>,
|
jwt_auth: JwtAuthorizer<User>,
|
||||||
expected_sub: String,
|
expected_sub: String,
|
||||||
) -> AsyncAuthorizationService<tonic::transport::server::Routes, User> {
|
) -> AsyncAuthorizationService<Buffer<tonic::transport::server::Routes, http::Request<tonic::transport::Body>>, User> {
|
||||||
let layer = jwt_auth.layer().await.unwrap();
|
let layer = jwt_auth.layer().await.unwrap();
|
||||||
tonic::transport::Server::builder()
|
tonic::transport::Server::builder()
|
||||||
.layer(layer)
|
.layer(layer)
|
||||||
|
.layer(tower::buffer::BufferLayer::new(1))
|
||||||
.add_service(GreeterServer { expected_sub })
|
.add_service(GreeterServer { expected_sub })
|
||||||
.into_service()
|
.into_service()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue