@@ -454,6 +454,86 @@ test_cursor_primary_read_pref (void *ctx)
454
454
}
455
455
456
456
457
+ /* test the fix to CDRIVER-2815. */
458
+ void
459
+ test_inherit_from_client (void * ctx )
460
+ {
461
+ mongoc_client_t * client ;
462
+ mongoc_client_session_t * session ;
463
+ bson_error_t error ;
464
+ mongoc_uri_t * uri ;
465
+ mongoc_read_concern_t * rc ;
466
+ const mongoc_read_concern_t * returned_rc ;
467
+ mongoc_read_prefs_t * rp ;
468
+ const mongoc_read_prefs_t * returned_rp ;
469
+ mongoc_write_concern_t * wc ;
470
+ const mongoc_write_concern_t * returned_wc ;
471
+ mongoc_session_opt_t * sopt ;
472
+ const mongoc_session_opt_t * returned_sopt ;
473
+ mongoc_transaction_opt_t * topt ;
474
+ const mongoc_transaction_opt_t * returned_topt ;
475
+
476
+ uri = test_framework_get_uri ();
477
+
478
+ rc = mongoc_read_concern_new ();
479
+ mongoc_read_concern_set_level (rc , MONGOC_READ_CONCERN_LEVEL_MAJORITY );
480
+ mongoc_uri_set_read_concern (uri , rc );
481
+
482
+ rp = mongoc_read_prefs_new (MONGOC_READ_NEAREST );
483
+ mongoc_uri_set_read_prefs_t (uri , rp );
484
+
485
+ wc = mongoc_write_concern_new ();
486
+ mongoc_write_concern_set_w (wc , 0 );
487
+ mongoc_uri_set_write_concern (uri , wc );
488
+
489
+ client = mongoc_client_new_from_uri (uri );
490
+
491
+ sopt = mongoc_session_opts_new ();
492
+ topt = mongoc_transaction_opts_new ();
493
+
494
+ mongoc_transaction_opts_set_read_concern (topt , rc );
495
+ mongoc_transaction_opts_set_read_prefs (topt , rp );
496
+ mongoc_transaction_opts_set_write_concern (topt , wc );
497
+
498
+ mongoc_session_opts_set_default_transaction_opts (sopt , topt );
499
+
500
+ session = mongoc_client_start_session (client , sopt , & error );
501
+ ASSERT_OR_PRINT (session , error );
502
+
503
+ /* test that unacknowledged write concern is actually used, since it should
504
+ * result in an error. */
505
+ ASSERT (!mongoc_client_session_start_transaction (session , NULL , & error ));
506
+ ASSERT_ERROR_CONTAINS (
507
+ error ,
508
+ MONGOC_ERROR_TRANSACTION ,
509
+ MONGOC_ERROR_TRANSACTION_INVALID_STATE ,
510
+ "Transactions do not support unacknowledged write concern" );
511
+
512
+ returned_sopt = mongoc_client_session_get_opts (session );
513
+ returned_topt =
514
+ mongoc_session_opts_get_default_transaction_opts (returned_sopt );
515
+ returned_rc = mongoc_transaction_opts_get_read_concern (returned_topt );
516
+ returned_rp = mongoc_transaction_opts_get_read_prefs (returned_topt );
517
+ returned_wc = mongoc_transaction_opts_get_write_concern (returned_topt );
518
+
519
+ BSON_ASSERT (strcmp (mongoc_read_concern_get_level (returned_rc ),
520
+ mongoc_read_concern_get_level (rc )) == 0 );
521
+ BSON_ASSERT (mongoc_write_concern_get_w (returned_wc ) ==
522
+ mongoc_write_concern_get_w (wc ));
523
+ BSON_ASSERT (mongoc_read_prefs_get_mode (returned_rp ) ==
524
+ mongoc_read_prefs_get_mode (rp ));
525
+
526
+ mongoc_read_concern_destroy (rc );
527
+ mongoc_read_prefs_destroy (rp );
528
+ mongoc_write_concern_destroy (wc );
529
+ mongoc_transaction_opts_destroy (topt );
530
+ mongoc_session_opts_destroy (sopt );
531
+ mongoc_client_session_destroy (session );
532
+ mongoc_uri_destroy (uri );
533
+ mongoc_client_destroy (client );
534
+ }
535
+
536
+
457
537
void
458
538
test_transactions_install (TestSuite * suite )
459
539
{
@@ -496,4 +576,10 @@ test_transactions_install (TestSuite *suite)
496
576
NULL ,
497
577
NULL ,
498
578
test_framework_skip_if_no_txns );
579
+ TestSuite_AddFull (suite ,
580
+ "/transactions/inherit_from_client" ,
581
+ test_inherit_from_client ,
582
+ NULL ,
583
+ NULL ,
584
+ test_framework_skip_if_no_txns );
499
585
}
0 commit comments