@@ -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 )
@@ -114,6 +122,7 @@ def validate_response(
114
122
"http.url" : "http://127.0.0.1/" ,
115
123
"http.status_code" : 200 ,
116
124
}
125
+ expected_attributes .update (span_attributes or {})
117
126
if http_method is not None :
118
127
expected_attributes ["http.method" ] = http_method
119
128
self .assertEqual (span_list [0 ].attributes , expected_attributes )
@@ -123,6 +132,30 @@ def test_basic_wsgi_call(self):
123
132
response = app (self .environ , self .start_response )
124
133
self .validate_response (response )
125
134
135
+ def test_hooks (self ):
136
+ hook_headers = (
137
+ "hook_attr" ,
138
+ "hello otel" ,
139
+ )
140
+
141
+ def request_hook (span , environ ):
142
+ span .update_name ("name from hook" )
143
+
144
+ def response_hook (span , environ , status_code , response_headers ):
145
+ span .set_attribute ("hook_attr" , "hello world" )
146
+ response_headers .append (hook_headers )
147
+
148
+ app = otel_wsgi .OpenTelemetryMiddleware (
149
+ simple_wsgi , request_hook , response_hook
150
+ )
151
+ response = app (self .environ , self .start_response )
152
+ self .validate_response (
153
+ response ,
154
+ span_name = "name from hook" ,
155
+ span_attributes = {"hook_attr" : "hello world" },
156
+ response_headers = (hook_headers ,),
157
+ )
158
+
126
159
def test_wsgi_not_recording (self ):
127
160
mock_tracer = mock .Mock ()
128
161
mock_span = mock .Mock ()
@@ -176,20 +209,6 @@ def test_wsgi_internal_error(self):
176
209
span_list [0 ].status .status_code , StatusCode .ERROR ,
177
210
)
178
211
179
- def test_override_span_name (self ):
180
- """Test that span_names can be overwritten by our callback function."""
181
- span_name = "Dymaxion"
182
-
183
- def get_predefined_span_name (scope ):
184
- # pylint: disable=unused-argument
185
- return span_name
186
-
187
- app = otel_wsgi .OpenTelemetryMiddleware (
188
- simple_wsgi , name_callback = get_predefined_span_name
189
- )
190
- response = app (self .environ , self .start_response )
191
- self .validate_response (response , span_name = span_name )
192
-
193
212
def test_default_span_name_missing_request_method (self ):
194
213
"""Test that default span_names with missing request method."""
195
214
self .environ .pop ("REQUEST_METHOD" )
0 commit comments