@@ -81,7 +81,13 @@ def error_wsgi_unhandled(environ, start_response):
81
81
82
82
class TestWsgiApplication (WsgiTestBase ):
83
83
def validate_response (
84
- self , response , error = None , span_name = "HTTP GET" , http_method = "GET"
84
+ self ,
85
+ response ,
86
+ error = None ,
87
+ span_name = "HTTP GET" ,
88
+ http_method = "GET" ,
89
+ span_attributes = None ,
90
+ response_headers = None ,
85
91
):
86
92
while True :
87
93
try :
@@ -90,10 +96,12 @@ def validate_response(
90
96
except StopIteration :
91
97
break
92
98
99
+ expected_headers = [("Content-Type" , "text/plain" )]
100
+ if response_headers :
101
+ expected_headers .extend (response_headers )
102
+
93
103
self .assertEqual (self .status , "200 OK" )
94
- self .assertEqual (
95
- self .response_headers , [("Content-Type" , "text/plain" )]
96
- )
104
+ self .assertEqual (self .response_headers , expected_headers )
97
105
if error :
98
106
self .assertIs (self .exc_info [0 ], error )
99
107
self .assertIsInstance (self .exc_info [1 ], error )
@@ -115,6 +123,7 @@ def validate_response(
115
123
"http.status_text" : "OK" ,
116
124
"http.status_code" : 200 ,
117
125
}
126
+ expected_attributes .update (span_attributes or {})
118
127
if http_method is not None :
119
128
expected_attributes ["http.method" ] = http_method
120
129
self .assertEqual (span_list [0 ].attributes , expected_attributes )
@@ -124,6 +133,30 @@ def test_basic_wsgi_call(self):
124
133
response = app (self .environ , self .start_response )
125
134
self .validate_response (response )
126
135
136
+ def test_hooks (self ):
137
+ hook_headers = (
138
+ "hook_attr" ,
139
+ "hello otel" ,
140
+ )
141
+
142
+ def request_hook (span , environ ):
143
+ span .update_name ("name from hook" )
144
+
145
+ def response_hook (span , environ , status_code , response_headers ):
146
+ span .set_attribute ("hook_attr" , "hello world" )
147
+ response_headers .append (hook_headers )
148
+
149
+ app = otel_wsgi .OpenTelemetryMiddleware (
150
+ simple_wsgi , request_hook , response_hook
151
+ )
152
+ response = app (self .environ , self .start_response )
153
+ self .validate_response (
154
+ response ,
155
+ span_name = "name from hook" ,
156
+ span_attributes = {"hook_attr" : "hello world" },
157
+ response_headers = (hook_headers ,),
158
+ )
159
+
127
160
def test_wsgi_not_recording (self ):
128
161
mock_tracer = mock .Mock ()
129
162
mock_span = mock .Mock ()
@@ -177,20 +210,6 @@ def test_wsgi_internal_error(self):
177
210
span_list [0 ].status .status_code , StatusCode .ERROR ,
178
211
)
179
212
180
- def test_override_span_name (self ):
181
- """Test that span_names can be overwritten by our callback function."""
182
- span_name = "Dymaxion"
183
-
184
- def get_predefined_span_name (scope ):
185
- # pylint: disable=unused-argument
186
- return span_name
187
-
188
- app = otel_wsgi .OpenTelemetryMiddleware (
189
- simple_wsgi , name_callback = get_predefined_span_name
190
- )
191
- response = app (self .environ , self .start_response )
192
- self .validate_response (response , span_name = span_name )
193
-
194
213
def test_default_span_name_missing_request_method (self ):
195
214
"""Test that default span_names with missing request method."""
196
215
self .environ .pop ("REQUEST_METHOD" )
0 commit comments