void test_mongo_wire_cmd_custom (void) { bson *cmd; mongo_packet *p; mongo_packet_header hdr; const guint8 *data; gint32 data_size; bson_cursor *c; gint32 pos; cmd = bson_new (); bson_append_int32 (cmd, "getnonce", 1); ok (mongo_wire_cmd_custom (1, "test", 0, NULL) == NULL, "mongo_wire_cmd_custom() fails with a NULL command"); ok (mongo_wire_cmd_custom (1, "test", 0, cmd) == NULL, "mongo_wire_cmd_custom() fails with an unfinished command"); bson_finish (cmd); ok (mongo_wire_cmd_custom (1, NULL, 0, cmd) == NULL, "mongo_wire_cmd_custom() fails with a NULL db"); ok ((p = mongo_wire_cmd_custom (1, "test", 0, cmd)) != NULL, "mongo_wire_cmd_custom() works"); bson_free (cmd); /* Verify the header */ mongo_wire_packet_get_header (p, &hdr); cmp_ok ((data_size = mongo_wire_packet_get_data (p, &data)), "!=", -1, "Packet data size looks fine"); cmp_ok (hdr.length, "==", sizeof (mongo_packet_header) + data_size, "Packet header length is OK"); cmp_ok (hdr.id, "==", 1, "Packet request ID is ok"); cmp_ok (hdr.resp_to, "==", 0, "Packet reply ID is ok"); /* * Test the created request */ /* pos = zero + collection_name + NULL + skip + ret */ pos = sizeof (gint32) + strlen ("test.$cmd") + 1 + sizeof (gint32) * 2; ok ((cmd = bson_new_from_data (data + pos, _DOC_SIZE (data, pos) - 1)) != NULL, "Packet contains a BSON document"); bson_finish (cmd); ok ((c = bson_find (cmd, "getnonce")) != NULL, "BSON object contains a 'getnonce' key"); cmp_ok (bson_cursor_type (c), "==", BSON_TYPE_INT32, "'getnonce' key has the correct type"); ok (bson_cursor_next (c) == FALSE, "'getnonce' key is the last in the object"); bson_cursor_free (c); bson_free (cmd); mongo_wire_packet_free (p); }
void test_mongo_packet_recv_ssl (void) { mongo_connection c, *conn; mongo_packet *p; bson *b; c.fd = -1; ok (mongo_packet_recv (NULL) == NULL, "mongo_packet_recv() fails with a NULL connection"); ok (errno == ENOTCONN, "mongo_packet_recv() sets errno to ENOTCONN if connection is NULL"); ok (mongo_packet_recv (&c) == NULL, "mongo_packet_recv() fails if the FD is less than zero"); ok (errno == EBADF, "mongo_packet_recv() sets errno to EBADF is the FD is bad"); begin_ssl_tests (2); b = bson_new (); bson_append_int32 (b, "getnonce", 1); bson_finish (b); p = mongo_wire_cmd_custom (42, config.db, 0, b); bson_free (b); conn = mongo_ssl_connect (config.primary_host, config.primary_port, config.ssl_settings); mongo_packet_send (conn, p); mongo_wire_packet_free (p); ok ((p = mongo_packet_recv (conn)) != NULL, "mongo_packet_recv() works"); mongo_wire_packet_free (p); close (conn->fd); sleep (3); ok (mongo_packet_recv (conn) == NULL, "mongo_packet_recv() fails on a closed socket"); mongo_disconnect (conn); end_ssl_tests (); }
void test_mongo_connection_get_requestid (void) { mongo_connection c, *conn; mongo_packet *p; bson *b; gint reqid; c.request_id = 42; ok (mongo_connection_get_requestid (NULL) == -1, "mongo_connection_get_requestid() fails with a NULL connection"); ok (mongo_connection_get_requestid (&c) == 42, "mongo_connection_get_requestid() works"); begin_network_tests (2); b = bson_new (); bson_append_int32 (b, "getnonce", 1); bson_finish (b); p = mongo_wire_cmd_custom (42, config.db, 0, b); bson_free (b); conn = mongo_connect (config.primary_host, config.primary_port); cmp_ok ((reqid = mongo_connection_get_requestid (conn)), "==", 0, "Initial request id is 0"); mongo_packet_send (conn, p); mongo_wire_packet_free (p); cmp_ok (reqid, "<", mongo_connection_get_requestid (conn), "Old request ID is smaller than the new one"); mongo_disconnect (conn); end_network_tests (); }