Skip to content

Commit 1aaff7a

Browse files
committed
more review
1 parent 94ca2f8 commit 1aaff7a

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

test/test_retryable_writes.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020

2121
sys.path[0:0] = [""]
2222

23+
from bson.codec_options import DEFAULT_CODEC_OPTIONS
2324
from bson.int64 import Int64
2425
from bson.objectid import ObjectId
26+
from bson.raw_bson import RawBSONDocument
2527
from bson.son import SON
2628

2729

@@ -457,16 +459,14 @@ def test_batch_splitting_retry_fails(self):
457459

458460

459461
class TestWriteConcernError(IntegrationTest):
462+
@classmethod
460463
@client_context.require_version_min(4, 0)
461464
@client_context.require_replica_set
462465
@client_context.require_no_mmap
463466
@client_context.require_failCommand_fail_point
464-
def test_RetryableWriteError_error_label(self):
465-
listener = OvertCommandListener()
466-
client = rs_or_single_client(
467-
retryWrites=True, event_listeners=[listener])
468-
469-
fail_insert = {
467+
def setUpClass(cls):
468+
super(TestWriteConcernError, cls).setUpClass()
469+
cls.fail_insert = {
470470
'configureFailPoint': 'failCommand',
471471
'mode': {'times': 2},
472472
'data': {
@@ -476,10 +476,15 @@ def test_RetryableWriteError_error_label(self):
476476
'errmsg': 'Replication is being shut down'},
477477
}}
478478

479+
def test_RetryableWriteError_error_label(self):
480+
listener = OvertCommandListener()
481+
client = rs_or_single_client(
482+
retryWrites=True, event_listeners=[listener])
483+
479484
# Ensure collection exists.
480485
client.pymongo_test.testcoll.insert_one({})
481486

482-
with self.fail_point(fail_insert):
487+
with self.fail_point(self.fail_insert):
483488
with self.assertRaises(WriteConcernError) as cm:
484489
client.pymongo_test.testcoll.insert_one({})
485490
self.assertTrue(cm.exception.has_error_label(
@@ -491,6 +496,19 @@ def test_RetryableWriteError_error_label(self):
491496
'RetryableWriteError',
492497
listener.results['succeeded'][-1].reply['errorLabels'])
493498

499+
def test_RetryableWriteError_error_label_RawBSONDocument(self):
500+
# using RawBSONDocument should not cause errorLabel parsing to fail
501+
with self.fail_point(self.fail_insert):
502+
with self.client.start_session() as s:
503+
result = self.client.pymongo_test.command(
504+
'insert', 'testcoll', documents=[{'_id': 1}],
505+
txnNumber=s._server_session.transaction_id, session=s,
506+
codec_options=DEFAULT_CODEC_OPTIONS.with_options(
507+
document_class=RawBSONDocument))
508+
509+
self.assertIn('writeConcernError', result)
510+
self.assertIn('RetryableWriteError', result['errorLabels'])
511+
494512

495513
# TODO: Make this a real integration test where we stepdown the primary.
496514
class TestRetryableWritesTxnNumber(IgnoreDeprecationsTest):

0 commit comments

Comments
 (0)