#![cfg(feature = "axum")]
use axum::http::Request;
use axum::{
http::{Method, StatusCode},
routing::get,
Router,
};
use tower::util::ServiceExt;
use trace_id::{TraceIdLayer, TRACE_ID_HEADER};
async fn test_handler() -> &'static str {
tracing::info!("Test handler called");
"Hello, World!"
}
#[tokio::test]
async fn test_tracing_integration() {
let app = Router::new()
.route("/test", get(test_handler))
.layer(TraceIdLayer::new());
let valid_trace_id = "0af7651916cd43dd8448eb211c80319c";
let request = Request::builder()
.method(Method::GET)
.uri("/test")
.header(TRACE_ID_HEADER, valid_trace_id)
.body(axum::body::Body::empty())
.unwrap();
let response = app.oneshot(request).await.unwrap();
assert_eq!(response.status(), StatusCode::OK);
let trace_id_header = response.headers().get(TRACE_ID_HEADER);
assert!(trace_id_header.is_some());
assert_eq!(trace_id_header.unwrap(), valid_trace_id);
}
#[tokio::test]
async fn test_auto_generate_trace_id() {
let app = Router::new()
.route("/test", get(test_handler))
.layer(TraceIdLayer::new());
let request = Request::builder()
.method(Method::GET)
.uri("/test")
.body(axum::body::Body::empty())
.unwrap();
let response = app.oneshot(request).await.unwrap();
assert_eq!(response.status(), StatusCode::OK);
let trace_id_header = response.headers().get(TRACE_ID_HEADER);
assert!(trace_id_header.is_some());
let trace_id_str = trace_id_header.unwrap().to_str().unwrap();
assert_eq!(trace_id_str.len(), 32);
}