@@ -2,6 +2,8 @@ use std::borrow::Cow;
22use std:: collections:: BTreeMap ;
33use std:: collections:: BTreeSet ;
44use std:: sync:: Arc ;
5+ use std:: sync:: atomic:: AtomicUsize ;
6+ use std:: sync:: atomic:: Ordering ;
57use std:: time:: Duration ;
68
79use anyhow:: Result ;
@@ -143,6 +145,13 @@ impl ServerHandler for McpStatusServer {
143145#[ derive( Clone ) ]
144146struct SlowInventoryServer {
145147 tool_name : Arc < String > ,
148+ calls : SlowInventoryCallCounts ,
149+ }
150+
151+ #[ derive( Clone , Default ) ]
152+ struct SlowInventoryCallCounts {
153+ resources : Arc < AtomicUsize > ,
154+ resource_templates : Arc < AtomicUsize > ,
146155}
147156
148157impl ServerHandler for SlowInventoryServer {
@@ -186,6 +195,7 @@ impl ServerHandler for SlowInventoryServer {
186195 _request : Option < PaginatedRequestParams > ,
187196 _context : RequestContext < rmcp:: service:: RoleServer > ,
188197 ) -> Result < ListResourcesResult , rmcp:: ErrorData > {
198+ self . calls . resources . fetch_add ( 1 , Ordering :: SeqCst ) ;
189199 tokio:: time:: sleep ( Duration :: from_secs ( 2 ) ) . await ;
190200 Ok ( ListResourcesResult {
191201 resources : Vec :: new ( ) ,
@@ -199,6 +209,7 @@ impl ServerHandler for SlowInventoryServer {
199209 _request : Option < PaginatedRequestParams > ,
200210 _context : RequestContext < rmcp:: service:: RoleServer > ,
201211 ) -> Result < ListResourceTemplatesResult , rmcp:: ErrorData > {
212+ self . calls . resource_templates . fetch_add ( 1 , Ordering :: SeqCst ) ;
202213 tokio:: time:: sleep ( Duration :: from_secs ( 2 ) ) . await ;
203214 Ok ( ListResourceTemplatesResult {
204215 resource_templates : Vec :: new ( ) ,
@@ -211,7 +222,8 @@ impl ServerHandler for SlowInventoryServer {
211222#[ tokio:: test]
212223async fn mcp_server_status_list_tools_and_auth_only_skips_slow_inventory_calls ( ) -> Result < ( ) > {
213224 let server = create_mock_responses_server_sequence_unchecked ( Vec :: new ( ) ) . await ;
214- let ( mcp_server_url, mcp_server_handle) = start_slow_inventory_mcp_server ( "lookup" ) . await ?;
225+ let ( mcp_server_url, mcp_server_handle, calls) =
226+ start_slow_inventory_mcp_server ( "lookup" ) . await ?;
215227 let codex_home = TempDir :: new ( ) ?;
216228 write_mock_responses_config_toml (
217229 codex_home. path ( ) ,
@@ -244,7 +256,7 @@ url = "{mcp_server_url}/mcp"
244256 } )
245257 . await ?;
246258 let response = timeout (
247- Duration :: from_millis ( 500 ) ,
259+ DEFAULT_READ_TIMEOUT ,
248260 mcp. read_stream_until_response_message ( RequestId :: Integer ( request_id) ) ,
249261 )
250262 . await ??;
@@ -260,6 +272,8 @@ url = "{mcp_server_url}/mcp"
260272 ) ;
261273 assert_eq ! ( status. resources, Vec :: new( ) ) ;
262274 assert_eq ! ( status. resource_templates, Vec :: new( ) ) ;
275+ assert_eq ! ( calls. resources. load( Ordering :: SeqCst ) , 0 ) ;
276+ assert_eq ! ( calls. resource_templates. load( Ordering :: SeqCst ) , 0 ) ;
263277
264278 mcp_server_handle. abort ( ) ;
265279 let _ = mcp_server_handle. await ;
@@ -367,14 +381,19 @@ async fn start_mcp_server(tool_name: &str) -> Result<(String, JoinHandle<()>)> {
367381 Ok ( ( format ! ( "http://{addr}" ) , handle) )
368382}
369383
370- async fn start_slow_inventory_mcp_server ( tool_name : & str ) -> Result < ( String , JoinHandle < ( ) > ) > {
384+ async fn start_slow_inventory_mcp_server (
385+ tool_name : & str ,
386+ ) -> Result < ( String , JoinHandle < ( ) > , SlowInventoryCallCounts ) > {
371387 let listener = TcpListener :: bind ( "127.0.0.1:0" ) . await ?;
372388 let addr = listener. local_addr ( ) ?;
373389 let tool_name = Arc :: new ( tool_name. to_string ( ) ) ;
390+ let calls = SlowInventoryCallCounts :: default ( ) ;
391+ let server_calls = calls. clone ( ) ;
374392 let mcp_service = StreamableHttpService :: new (
375393 move || {
376394 Ok ( SlowInventoryServer {
377395 tool_name : Arc :: clone ( & tool_name) ,
396+ calls : server_calls. clone ( ) ,
378397 } )
379398 } ,
380399 Arc :: new ( LocalSessionManager :: default ( ) ) ,
@@ -386,5 +405,5 @@ async fn start_slow_inventory_mcp_server(tool_name: &str) -> Result<(String, Joi
386405 let _ = axum:: serve ( listener, router) . await ;
387406 } ) ;
388407
389- Ok ( ( format ! ( "http://{addr}" ) , handle) )
408+ Ok ( ( format ! ( "http://{addr}" ) , handle, calls ) )
390409}
0 commit comments