@@ -283,18 +283,38 @@ def test_max_idle_time_reaper(self):
283283 pass
284284 self .assertEqual (1 , len (server ._pool .sockets ))
285285 self .assertTrue (sock_info in server ._pool .sockets )
286+ client .close ()
286287
287288 # Assert reaper removes idle socket and replaces it with a new one
288289 client = rs_or_single_client (maxIdleTimeMS = 500 ,
289290 minPoolSize = 1 )
290291 server = client ._get_topology ().select_server (any_server_selector )
291292 with server ._pool .get_socket ({}) as sock_info :
292293 pass
294+ # When the reaper runs at the same time as the get_socket, two
295+ # sockets could be created and checked into the pool.
296+ self .assertGreaterEqual (len (server ._pool .sockets ), 1 )
297+ wait_until (lambda : sock_info not in server ._pool .sockets ,
298+ "remove stale socket" )
299+ wait_until (lambda : 1 <= len (server ._pool .sockets ),
300+ "replace stale socket" )
301+ client .close ()
302+
303+ # Assert reaper respects maxPoolSize when adding new sockets.
304+ client = rs_or_single_client (maxIdleTimeMS = 500 ,
305+ minPoolSize = 1 ,
306+ maxPoolSize = 1 )
307+ server = client ._get_topology ().select_server (any_server_selector )
308+ with server ._pool .get_socket ({}) as sock_info :
309+ pass
310+ # When the reaper runs at the same time as the get_socket,
311+ # maxPoolSize=1 should prevent two sockets from being created.
293312 self .assertEqual (1 , len (server ._pool .sockets ))
294313 wait_until (lambda : sock_info not in server ._pool .sockets ,
295- "reaper removes stale socket eventually " )
314+ "remove stale socket" )
296315 wait_until (lambda : 1 == len (server ._pool .sockets ),
297- "reaper replaces stale socket with new one" )
316+ "replace stale socket" )
317+ client .close ()
298318
299319 # Assert reaper has removed idle socket and NOT replaced it
300320 client = rs_or_single_client (maxIdleTimeMS = 500 )
@@ -304,6 +324,7 @@ def test_max_idle_time_reaper(self):
304324 wait_until (
305325 lambda : 0 == len (server ._pool .sockets ),
306326 "stale socket reaped and new one NOT added to the pool" )
327+ client .close ()
307328
308329 def test_min_pool_size (self ):
309330 with client_knobs (kill_cursor_frequency = .1 ):
0 commit comments