@@ -401,12 +401,16 @@ async def test_returns_error_if_unacknowledged_too_large_insert(self):
401
401
# Insert document.
402
402
models_insert = [InsertOne (namespace = "db.coll" , document = {"a" : b_repeated })]
403
403
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
+ )
405
407
406
408
# Replace document.
407
409
models_replace = [ReplaceOne (namespace = "db.coll" , filter = {}, replacement = {"a" : b_repeated })]
408
410
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
+ )
410
414
411
415
async def _setup_namespace_test_models (self ):
412
416
# See prose test specification below for details on these calculations.
@@ -590,6 +594,44 @@ async def test_upserted_result(self):
590
594
self .assertEqual (result .update_results [1 ].did_upsert , True )
591
595
self .assertEqual (result .update_results [2 ].did_upsert , False )
592
596
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
+
593
635
594
636
# https://github.com/mongodb/specifications/blob/master/source/client-side-operations-timeout/tests/README.md#11-multi-batch-bulkwrites
595
637
class TestClientBulkWriteCSOT (AsyncIntegrationTest ):
0 commit comments