3
#include "mongo-wire.h"
8
test_mongo_wire_cmd_query (void)
13
mongo_packet_header hdr;
20
q = test_bson_generate_full ();
22
bson_append_boolean (s, "_id", TRUE);
23
bson_append_boolean (s, "double", TRUE);
28
ok (mongo_wire_cmd_query (1, NULL, 0, 0, 0, q, s) == NULL,
29
"mongo_wire_cmd_query() fails whith a NULL namespace");
30
ok (mongo_wire_cmd_query (1, "test.ns", 0, 0, 0, NULL, s) == NULL,
31
"mongo_wire_cmd_query() fails with a NULL query");
32
ok (mongo_wire_cmd_query (1, "test.ns", 0, 0, 0, tmp, s) == NULL,
33
"mongo_wire_cmd_query() fails with an unfinished query");
34
ok (mongo_wire_cmd_query (1, "test.ns", 0, 0, 0, q, tmp) == NULL,
35
"mongo_wire_cmd_query() fails with an unfinished selector");
38
ok ((p = mongo_wire_cmd_query (1, "test.ns", 0, 0, 10, q, NULL)) != NULL,
39
"mongo_wire_cmd_query() works with a NULL selector");
41
mongo_wire_packet_get_header (p, &hdr);
42
cmp_ok ((data_size = mongo_wire_packet_get_data (p, &data)), "!=", -1,
43
"Packet data size looks fine");
44
cmp_ok (hdr.length, "==", sizeof (mongo_packet_header) + data_size,
45
"Packet header length is OK");
46
cmp_ok (hdr.id, "==", 1, "Packet request ID is ok");
47
cmp_ok (hdr.resp_to, "==", 0, "Packet reply ID is ok");
49
/* pos = zero + collection_name + NULL + skip + ret */
50
pos = sizeof (gint32) + strlen ("test.ns") + 1 + sizeof (gint32) * 2;
51
ok ((tmp = bson_new_from_data (data + pos,
52
bson_stream_doc_size (data, pos) - 1)) != NULL,
53
"Packet contains a valid BSON query document");
56
ok ((c = bson_find (tmp, "int32")) != NULL,
57
"BSON contains 'int32'");
58
cmp_ok (bson_cursor_type (c), "==", BSON_TYPE_INT32,
59
"int32 has correct type");
61
cmp_ok (bson_cursor_type (c), "==", BSON_TYPE_INT64,
62
"next element has correct type too");
63
ok (bson_cursor_next (c) == FALSE,
64
"No more data after the update BSON object");
67
cmp_ok (hdr.length, "==", sizeof (mongo_packet_header) + pos +
69
"Packet header lenght is correct");
71
mongo_wire_packet_free (p);
74
* Test again with a selector document
77
ok ((p = mongo_wire_cmd_query (1, "test.ns", 0, 0, 10, q, s)) != NULL,
78
"mongo_wire_cmd_query() works with a NULL selector");
80
mongo_wire_packet_get_header (p, &hdr);
81
cmp_ok ((data_size = mongo_wire_packet_get_data (p, &data)), "!=", -1,
82
"Packet data size looks fine");
83
cmp_ok (hdr.length, "==", sizeof (mongo_packet_header) + data_size,
84
"Packet header length is OK");
85
cmp_ok (hdr.id, "==", 1, "Packet request ID is ok");
86
cmp_ok (hdr.resp_to, "==", 0, "Packet reply ID is ok");
88
/* pos = zero + collection_name + NULL + skip + ret */
89
pos = sizeof (gint32) + strlen ("test.ns") + 1 + sizeof (gint32) * 2;
90
ok ((tmp = bson_new_from_data (data + pos,
91
bson_stream_doc_size (data, pos) - 1)) != NULL,
92
"Packet contains a valid BSON query document");
94
pos += bson_size (tmp);
99
ok ((s = bson_new_from_data (data + pos,
100
bson_stream_doc_size (data, pos) - 1)) != NULL,
101
"Packet contains a valid BSON selector document");
104
ok ((c = bson_find (s, "_id")) != NULL,
105
"BSON contains '_id'");
106
cmp_ok (bson_cursor_type (c), "==", BSON_TYPE_BOOLEAN,
107
"_id has correct type");
108
bson_cursor_next (c);
109
cmp_ok (bson_cursor_type (c), "==", BSON_TYPE_BOOLEAN,
110
"next element has correct type too");
112
bson_cursor_free (c);
114
mongo_wire_packet_free (p);
117
RUN_TEST (25, mongo_wire_cmd_query);