@@ -66,6 +66,7 @@ pub struct TraceExporterConfig {
6666    output_format :  TraceExporterOutputFormat , 
6767    compute_stats :  bool , 
6868    telemetry_cfg :  Option < TelemetryConfig > , 
69+     test_session_token :  Option < String > , 
6970} 
7071
7172#[ no_mangle]  
@@ -274,6 +275,23 @@ pub unsafe extern "C" fn ddog_trace_exporter_config_set_compute_stats(
274275    } 
275276} 
276277
278+ /// Sets the `X-Datadog-Test-Session-Token` header. Only used for testing with the test agent. 
279+ #[ no_mangle]  
280+ pub  unsafe  extern  "C"  fn  ddog_trace_exporter_config_set_test_session_token ( 
281+     config :  Option < & mut  TraceExporterConfig > , 
282+     token :  CharSlice , 
283+ )  -> Option < Box < ExporterError > >  { 
284+     if  let  Option :: Some ( handle)  = config { 
285+         handle. test_session_token  = match  sanitize_string ( token)  { 
286+             Ok ( s)  => Some ( s) , 
287+             Err ( e)  => return  Some ( e) , 
288+         } ; 
289+         None 
290+     }  else  { 
291+         gen_error ! ( ErrorCode :: InvalidArgument ) 
292+     } 
293+ } 
294+ 
277295/// Create a new TraceExporter instance. 
278296/// 
279297/// # Arguments 
@@ -313,6 +331,10 @@ pub unsafe extern "C" fn ddog_trace_exporter_new(
313331            builder. enable_telemetry ( Some ( cfg. clone ( ) ) ) ; 
314332        } 
315333
334+         if  let  Some ( token)  = & config. test_session_token  { 
335+             builder. set_test_session_token ( token) ; 
336+         } 
337+ 
316338        match  builder. build ( )  { 
317339            Ok ( exporter)  => { 
318340                out_handle. as_ptr ( ) . write ( Box :: new ( exporter) ) ; 
@@ -407,6 +429,7 @@ mod tests {
407429            assert_eq ! ( cfg. output_format,  TraceExporterOutputFormat :: V04 ) ; 
408430            assert ! ( !cfg. compute_stats) ; 
409431            assert ! ( cfg. telemetry_cfg. is_none( ) ) ; 
432+             assert ! ( cfg. test_session_token. is_none( ) ) ; 
410433
411434            ddog_trace_exporter_config_free ( cfg) ; 
412435        } 
@@ -764,6 +787,7 @@ mod tests {
764787                output_format :  TraceExporterOutputFormat :: V04 , 
765788                compute_stats :  false , 
766789                telemetry_cfg :  None , 
790+                 test_session_token :  None , 
767791            } ; 
768792
769793            let  mut  ptr:  MaybeUninit < Box < TraceExporter > >  = MaybeUninit :: uninit ( ) ; 
@@ -833,6 +857,7 @@ mod tests {
833857                output_format :  TraceExporterOutputFormat :: V04 , 
834858                compute_stats :  false , 
835859                telemetry_cfg :  None , 
860+                 test_session_token :  None , 
836861            } ; 
837862
838863            let  mut  ptr:  MaybeUninit < Box < TraceExporter > >  = MaybeUninit :: uninit ( ) ; 
@@ -908,6 +933,7 @@ mod tests {
908933                    runtime_id :  Some ( "foo" . to_string ( ) ) , 
909934                    debug_enabled :  true , 
910935                } ) , 
936+                 test_session_token :  None , 
911937            } ; 
912938
913939            let  mut  ptr:  MaybeUninit < Box < TraceExporter > >  = MaybeUninit :: uninit ( ) ; 
0 commit comments