Skip to content

Commit e89a60a

Browse files
committed
PYTHON-952 - Make tests more predictable
1 parent b80fa6d commit e89a60a

File tree

1 file changed

+65
-57
lines changed

1 file changed

+65
-57
lines changed

test/test_monitoring.py

Lines changed: 65 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -178,33 +178,37 @@ def test_find_and_get_more(self):
178178
# Next batch. Exhausting the cursor could cause a getMore
179179
# that returns id of 0 and no results.
180180
next(cursor)
181-
results = self.listener.results
182-
started = results['started'][0]
183-
succeeded = results['succeeded'][0]
184-
self.assertEqual(0, len(results['failed']))
185-
self.assertTrue(
186-
isinstance(started, monitoring.CommandStartedEvent))
187-
self.assertEqual(
188-
SON([('getMore', cursor_id),
189-
('collection', 'test'),
190-
('batchSize', 4)]),
191-
started.command)
192-
self.assertEqual('getMore', started.command_name)
193-
self.assertEqual(self.client.address, started.connection_id)
194-
self.assertEqual('pymongo_test', started.database_name)
195-
self.assertTrue(isinstance(started.request_id, int))
196-
self.assertTrue(
197-
isinstance(succeeded, monitoring.CommandSucceededEvent))
198-
self.assertTrue(isinstance(succeeded.duration_micros, int))
199-
self.assertEqual('getMore', succeeded.command_name)
200-
self.assertTrue(isinstance(succeeded.request_id, int))
201-
self.assertEqual(cursor.address, succeeded.connection_id)
202-
expected_result = {
203-
'cursor': {'id': cursor_id,
204-
'ns': 'pymongo_test.test',
205-
'nextBatch': [{} for _ in range(4)]},
206-
'ok': 1}
207-
self.assertEqual(expected_result, succeeded.reply)
181+
try:
182+
results = self.listener.results
183+
started = results['started'][0]
184+
succeeded = results['succeeded'][0]
185+
self.assertEqual(0, len(results['failed']))
186+
self.assertTrue(
187+
isinstance(started, monitoring.CommandStartedEvent))
188+
self.assertEqual(
189+
SON([('getMore', cursor_id),
190+
('collection', 'test'),
191+
('batchSize', 4)]),
192+
started.command)
193+
self.assertEqual('getMore', started.command_name)
194+
self.assertEqual(self.client.address, started.connection_id)
195+
self.assertEqual('pymongo_test', started.database_name)
196+
self.assertTrue(isinstance(started.request_id, int))
197+
self.assertTrue(
198+
isinstance(succeeded, monitoring.CommandSucceededEvent))
199+
self.assertTrue(isinstance(succeeded.duration_micros, int))
200+
self.assertEqual('getMore', succeeded.command_name)
201+
self.assertTrue(isinstance(succeeded.request_id, int))
202+
self.assertEqual(cursor.address, succeeded.connection_id)
203+
expected_result = {
204+
'cursor': {'id': cursor_id,
205+
'ns': 'pymongo_test.test',
206+
'nextBatch': [{} for _ in range(4)]},
207+
'ok': 1}
208+
self.assertEqual(expected_result, succeeded.reply)
209+
finally:
210+
# Exhaust the cursor to avoid kill cursors.
211+
tuple(cursor)
208212

209213
def test_find_with_explain(self):
210214
cmd = SON([('explain', SON([('find', 'test'),
@@ -286,7 +290,8 @@ def test_find_options(self):
286290
self.assertTrue(isinstance(succeeded.request_id, int))
287291
self.assertEqual(self.client.address, succeeded.connection_id)
288292
finally:
289-
cursor.close()
293+
# Exhaust the cursor to avoid kill cursors.
294+
tuple(cursor)
290295

291296
@client_context.require_version_min(2, 6, 0)
292297
def test_command_and_get_more(self):
@@ -332,33 +337,37 @@ def test_command_and_get_more(self):
332337

333338
self.listener.results.clear()
334339
next(cursor)
335-
results = self.listener.results
336-
started = results['started'][0]
337-
succeeded = results['succeeded'][0]
338-
self.assertEqual(0, len(results['failed']))
339-
self.assertTrue(
340-
isinstance(started, monitoring.CommandStartedEvent))
341-
self.assertEqual(
342-
SON([('getMore', cursor_id),
343-
('collection', 'test'),
344-
('batchSize', 4)]),
345-
started.command)
346-
self.assertEqual('getMore', started.command_name)
347-
self.assertEqual(self.client.address, started.connection_id)
348-
self.assertEqual('pymongo_test', started.database_name)
349-
self.assertTrue(isinstance(started.request_id, int))
350-
self.assertTrue(
351-
isinstance(succeeded, monitoring.CommandSucceededEvent))
352-
self.assertTrue(isinstance(succeeded.duration_micros, int))
353-
self.assertEqual('getMore', succeeded.command_name)
354-
self.assertTrue(isinstance(succeeded.request_id, int))
355-
self.assertEqual(cursor.address, succeeded.connection_id)
356-
expected_result = {
357-
'cursor': {'id': cursor_id,
358-
'ns': 'pymongo_test.test',
359-
'nextBatch': [{'x': 1} for _ in range(4)]},
360-
'ok': 1}
361-
self.assertEqual(expected_result, succeeded.reply)
340+
try:
341+
results = self.listener.results
342+
started = results['started'][0]
343+
succeeded = results['succeeded'][0]
344+
self.assertEqual(0, len(results['failed']))
345+
self.assertTrue(
346+
isinstance(started, monitoring.CommandStartedEvent))
347+
self.assertEqual(
348+
SON([('getMore', cursor_id),
349+
('collection', 'test'),
350+
('batchSize', 4)]),
351+
started.command)
352+
self.assertEqual('getMore', started.command_name)
353+
self.assertEqual(self.client.address, started.connection_id)
354+
self.assertEqual('pymongo_test', started.database_name)
355+
self.assertTrue(isinstance(started.request_id, int))
356+
self.assertTrue(
357+
isinstance(succeeded, monitoring.CommandSucceededEvent))
358+
self.assertTrue(isinstance(succeeded.duration_micros, int))
359+
self.assertEqual('getMore', succeeded.command_name)
360+
self.assertTrue(isinstance(succeeded.request_id, int))
361+
self.assertEqual(cursor.address, succeeded.connection_id)
362+
expected_result = {
363+
'cursor': {'id': cursor_id,
364+
'ns': 'pymongo_test.test',
365+
'nextBatch': [{'x': 1} for _ in range(4)]},
366+
'ok': 1}
367+
self.assertEqual(expected_result, succeeded.reply)
368+
finally:
369+
# Exhaust the cursor to avoid kill cursors.
370+
tuple(cursor)
362371

363372
def test_get_more_failure(self):
364373
address = self.client.address
@@ -459,8 +468,7 @@ def test_exhaust(self):
459468
self.assertEqual(expected_result, succeeded.reply)
460469

461470
self.listener.results.clear()
462-
for _ in cursor:
463-
pass
471+
tuple(cursor)
464472
results = self.listener.results
465473
started = results['started'][0]
466474
succeeded = results['succeeded'][0]

0 commit comments

Comments
 (0)