2020
2121
2222class TestWrappedApplication (TestBase ):
23+
2324 def setUp (self ):
2425 super ().setUp ()
2526
@@ -29,7 +30,12 @@ def setUp(self):
2930 async def _ ():
3031 return {"message" : "hello world" }
3132
32- otel_fastapi .FastAPIInstrumentor ().instrument_app (self .app )
33+ @self .app .get ("/user/{username}" )
34+ async def _ (username : str ):
35+ return {"username" : username }
36+
37+ otel_fastapi .FastAPIInstrumentor ().instrument_app (
38+ self .app , render_path_parameters = True )
3339 self .client = TestClient (self .app )
3440 self .tracer = self .tracer_provider .get_tracer (__name__ )
3541
@@ -40,8 +46,7 @@ def tearDown(self) -> None:
4046
4147 def test_mark_span_internal_in_presence_of_span_from_other_framework (self ):
4248 with self .tracer .start_as_current_span (
43- "test" , kind = trace .SpanKind .SERVER
44- ) as parent_span :
49+ "test" , kind = trace .SpanKind .SERVER ) as parent_span :
4550 resp = self .client .get ("/foobar" )
4651 self .assertEqual (200 , resp .status_code )
4752
@@ -54,36 +59,30 @@ def test_mark_span_internal_in_presence_of_span_from_other_framework(self):
5459 self .assertEqual (trace .SpanKind .INTERNAL , span_list [1 ].kind )
5560 # main INTERNAL span - child of test
5661 self .assertEqual (trace .SpanKind .INTERNAL , span_list [2 ].kind )
57- self .assertEqual (
58- parent_span .context .span_id , span_list [2 ].parent .span_id
59- )
62+ self .assertEqual (parent_span .context .span_id ,
63+ span_list [2 ].parent .span_id )
6064 # SERVER "test"
6165 self .assertEqual (trace .SpanKind .SERVER , span_list [3 ].kind )
62- self .assertEqual (
63- parent_span .context .span_id , span_list [3 ].context .span_id
64- )
65-
66-
67- class TestFastAPIRenderPathParameters (TestWrappedApplication ):
68-
69- def setUp (self ):
70- super ().setUp ()
71- # Create a FastAPI app with a path parameter
72- @self .app .get ("/user/{username}" )
73- async def read_user (username : str ):
74- return {"username" : username }
75-
76- # Instrument the app
77- otel_fastapi .FastAPIInstrumentor ().instrument_app (
78- self .app , render_path_parameters = True )
66+ self .assertEqual (parent_span .context .span_id ,
67+ span_list [3 ].context .span_id )
7968
8069 def test_render_path_parameters (self ):
8170 """Test that path parameters are rendered correctly in spans."""
8271
72+ # Make sure non-path parameters are not affected
73+ resp = self .client .get ("/foobar" )
74+ self .assertEqual (resp .status_code , 200 )
75+ spans = self .memory_exporter .get_finished_spans ()
76+ expected_span_name = "GET /foobar"
77+ self .assertEqual (
78+ spans [0 ].name , 'GET /foobar' ,
79+ f"Expected span name to be '{ expected_span_name } ', but got '{ spans [0 ].name } '"
80+ )
81+
8382 # Make a request to the endpoint with a path parameter
84- response = self .client .get ("/user/johndoe" )
85- self .assertEqual (response .status_code , 200 )
86- self .assertEqual (response .json (), {"username" : "johndoe" })
83+ resp = self .client .get ("/user/johndoe" )
84+ self .assertEqual (resp .status_code , 200 )
85+ self .assertEqual (resp .json (), {"username" : "johndoe" })
8786
8887 # Retrieve the spans generated
8988 spans = self .memory_exporter .get_finished_spans ()
@@ -103,7 +102,7 @@ def test_render_path_parameters(self):
103102 self .assertIn ("http.path_parameters.username" , server_span .attributes )
104103 self .assertEqual (
105104 server_span .attributes ["http.path_parameters.username" ], "johndoe" )
106-
105+
107106 # Retrieve the spans generated
108107 spans = self .memory_exporter .get_finished_spans ()
109108
@@ -112,9 +111,7 @@ def test_render_path_parameters(self):
112111
113112 # Assert that the span name is as expected
114113 expected_span_name = "GET /user/johndoe" # Adjust this based on your implementation
115- self .assertEqual (spans [0 ].name , expected_span_name , f"Expected span name to be '{ expected_span_name } ', but got '{ spans [0 ].name } '" )
116-
117- def tearDown (self ):
118- super ().tearDown ()
119- with self .disable_logging ():
120- otel_fastapi .FastAPIInstrumentor ().uninstrument_app (self .app )
114+ self .assertEqual (
115+ spans [0 ].name , expected_span_name ,
116+ f"Expected span name to be '{ expected_span_name } ', but got '{ spans [0 ].name } '"
117+ )
0 commit comments