1
1
// Copyright The OpenTelemetry Authors
2
2
// SPDX-License-Identifier: Apache-2.0
3
3
4
+ #if NETFRAMEWORK
5
+ using System . Net ;
6
+ #endif
4
7
using System . Diagnostics ;
5
8
using OpenTelemetry . Context . Propagation ;
6
9
using OpenTelemetry . Extensions . AWS . Trace ;
@@ -26,8 +29,20 @@ public class AWSXRayPropagatorTests
26
29
carrier [ name ] = value ;
27
30
} ;
28
31
32
+ #if NETFRAMEWORK
33
+ private static readonly Action < HttpWebRequest , string , string > HeaderValueSetter = ( request , name , value ) => request . Headers . Add ( name , value ) ;
34
+ #endif
35
+
29
36
private readonly AWSXRayPropagator awsXRayPropagator = new ( ) ;
30
37
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
+
31
46
[ Fact ]
32
47
public void TestInjectTraceHeader ( )
33
48
{
@@ -56,6 +71,49 @@ public void TestInjectTraceHeaderNotSampled()
56
71
Assert . Equal ( "Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=0" , carrier [ AWSXRayTraceHeaderKey ] ) ;
57
72
}
58
73
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
+
59
117
[ Fact ]
60
118
public void TestExtractTraceHeader ( )
61
119
{
0 commit comments