use admin_api::request_context::{TRACE_ID_HEADER, apply_request_context}; use axum::{Router, body::Body, http::Request, routing::get}; use opentelemetry::trace::TracerProvider as _; use opentelemetry_sdk::trace::SdkTracerProvider; use tower::ServiceExt; use tracing_subscriber::layer::SubscriberExt; #[tokio::test(flavor = "current_thread")] async fn preserves_remote_trace_id_with_an_active_tracer_and_no_global_propagator() { let provider = SdkTracerProvider::builder().build(); let tracer = provider.tracer("admin-request-context-parent-test"); let subscriber = tracing_subscriber::registry().with(tracing_opentelemetry::layer().with_tracer(tracer)); let dispatch = tracing::Dispatch::new(subscriber); let _dispatch_guard = tracing::dispatcher::set_default(&dispatch); let app = Router::new() .route("/probe", get(|| async { "ok" })) .layer(axum::middleware::from_fn(apply_request_context)); let response = app .oneshot( Request::builder() .uri("/probe") .header( "traceparent", "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", ) .body(Body::empty()) .unwrap(), ) .await .unwrap(); assert_eq!( response.headers()[TRACE_ID_HEADER], "0af7651916cd43dd8448eb211c80319c" ); provider.shutdown().unwrap(); }