@@ -401,12 +401,16 @@ async def test_returns_error_if_unacknowledged_too_large_insert(self):
401401 # Insert document.
402402 models_insert = [InsertOne (namespace = "db.coll" , document = {"a" : b_repeated })]
403403 with self .assertRaises (DocumentTooLarge ):
404- await client .bulk_write (models = models_insert , write_concern = WriteConcern (w = 0 ))
404+ await client .bulk_write (
405+ models = models_insert , ordered = False , write_concern = WriteConcern (w = 0 )
406+ )
405407
406408 # Replace document.
407409 models_replace = [ReplaceOne (namespace = "db.coll" , filter = {}, replacement = {"a" : b_repeated })]
408410 with self .assertRaises (DocumentTooLarge ):
409- await client .bulk_write (models = models_replace , write_concern = WriteConcern (w = 0 ))
411+ await client .bulk_write (
412+ models = models_replace , ordered = False , write_concern = WriteConcern (w = 0 )
413+ )
410414
411415 async def _setup_namespace_test_models (self ):
412416 # See prose test specification below for details on these calculations.
@@ -590,6 +594,44 @@ async def test_upserted_result(self):
590594 self .assertEqual (result .update_results [1 ].did_upsert , True )
591595 self .assertEqual (result .update_results [2 ].did_upsert , False )
592596
597+ @async_client_context .require_version_min (8 , 0 , 0 , - 24 )
598+ @async_client_context .require_no_serverless
599+ async def test_15_unacknowledged_write_across_batches (self ):
600+ listener = OvertCommandListener ()
601+ client = await self .async_rs_or_single_client (event_listeners = [listener ])
602+
603+ collection = client .db ["coll" ]
604+ self .addAsyncCleanup (collection .drop )
605+ await collection .drop ()
606+ await client .db .command ({"create" : "db.coll" })
607+
608+ b_repeated = "b" * (self .max_bson_object_size - 500 )
609+ models = [
610+ InsertOne (namespace = "db.coll" , document = {"a" : b_repeated })
611+ for _ in range (int (self .max_message_size_bytes / self .max_bson_object_size ) + 1 )
612+ ]
613+
614+ listener .reset ()
615+
616+ res = await client .bulk_write (models , ordered = False , write_concern = WriteConcern (w = 0 ))
617+ self .assertEqual (False , res .acknowledged )
618+
619+ events = listener .started_events
620+ self .assertEqual (2 , len (events ))
621+ self .assertEqual (
622+ int (self .max_message_size_bytes / self .max_bson_object_size ),
623+ len (events [0 ].command ["ops" ]),
624+ )
625+ self .assertEqual (1 , len (events [1 ].command ["ops" ]))
626+ self .assertEqual (events [0 ].operation_id , events [1 ].operation_id )
627+ self .assertEqual ({"w" : 0 }, events [0 ].command ["writeConcern" ])
628+ self .assertEqual ({"w" : 0 }, events [1 ].command ["writeConcern" ])
629+
630+ self .assertEqual (
631+ int (self .max_message_size_bytes / self .max_bson_object_size ) + 1 ,
632+ await collection .count_documents ({}),
633+ )
634+
593635
594636# https://github.com/mongodb/specifications/blob/master/source/client-side-operations-timeout/tests/README.md#11-multi-batch-bulkwrites
595637class TestClientBulkWriteCSOT (AsyncIntegrationTest ):
0 commit comments