Skip to content

Commit 7cb06d3

Browse files
committed
CDRIVER-721 additional tests
1 parent bea2210 commit 7cb06d3

File tree

3 files changed

+87
-4
lines changed

3 files changed

+87
-4
lines changed

tests/mock-server.c

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ struct _mock_server_t
5252
int maxWireVersion;
5353
int maxBsonObjectSize;
5454
int maxMessageSizeBytes;
55+
56+
const char *setName;
57+
const mongoc_host_list_t *hosts;
5558
};
5659

5760

@@ -130,6 +133,11 @@ handle_ismaster (mock_server_t *server,
130133
{
131134
bson_t reply_doc = BSON_INITIALIZER;
132135
time_t now = time (NULL);
136+
bson_t hosts_array;
137+
const char *hosts_array_key;
138+
char buf[32];
139+
uint32_t i;
140+
const mongoc_host_list_t *host;
133141

134142
BSON_ASSERT (server);
135143
BSON_ASSERT (client);
@@ -147,6 +155,21 @@ handle_ismaster (mock_server_t *server,
147155
server->maxWireVersion);
148156
bson_append_double (&reply_doc, "ok", -1, 1.0);
149157
bson_append_time_t (&reply_doc, "localtime", -1, now);
158+
if (server->setName) {
159+
BSON_APPEND_UTF8 (&reply_doc, "setName", server->setName);
160+
host = server->hosts;
161+
i = 0;
162+
bson_append_array_begin (&reply_doc, "hosts", -1, &hosts_array);
163+
164+
while (host) {
165+
bson_uint32_to_string (i, &hosts_array_key, buf, sizeof buf);
166+
BSON_APPEND_UTF8 (&hosts_array, hosts_array_key, host->host_and_port);
167+
i++;
168+
host = host->next;
169+
}
170+
171+
bson_append_array_end (&reply_doc, &hosts_array);
172+
}
150173

151174
mock_server_reply_simple (server, client, rpc, MONGOC_REPLY_NONE, &reply_doc);
152175

@@ -280,10 +303,12 @@ dummy_handler (mock_server_t *server,
280303

281304

282305
mock_server_t *
283-
mock_server_new (const char *address,
284-
uint16_t port,
285-
mock_server_handler_t handler,
286-
void *handler_data)
306+
mock_server_new_rs (const char *address,
307+
uint16_t port,
308+
mock_server_handler_t handler,
309+
void *handler_data,
310+
const char *setName,
311+
const mongoc_host_list_t *hosts)
287312
{
288313
mock_server_t *server;
289314

@@ -308,12 +333,24 @@ mock_server_new (const char *address,
308333
server->maxBsonObjectSize = 16777216;
309334
server->maxMessageSizeBytes = 48000000;
310335

336+
server->setName = setName;
337+
server->hosts = hosts;
338+
311339
mongoc_mutex_init (&server->mutex);
312340
mongoc_cond_init (&server->cond);
313341

314342
return server;
315343
}
316344

345+
mock_server_t *
346+
mock_server_new (const char *address,
347+
uint16_t port,
348+
mock_server_handler_t handler,
349+
void *handler_data)
350+
{
351+
return mock_server_new_rs (address, port, handler, handler_data, NULL, NULL);
352+
}
353+
317354

318355
int
319356
mock_server_run (mock_server_t *server)

tests/mock-server.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ mock_server_t *mock_server_new (const char *address,
4242
uint16_t port,
4343
mock_server_handler_t handler,
4444
void *handler_data);
45+
mock_server_t *mock_server_new_rs (const char *address,
46+
uint16_t port,
47+
mock_server_handler_t handler,
48+
void *handler_data,
49+
const char *setName,
50+
const mongoc_host_list_t *hosts);
4551
void mock_server_set_wire_version (mock_server_t *server,
4652
int32_t min_wire_version,
4753
int32_t max_wire_version);

tests/test-mongoc-client.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,45 @@ test_unavailable_seeds(void)
503503
}
504504

505505

506+
/* CDRIVER-721 catch errors in _mongoc_cluster_destroy */
507+
static void
508+
test_large_seed_list(void)
509+
{
510+
uint16_t port;
511+
char *uri_str;
512+
mongoc_uri_t *uri;
513+
mock_server_t *server;
514+
int i;
515+
const mongoc_host_list_t *hosts;
516+
mongoc_client_t *client;
517+
bson_error_t error;
518+
519+
port = 20000 + (rand () % 1000);
520+
uri_str = bson_strdup_printf ("mongodb://localhost:%hu,a,b,c/?replicaSet=rs",
521+
port);
522+
uri = mongoc_uri_new (uri_str);
523+
hosts = mongoc_uri_get_hosts (uri);
524+
server = mock_server_new_rs ("127.0.0.1", port, NULL, NULL,
525+
"rs", hosts);
526+
527+
mock_server_run_in_thread (server);
528+
529+
for (i = 0; i < 10; i++) {
530+
suppress_one_message ();
531+
}
532+
533+
client = mongoc_client_new_from_uri (uri);
534+
assert (client);
535+
assert (_mongoc_client_warm_up (client, &error));
536+
537+
mongoc_client_destroy (client);
538+
mock_server_quit (server, 0);
539+
mock_server_destroy (server);
540+
mongoc_uri_destroy (uri);
541+
bson_free (uri_str);
542+
}
543+
544+
506545
static void
507546
test_exhaust_cursor (void)
508547
{
@@ -742,6 +781,7 @@ test_client_install (TestSuite *suite)
742781
TestSuite_Add (suite, "/Client/command_secondary", test_mongoc_client_command_secondary);
743782
TestSuite_Add (suite, "/Client/preselect", test_mongoc_client_preselect);
744783
TestSuite_Add (suite, "/Client/unavailable_seeds", test_unavailable_seeds);
784+
TestSuite_Add (suite, "/Client/large_seed_list", test_large_seed_list);
745785
TestSuite_Add (suite, "/Client/exhaust_cursor", test_exhaust_cursor);
746786
TestSuite_Add (suite, "/Client/server_status", test_server_status);
747787
}

0 commit comments

Comments
 (0)