Skip to content

Commit 92df790

Browse files
committed
More reliable test_max_pool_size.
1 parent 22f7e29 commit 92df790

File tree

1 file changed

+24
-10
lines changed

1 file changed

+24
-10
lines changed

test/test_pooling.py

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,11 @@
3232

3333
from pymongo.pool import Pool, PoolOptions, _closed
3434
from test import host, port, SkipTest, unittest, client_context
35-
from test.utils import get_pool, one, rs_or_single_client, connected, joinall
35+
from test.utils import (get_pool,
36+
joinall,
37+
delay,
38+
one,
39+
rs_or_single_client)
3640

3741

3842
@client_context.require_connection
@@ -341,20 +345,25 @@ def test_no_wait_queue_multiple(self):
341345
class TestPoolMaxSize(_TestPoolingBase):
342346
def test_max_pool_size(self):
343347
max_pool_size = 4
344-
c = connected(rs_or_single_client(max_pool_size=max_pool_size))
345-
cx_pool = get_pool(c)
348+
c = rs_or_single_client(max_pool_size=max_pool_size)
349+
collection = c[DB].test
350+
351+
# Need one document.
352+
collection.remove()
353+
collection.insert({})
346354

347355
# nthreads had better be much larger than max_pool_size to ensure that
348356
# max_pool_size sockets are actually required at some point in this
349357
# test's execution.
358+
cx_pool = get_pool(c)
350359
nthreads = 10
351360
threads = []
352361
lock = threading.Lock()
353362
self.n_passed = 0
354363

355364
def f():
356-
for _ in range(N):
357-
c[DB].test.find_one()
365+
for _ in range(5):
366+
collection.find_one({'$where': delay(0.1)})
358367
assert len(cx_pool.sockets) <= max_pool_size
359368

360369
with lock:
@@ -371,17 +380,22 @@ def f():
371380
self.assertEqual(max_pool_size, cx_pool._socket_semaphore.counter)
372381

373382
def test_max_pool_size_none(self):
374-
c = connected(rs_or_single_client(max_pool_size=None))
375-
cx_pool = get_pool(c)
383+
c = rs_or_single_client(max_pool_size=None)
384+
collection = c[DB].test
376385

386+
# Need one document.
387+
collection.remove()
388+
collection.insert({})
389+
390+
cx_pool = get_pool(c)
377391
nthreads = 10
378392
threads = []
379393
lock = threading.Lock()
380394
self.n_passed = 0
381395

382396
def f():
383-
for _ in range(N):
384-
c[DB].test.find_one()
397+
for _ in range(5):
398+
collection.find_one({'$where': delay(0.1)})
385399

386400
with lock:
387401
self.n_passed += 1
@@ -393,7 +407,7 @@ def f():
393407

394408
joinall(threads)
395409
self.assertEqual(nthreads, self.n_passed)
396-
self.assertTrue(len(cx_pool.sockets) >= 1)
410+
self.assertTrue(len(cx_pool.sockets) > 1)
397411

398412
def test_max_pool_size_with_connection_failure(self):
399413
# The pool acquires its semaphore before attempting to connect; ensure

0 commit comments

Comments
 (0)