1616
1717import opentelemetry .trace as trace
1818from opentelemetry .context import get_current
19+ from opentelemetry .context .context import Context
1920from opentelemetry .propagators .cloud_trace_propagator import (
2021 _TRACE_CONTEXT_HEADER_NAME ,
2122 CloudTraceFormatPropagator ,
@@ -43,7 +44,13 @@ def _extract(self, header_value):
4344 new_context = self .propagator .extract (
4445 carrier = header , getter = default_getter
4546 )
46- return trace .get_current_span (new_context ).get_span_context ()
47+ return new_context
48+
49+ def _extract_span_context (self , header_value ):
50+ """Test helper"""
51+ return trace .get_current_span (
52+ self ._extract (header_value )
53+ ).get_span_context ()
4754
4855 def _inject (self , span = None ):
4956 """Test helper"""
@@ -54,27 +61,30 @@ def _inject(self, span=None):
5461 self .propagator .inject (output , context = ctx )
5562 return output .get (_TRACE_CONTEXT_HEADER_NAME )
5663
57- def test_no_context_header (self ):
58- header = {}
59- new_context = self .propagator .extract (
60- carrier = header , getter = default_getter
61- )
64+ def _assert_failed_to_extract (self , new_context : Context ):
65+ self .assertEqual (new_context , Context ())
6266 self .assertEqual (
6367 trace .get_current_span (new_context ).get_span_context (),
6468 trace .INVALID_SPAN .get_span_context (),
6569 )
6670
71+ def test_no_context_header (self ):
72+ headers = {}
73+ new_context = self .propagator .extract (
74+ carrier = headers , getter = default_getter
75+ )
76+ self ._assert_failed_to_extract (new_context )
77+
6778 def test_empty_context_header (self ):
6879 header = ""
69- self .assertEqual (
70- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
71- )
80+ new_context = self ._extract (header )
81+ self ._assert_failed_to_extract (new_context )
7282
7383 def test_valid_header (self ):
7484 header = "{}/{};o=1" .format (
7585 format_trace_id (self .valid_trace_id ), self .valid_span_id
7686 )
77- new_span_context = self ._extract (header )
87+ new_span_context = self ._extract_span_context (header )
7888 self .assertEqual (new_span_context .trace_id , self .valid_trace_id )
7989 self .assertEqual (new_span_context .span_id , self .valid_span_id )
8090 self .assertEqual (new_span_context .trace_flags , TraceFlags (1 ))
@@ -83,7 +93,7 @@ def test_valid_header(self):
8393 header = "{}/{};o=10" .format (
8494 format_trace_id (self .valid_trace_id ), self .valid_span_id
8595 )
86- new_span_context = self ._extract (header )
96+ new_span_context = self ._extract_span_context (header )
8797 self .assertEqual (new_span_context .trace_id , self .valid_trace_id )
8898 self .assertEqual (new_span_context .span_id , self .valid_span_id )
8999 self .assertEqual (new_span_context .trace_flags , TraceFlags (10 ))
@@ -92,14 +102,14 @@ def test_valid_header(self):
92102 header = "{}/{};o=0" .format (
93103 format_trace_id (self .valid_trace_id ), self .valid_span_id
94104 )
95- new_span_context = self ._extract (header )
105+ new_span_context = self ._extract_span_context (header )
96106 self .assertEqual (new_span_context .trace_id , self .valid_trace_id )
97107 self .assertEqual (new_span_context .span_id , self .valid_span_id )
98108 self .assertEqual (new_span_context .trace_flags , TraceFlags (0 ))
99109 self .assertTrue (new_span_context .is_remote )
100110
101111 header = "{}/{};o=0" .format (format_trace_id (self .valid_trace_id ), 345 )
102- new_span_context = self ._extract (header )
112+ new_span_context = self ._extract_span_context (header )
103113 self .assertEqual (new_span_context .trace_id , self .valid_trace_id )
104114 self .assertEqual (new_span_context .span_id , 345 )
105115 self .assertEqual (new_span_context .trace_flags , TraceFlags (0 ))
@@ -129,106 +139,73 @@ def test_mixed_case_header_key(self):
129139
130140 def test_invalid_header_format (self ):
131141 header = "invalid_header"
132- self .assertEqual (
133- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
134- )
142+ self ._assert_failed_to_extract (self ._extract (header ))
135143
136144 header = "{}/{};o=" .format (
137145 format_trace_id (self .valid_trace_id ), self .valid_span_id
138146 )
139- self .assertEqual (
140- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
141- )
147+ self ._assert_failed_to_extract (self ._extract (header ))
142148
143149 header = "extra_chars/{}/{};o=1" .format (
144150 format_trace_id (self .valid_trace_id ), self .valid_span_id
145151 )
146- self .assertEqual (
147- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
148- )
152+ self ._assert_failed_to_extract (self ._extract (header ))
149153
150154 header = "{}/{}extra_chars;o=1" .format (
151155 format_trace_id (self .valid_trace_id ), self .valid_span_id
152156 )
153- self .assertEqual (
154- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
155- )
157+ self ._assert_failed_to_extract (self ._extract (header ))
156158
157159 header = "{}/{};o=1extra_chars" .format (
158160 format_trace_id (self .valid_trace_id ), self .valid_span_id
159161 )
160- self .assertEqual (
161- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
162- )
162+ self ._assert_failed_to_extract (self ._extract (header ))
163163
164164 header = "{}/;o=1" .format (format_trace_id (self .valid_trace_id ))
165- self .assertEqual (
166- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
167- )
165+ self ._assert_failed_to_extract (self ._extract (header ))
168166
169167 header = "/{};o=1" .format (self .valid_span_id )
170- self .assertEqual (
171- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
172- )
168+ self ._assert_failed_to_extract (self ._extract (header ))
173169
174170 header = "{}/{};o={}" .format ("123" , "34" , "4" )
175- self .assertEqual (
176- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
177- )
171+ self ._assert_failed_to_extract (self ._extract (header ))
178172
179173 def test_invalid_trace_id (self ):
180174 header = "{}/{};o={}" .format (INVALID_TRACE_ID , self .valid_span_id , 1 )
181- self .assertEqual (
182- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
183- )
175+ self ._assert_failed_to_extract (self ._extract (header ))
176+
184177 header = "{}/{};o={}" .format ("0" * 32 , self .valid_span_id , 1 )
185- self .assertEqual (
186- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
187- )
178+ self ._assert_failed_to_extract (self ._extract (header ))
188179
189180 header = "0/{};o={}" .format (self .valid_span_id , 1 )
190- self .assertEqual (
191- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
192- )
181+ self ._assert_failed_to_extract (self ._extract (header ))
193182
194183 header = "234/{};o={}" .format (self .valid_span_id , 1 )
195- self .assertEqual (
196- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
197- )
184+ self ._assert_failed_to_extract (self ._extract (header ))
198185
199186 header = "{}/{};o={}" .format (self .too_long_id , self .valid_span_id , 1 )
200- self .assertEqual (
201- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
202- )
187+ self ._assert_failed_to_extract (self ._extract (header ))
203188
204189 def test_invalid_span_id (self ):
205190 header = "{}/{};o={}" .format (
206191 format_trace_id (self .valid_trace_id ), INVALID_SPAN_ID , 1
207192 )
208- self .assertEqual (
209- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
210- )
193+ self ._assert_failed_to_extract (self ._extract (header ))
211194
212195 header = "{}/{};o={}" .format (
213196 format_trace_id (self .valid_trace_id ), "0" * 16 , 1
214197 )
215- self .assertEqual (
216- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
217- )
198+ self ._assert_failed_to_extract (self ._extract (header ))
218199
219200 header = "{}/{};o={}" .format (
220201 format_trace_id (self .valid_trace_id ), "0" , 1
221202 )
222- self .assertEqual (
223- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
224- )
203+ self ._assert_failed_to_extract (self ._extract (header ))
225204
226205 header = "{}/{};o={}" .format (
227206 format_trace_id (self .valid_trace_id ), self .too_long_id , 1
228207 )
229- self .assertEqual (
230- self ._extract (header ), trace .INVALID_SPAN .get_span_context ()
231- )
208+ self ._assert_failed_to_extract (self ._extract (header ))
232209
233210 def test_inject_with_no_context (self ):
234211 output = self ._inject ()
0 commit comments