diff options
Diffstat (limited to 'tests/func/mongo/client/f_client_big_packet.c')
-rw-r--r-- | tests/func/mongo/client/f_client_big_packet.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/func/mongo/client/f_client_big_packet.c b/tests/func/mongo/client/f_client_big_packet.c new file mode 100644 index 0000000..38176ff --- /dev/null +++ b/tests/func/mongo/client/f_client_big_packet.c @@ -0,0 +1,57 @@ +#include "test.h" +#include "mongo.h" + +#define BIG_PACKET_SIZE 2 * 1024 * 1024 + +void +test_func_client_big_packet (void) +{ + mongo_connection *conn; + mongo_packet *p; + + guint8 *data; + bson *b; + gint32 exp_size; + + conn = mongo_connect (config.primary_host, config.primary_port); + + b = bson_new_sized (BIG_PACKET_SIZE + 1024); + data = g_malloc (BIG_PACKET_SIZE); + memset (data, 'z', BIG_PACKET_SIZE); + bson_append_boolean (b, "big_packet_size", TRUE); + bson_append_binary (b, "bighead", BSON_BINARY_SUBTYPE_GENERIC, + data, BIG_PACKET_SIZE); + bson_finish (b); + exp_size = bson_size (b); + + p = mongo_wire_cmd_insert (1, config.ns, b, NULL); + mongo_packet_send (conn, p); + bson_free (b); + mongo_wire_packet_free (p); + + b = bson_new (); + bson_append_boolean (b, "big_packet_size", TRUE); + bson_finish (b); + + p = mongo_wire_cmd_query (2, config.ns, 0, 0, 1, b, NULL); + mongo_packet_send (conn, p); + mongo_wire_packet_free (p); + bson_free (b); + + p = mongo_packet_recv (conn); + ok (p != NULL, + "mongo_packet_recv() works with a huge packet"); + + mongo_wire_reply_packet_get_nth_document (p, 1, &b); + bson_finish (b); + mongo_wire_packet_free (p); + + cmp_ok (exp_size + 17, "==", bson_size (b), /* +17: _id + value */ + "Huge packet receiving works, and returns a same sized packet"); + + bson_free (b); + + mongo_disconnect (conn); +} + +RUN_NET_TEST (2, func_client_big_packet); |