@@ -74,7 +74,9 @@ def error_wsgi(environ, start_response):
7474
7575
7676class TestWsgiApplication (WsgiTestBase ):
77- def validate_response (self , response , error = None ):
77+ def validate_response (
78+ self , response , error = None , span_name = "HTTP GET" , http_method = "GET"
79+ ):
7880 while True :
7981 try :
8082 value = next (response )
@@ -95,23 +97,22 @@ def validate_response(self, response, error=None):
9597
9698 span_list = self .memory_exporter .get_finished_spans ()
9799 self .assertEqual (len (span_list ), 1 )
98- self .assertEqual (span_list [0 ].name , "/" )
100+ self .assertEqual (span_list [0 ].name , span_name )
99101 self .assertEqual (span_list [0 ].kind , trace_api .SpanKind .SERVER )
100- self .assertEqual (
101- span_list [0 ].attributes ,
102- {
103- "component" : "http" ,
104- "http.method" : "GET" ,
105- "http.server_name" : "127.0.0.1" ,
106- "http.scheme" : "http" ,
107- "host.port" : 80 ,
108- "http.host" : "127.0.0.1" ,
109- "http.flavor" : "1.0" ,
110- "http.url" : "http://127.0.0.1/" ,
111- "http.status_text" : "OK" ,
112- "http.status_code" : 200 ,
113- },
114- )
102+ expected_attributes = {
103+ "component" : "http" ,
104+ "http.server_name" : "127.0.0.1" ,
105+ "http.scheme" : "http" ,
106+ "host.port" : 80 ,
107+ "http.host" : "127.0.0.1" ,
108+ "http.flavor" : "1.0" ,
109+ "http.url" : "http://127.0.0.1/" ,
110+ "http.status_text" : "OK" ,
111+ "http.status_code" : 200 ,
112+ }
113+ if http_method is not None :
114+ expected_attributes ["http.method" ] = http_method
115+ self .assertEqual (span_list [0 ].attributes , expected_attributes )
115116
116117 def test_basic_wsgi_call (self ):
117118 app = otel_wsgi .OpenTelemetryMiddleware (simple_wsgi )
@@ -147,6 +148,27 @@ def test_wsgi_exc_info(self):
147148 response = app (self .environ , self .start_response )
148149 self .validate_response (response , error = ValueError )
149150
151+ def test_override_span_name (self ):
152+ """Test that span_names can be overwritten by our callback function."""
153+ span_name = "Dymaxion"
154+
155+ def get_predefined_span_name (scope ):
156+ # pylint: disable=unused-argument
157+ return span_name
158+
159+ app = otel_wsgi .OpenTelemetryMiddleware (
160+ simple_wsgi , name_callback = get_predefined_span_name
161+ )
162+ response = app (self .environ , self .start_response )
163+ self .validate_response (response , span_name = span_name )
164+
165+ def test_default_span_name_missing_request_method (self ):
166+ """Test that default span_names with missing request method."""
167+ self .environ .pop ("REQUEST_METHOD" )
168+ app = otel_wsgi .OpenTelemetryMiddleware (simple_wsgi )
169+ response = app (self .environ , self .start_response )
170+ self .validate_response (response , span_name = "HTTP" , http_method = None )
171+
150172
151173class TestWsgiAttributes (unittest .TestCase ):
152174 def setUp (self ):
0 commit comments