@@ -1063,13 +1063,13 @@ impl Processor {
10631063 return Some ( sc) ;
10641064 }
10651065
1066- if let Some ( request_obj ) = payload_value. get ( "request" ) {
1067- if let Some ( request_headers ) = request_obj . get ( "headers" ) {
1068- if let Some ( sc ) = propagator . extract ( request_headers ) {
1069- debug ! ( "Extracted trace context from event.request. headers" ) ;
1070- return Some ( sc ) ;
1071- }
1072- }
1066+ if let Some ( sc ) = payload_value
1067+ . get ( "request" )
1068+ . and_then ( |req| req . get ( "headers" ) )
1069+ . and_then ( |headers| propagator . extract ( headers) )
1070+ {
1071+ debug ! ( "Extracted trace context from event.request.headers" ) ;
1072+ return Some ( sc ) ;
10731073 }
10741074
10751075 if let Some ( payload_headers) = payload_value. get ( "headers" ) {
@@ -1848,68 +1848,6 @@ mod tests {
18481848 ) ;
18491849 }
18501850
1851- #[ test]
1852- fn test_extract_span_context_from_event_request_headers_datadog ( ) {
1853- let config = Arc :: new ( config:: Config {
1854- trace_propagation_style_extract : vec ! [
1855- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
1856- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
1857- ] ,
1858- ..config:: Config :: default ( )
1859- } ) ;
1860- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
1861- let headers = HashMap :: new ( ) ;
1862-
1863- let payload = json ! ( {
1864- "request" : {
1865- "headers" : {
1866- "x-datadog-trace-id" : "1234567890" ,
1867- "x-datadog-parent-id" : "9876543210" ,
1868- "x-datadog-sampling-priority" : "2" ,
1869- "x-datadog-origin" : "rum"
1870- }
1871- }
1872- } ) ;
1873-
1874- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
1875-
1876- assert ! ( result. is_some( ) ) ;
1877- let context = result. unwrap ( ) ;
1878- assert_eq ! ( context. trace_id, 1_234_567_890 ) ;
1879- assert_eq ! ( context. span_id, 9_876_543_210 ) ;
1880- assert_eq ! ( context. sampling. unwrap( ) . priority, Some ( 2 ) ) ;
1881- assert_eq ! ( context. origin, Some ( "rum" . to_string( ) ) ) ;
1882- }
1883-
1884- #[ test]
1885- fn test_extract_span_context_from_event_request_headers_tracecontext ( ) {
1886- let config = Arc :: new ( config:: Config {
1887- trace_propagation_style_extract : vec ! [
1888- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
1889- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
1890- ] ,
1891- ..config:: Config :: default ( )
1892- } ) ;
1893- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
1894- let headers = HashMap :: new ( ) ;
1895-
1896- let payload = json ! ( {
1897- "request" : {
1898- "headers" : {
1899- "traceparent" : "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" ,
1900- "tracestate" : "dd=s:2;o:rum"
1901- }
1902- }
1903- } ) ;
1904-
1905- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
1906-
1907- assert ! ( result. is_some( ) ) ;
1908- let context = result. unwrap ( ) ;
1909- assert_eq ! ( context. sampling. unwrap( ) . priority, Some ( 2 ) ) ;
1910- assert_eq ! ( context. origin, Some ( "rum" . to_string( ) ) ) ;
1911- }
1912-
19131851 #[ test]
19141852 fn test_extract_span_context_priority_order ( ) {
19151853 let config = Arc :: new ( config:: Config {
@@ -1948,43 +1886,6 @@ mod tests {
19481886 ) ;
19491887 }
19501888
1951- #[ test]
1952- fn test_extract_span_context_fallback_to_request_headers ( ) {
1953- let config = Arc :: new ( config:: Config {
1954- trace_propagation_style_extract : vec ! [
1955- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
1956- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
1957- ] ,
1958- ..config:: Config :: default ( )
1959- } ) ;
1960- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
1961- let headers = HashMap :: new ( ) ;
1962-
1963- let payload = json ! ( {
1964- "argumentsMap" : {
1965- "id" : "123"
1966- } ,
1967- "request" : {
1968- "headers" : {
1969- "x-datadog-trace-id" : "7777" ,
1970- "x-datadog-parent-id" : "8888" ,
1971- "x-datadog-sampling-priority" : "1"
1972- }
1973- }
1974- } ) ;
1975-
1976- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
1977-
1978- assert ! (
1979- result. is_some( ) ,
1980- "Should extract from event.request.headers"
1981- ) ;
1982- let context = result. unwrap ( ) ;
1983- assert_eq ! ( context. trace_id, 7777 ) ;
1984- assert_eq ! ( context. span_id, 8888 ) ;
1985- assert_eq ! ( context. sampling. unwrap( ) . priority, Some ( 1 ) ) ;
1986- }
1987-
19881889 #[ test]
19891890 fn test_extract_span_context_no_request_headers ( ) {
19901891 let config = Arc :: new ( config:: Config {
@@ -2013,132 +1914,4 @@ mod tests {
20131914 "Should return None when no trace context found"
20141915 ) ;
20151916 }
2016-
2017- #[ test]
2018- fn test_extract_span_context_empty_request_headers ( ) {
2019- let config = Arc :: new ( config:: Config {
2020- trace_propagation_style_extract : vec ! [
2021- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
2022- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
2023- ] ,
2024- ..config:: Config :: default ( )
2025- } ) ;
2026- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
2027- let headers = HashMap :: new ( ) ;
2028-
2029- let payload = json ! ( {
2030- "request" : {
2031- "headers" : { }
2032- }
2033- } ) ;
2034-
2035- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
2036-
2037- assert ! (
2038- result. is_none( ) ,
2039- "Should return None when request.headers is empty"
2040- ) ;
2041- }
2042-
2043- #[ test]
2044- fn test_extract_span_context_invalid_request_headers ( ) {
2045- let config = Arc :: new ( config:: Config {
2046- trace_propagation_style_extract : vec ! [
2047- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
2048- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
2049- ] ,
2050- ..config:: Config :: default ( )
2051- } ) ;
2052- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
2053- let headers = HashMap :: new ( ) ;
2054-
2055- let payload = json ! ( {
2056- "request" : {
2057- "headers" : {
2058- "x-datadog-trace-id" : "not-a-number" ,
2059- "x-datadog-parent-id" : "also-not-a-number"
2060- }
2061- }
2062- } ) ;
2063-
2064- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
2065-
2066- assert ! (
2067- result. is_none( ) ,
2068- "Should return None when headers are invalid"
2069- ) ;
2070- }
2071-
2072- #[ test]
2073- fn test_extract_span_context_appsync_real_world_example ( ) {
2074- let config = Arc :: new ( config:: Config {
2075- trace_propagation_style_extract : vec ! [
2076- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
2077- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
2078- ] ,
2079- ..config:: Config :: default ( )
2080- } ) ;
2081- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
2082- let headers = HashMap :: new ( ) ;
2083-
2084- let payload = json ! ( {
2085- "arguments" : {
2086- "userId" : "12345"
2087- } ,
2088- "identity" : {
2089- "sub" : "user-sub-id"
2090- } ,
2091- "request" : {
2092- "headers" : {
2093- "x-datadog-trace-id" : "123456789012345" ,
2094- "x-datadog-parent-id" : "98765432109876" ,
2095- "x-datadog-sampling-priority" : "2" ,
2096- "x-datadog-origin" : "rum" ,
2097- "x-datadog-tags" : "_dd.p.dm=-0" ,
2098- "user-agent" : "Mozilla/5.0" ,
2099- "content-type" : "application/json"
2100- }
2101- } ,
2102- "info" : {
2103- "fieldName" : "getUser" ,
2104- "parentTypeName" : "Query"
2105- }
2106- } ) ;
2107-
2108- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
2109-
2110- assert ! (
2111- result. is_some( ) ,
2112- "Should extract from real-world AppSync event"
2113- ) ;
2114- let context = result. unwrap ( ) ;
2115- assert_eq ! ( context. trace_id, 123_456_789_012_345 ) ;
2116- assert_eq ! ( context. span_id, 98_765_432_109_876 ) ;
2117- assert_eq ! ( context. sampling. unwrap( ) . priority, Some ( 2 ) ) ;
2118- assert_eq ! ( context. origin, Some ( "rum" . to_string( ) ) ) ;
2119- }
2120-
2121- #[ test]
2122- fn test_extract_span_context_request_not_an_object ( ) {
2123- let config = Arc :: new ( config:: Config {
2124- trace_propagation_style_extract : vec ! [
2125- config:: trace_propagation_style:: TracePropagationStyle :: Datadog ,
2126- config:: trace_propagation_style:: TracePropagationStyle :: TraceContext ,
2127- ] ,
2128- ..config:: Config :: default ( )
2129- } ) ;
2130- let propagator = Arc :: new ( DatadogCompositePropagator :: new ( Arc :: clone ( & config) ) ) ;
2131- let headers = HashMap :: new ( ) ;
2132-
2133- let payload = json ! ( {
2134- "request" : "invalid-not-an-object"
2135- } ) ;
2136-
2137- let result = Processor :: extract_span_context ( & headers, & payload, propagator) ;
2138-
2139- assert ! (
2140- result. is_none( ) ,
2141- "Should handle gracefully when request is not an object"
2142- ) ;
2143- }
21441917}
0 commit comments