@@ -1076,13 +1076,13 @@ impl Processor {
10761076 return Some ( sc) ;
10771077 }
10781078
1079- if let Some ( request_obj ) = payload_value. get ( "request" ) {
1080- if let Some ( request_headers ) = request_obj . get ( "headers" ) {
1081- if let Some ( sc ) = propagator . extract ( request_headers ) {
1082- debug ! ( "Extracted trace context from event.request. headers" ) ;
1083- return Some ( sc ) ;
1084- }
1085- }
1079+ if let Some ( sc ) = payload_value
1080+ . get ( "request" )
1081+ . and_then ( |req| req . get ( "headers" ) )
1082+ . and_then ( |headers| propagator . extract ( headers) )
1083+ {
1084+ debug ! ( "Extracted trace context from event.request.headers" ) ;
1085+ return Some ( sc ) ;
10861086 }
10871087
10881088 if let Some ( payload_headers) = payload_value. get ( "headers" ) {
@@ -1861,68 +1861,6 @@ mod tests {
18611861 ) ;
18621862 }
18631863
1864- #[ test]
1865- fn test_extract_span_context_from_event_request_headers_datadog ( ) {
1866- let config = Arc :: new ( config:: Config {
1867- trace_propagation_style_extract : vec ! [
1868- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
1869- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
1870- ] ,
1871- ..config:: Config :: default ( )
1872- } ) ;
1873- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
1874- let headers = HashMap :: new ( ) ;
1875-
1876- let payload = json ! ( {
1877- "request" : {
1878- "headers" : {
1879- "x-datadog-trace-id" : "1234567890" ,
1880- "x-datadog-parent-id" : "9876543210" ,
1881- "x-datadog-sampling-priority" : "2" ,
1882- "x-datadog-origin" : "rum"
1883- }
1884- }
1885- } ) ;
1886-
1887- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
1888-
1889- assert ! ( result. is_some( ) ) ;
1890- let context = result. unwrap ( ) ;
1891- assert_eq ! ( context. trace_id, 1_234_567_890 ) ;
1892- assert_eq ! ( context. span_id, 9_876_543_210 ) ;
1893- assert_eq ! ( context. sampling. unwrap( ) . priority, Some ( 2 ) ) ;
1894- assert_eq ! ( context. origin, Some ( "rum" . to_string( ) ) ) ;
1895- }
1896-
1897- #[ test]
1898- fn test_extract_span_context_from_event_request_headers_tracecontext ( ) {
1899- let config = Arc :: new ( config:: Config {
1900- trace_propagation_style_extract : vec ! [
1901- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
1902- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
1903- ] ,
1904- ..config:: Config :: default ( )
1905- } ) ;
1906- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
1907- let headers = HashMap :: new ( ) ;
1908-
1909- let payload = json ! ( {
1910- "request" : {
1911- "headers" : {
1912- "traceparent" : "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" ,
1913- "tracestate" : "dd=s:2;o:rum"
1914- }
1915- }
1916- } ) ;
1917-
1918- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
1919-
1920- assert ! ( result. is_some( ) ) ;
1921- let context = result. unwrap ( ) ;
1922- assert_eq ! ( context. sampling. unwrap( ) . priority, Some ( 2 ) ) ;
1923- assert_eq ! ( context. origin, Some ( "rum" . to_string( ) ) ) ;
1924- }
1925-
19261864 #[ test]
19271865 fn test_extract_span_context_priority_order ( ) {
19281866 let config = Arc :: new ( config:: Config {
@@ -1961,43 +1899,6 @@ mod tests {
19611899 ) ;
19621900 }
19631901
1964- #[ test]
1965- fn test_extract_span_context_fallback_to_request_headers ( ) {
1966- let config = Arc :: new ( config:: Config {
1967- trace_propagation_style_extract : vec ! [
1968- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
1969- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
1970- ] ,
1971- ..config:: Config :: default ( )
1972- } ) ;
1973- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
1974- let headers = HashMap :: new ( ) ;
1975-
1976- let payload = json ! ( {
1977- "argumentsMap" : {
1978- "id" : "123"
1979- } ,
1980- "request" : {
1981- "headers" : {
1982- "x-datadog-trace-id" : "7777" ,
1983- "x-datadog-parent-id" : "8888" ,
1984- "x-datadog-sampling-priority" : "1"
1985- }
1986- }
1987- } ) ;
1988-
1989- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
1990-
1991- assert ! (
1992- result. is_some( ) ,
1993- "Should extract from event.request.headers"
1994- ) ;
1995- let context = result. unwrap ( ) ;
1996- assert_eq ! ( context. trace_id, 7777 ) ;
1997- assert_eq ! ( context. span_id, 8888 ) ;
1998- assert_eq ! ( context. sampling. unwrap( ) . priority, Some ( 1 ) ) ;
1999- }
2000-
20011902 #[ test]
20021903 fn test_extract_span_context_no_request_headers ( ) {
20031904 let config = Arc :: new ( config:: Config {
@@ -2026,132 +1927,4 @@ mod tests {
20261927 "Should return None when no trace context found"
20271928 ) ;
20281929 }
2029-
2030- #[ test]
2031- fn test_extract_span_context_empty_request_headers ( ) {
2032- let config = Arc :: new ( config:: Config {
2033- trace_propagation_style_extract : vec ! [
2034- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
2035- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
2036- ] ,
2037- ..config:: Config :: default ( )
2038- } ) ;
2039- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
2040- let headers = HashMap :: new ( ) ;
2041-
2042- let payload = json ! ( {
2043- "request" : {
2044- "headers" : { }
2045- }
2046- } ) ;
2047-
2048- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
2049-
2050- assert ! (
2051- result. is_none( ) ,
2052- "Should return None when request.headers is empty"
2053- ) ;
2054- }
2055-
2056- #[ test]
2057- fn test_extract_span_context_invalid_request_headers ( ) {
2058- let config = Arc :: new ( config:: Config {
2059- trace_propagation_style_extract : vec ! [
2060- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
2061- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
2062- ] ,
2063- ..config:: Config :: default ( )
2064- } ) ;
2065- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
2066- let headers = HashMap :: new ( ) ;
2067-
2068- let payload = json ! ( {
2069- "request" : {
2070- "headers" : {
2071- "x-datadog-trace-id" : "not-a-number" ,
2072- "x-datadog-parent-id" : "also-not-a-number"
2073- }
2074- }
2075- } ) ;
2076-
2077- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
2078-
2079- assert ! (
2080- result. is_none( ) ,
2081- "Should return None when headers are invalid"
2082- ) ;
2083- }
2084-
2085- #[ test]
2086- fn test_extract_span_context_appsync_real_world_example ( ) {
2087- let config = Arc :: new ( config:: Config {
2088- trace_propagation_style_extract : vec ! [
2089- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
2090- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
2091- ] ,
2092- ..config:: Config :: default ( )
2093- } ) ;
2094- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
2095- let headers = HashMap :: new ( ) ;
2096-
2097- let payload = json ! ( {
2098- "arguments" : {
2099- "userId" : "12345"
2100- } ,
2101- "identity" : {
2102- "sub" : "user-sub-id"
2103- } ,
2104- "request" : {
2105- "headers" : {
2106- "x-datadog-trace-id" : "123456789012345" ,
2107- "x-datadog-parent-id" : "98765432109876" ,
2108- "x-datadog-sampling-priority" : "2" ,
2109- "x-datadog-origin" : "rum" ,
2110- "x-datadog-tags" : "_dd.p.dm=-0" ,
2111- "user-agent" : "Mozilla/5.0" ,
2112- "content-type" : "application/json"
2113- }
2114- } ,
2115- "info" : {
2116- "fieldName" : "getUser" ,
2117- "parentTypeName" : "Query"
2118- }
2119- } ) ;
2120-
2121- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
2122-
2123- assert ! (
2124- result. is_some( ) ,
2125- "Should extract from real-world AppSync event"
2126- ) ;
2127- let context = result. unwrap ( ) ;
2128- assert_eq ! ( context. trace_id, 123_456_789_012_345 ) ;
2129- assert_eq ! ( context. span_id, 98_765_432_109_876 ) ;
2130- assert_eq ! ( context. sampling. unwrap( ) . priority, Some ( 2 ) ) ;
2131- assert_eq ! ( context. origin, Some ( "rum" . to_string( ) ) ) ;
2132- }
2133-
2134- #[ test]
2135- fn test_extract_span_context_request_not_an_object ( ) {
2136- let config = Arc :: new ( config:: Config {
2137- trace_propagation_style_extract : vec ! [
2138- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
2139- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
2140- ] ,
2141- ..config:: Config :: default ( )
2142- } ) ;
2143- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
2144- let headers = HashMap :: new ( ) ;
2145-
2146- let payload = json ! ( {
2147- "request" : "invalid-not-an-object"
2148- } ) ;
2149-
2150- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
2151-
2152- assert ! (
2153- result. is_none( ) ,
2154- "Should handle gracefully when request is not an object"
2155- ) ;
2156- }
21571930}
0 commit comments