@@ -191,7 +191,6 @@ def test_max_idle_time_reaper(self):
191
191
server = client ._get_topology ().select_server (any_server_selector )
192
192
with server ._pool .get_socket ({}) as sock_info :
193
193
pass
194
- time .sleep (1 )
195
194
self .assertEqual (1 , len (server ._pool .sockets ))
196
195
self .assertTrue (sock_info in server ._pool .sockets )
197
196
@@ -200,56 +199,62 @@ def test_max_idle_time_reaper(self):
200
199
server = client ._get_topology ().select_server (any_server_selector )
201
200
with server ._pool .get_socket ({}) as sock_info :
202
201
pass
203
- time .sleep (2 )
204
202
self .assertEqual (1 , len (server ._pool .sockets ))
205
- self .assertFalse (sock_info in server ._pool .sockets )
203
+ wait_until (lambda : sock_info not in server ._pool .sockets ,
204
+ "reaper removes stale socket eventually" )
205
+ wait_until (lambda : 1 == len (server ._pool .sockets ),
206
+ "reaper replaces stale socket with new one" )
206
207
207
208
# Assert reaper has removed idle socket and NOT replaced it
208
209
client = MongoClient (host , port , maxIdleTimeMS = .5 )
209
210
server = client ._get_topology ().select_server (any_server_selector )
210
211
with server ._pool .get_socket ({}):
211
212
pass
212
- time .sleep (1 )
213
- self .assertEqual (0 , len (server ._pool .sockets ))
213
+ wait_until (
214
+ lambda : 0 == len (server ._pool .sockets ),
215
+ "stale socket reaped and new one NOT added to the pool" )
214
216
215
217
def test_min_pool_size (self ):
216
218
with client_knobs (kill_cursor_frequency = .1 ):
217
219
client = MongoClient (host , port )
218
220
server = client ._get_topology ().select_server (any_server_selector )
219
- time .sleep (1 )
220
221
self .assertEqual (0 , len (server ._pool .sockets ))
221
222
222
223
# Assert that pool started up at minPoolSize
223
224
client = MongoClient (host , port , minPoolSize = 10 )
224
225
server = client ._get_topology ().select_server (any_server_selector )
225
- time . sleep ( 1 )
226
- self . assertEqual ( 10 , len ( server . _pool . sockets ) )
226
+ wait_until ( lambda : 10 == len ( server . _pool . sockets ),
227
+ "pool initialized with 10 sockets" )
227
228
228
229
# Assert that if a socket is closed, a new one takes its place
229
230
with server ._pool .get_socket ({}) as sock_info :
230
231
sock_info .close ()
231
- time . sleep ( 1 )
232
- self . assertEqual ( 10 , len ( server . _pool . sockets ) )
232
+ wait_until ( lambda : 10 == len ( server . _pool . sockets ),
233
+ "a closed socket gets replaced from the pool" )
233
234
self .assertFalse (sock_info in server ._pool .sockets )
234
235
235
236
def test_max_idle_time_checkout (self ):
237
+ # Use high frequency to test _get_socket_no_auth.
236
238
with client_knobs (kill_cursor_frequency = 99999999 ):
237
239
client = MongoClient (host , port , maxIdleTimeMS = .5 )
238
- time .sleep (1 )
239
240
server = client ._get_topology ().select_server (any_server_selector )
240
241
with server ._pool .get_socket ({}) as sock_info :
241
242
pass
242
- time .sleep (1 )
243
+ self .assertEqual (1 , len (server ._pool .sockets ))
244
+ time .sleep (1 ) # Sleep so that the socket becomes stale.
245
+
243
246
with server ._pool .get_socket ({}) as new_sock_info :
244
247
self .assertNotEqual (sock_info , new_sock_info )
245
248
self .assertEqual (1 , len (server ._pool .sockets ))
246
249
self .assertFalse (sock_info in server ._pool .sockets )
247
250
self .assertTrue (new_sock_info in server ._pool .sockets )
248
251
252
+ # Test that sockets are reused if maxIdleTimeMS is not set.
249
253
client = MongoClient (host , port )
250
254
server = client ._get_topology ().select_server (any_server_selector )
251
255
with server ._pool .get_socket ({}) as sock_info :
252
256
pass
257
+ self .assertEqual (1 , len (server ._pool .sockets ))
253
258
time .sleep (1 )
254
259
with server ._pool .get_socket ({}) as new_sock_info :
255
260
self .assertEqual (sock_info , new_sock_info )
0 commit comments