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"] }
|
||||
lazy_static = "1.4.0"
|
||||
prost = "0.11.9"
|
||||
tower = { version = "0.4", features = ["util"] }
|
||||
tower = { version = "0.4", features = ["util", "buffer"] }
|
||||
wiremock = "0.5"
|
||||
|
||||
[[test]]
|
||||
|
|
|
|||
|
|
@ -2,17 +2,19 @@ mod common;
|
|||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::convert::Infallible;
|
||||
|
||||
use axum::{
|
||||
body::Body,
|
||||
http::{Request, StatusCode},
|
||||
response::Response,
|
||||
routing::get,
|
||||
Router,
|
||||
BoxError, Router,
|
||||
};
|
||||
use http::{header, HeaderValue};
|
||||
use jwt_authorizer::{layer::JwtSource, validation::Validation, JwtAuthorizer, JwtClaims};
|
||||
use serde::Deserialize;
|
||||
use tower::ServiceExt;
|
||||
use tower::{util::MapErrLayer, ServiceExt};
|
||||
|
||||
use crate::common;
|
||||
|
||||
|
|
@ -24,8 +26,15 @@ mod tests {
|
|||
async fn app(jwt_auth: JwtAuthorizer<User>) -> Router {
|
||||
Router::new().route("/public", get(|| async { "hello" })).route(
|
||||
"/protected",
|
||||
get(|JwtClaims(user): JwtClaims<User>| async move { format!("hello: {}", user.sub) })
|
||||
.layer(jwt_auth.layer().await.unwrap()),
|
||||
get(|JwtClaims(user): JwtClaims<User>| async move { format!("hello: {}", user.sub) }).layer(
|
||||
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 serde::{Deserialize, Serialize};
|
||||
use tonic::{server::UnaryService, transport::NamedService, IntoRequest, Status};
|
||||
use tower::Service;
|
||||
use tower::{buffer::Buffer, Service};
|
||||
|
||||
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||
|
||||
|
|
@ -82,10 +82,11 @@ impl NamedService for GreeterServer {
|
|||
async fn app(
|
||||
jwt_auth: JwtAuthorizer<User>,
|
||||
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();
|
||||
tonic::transport::Server::builder()
|
||||
.layer(layer)
|
||||
.layer(tower::buffer::BufferLayer::new(1))
|
||||
.add_service(GreeterServer { expected_sub })
|
||||
.into_service()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue