@@ -1446,6 +1446,87 @@ test_command_with_opts (void)
1446
1446
}
1447
1447
1448
1448
1449
+ static void
1450
+ test_command_with_opts_op_msg (void )
1451
+ {
1452
+ mock_server_t * server ;
1453
+ mongoc_client_t * client ;
1454
+ bson_t * cmd ;
1455
+ mongoc_write_concern_t * wc ;
1456
+ mongoc_read_concern_t * read_concern ;
1457
+ mongoc_read_prefs_t * prefs ;
1458
+ bson_error_t error ;
1459
+ future_t * future ;
1460
+ request_t * request ;
1461
+ bson_t opts = BSON_INITIALIZER ;
1462
+
1463
+ server = mock_mongos_new (WIRE_VERSION_OP_MSG );
1464
+
1465
+ mock_server_auto_endsessions (server );
1466
+
1467
+ mock_server_run (server );
1468
+
1469
+ client = mongoc_client_new_from_uri (mock_server_get_uri (server ));
1470
+
1471
+ /* client's write concern, read concern, read prefs are ignored */
1472
+ wc = mongoc_write_concern_new ();
1473
+ mongoc_write_concern_set_w (wc , 2 );
1474
+ mongoc_client_set_write_concern (client , wc );
1475
+
1476
+ read_concern = mongoc_read_concern_new ();
1477
+ mongoc_read_concern_set_level (read_concern , "majority" );
1478
+ mongoc_client_set_read_concern (client , read_concern );
1479
+
1480
+ prefs = mongoc_read_prefs_new (MONGOC_READ_SECONDARY );
1481
+ mongoc_client_set_read_prefs (client , prefs );
1482
+
1483
+ cmd = tmp_bson ("{'create': 'db'}" );
1484
+ future = future_client_command_with_opts (
1485
+ client , "admin" , cmd , NULL , NULL , NULL , & error );
1486
+
1487
+ request = mock_server_receives_msg (
1488
+ server ,
1489
+ 0 ,
1490
+ tmp_bson ("{"
1491
+ " 'create': 'db',"
1492
+ " 'readConcern': {'$exists': false},"
1493
+ " 'writeConcern': {'$exists': false}"
1494
+ "}" ));
1495
+
1496
+ mock_server_replies_ok_and_destroys (request );
1497
+ ASSERT_OR_PRINT (future_get_bool (future ), error );
1498
+ future_destroy (future );
1499
+
1500
+ /* write concern, read concern, and read preference passed in explicitly */
1501
+ mongoc_write_concern_append (wc , & opts );
1502
+ mongoc_read_concern_append (read_concern , & opts );
1503
+ future = future_client_command_with_opts (
1504
+ client , "admin" , cmd , prefs , & opts , NULL , & error );
1505
+
1506
+ request = mock_server_receives_msg (
1507
+ server ,
1508
+ 0 ,
1509
+ tmp_bson ("{"
1510
+ " 'create':'db',"
1511
+ " 'writeConcern': {'w': 2},"
1512
+ " 'readConcern': {'level':'majority'},"
1513
+ " '$readPreference': {"
1514
+ " 'mode':'secondary'"
1515
+ " }"
1516
+ "}" ));
1517
+
1518
+ mock_server_replies_ok_and_destroys (request );
1519
+ ASSERT_OR_PRINT (future_get_bool (future ), error );
1520
+ future_destroy (future );
1521
+
1522
+ mongoc_read_prefs_destroy (prefs );
1523
+ mongoc_read_concern_destroy (read_concern );
1524
+ mongoc_write_concern_destroy (wc );
1525
+ mongoc_client_destroy (client );
1526
+ mock_server_destroy (server );
1527
+ }
1528
+
1529
+
1449
1530
static void
1450
1531
test_command_empty (void )
1451
1532
{
@@ -3372,6 +3453,8 @@ test_client_install (TestSuite *suite)
3372
3453
suite , "/Client/command_with_opts/legacy" , test_command_with_opts_legacy );
3373
3454
TestSuite_AddMockServerTest (
3374
3455
suite , "/Client/command_with_opts" , test_command_with_opts );
3456
+ TestSuite_AddMockServerTest (
3457
+ suite , "/Client/command_with_opts/op_msg" , test_command_with_opts_op_msg );
3375
3458
TestSuite_AddMockServerTest (
3376
3459
suite , "/Client/command_with_opts/read" , test_read_command_with_opts );
3377
3460
TestSuite_AddLive (suite , "/Client/command/empty" , test_command_empty );
0 commit comments