static void test_read_prefs_standalone_tags (void) { bson_t b = BSON_INITIALIZER; mongoc_read_prefs_t *read_prefs; bson_append_utf8 (&b, "dc", 2, "ny", 2); read_prefs = mongoc_read_prefs_new (MONGOC_READ_SECONDARY_PREFERRED); mongoc_read_prefs_add_tag (read_prefs, &b); mongoc_read_prefs_add_tag (read_prefs, NULL); _test_read_prefs (READ_PREF_TEST_STANDALONE, read_prefs, "{}", "{}", MONGOC_QUERY_SLAVE_OK, "{'find': 'test', 'filter': {}}", MONGOC_QUERY_SLAVE_OK); _test_read_prefs (READ_PREF_TEST_STANDALONE, read_prefs, "{'a': 1}", "{'a': 1}", MONGOC_QUERY_SLAVE_OK, "{'find': 'test', 'filter': {'a': 1}}", MONGOC_QUERY_SLAVE_OK); mongoc_read_prefs_destroy (read_prefs); }
static void test_read_prefs_mongos_tags (void) { bson_t b = BSON_INITIALIZER; mongoc_read_prefs_t *read_prefs; bson_append_utf8 (&b, "dc", 2, "ny", 2); read_prefs = mongoc_read_prefs_new (MONGOC_READ_SECONDARY_PREFERRED); mongoc_read_prefs_add_tag (read_prefs, &b); mongoc_read_prefs_add_tag (read_prefs, NULL); _test_read_prefs ( READ_PREF_TEST_MONGOS, read_prefs, "{}", "{'$query': {}, '$readPreference': {'mode': 'secondaryPreferred'," " 'tags': [{'dc': 'ny'}, {}]}}", MONGOC_QUERY_SLAVE_OK, "{'$query': {'find': 'test', 'filter': {}}," " '$readPreference': {'mode': 'secondaryPreferred'," " 'tags': [{'dc': 'ny'}, {}]}}", MONGOC_QUERY_SLAVE_OK); _test_read_prefs ( READ_PREF_TEST_MONGOS, read_prefs, "{'a': 1}", "{'$query': {'a': 1}," " '$readPreference': {'mode': 'secondaryPreferred'," " 'tags': [{'dc': 'ny'}, {}]}}", MONGOC_QUERY_SLAVE_OK, "{'$query': {'find': 'test', 'filter': {}}," " '$readPreference': {'mode': 'secondaryPreferred'," " 'tags': [{'dc': 'ny'}, {}]}}", MONGOC_QUERY_SLAVE_OK); mongoc_read_prefs_destroy (read_prefs); }
static void mongoc_uri_parse_tags (mongoc_uri_t *uri, /* IN */ const char *str) /* IN */ { const char *end_keyval; const char *end_key; bson_t b; char *keyval; char *key; bson_init(&b); again: if ((keyval = scan_to_unichar(str, ',', "", &end_keyval))) { if ((key = scan_to_unichar(keyval, ':', "", &end_key))) { bson_append_utf8(&b, key, -1, end_key + 1, -1); bson_free(key); } bson_free(keyval); str = end_keyval + 1; goto again; } else { if ((key = scan_to_unichar(str, ':', "", &end_key))) { bson_append_utf8(&b, key, -1, end_key + 1, -1); bson_free(key); } } mongoc_read_prefs_add_tag(uri->read_prefs, &b); bson_destroy(&b); }
static void test_mongoc_client_read_prefs (void) { mongoc_collection_t *collection; mongoc_read_prefs_t *read_prefs; mongoc_cursor_t *cursor; mongoc_client_t *client; mock_server_t *server; uint16_t port; const bson_t *doc; bson_error_t error; bool success = false; bson_t b = BSON_INITIALIZER; bson_t q = BSON_INITIALIZER; char *uristr; port = 20000 + (rand () % 1000); server = mock_server_new ("127.0.0.1", port, read_prefs_handler, &success); mock_server_run_in_thread (server); usleep (5000); uristr = bson_strdup_printf ("mongodb://127.0.0.1:%hu/", port); client = mongoc_client_new (uristr); if (!_mongoc_client_warm_up (client, &error)) { assert (false); } collection = mongoc_client_get_collection (client, "test", "test"); bson_append_utf8 (&b, "dc", 2, "ny", 2); read_prefs = mongoc_read_prefs_new (MONGOC_READ_SECONDARY_PREFERRED); mongoc_read_prefs_add_tag (read_prefs, &b); mongoc_read_prefs_add_tag (read_prefs, NULL); mongoc_collection_set_read_prefs (collection, read_prefs); cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 1, 0, &q, NULL, read_prefs); mongoc_cursor_next (cursor, &doc); usleep (50000); assert (success); mongoc_read_prefs_destroy (read_prefs); mongoc_cursor_destroy (cursor); mongoc_collection_destroy (collection); mongoc_client_destroy (client); mock_server_quit (server, 0); bson_destroy (&b); bson_free (uristr); }