Skip to content

Commit 49f956d

Browse files
committed
CDRIVER-837: Parse readConcernLevel from the connection string
1 parent e12e3bd commit 49f956d

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

src/mongoc/mongoc-uri.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,8 @@ mongoc_uri_parse_option (mongoc_uri_t *uri,
623623
} else if (!strcasecmp(key, "authmechanism") ||
624624
!strcasecmp(key, "authsource")) {
625625
bson_append_utf8(&uri->credentials, key, -1, value, -1);
626+
} else if (!strcasecmp(key, "readconcernlevel")) {
627+
mongoc_read_concern_set_level (uri->read_concern, value);
626628
} else if (!strcasecmp(key, "authmechanismproperties")) {
627629
if (!mongoc_uri_parse_auth_mechanism_properties(uri, value)) {
628630
bson_free(key);
@@ -926,6 +928,9 @@ mongoc_uri_new (const char *uri_string)
926928
/* Initialize read_prefs since tag parsing may add to it */
927929
uri->read_prefs = mongoc_read_prefs_new(MONGOC_READ_PRIMARY);
928930

931+
/* Initialize empty read_concern */
932+
uri->read_concern = mongoc_read_concern_new ();
933+
929934
if (!uri_string) {
930935
uri_string = "mongodb://127.0.0.1/";
931936
}
@@ -943,7 +948,7 @@ mongoc_uri_new (const char *uri_string)
943948
mongoc_uri_destroy(uri);
944949
return NULL;
945950
}
946-
951+
947952
_mongoc_uri_build_write_concern (uri);
948953

949954
if (!_mongoc_write_concern_is_valid(uri->write_concern)) {

tests/test-mongoc-uri.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,53 @@ test_mongoc_uri_write_concern (void)
707707
}
708708
}
709709

710+
static void
711+
test_mongoc_uri_read_concern (void)
712+
{
713+
const mongoc_read_concern_t *rc;
714+
mongoc_uri_t *uri;
715+
716+
uri = mongoc_uri_new ("mongodb://localhost/?readConcernLevel=majority");
717+
rc = mongoc_uri_get_read_concern (uri);
718+
ASSERT_CMPSTR (mongoc_read_concern_get_level (rc), "majority");
719+
mongoc_uri_destroy (uri);
720+
721+
uri = mongoc_uri_new ("mongodb://localhost/?readConcernLevel=" MONGOC_READ_CONCERN_LEVEL_MAJORITY);
722+
rc = mongoc_uri_get_read_concern (uri);
723+
ASSERT_CMPSTR (mongoc_read_concern_get_level (rc), "majority");
724+
mongoc_uri_destroy (uri);
725+
726+
727+
uri = mongoc_uri_new ("mongodb://localhost/?readConcernLevel=local");
728+
rc = mongoc_uri_get_read_concern (uri);
729+
ASSERT_CMPSTR (mongoc_read_concern_get_level (rc), "local");
730+
mongoc_uri_destroy (uri);
731+
732+
uri = mongoc_uri_new ("mongodb://localhost/?readConcernLevel=" MONGOC_READ_CONCERN_LEVEL_LOCAL);
733+
rc = mongoc_uri_get_read_concern (uri);
734+
ASSERT_CMPSTR (mongoc_read_concern_get_level (rc), "local");
735+
mongoc_uri_destroy (uri);
736+
737+
738+
uri = mongoc_uri_new ("mongodb://localhost/?readConcernLevel=randomstuff");
739+
rc = mongoc_uri_get_read_concern (uri);
740+
ASSERT_CMPSTR (mongoc_read_concern_get_level (rc), "randomstuff");
741+
mongoc_uri_destroy (uri);
742+
743+
744+
uri = mongoc_uri_new ("mongodb://localhost/");
745+
rc = mongoc_uri_get_read_concern (uri);
746+
ASSERT (mongoc_read_concern_get_level (rc) == NULL);
747+
mongoc_uri_destroy (uri);
748+
749+
750+
uri = mongoc_uri_new ("mongodb://localhost/?readConcernLevel=");
751+
rc = mongoc_uri_get_read_concern (uri);
752+
ASSERT_CMPSTR (mongoc_read_concern_get_level (rc), "");
753+
mongoc_uri_destroy (uri);
754+
}
755+
756+
710757

711758
void
712759
test_uri_install (TestSuite *suite)
@@ -715,6 +762,7 @@ test_uri_install (TestSuite *suite)
715762
TestSuite_Add (suite, "/Uri/new_for_host_port", test_mongoc_uri_new_for_host_port);
716763
TestSuite_Add (suite, "/Uri/unescape", test_mongoc_uri_unescape);
717764
TestSuite_Add (suite, "/Uri/read_prefs", test_mongoc_uri_read_prefs);
765+
TestSuite_Add (suite, "/Uri/read_concern", test_mongoc_uri_read_concern);
718766
TestSuite_Add (suite, "/Uri/write_concern", test_mongoc_uri_write_concern);
719767
TestSuite_Add (suite, "/HostList/from_string", test_mongoc_host_list_from_string);
720768
TestSuite_Add (suite, "/Uri/functions", test_mongoc_uri_functions);

0 commit comments

Comments
 (0)