mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-27 00:38:16 +00:00
test(server): cover request context layer propagation (#2398)
Co-authored-by: loverustfs <hello@rustfs.com>
This commit is contained in:
@@ -678,11 +678,30 @@ where
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use futures::future::{Ready, ready};
|
||||
use http::Request;
|
||||
use http_body_util::BodyExt;
|
||||
use http_body_util::Full;
|
||||
use std::convert::Infallible;
|
||||
use temp_env::with_var;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
struct CaptureService;
|
||||
|
||||
impl<B> Service<Request<B>> for CaptureService {
|
||||
type Response = Request<B>;
|
||||
type Error = Infallible;
|
||||
type Future = Ready<Result<Self::Response, Self::Error>>;
|
||||
|
||||
fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
|
||||
Poll::Ready(Ok(()))
|
||||
}
|
||||
|
||||
fn call(&mut self, req: Request<B>) -> Self::Future {
|
||||
ready(Ok(req))
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn admin_chunked_put_without_content_length_is_normalized() {
|
||||
let request = Request::builder()
|
||||
@@ -816,6 +835,49 @@ mod tests {
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn request_context_layer_populates_context_and_s3_request_id_from_x_request_id() {
|
||||
let mut service = RequestContextLayer.layer(CaptureService);
|
||||
let request = Request::builder()
|
||||
.uri("/bucket/object")
|
||||
.header("x-request-id", "req-123")
|
||||
.body(())
|
||||
.expect("request");
|
||||
|
||||
let request = service.call(request).into_inner().expect("service call should succeed");
|
||||
let context = request
|
||||
.extensions()
|
||||
.get::<RequestContext>()
|
||||
.expect("request context should be present");
|
||||
|
||||
assert_eq!(context.request_id, "req-123");
|
||||
assert_eq!(context.x_amz_request_id, "req-123");
|
||||
assert!(context.trace_id.is_none());
|
||||
assert!(context.span_id.is_none());
|
||||
assert_eq!(request.headers().get(AMZ_REQUEST_ID).unwrap(), "req-123");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn request_context_layer_preserves_upstream_s3_request_id() {
|
||||
let mut service = RequestContextLayer.layer(CaptureService);
|
||||
let request = Request::builder()
|
||||
.uri("/bucket/object")
|
||||
.header("x-request-id", "req-123")
|
||||
.header(AMZ_REQUEST_ID, "amz-456")
|
||||
.body(())
|
||||
.expect("request");
|
||||
|
||||
let request = service.call(request).into_inner().expect("service call should succeed");
|
||||
let context = request
|
||||
.extensions()
|
||||
.get::<RequestContext>()
|
||||
.expect("request context should be present");
|
||||
|
||||
assert_eq!(context.request_id, "req-123");
|
||||
assert_eq!(context.x_amz_request_id, "amz-456");
|
||||
assert_eq!(request.headers().get(AMZ_REQUEST_ID).unwrap(), "amz-456");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_resolve_s3_options_cors_headers_no_headers_without_match() {
|
||||
let mut req_headers = HeaderMap::new();
|
||||
|
||||
Reference in New Issue
Block a user