@@ -6350,6 +6350,59 @@ test_remove_multi (void)
6350
6350
mongoc_client_destroy (client );
6351
6351
}
6352
6352
6353
+ static void
6354
+ test_fam_no_error_on_retry (void * unused )
6355
+ {
6356
+ mongoc_client_t * client ;
6357
+ mongoc_collection_t * coll ;
6358
+ bson_error_t error = {0 };
6359
+ bool ret ;
6360
+ bson_t reply ;
6361
+ mongoc_find_and_modify_opts_t * opts ;
6362
+
6363
+ client = test_framework_client_new ();
6364
+ ret = mongoc_client_command_simple (
6365
+ client ,
6366
+ "admin" ,
6367
+ tmp_bson ("{'configureFailPoint': 'failCommand', 'mode': {'times': 1}, "
6368
+ "'data': {'failCommands': ['findAndModify'], 'errorLabels': "
6369
+ "['RetryableWriteError']}}" ),
6370
+ NULL ,
6371
+ & reply ,
6372
+ & error );
6373
+
6374
+ if (!ret ) {
6375
+ test_error ("configureFailPoint error: %s reply: %s" ,
6376
+ error .message ,
6377
+ bson_as_canonical_extended_json (& reply , NULL ));
6378
+ }
6379
+
6380
+ coll = get_test_collection (client , BSON_FUNC );
6381
+ opts = mongoc_find_and_modify_opts_new ();
6382
+ mongoc_find_and_modify_opts_set_update (opts ,
6383
+ tmp_bson ("{'$set': {'x': 2}}" ));
6384
+ bson_destroy (& reply );
6385
+ ret = mongoc_collection_find_and_modify_with_opts (
6386
+ coll , tmp_bson ("{'x': 1}" ), opts , & reply , & error );
6387
+ if (!ret ) {
6388
+ test_error (
6389
+ "findAndModify error: %s reply: %s" , error .message , bson_as_canonical_extended_json (& reply , NULL ));
6390
+ }
6391
+
6392
+ if (error .code != 0 || error .domain != 0 ||
6393
+ 0 != strcmp (error .message , "" )) {
6394
+ test_error ("error set, but findAndModify succeeded: code=%" PRIu32
6395
+ " domain=%" PRIu32 " message=%s" ,
6396
+ error .code ,
6397
+ error .domain ,
6398
+ error .message );
6399
+ }
6400
+
6401
+ bson_destroy (& reply );
6402
+ mongoc_collection_destroy (coll );
6403
+ mongoc_client_destroy (client );
6404
+ mongoc_find_and_modify_opts_destroy (opts );
6405
+ }
6353
6406
6354
6407
void
6355
6408
test_collection_install (TestSuite * suite )
@@ -6594,4 +6647,11 @@ test_collection_install (TestSuite *suite)
6594
6647
NULL ,
6595
6648
NULL ,
6596
6649
test_framework_skip_if_not_replset );
6650
+ TestSuite_AddFull (suite ,
6651
+ "/Collection/fam/no_error_on_retry" ,
6652
+ test_fam_no_error_on_retry ,
6653
+ NULL ,
6654
+ NULL ,
6655
+ test_framework_skip_if_no_failpoint ,
6656
+ test_framework_skip_if_max_wire_version_more_than_9 );
6597
6657
}
0 commit comments