Skip to content

Commit 1eb5dd8

Browse files
committed
PYTHON-5374 Assert unset BulkWriteException.partialResult in CRUD prose tests
1 parent f29c7b1 commit 1eb5dd8

File tree

2 files changed

+36
-30
lines changed

2 files changed

+36
-30
lines changed

test/asynchronous/test_client_bulk_write.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ async def asyncSetUp(self):
9292
self.max_message_size_bytes = await async_client_context.max_message_size_bytes
9393

9494
@async_client_context.require_version_min(8, 0, 0, -24)
95-
async def test_batch_splits_if_num_operations_too_large(self):
95+
async def test_3_batch_splits_if_num_operations_too_large(self):
9696
listener = OvertCommandListener()
9797
client = await self.async_rs_or_single_client(event_listeners=[listener])
9898

@@ -116,7 +116,7 @@ async def test_batch_splits_if_num_operations_too_large(self):
116116
self.assertEqual(first_event.operation_id, second_event.operation_id)
117117

118118
@async_client_context.require_version_min(8, 0, 0, -24)
119-
async def test_batch_splits_if_ops_payload_too_large(self):
119+
async def test_4_batch_splits_if_ops_payload_too_large(self):
120120
listener = OvertCommandListener()
121121
client = await self.async_rs_or_single_client(event_listeners=[listener])
122122

@@ -148,7 +148,7 @@ async def test_batch_splits_if_ops_payload_too_large(self):
148148

149149
@async_client_context.require_version_min(8, 0, 0, -24)
150150
@async_client_context.require_failCommand_fail_point
151-
async def test_collects_write_concern_errors_across_batches(self):
151+
async def test_5_collects_write_concern_errors_across_batches(self):
152152
listener = OvertCommandListener()
153153
client = await self.async_rs_or_single_client(
154154
event_listeners=[listener],
@@ -189,7 +189,7 @@ async def test_collects_write_concern_errors_across_batches(self):
189189
self.assertEqual(len(bulk_write_events), 2)
190190

191191
@async_client_context.require_version_min(8, 0, 0, -24)
192-
async def test_collects_write_errors_across_batches_unordered(self):
192+
async def test_6_collects_write_errors_across_batches_unordered(self):
193193
listener = OvertCommandListener()
194194
client = await self.async_rs_or_single_client(event_listeners=[listener])
195195

@@ -218,7 +218,7 @@ async def test_collects_write_errors_across_batches_unordered(self):
218218
self.assertEqual(len(bulk_write_events), 2)
219219

220220
@async_client_context.require_version_min(8, 0, 0, -24)
221-
async def test_collects_write_errors_across_batches_ordered(self):
221+
async def test_6_collects_write_errors_across_batches_ordered(self):
222222
listener = OvertCommandListener()
223223
client = await self.async_rs_or_single_client(event_listeners=[listener])
224224

@@ -247,7 +247,7 @@ async def test_collects_write_errors_across_batches_ordered(self):
247247
self.assertEqual(len(bulk_write_events), 1)
248248

249249
@async_client_context.require_version_min(8, 0, 0, -24)
250-
async def test_handles_cursor_requiring_getMore(self):
250+
async def test_7_handles_cursor_requiring_getMore(self):
251251
listener = OvertCommandListener()
252252
client = await self.async_rs_or_single_client(event_listeners=[listener])
253253

@@ -287,7 +287,7 @@ async def test_handles_cursor_requiring_getMore(self):
287287

288288
@async_client_context.require_version_min(8, 0, 0, -24)
289289
@async_client_context.require_no_standalone
290-
async def test_handles_cursor_requiring_getMore_within_transaction(self):
290+
async def test_8_handles_cursor_requiring_getMore_within_transaction(self):
291291
listener = OvertCommandListener()
292292
client = await self.async_rs_or_single_client(event_listeners=[listener])
293293

@@ -329,7 +329,7 @@ async def test_handles_cursor_requiring_getMore_within_transaction(self):
329329

330330
@async_client_context.require_version_min(8, 0, 0, -24)
331331
@async_client_context.require_failCommand_fail_point
332-
async def test_handles_getMore_error(self):
332+
async def test_9_handles_getMore_error(self):
333333
listener = OvertCommandListener()
334334
client = await self.async_rs_or_single_client(event_listeners=[listener])
335335

@@ -382,7 +382,7 @@ async def test_handles_getMore_error(self):
382382
self.assertTrue(kill_cursors_event)
383383

384384
@async_client_context.require_version_min(8, 0, 0, -24)
385-
async def test_returns_error_if_unacknowledged_too_large_insert(self):
385+
async def test_10_returns_error_if_unacknowledged_too_large_insert(self):
386386
listener = OvertCommandListener()
387387
client = await self.async_rs_or_single_client(event_listeners=[listener])
388388

@@ -441,7 +441,7 @@ async def _setup_namespace_test_models(self):
441441
return num_models, models
442442

443443
@async_client_context.require_version_min(8, 0, 0, -24)
444-
async def test_no_batch_splits_if_new_namespace_is_not_too_large(self):
444+
async def test_11_no_batch_splits_if_new_namespace_is_not_too_large(self):
445445
listener = OvertCommandListener()
446446
client = await self.async_rs_or_single_client(event_listeners=[listener])
447447

@@ -471,7 +471,7 @@ async def test_no_batch_splits_if_new_namespace_is_not_too_large(self):
471471
self.assertEqual(event.command["nsInfo"][0]["ns"], "db.coll")
472472

473473
@async_client_context.require_version_min(8, 0, 0, -24)
474-
async def test_batch_splits_if_new_namespace_is_too_large(self):
474+
async def test_11_batch_splits_if_new_namespace_is_too_large(self):
475475
listener = OvertCommandListener()
476476
client = await self.async_rs_or_single_client(event_listeners=[listener])
477477

@@ -508,25 +508,27 @@ async def test_batch_splits_if_new_namespace_is_too_large(self):
508508
self.assertEqual(second_event.command["nsInfo"][0]["ns"], namespace)
509509

510510
@async_client_context.require_version_min(8, 0, 0, -24)
511-
async def test_returns_error_if_no_writes_can_be_added_to_ops(self):
511+
async def test_12_returns_error_if_no_writes_can_be_added_to_ops(self):
512512
client = await self.async_rs_or_single_client()
513513

514514
# Document too large.
515515
b_repeated = "b" * self.max_message_size_bytes
516516
models = [InsertOne(namespace="db.coll", document={"a": b_repeated})]
517-
with self.assertRaises(DocumentTooLarge):
517+
with self.assertRaises(DocumentTooLarge) as context:
518518
await client.bulk_write(models=models)
519+
self.assertIsNone(context.exception.partial_result)
519520

520521
# Namespace too large.
521522
c_repeated = "c" * self.max_message_size_bytes
522523
namespace = f"db.{c_repeated}"
523524
models = [InsertOne(namespace=namespace, document={"a": "b"})]
524-
with self.assertRaises(DocumentTooLarge):
525+
with self.assertRaises(DocumentTooLarge) as context:
525526
await client.bulk_write(models=models)
527+
self.assertIsNone(context.exception.partial_result)
526528

527529
@async_client_context.require_version_min(8, 0, 0, -24)
528530
@unittest.skipUnless(_HAVE_PYMONGOCRYPT, "pymongocrypt is not installed")
529-
async def test_returns_error_if_auto_encryption_configured(self):
531+
async def test_13_returns_error_if_auto_encryption_configured(self):
530532
opts = AutoEncryptionOpts(
531533
key_vault_namespace="db.coll",
532534
kms_providers={"aws": {"accessKeyId": "foo", "secretAccessKey": "bar"}},
@@ -536,6 +538,7 @@ async def test_returns_error_if_auto_encryption_configured(self):
536538
models = [InsertOne(namespace="db.coll", document={"a": "b"})]
537539
with self.assertRaises(InvalidOperation) as context:
538540
await client.bulk_write(models=models)
541+
self.assertIsNone(context.exception.partial_result)
539542
self.assertIn(
540543
"bulk_write does not currently support automatic encryption", context.exception._message
541544
)

test/test_client_bulk_write.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def setUp(self):
9292
self.max_message_size_bytes = client_context.max_message_size_bytes
9393

9494
@client_context.require_version_min(8, 0, 0, -24)
95-
def test_batch_splits_if_num_operations_too_large(self):
95+
def test_3_batch_splits_if_num_operations_too_large(self):
9696
listener = OvertCommandListener()
9797
client = self.rs_or_single_client(event_listeners=[listener])
9898

@@ -116,7 +116,7 @@ def test_batch_splits_if_num_operations_too_large(self):
116116
self.assertEqual(first_event.operation_id, second_event.operation_id)
117117

118118
@client_context.require_version_min(8, 0, 0, -24)
119-
def test_batch_splits_if_ops_payload_too_large(self):
119+
def test_4_batch_splits_if_ops_payload_too_large(self):
120120
listener = OvertCommandListener()
121121
client = self.rs_or_single_client(event_listeners=[listener])
122122

@@ -148,7 +148,7 @@ def test_batch_splits_if_ops_payload_too_large(self):
148148

149149
@client_context.require_version_min(8, 0, 0, -24)
150150
@client_context.require_failCommand_fail_point
151-
def test_collects_write_concern_errors_across_batches(self):
151+
def test_5_collects_write_concern_errors_across_batches(self):
152152
listener = OvertCommandListener()
153153
client = self.rs_or_single_client(
154154
event_listeners=[listener],
@@ -189,7 +189,7 @@ def test_collects_write_concern_errors_across_batches(self):
189189
self.assertEqual(len(bulk_write_events), 2)
190190

191191
@client_context.require_version_min(8, 0, 0, -24)
192-
def test_collects_write_errors_across_batches_unordered(self):
192+
def test_6_collects_write_errors_across_batches_unordered(self):
193193
listener = OvertCommandListener()
194194
client = self.rs_or_single_client(event_listeners=[listener])
195195

@@ -218,7 +218,7 @@ def test_collects_write_errors_across_batches_unordered(self):
218218
self.assertEqual(len(bulk_write_events), 2)
219219

220220
@client_context.require_version_min(8, 0, 0, -24)
221-
def test_collects_write_errors_across_batches_ordered(self):
221+
def test_6_collects_write_errors_across_batches_ordered(self):
222222
listener = OvertCommandListener()
223223
client = self.rs_or_single_client(event_listeners=[listener])
224224

@@ -247,7 +247,7 @@ def test_collects_write_errors_across_batches_ordered(self):
247247
self.assertEqual(len(bulk_write_events), 1)
248248

249249
@client_context.require_version_min(8, 0, 0, -24)
250-
def test_handles_cursor_requiring_getMore(self):
250+
def test_7_handles_cursor_requiring_getMore(self):
251251
listener = OvertCommandListener()
252252
client = self.rs_or_single_client(event_listeners=[listener])
253253

@@ -287,7 +287,7 @@ def test_handles_cursor_requiring_getMore(self):
287287

288288
@client_context.require_version_min(8, 0, 0, -24)
289289
@client_context.require_no_standalone
290-
def test_handles_cursor_requiring_getMore_within_transaction(self):
290+
def test_8_handles_cursor_requiring_getMore_within_transaction(self):
291291
listener = OvertCommandListener()
292292
client = self.rs_or_single_client(event_listeners=[listener])
293293

@@ -329,7 +329,7 @@ def test_handles_cursor_requiring_getMore_within_transaction(self):
329329

330330
@client_context.require_version_min(8, 0, 0, -24)
331331
@client_context.require_failCommand_fail_point
332-
def test_handles_getMore_error(self):
332+
def test_9_handles_getMore_error(self):
333333
listener = OvertCommandListener()
334334
client = self.rs_or_single_client(event_listeners=[listener])
335335

@@ -382,7 +382,7 @@ def test_handles_getMore_error(self):
382382
self.assertTrue(kill_cursors_event)
383383

384384
@client_context.require_version_min(8, 0, 0, -24)
385-
def test_returns_error_if_unacknowledged_too_large_insert(self):
385+
def test_10_returns_error_if_unacknowledged_too_large_insert(self):
386386
listener = OvertCommandListener()
387387
client = self.rs_or_single_client(event_listeners=[listener])
388388

@@ -437,7 +437,7 @@ def _setup_namespace_test_models(self):
437437
return num_models, models
438438

439439
@client_context.require_version_min(8, 0, 0, -24)
440-
def test_no_batch_splits_if_new_namespace_is_not_too_large(self):
440+
def test_11_no_batch_splits_if_new_namespace_is_not_too_large(self):
441441
listener = OvertCommandListener()
442442
client = self.rs_or_single_client(event_listeners=[listener])
443443

@@ -467,7 +467,7 @@ def test_no_batch_splits_if_new_namespace_is_not_too_large(self):
467467
self.assertEqual(event.command["nsInfo"][0]["ns"], "db.coll")
468468

469469
@client_context.require_version_min(8, 0, 0, -24)
470-
def test_batch_splits_if_new_namespace_is_too_large(self):
470+
def test_11_batch_splits_if_new_namespace_is_too_large(self):
471471
listener = OvertCommandListener()
472472
client = self.rs_or_single_client(event_listeners=[listener])
473473

@@ -504,25 +504,27 @@ def test_batch_splits_if_new_namespace_is_too_large(self):
504504
self.assertEqual(second_event.command["nsInfo"][0]["ns"], namespace)
505505

506506
@client_context.require_version_min(8, 0, 0, -24)
507-
def test_returns_error_if_no_writes_can_be_added_to_ops(self):
507+
def test_12_returns_error_if_no_writes_can_be_added_to_ops(self):
508508
client = self.rs_or_single_client()
509509

510510
# Document too large.
511511
b_repeated = "b" * self.max_message_size_bytes
512512
models = [InsertOne(namespace="db.coll", document={"a": b_repeated})]
513-
with self.assertRaises(DocumentTooLarge):
513+
with self.assertRaises(DocumentTooLarge) as context:
514514
client.bulk_write(models=models)
515+
self.assertIsNone(context.exception.partial_result)
515516

516517
# Namespace too large.
517518
c_repeated = "c" * self.max_message_size_bytes
518519
namespace = f"db.{c_repeated}"
519520
models = [InsertOne(namespace=namespace, document={"a": "b"})]
520-
with self.assertRaises(DocumentTooLarge):
521+
with self.assertRaises(DocumentTooLarge) as context:
521522
client.bulk_write(models=models)
523+
self.assertIsNone(context.exception.partial_result)
522524

523525
@client_context.require_version_min(8, 0, 0, -24)
524526
@unittest.skipUnless(_HAVE_PYMONGOCRYPT, "pymongocrypt is not installed")
525-
def test_returns_error_if_auto_encryption_configured(self):
527+
def test_13_returns_error_if_auto_encryption_configured(self):
526528
opts = AutoEncryptionOpts(
527529
key_vault_namespace="db.coll",
528530
kms_providers={"aws": {"accessKeyId": "foo", "secretAccessKey": "bar"}},
@@ -532,6 +534,7 @@ def test_returns_error_if_auto_encryption_configured(self):
532534
models = [InsertOne(namespace="db.coll", document={"a": "b"})]
533535
with self.assertRaises(InvalidOperation) as context:
534536
client.bulk_write(models=models)
537+
self.assertIsNone(context.exception.partial_result)
535538
self.assertIn(
536539
"bulk_write does not currently support automatic encryption", context.exception._message
537540
)

0 commit comments

Comments
 (0)