Skip to content

Commit ce422b1

Browse files
committed
configurable request timeout in mock server
Also, return NULL instead of aborting if the timeout is exceeded.
1 parent 2ac850a commit ce422b1

File tree

2 files changed

+81
-37
lines changed

2 files changed

+81
-37
lines changed

tests/mock_server/mock-server.c

Lines changed: 76 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ struct _mock_server_t
4141
bool stopped;
4242
bool verbose;
4343
bool rand_delay;
44+
int64_t request_timeout_msec;
4445
uint16_t port;
4546
mongoc_socket_t *sock;
4647
char *uri_str;
@@ -108,6 +109,7 @@ mock_server_new ()
108109
{
109110
mock_server_t *server = bson_malloc0 (sizeof (mock_server_t));
110111

112+
server->request_timeout_msec = 10 * 1000;
111113
_mongoc_array_init (&server->autoresponders,
112114
sizeof (autoresponder_handle_t));
113115
_mongoc_array_init (&server->worker_threads,
@@ -536,6 +538,48 @@ mock_server_set_verbose (mock_server_t *server, bool verbose)
536538
}
537539

538540

541+
/*--------------------------------------------------------------------------
542+
*
543+
* mock_server_get_request_timeout_msec --
544+
*
545+
* How long mock_server_receives_* functions wait for a client
546+
* request before giving up and returning NULL.
547+
*
548+
*--------------------------------------------------------------------------
549+
*/
550+
551+
int64_t
552+
mock_server_get_request_timeout_msec (mock_server_t *server)
553+
{
554+
int64_t request_timeout_msec;
555+
556+
mongoc_mutex_lock (&server->mutex);
557+
request_timeout_msec = server->request_timeout_msec;
558+
mongoc_mutex_unlock (&server->mutex);
559+
560+
return request_timeout_msec;
561+
}
562+
563+
/*--------------------------------------------------------------------------
564+
*
565+
* mock_server_set_request_timeout_msec --
566+
*
567+
* How long mock_server_receives_* functions wait for a client
568+
* request before giving up and returning NULL.
569+
*
570+
*--------------------------------------------------------------------------
571+
*/
572+
573+
void
574+
mock_server_set_request_timeout_msec (mock_server_t *server,
575+
int64_t request_timeout_msec)
576+
{
577+
mongoc_mutex_lock (&server->mutex);
578+
server->request_timeout_msec = request_timeout_msec;
579+
mongoc_mutex_unlock (&server->mutex);
580+
}
581+
582+
539583
/*--------------------------------------------------------------------------
540584
*
541585
* mock_server_get_rand_delay --
@@ -626,17 +670,16 @@ mock_server_receives_command (mock_server_t *server,
626670
ns = bson_strdup_printf ("%s.$cmd", database_name);
627671

628672
q = mock_server_get_queue (server);
629-
/* TODO: get timeout val from mock_server_t */
630-
request = (request_t *) q_get (q, 10 * 1000);
631-
632-
if (!request_matches_query (request,
633-
ns,
634-
flags,
635-
0,
636-
1,
637-
formatted_command_json,
638-
NULL,
639-
true)) {
673+
request = (request_t *) q_get (q, server->request_timeout_msec);
674+
675+
if (request && !request_matches_query (request,
676+
ns,
677+
flags,
678+
0,
679+
1,
680+
formatted_command_json,
681+
NULL,
682+
true)) {
640683
request_destroy (request);
641684
request = NULL;
642685
}
@@ -730,17 +773,16 @@ mock_server_receives_query (mock_server_t *server,
730773
request_t *request;
731774

732775
q = mock_server_get_queue (server);
733-
/* TODO: get timeout val from mock_server_t */
734-
request = (request_t *) q_get (q, 10 * 1000);
735-
736-
if (!request_matches_query (request,
737-
ns,
738-
flags,
739-
skip,
740-
n_return,
741-
query_json,
742-
fields_json,
743-
false)) {
776+
request = (request_t *) q_get (q, server->request_timeout_msec);
777+
778+
if (request && !request_matches_query (request,
779+
ns,
780+
flags,
781+
skip,
782+
n_return,
783+
query_json,
784+
fields_json,
785+
false)) {
744786
request_destroy (request);
745787
return NULL;
746788
}
@@ -777,13 +819,12 @@ mock_server_receives_insert (mock_server_t *server,
777819
request_t *request;
778820

779821
q = mock_server_get_queue (server);
780-
/* TODO: get timeout val from mock_server_t */
781-
request = (request_t *) q_get (q, 10 * 1000);
822+
request = (request_t *) q_get (q, server->request_timeout_msec);
782823

783-
if (!request_matches_insert (request,
784-
ns,
785-
flags,
786-
doc_json)) {
824+
if (request && !request_matches_insert (request,
825+
ns,
826+
flags,
827+
doc_json)) {
787828
request_destroy (request);
788829
return NULL;
789830
}
@@ -819,13 +860,12 @@ mock_server_receives_bulk_insert (mock_server_t *server,
819860
request_t *request;
820861

821862
q = mock_server_get_queue (server);
822-
/* TODO: get timeout val from mock_server_t */
823-
request = (request_t *) q_get (q, 10 * 1000);
863+
request = (request_t *) q_get (q, server->request_timeout_msec);
824864

825-
if (!request_matches_bulk_insert (request,
826-
ns,
827-
flags,
828-
n)) {
865+
if (request && !request_matches_bulk_insert (request,
866+
ns,
867+
flags,
868+
n)) {
829869
request_destroy (request);
830870
return NULL;
831871
}
@@ -863,10 +903,9 @@ request_t *mock_server_receives_kill_cursors (mock_server_t *server,
863903

864904
q = mock_server_get_queue (server);
865905

866-
/* TODO: get timeout val from mock_server_t */
867-
request = (request_t *) q_get (q, 10 * 1000);
906+
request = (request_t *) q_get (q, server->request_timeout_msec);
868907

869-
if (!request_matches_kill_cursors (request, cursor_id)) {
908+
if (request && !request_matches_kill_cursors (request, cursor_id)) {
870909
request_destroy (request);
871910
return NULL;
872911
}

tests/mock_server/mock-server.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ bool mock_server_get_verbose (mock_server_t *server);
7272
void mock_server_set_verbose (mock_server_t *server,
7373
bool verbose);
7474

75+
int64_t mock_server_get_request_timeout_msec (mock_server_t *server);
76+
77+
void mock_server_set_request_timeout_msec (mock_server_t *server,
78+
int64_t request_timeout_msec);
79+
7580
bool mock_server_get_rand_delay (mock_server_t *server);
7681

7782
void mock_server_set_rand_delay (mock_server_t *server,

0 commit comments

Comments
 (0)