11// Copyright The OpenTelemetry Authors
22// SPDX-License-Identifier: Apache-2.0
33
4+ #if NETFRAMEWORK
5+ using System . Net ;
6+ #endif
47using System . Diagnostics ;
58using OpenTelemetry . Context . Propagation ;
69using OpenTelemetry . Extensions . AWS . Trace ;
@@ -26,8 +29,20 @@ public class AWSXRayPropagatorTests
2629 carrier [ name ] = value ;
2730 } ;
2831
32+ #if NETFRAMEWORK
33+ private static readonly Action < HttpWebRequest , string , string > HeaderValueSetter = ( request , name , value ) => request . Headers . Add ( name , value ) ;
34+ #endif
35+
2936 private readonly AWSXRayPropagator awsXRayPropagator = new ( ) ;
3037
38+ #if ! NETFRAMEWORK
39+ private static Action < HttpRequestMessage , string , string > HeaderValueSetter => ( request , name , value ) =>
40+ {
41+ request . Headers . Remove ( name ) ;
42+ request . Headers . Add ( name , value ) ;
43+ } ;
44+ #endif
45+
3146 [ Fact ]
3247 public void TestInjectTraceHeader ( )
3348 {
@@ -56,6 +71,49 @@ public void TestInjectTraceHeaderNotSampled()
5671 Assert . Equal ( "Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=0" , carrier [ AWSXRayTraceHeaderKey ] ) ;
5772 }
5873
74+ [ Fact ]
75+ public void TestInjectTraceHeaderAlreadyExists ( )
76+ {
77+ var traceIdHeader = "Root=1-00000-00000000000000000;Parent=123456789;Sampled=0" ;
78+
79+ #if ! NETFRAMEWORK
80+ var carrier = new HttpRequestMessage ( ) ;
81+ #else
82+ var carrier = ( HttpWebRequest ) WebRequest . Create ( new Uri ( "http://www.google.com/" ) ) ;
83+ #endif
84+ carrier . Headers . Add ( AWSXRayTraceHeaderKey , traceIdHeader ) ;
85+ var traceId = ActivityTraceId . CreateFromString ( TraceId . AsSpan ( ) ) ;
86+ var parentId = ActivitySpanId . CreateFromString ( ParentId . AsSpan ( ) ) ;
87+ var traceFlags = ActivityTraceFlags . None ;
88+ var activityContext = new ActivityContext ( traceId , parentId , traceFlags ) ;
89+ this . awsXRayPropagator . Inject ( new PropagationContext ( activityContext , default ) , carrier , HeaderValueSetter ) ;
90+
91+ #if ! NETFRAMEWORK
92+ Assert . True ( carrier . Headers . Contains ( AWSXRayTraceHeaderKey ) ) ;
93+ Assert . Equal ( traceIdHeader , carrier . Headers . GetValues ( AWSXRayTraceHeaderKey ) . FirstOrDefault ( ) ) ;
94+ #else
95+ Assert . Equal ( traceIdHeader , carrier . Headers . Get ( AWSXRayTraceHeaderKey ) ) ;
96+ #endif
97+ }
98+
99+ [ Fact ]
100+ public void TestInjectTraceHeaderAlreadyExistsButNotHttpRequestMessage ( )
101+ {
102+ var traceIdHeader = "Root=1-00000-00000000000000000;Parent=123456789;Sampled=0" ;
103+ var carrier = new Dictionary < string , string > ( )
104+ {
105+ { AWSXRayTraceHeaderKey , traceIdHeader } ,
106+ } ;
107+ var traceId = ActivityTraceId . CreateFromString ( TraceId . AsSpan ( ) ) ;
108+ var parentId = ActivitySpanId . CreateFromString ( ParentId . AsSpan ( ) ) ;
109+ var traceFlags = ActivityTraceFlags . None ;
110+ var activityContext = new ActivityContext ( traceId , parentId , traceFlags ) ;
111+ this . awsXRayPropagator . Inject ( new PropagationContext ( activityContext , default ) , carrier , Setter ) ;
112+
113+ Assert . True ( carrier . ContainsKey ( AWSXRayTraceHeaderKey ) ) ;
114+ Assert . Equal ( "Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=0" , carrier [ AWSXRayTraceHeaderKey ] ) ;
115+ }
116+
59117 [ Fact ]
60118 public void TestExtractTraceHeader ( )
61119 {
0 commit comments