@@ -35,85 +35,97 @@ def setUpClass(cls):
35
35
cls .serialized_span_id = b3_format .format_span_id (
36
36
trace .generate_span_id ()
37
37
)
38
- cls .serialized_parent_span_id = b3_format .format_span_id (
38
+ cls .serialized_parent_id = b3_format .format_span_id (
39
39
trace .generate_span_id ()
40
40
)
41
41
42
+ def get_child_parent_new_carrier (self , old_carrier ):
43
+
44
+ parent_context = FORMAT .extract (get_as_list , old_carrier )
45
+
46
+ parent = trace .Span ("parent" , parent_context )
47
+ child = trace .Span (
48
+ "child" ,
49
+ trace_api .SpanContext (
50
+ parent_context .trace_id ,
51
+ trace .generate_span_id (),
52
+ trace_options = parent_context .trace_options ,
53
+ trace_state = parent_context .trace_state ,
54
+ ),
55
+ parent = parent
56
+ )
57
+
58
+ new_carrier = {}
59
+ FORMAT .inject (child , dict .__setitem__ , new_carrier )
60
+
61
+ return child , parent , new_carrier
62
+
42
63
def test_extract_multi_header (self ):
43
64
"""Test the extraction of B3 headers."""
44
- carrier = {
45
- FORMAT .TRACE_ID_KEY : self .serialized_trace_id ,
46
- FORMAT .SPAN_ID_KEY : self .serialized_span_id ,
47
- FORMAT .PARENT_SPAN_ID_KEY : self .serialized_parent_span_id ,
48
- FORMAT .SAMPLED_KEY : "1" ,
49
- }
50
- parent_span = trace .Span (
51
- "parent" , FORMAT .extract (get_as_list , carrier )
65
+ child , parent , new_carrier = self .get_child_parent_new_carrier (
66
+ {
67
+ FORMAT .TRACE_ID_KEY : self .serialized_trace_id ,
68
+ FORMAT .SPAN_ID_KEY : self .serialized_span_id ,
69
+ FORMAT .PARENT_SPAN_ID_KEY : self .serialized_parent_id ,
70
+ FORMAT .SAMPLED_KEY : "1" ,
71
+ }
52
72
)
53
- child_span = trace .Tracer ().start_span ("child" , parent = parent_span )
54
- new_carrier = {}
55
- FORMAT .inject (child_span , dict .__setitem__ , new_carrier )
73
+
56
74
self .assertEqual (
57
75
new_carrier [FORMAT .TRACE_ID_KEY ],
58
- b3_format .format_trace_id (child_span .context .trace_id ),
76
+ b3_format .format_trace_id (child .context .trace_id ),
59
77
)
60
78
self .assertEqual (
61
79
new_carrier [FORMAT .SPAN_ID_KEY ],
62
- b3_format .format_span_id (child_span .context .span_id ),
80
+ b3_format .format_span_id (child .context .span_id ),
63
81
)
64
82
self .assertEqual (
65
83
new_carrier [FORMAT .PARENT_SPAN_ID_KEY ],
66
- b3_format .format_span_id (parent_span .context .span_id ),
84
+ b3_format .format_span_id (parent .context .span_id ),
67
85
)
68
86
self .assertEqual (new_carrier [FORMAT .SAMPLED_KEY ], "1" )
69
87
70
88
def test_extract_single_header (self ):
71
89
"""Test the extraction from a single b3 header."""
72
- carrier = {
73
- FORMAT .SINGLE_HEADER_KEY : "{}-{}" .format (
74
- self .serialized_trace_id , self .serialized_span_id
75
- )
76
- }
77
- parent_span = trace .Span (
78
- "parent" , FORMAT .extract (get_as_list , carrier )
90
+ child , parent , new_carrier = self .get_child_parent_new_carrier (
91
+ {
92
+ FORMAT .SINGLE_HEADER_KEY : "{}-{}" .format (
93
+ self .serialized_trace_id , self .serialized_span_id
94
+ )
95
+ }
79
96
)
80
- child_span = trace .Tracer ().start_span ("child" , parent = parent_span )
81
- new_carrier = {}
82
- FORMAT .inject (child_span , dict .__setitem__ , new_carrier )
97
+
83
98
self .assertEqual (
84
99
new_carrier [FORMAT .TRACE_ID_KEY ],
85
- b3_format .format_trace_id (child_span .context .trace_id ),
100
+ b3_format .format_trace_id (child .context .trace_id ),
86
101
)
87
102
self .assertEqual (
88
103
new_carrier [FORMAT .SPAN_ID_KEY ],
89
- b3_format .format_span_id (child_span .context .span_id ),
104
+ b3_format .format_span_id (child .context .span_id ),
90
105
)
91
106
self .assertEqual (new_carrier [FORMAT .SAMPLED_KEY ], "1" )
92
107
93
- carrier = {
94
- FORMAT .SINGLE_HEADER_KEY : "{}-{}-1-{}" .format (
95
- self .serialized_trace_id ,
96
- self .serialized_span_id ,
97
- self .serialized_parent_span_id ,
98
- )
99
- }
100
- parent_span = trace .Span (
101
- "parent" , FORMAT .extract (get_as_list , carrier )
108
+ child , parent , new_carrier = self .get_child_parent_new_carrier (
109
+ {
110
+ FORMAT .SINGLE_HEADER_KEY : "{}-{}-1-{}" .format (
111
+ self .serialized_trace_id ,
112
+ self .serialized_span_id ,
113
+ self .serialized_parent_id ,
114
+ )
115
+ }
102
116
)
103
- child_span = trace .Tracer ().start_span ("child" , parent = parent_span )
104
- new_carrier = {}
105
- FORMAT .inject (child_span , dict .__setitem__ , new_carrier )
117
+
106
118
self .assertEqual (
107
119
new_carrier [FORMAT .TRACE_ID_KEY ],
108
- b3_format .format_trace_id (child_span .context .trace_id ),
120
+ b3_format .format_trace_id (child .context .trace_id ),
109
121
)
110
122
self .assertEqual (
111
123
new_carrier [FORMAT .SPAN_ID_KEY ],
112
- b3_format .format_span_id (child_span .context .span_id ),
124
+ b3_format .format_span_id (child .context .span_id ),
113
125
)
114
126
self .assertEqual (
115
127
new_carrier [FORMAT .PARENT_SPAN_ID_KEY ],
116
- b3_format .format_span_id (parent_span .context .span_id ),
128
+ b3_format .format_span_id (parent .context .span_id ),
117
129
)
118
130
self .assertEqual (new_carrier [FORMAT .SAMPLED_KEY ], "1" )
119
131
@@ -122,100 +134,84 @@ def test_extract_header_precedence(self):
122
134
headers.
123
135
"""
124
136
single_header_trace_id = self .serialized_trace_id [:- 3 ] + "123"
125
- carrier = {
126
- FORMAT . SINGLE_HEADER_KEY : "{}-{}" . format (
127
- single_header_trace_id , self . serialized_span_id
128
- ),
129
- FORMAT . TRACE_ID_KEY : self .serialized_trace_id ,
130
- FORMAT . SPAN_ID_KEY : self . serialized_span_id ,
131
- FORMAT .SAMPLED_KEY : "1" ,
132
- }
133
- parent_span = trace . Span (
134
- "parent" , FORMAT . extract ( get_as_list , carrier )
137
+
138
+ child , parent , new_carrier = self . get_child_parent_new_carrier (
139
+ {
140
+ FORMAT . SINGLE_HEADER_KEY : "{}-{}" . format (
141
+ single_header_trace_id , self .serialized_span_id
142
+ ) ,
143
+ FORMAT .TRACE_ID_KEY : self . serialized_trace_id ,
144
+ FORMAT . SPAN_ID_KEY : self . serialized_span_id ,
145
+ FORMAT . SAMPLED_KEY : "1" ,
146
+ }
135
147
)
136
- child_span = trace .Tracer ().start_span ("child" , parent = parent_span )
137
- new_carrier = {}
138
- FORMAT .inject (child_span , dict .__setitem__ , new_carrier )
148
+
139
149
self .assertEqual (
140
150
new_carrier [FORMAT .TRACE_ID_KEY ], single_header_trace_id
141
151
)
142
152
143
153
def test_enabled_sampling (self ):
144
154
"""Test b3 sample key variants that turn on sampling."""
145
155
for variant in ["1" , "True" , "true" , "d" ]:
146
- carrier = {
147
- FORMAT .TRACE_ID_KEY : self .serialized_trace_id ,
148
- FORMAT .SPAN_ID_KEY : self .serialized_span_id ,
149
- FORMAT .SAMPLED_KEY : variant ,
150
- }
151
- parent_span = trace .Span (
152
- "parent" , FORMAT .extract (get_as_list , carrier )
156
+ child , parent , new_carrier = self .get_child_parent_new_carrier (
157
+ {
158
+ FORMAT .TRACE_ID_KEY : self .serialized_trace_id ,
159
+ FORMAT .SPAN_ID_KEY : self .serialized_span_id ,
160
+ FORMAT .SAMPLED_KEY : variant ,
161
+ }
153
162
)
154
- child_span = trace .Tracer ().start_span ("child" , parent = parent_span )
155
- new_carrier = {}
156
- FORMAT .inject (child_span , dict .__setitem__ , new_carrier )
163
+
157
164
self .assertEqual (new_carrier [FORMAT .SAMPLED_KEY ], "1" )
158
165
159
166
def test_disabled_sampling (self ):
160
167
"""Test b3 sample key variants that turn off sampling."""
161
168
for variant in ["0" , "False" , "false" , None ]:
162
- carrier = {
163
- FORMAT .TRACE_ID_KEY : self .serialized_trace_id ,
164
- FORMAT .SPAN_ID_KEY : self .serialized_span_id ,
165
- FORMAT .SAMPLED_KEY : variant ,
166
- }
167
- parent_span = trace .Span (
168
- "parent" , FORMAT .extract (get_as_list , carrier )
169
+ child , parent , new_carrier = self .get_child_parent_new_carrier (
170
+ {
171
+ FORMAT .TRACE_ID_KEY : self .serialized_trace_id ,
172
+ FORMAT .SPAN_ID_KEY : self .serialized_span_id ,
173
+ FORMAT .SAMPLED_KEY : variant ,
174
+ }
169
175
)
170
- child_span = trace .Tracer ().start_span ("child" , parent = parent_span )
171
- new_carrier = {}
172
- FORMAT .inject (child_span , dict .__setitem__ , new_carrier )
176
+
173
177
self .assertEqual (new_carrier [FORMAT .SAMPLED_KEY ], "0" )
174
178
175
179
def test_flags (self ):
176
180
"""x-b3-flags set to "1" should result in propagation."""
177
- carrier = {
178
- FORMAT .TRACE_ID_KEY : self .serialized_trace_id ,
179
- FORMAT .SPAN_ID_KEY : self .serialized_span_id ,
180
- FORMAT .FLAGS_KEY : "1" ,
181
- }
182
- parent_span = trace .Span (
183
- "parent" , FORMAT .extract (get_as_list , carrier )
181
+ child , parent , new_carrier = self .get_child_parent_new_carrier (
182
+ {
183
+ FORMAT .TRACE_ID_KEY : self .serialized_trace_id ,
184
+ FORMAT .SPAN_ID_KEY : self .serialized_span_id ,
185
+ FORMAT .FLAGS_KEY : "1" ,
186
+ }
184
187
)
185
- child_span = trace .Tracer ().start_span ("child" , parent = parent_span )
186
- new_carrier = {}
187
- FORMAT .inject (child_span , dict .__setitem__ , new_carrier )
188
+
188
189
self .assertEqual (new_carrier [FORMAT .SAMPLED_KEY ], "1" )
189
190
190
191
def test_flags_and_sampling (self ):
191
192
"""Propagate if b3 flags and sampling are set."""
192
- carrier = {
193
- FORMAT .TRACE_ID_KEY : self .serialized_trace_id ,
194
- FORMAT .SPAN_ID_KEY : self .serialized_span_id ,
195
- FORMAT .FLAGS_KEY : "1" ,
196
- }
197
- parent_span = trace .Span (
198
- "parent" , FORMAT .extract (get_as_list , carrier )
193
+ child , parent , new_carrier = self .get_child_parent_new_carrier (
194
+ {
195
+ FORMAT .TRACE_ID_KEY : self .serialized_trace_id ,
196
+ FORMAT .SPAN_ID_KEY : self .serialized_span_id ,
197
+ FORMAT .FLAGS_KEY : "1" ,
198
+ }
199
199
)
200
- child_span = trace .Tracer ().start_span ("child" , parent = parent_span )
201
- new_carrier = {}
202
- FORMAT .inject (child_span , dict .__setitem__ , new_carrier )
200
+
203
201
self .assertEqual (new_carrier [FORMAT .SAMPLED_KEY ], "1" )
204
202
205
203
def test_64bit_trace_id (self ):
206
204
"""64 bit trace ids should be padded to 128 bit trace ids."""
207
205
trace_id_64_bit = self .serialized_trace_id [:16 ]
208
- carrier = {
209
- FORMAT . TRACE_ID_KEY : trace_id_64_bit ,
210
- FORMAT . SPAN_ID_KEY : self . serialized_span_id ,
211
- FORMAT .FLAGS_KEY : "1" ,
212
- }
213
- parent_span = trace . Span (
214
- "parent" , FORMAT . extract ( get_as_list , carrier )
206
+
207
+ child , parent , new_carrier = self . get_child_parent_new_carrier (
208
+ {
209
+ FORMAT .TRACE_ID_KEY : trace_id_64_bit ,
210
+ FORMAT . SPAN_ID_KEY : self . serialized_span_id ,
211
+ FORMAT . FLAGS_KEY : "1" ,
212
+ }
215
213
)
216
- child_span = trace .Tracer ().start_span ("child" , parent = parent_span )
217
- new_carrier = {}
218
- FORMAT .inject (child_span , dict .__setitem__ , new_carrier )
214
+
219
215
self .assertEqual (
220
216
new_carrier [FORMAT .TRACE_ID_KEY ], "0" * 16 + trace_id_64_bit
221
217
)
0 commit comments