24
24
)
25
25
import opentelemetry .trace as trace_api
26
26
from opentelemetry .trace import (
27
- DEFAULT_TRACE_OPTIONS ,
28
- DEFAULT_TRACE_STATE ,
29
- INVALID_SPAN_CONTEXT ,
30
- SpanContext ,
31
- TraceFlags ,
32
- set_span_in_context ,
27
+ DEFAULT_TRACE_OPTIONS ,
28
+ DEFAULT_TRACE_STATE ,
29
+ INVALID_SPAN_CONTEXT ,
30
+ SpanContext ,
31
+ TraceFlags ,
32
+ set_span_in_context ,
33
33
TraceState
34
34
)
35
- from opentelemetry .trace .propagation .textmap import (
36
- Getter ,
37
- Setter ,
38
- TextMapPropagatorT ,
39
- )
40
35
from opentelemetry .trace .span import INVALID_TRACE_ID
41
36
42
37
TRACE_ID_BASE16 = "8a3c60f7d188f8fa79d48a391a778fa6"
@@ -71,17 +66,37 @@ def build_test_context(
71
66
)
72
67
73
68
def build_dict_with_xray_trace_header (
74
- trace_id = f"{ AwsXRayFormat .TRACE_ID_VERSION } { AwsXRayFormat .TRACE_ID_DELIMITER } { TRACE_ID_BASE16 [:AwsXRayFormat .TRACE_ID_FIRST_PART_LENGTH ]} { AwsXRayFormat .TRACE_ID_DELIMITER } { TRACE_ID_BASE16 [AwsXRayFormat .TRACE_ID_FIRST_PART_LENGTH :]} " ,
69
+ trace_id = "{}{}{}{}{}" .format (
70
+ AwsXRayFormat .TRACE_ID_VERSION ,
71
+ AwsXRayFormat .TRACE_ID_DELIMITER ,
72
+ TRACE_ID_BASE16 [:AwsXRayFormat .TRACE_ID_FIRST_PART_LENGTH ],
73
+ AwsXRayFormat .TRACE_ID_DELIMITER ,
74
+ TRACE_ID_BASE16 [AwsXRayFormat .TRACE_ID_FIRST_PART_LENGTH :],
75
+ ),
75
76
span_id = SPAN_ID_BASE16 ,
76
77
sampled = "0" ,
77
78
):
78
79
carrier = CaseInsensitiveDict ()
79
-
80
- carrier [AwsXRayFormat .TRACE_HEADER_KEY ] = (
81
- f"{ AwsXRayFormat .TRACE_ID_KEY } { AwsXRayFormat .KEY_AND_VALUE_DELIMITER } { trace_id } { AwsXRayFormat .KV_PAIR_DELIMITER } "
82
- f"{ AwsXRayFormat .PARENT_ID_KEY } { AwsXRayFormat .KEY_AND_VALUE_DELIMITER } { span_id } { AwsXRayFormat .KV_PAIR_DELIMITER } "
83
- f"{ AwsXRayFormat .SAMPLED_FLAG_KEY } { AwsXRayFormat .KEY_AND_VALUE_DELIMITER } { sampled } "
84
- )
80
+
81
+ carrier [AwsXRayFormat .TRACE_HEADER_KEY ] = '' .join ([
82
+ "{}{}{}{}" .format (
83
+ AwsXRayFormat .TRACE_ID_KEY ,
84
+ AwsXRayFormat .KEY_AND_VALUE_DELIMITER ,
85
+ trace_id ,
86
+ AwsXRayFormat .KV_PAIR_DELIMITER ,
87
+ ),
88
+ "{}{}{}{}" .format (
89
+ AwsXRayFormat .PARENT_ID_KEY ,
90
+ AwsXRayFormat .KEY_AND_VALUE_DELIMITER ,
91
+ span_id ,
92
+ AwsXRayFormat .KV_PAIR_DELIMITER ,
93
+ ),
94
+ "{}{}{}" .format (
95
+ AwsXRayFormat .SAMPLED_FLAG_KEY ,
96
+ AwsXRayFormat .KEY_AND_VALUE_DELIMITER ,
97
+ sampled ,
98
+ )
99
+ ])
85
100
86
101
return carrier
87
102
@@ -93,15 +108,15 @@ def get_extracted_span_context(encompassing_context):
93
108
).get_span_context ()
94
109
95
110
class AwsXRayPropagatorTest (unittest .TestCase ):
96
- carrier_setter : Setter [ TextMapPropagatorT ] = CaseInsensitiveDict .__setitem__
97
- carrier_getter : Getter [ TextMapPropagatorT ] = get_as_list
111
+ carrier_setter = CaseInsensitiveDict .__setitem__
112
+ carrier_getter = get_as_list
98
113
XRAY_PROPAGATOR = AwsXRayFormat ()
99
-
114
+
100
115
# Inject Tests
101
116
102
117
def test_inject_into_non_sampled_context (self ):
103
118
carrier = CaseInsensitiveDict ()
104
-
119
+
105
120
AwsXRayPropagatorTest .XRAY_PROPAGATOR .inject (
106
121
AwsXRayPropagatorTest .carrier_setter ,
107
122
carrier ,
@@ -121,13 +136,13 @@ def test_inject_into_non_sampled_context(self):
121
136
122
137
def test_inject_into_sampled_context (self ):
123
138
carrier = CaseInsensitiveDict ()
124
-
139
+
125
140
AwsXRayPropagatorTest .XRAY_PROPAGATOR .inject (
126
141
AwsXRayPropagatorTest .carrier_setter ,
127
142
carrier ,
128
143
build_test_context (trace_flags = TraceFlags (TraceFlags .SAMPLED ))
129
144
)
130
-
145
+
131
146
self .assertTrue (
132
147
set (
133
148
carrier .items ()
@@ -138,16 +153,16 @@ def test_inject_into_sampled_context(self):
138
153
),
139
154
'Failed to inject into context that was already sampled'
140
155
)
141
-
156
+
142
157
def test_inject_into_context_with_non_default_state (self ):
143
158
carrier = CaseInsensitiveDict ()
144
-
159
+
145
160
AwsXRayPropagatorTest .XRAY_PROPAGATOR .inject (
146
161
AwsXRayPropagatorTest .carrier_setter ,
147
162
carrier ,
148
163
build_test_context (trace_state = TraceState ({"foo" : "bar" }))
149
164
)
150
-
165
+
151
166
# TODO: (NathanielRN) Assert trace state when the propagator supports it
152
167
self .assertTrue (
153
168
set (
@@ -183,7 +198,7 @@ def test_extract_empty_carrier_from_invalid_context(self):
183
198
get_extracted_span_context (actual_context_encompassing_extracted ),
184
199
INVALID_SPAN_CONTEXT
185
200
)
186
-
201
+
187
202
def test_extract_sampled_context (self ):
188
203
actual_context_encompassing_extracted = AwsXRayPropagatorTest .XRAY_PROPAGATOR .extract (
189
204
AwsXRayPropagatorTest .carrier_getter ,
@@ -223,7 +238,7 @@ def test_extract_different_order(self):
223
238
get_extracted_span_context (actual_context_encompassing_extracted ),
224
239
get_extracted_span_context (build_test_context ())
225
240
)
226
-
241
+
227
242
def test_extract_with_additional_fields (self ):
228
243
default_xray_trace_header_dict = build_dict_with_xray_trace_header ()
229
244
xray_trace_header_dict_with_extra_fields = CaseInsensitiveDict (
@@ -240,7 +255,7 @@ def test_extract_with_additional_fields(self):
240
255
get_extracted_span_context (actual_context_encompassing_extracted ),
241
256
get_extracted_span_context (build_test_context ())
242
257
)
243
-
258
+
244
259
def test_extract_invalid_xray_trace_header (self ):
245
260
actual_context_encompassing_extracted = AwsXRayPropagatorTest .XRAY_PROPAGATOR .extract (
246
261
AwsXRayPropagatorTest .carrier_getter ,
@@ -253,20 +268,20 @@ def test_extract_invalid_xray_trace_header(self):
253
268
get_extracted_span_context (actual_context_encompassing_extracted ),
254
269
INVALID_SPAN_CONTEXT
255
270
)
256
-
271
+
257
272
def test_extract_invalid_trace_id (self ):
258
273
actual_context_encompassing_extracted = AwsXRayPropagatorTest .XRAY_PROPAGATOR .extract (
259
274
AwsXRayPropagatorTest .carrier_getter ,
260
275
build_dict_with_xray_trace_header (
261
- trace_id = "abcdefghijklmnopqrstuvwxyzabcdef "
276
+ trace_id = "abcdefghijklmnopqrstuvwxyz123456 "
262
277
),
263
278
)
264
279
265
280
self .assertEqual (
266
281
get_extracted_span_context (actual_context_encompassing_extracted ),
267
282
INVALID_SPAN_CONTEXT
268
283
)
269
-
284
+
270
285
def test_extract_invalid_trace_id_size (self ):
271
286
actual_context_encompassing_extracted = AwsXRayPropagatorTest .XRAY_PROPAGATOR .extract (
272
287
AwsXRayPropagatorTest .carrier_getter ,
@@ -292,7 +307,7 @@ def test_extract_invalid_span_id(self):
292
307
get_extracted_span_context (actual_context_encompassing_extracted ),
293
308
INVALID_SPAN_CONTEXT
294
309
)
295
-
310
+
296
311
def test_extract_invalid_span_id_size (self ):
297
312
actual_context_encompassing_extracted = AwsXRayPropagatorTest .XRAY_PROPAGATOR .extract (
298
313
AwsXRayPropagatorTest .carrier_getter ,
@@ -305,7 +320,7 @@ def test_extract_invalid_span_id_size(self):
305
320
get_extracted_span_context (actual_context_encompassing_extracted ),
306
321
INVALID_SPAN_CONTEXT
307
322
)
308
-
323
+
309
324
def test_extract_invalid_empty_sampled_flag (self ):
310
325
actual_context_encompassing_extracted = AwsXRayPropagatorTest .XRAY_PROPAGATOR .extract (
311
326
AwsXRayPropagatorTest .carrier_getter ,
@@ -318,7 +333,7 @@ def test_extract_invalid_empty_sampled_flag(self):
318
333
get_extracted_span_context (actual_context_encompassing_extracted ),
319
334
INVALID_SPAN_CONTEXT
320
335
)
321
-
336
+
322
337
def test_extract_invalid_sampled_flag_size (self ):
323
338
actual_context_encompassing_extracted = AwsXRayPropagatorTest .XRAY_PROPAGATOR .extract (
324
339
AwsXRayPropagatorTest .carrier_getter ,
@@ -331,7 +346,7 @@ def test_extract_invalid_sampled_flag_size(self):
331
346
get_extracted_span_context (actual_context_encompassing_extracted ),
332
347
INVALID_SPAN_CONTEXT
333
348
)
334
-
349
+
335
350
def test_extract_invalid_non_numeric_sampled_flag (self ):
336
351
actual_context_encompassing_extracted = AwsXRayPropagatorTest .XRAY_PROPAGATOR .extract (
337
352
AwsXRayPropagatorTest .carrier_getter ,
0 commit comments