@@ -26,7 +26,7 @@ mod tests {
2626 use google_cloud_gax_internal:: options:: { ClientConfig , InstrumentationClientInfo } ;
2727 use google_cloud_test_utils:: test_layer:: { AttributeValue , TestLayer } ;
2828 use http:: { Method , StatusCode } ;
29- use httptest:: matchers:: request:: { body, method, path} ;
29+ use httptest:: matchers:: request:: { body, headers , method, path} ;
3030 use httptest:: { Expectation , Server , all_of, responders:: * } ;
3131 use opentelemetry_semantic_conventions:: { attribute as otel_attr, trace as otel_trace} ;
3232 use serde:: Deserialize ;
@@ -524,4 +524,42 @@ mod tests {
524524
525525 assert_eq ! ( got, want) ;
526526 }
527+
528+ #[ tokio:: test]
529+ async fn propagate_trace_context ( ) {
530+ let server = Server :: run ( ) ;
531+ let server_addr = server. addr ( ) ;
532+ let server_url = format ! ( "http://{}" , server_addr) ;
533+ server. expect (
534+ Expectation :: matching ( all_of ! [
535+ method( "GET" ) ,
536+ path( "/test" ) ,
537+ headers( httptest:: matchers:: contains( (
538+ "traceparent" ,
539+ httptest:: matchers:: any( )
540+ ) ) ) ,
541+ ] )
542+ . respond_with ( status_code ( 200 ) . body ( "{\" hello\" : \" world\" }" ) ) ,
543+ ) ;
544+
545+ let client = create_client ( true , server_url. clone ( ) ) . await ;
546+
547+ let tracer_provider = opentelemetry_sdk:: trace:: SdkTracerProvider :: builder ( ) . build ( ) ;
548+ let tracer = opentelemetry:: trace:: TracerProvider :: tracer ( & tracer_provider, "test" ) ;
549+ let telemetry = tracing_opentelemetry:: layer ( ) . with_tracer ( tracer) ;
550+ use tracing_subscriber:: layer:: SubscriberExt ;
551+ let subscriber = tracing_subscriber:: registry ( ) . with ( telemetry) ;
552+ let _guard = tracing:: subscriber:: set_default ( subscriber) ;
553+
554+ let options = RequestOptions :: default ( ) . insert_extension ( PathTemplate ( "/test" ) ) ;
555+ let request = client. builder ( Method :: GET , "/test" . to_string ( ) ) ;
556+
557+ let span = tracing:: info_span!( "parent_span" ) ;
558+ let result: Result < Response < TestResponse > > = client
559+ . execute ( request, None :: < NoBody > , options)
560+ . instrument ( span)
561+ . await ;
562+
563+ assert ! ( result. is_ok( ) , "{result:?}" ) ;
564+ }
527565}
0 commit comments