1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
#include "test.h"
#include <mongo.h>
#include <errno.h>
#include <string.h>
void
test_func_mongo_sync_cursor_iterate (void)
{
mongo_sync_connection *conn;
bson *query, *result;
mongo_sync_cursor *sc;
bson_cursor *c;
gint i;
gint32 first_i32 = -1, last_i32 = -1, current_i32 = -1;
gboolean early_break = FALSE, continous = TRUE;
conn = mongo_sync_connect (config.primary_host, config.primary_port, FALSE);
for (i = 0; i < 10; i++)
{
bson *data = bson_new ();
bson_append_boolean (data, "f_sync_cursor_iterate", TRUE);
bson_append_int32 (data, "i32", 42 * 100 + i);
bson_finish (data);
mongo_sync_cmd_insert (conn, config.ns, data, NULL);
bson_free (data);
}
query = bson_new ();
bson_append_boolean (query, "f_sync_cursor_iterate", TRUE);
bson_finish (query);
sc = mongo_sync_cursor_new (conn, config.ns,
mongo_sync_cmd_query (conn, config.ns, 0, 0, 3,
query, NULL));
bson_free (query);
ok (sc != NULL,
"mongo_sync_cursor_new() works");
result = mongo_sync_cursor_get_data (sc);
ok (result == NULL,
"mongo_sync_cursor_get_data() should fail without _cursor_next()");
i = 0;
while (mongo_sync_cursor_next (sc) && i < 10)
{
result = mongo_sync_cursor_get_data (sc);
if (!result)
{
early_break = TRUE;
break;
}
i++;
c = bson_find (result, "i32");
bson_cursor_get_int32 (c, ¤t_i32);
bson_cursor_free (c);
bson_free (result);
if (first_i32 == -1)
{
first_i32 = current_i32;
last_i32 = first_i32 - 1;
}
if (current_i32 != last_i32 + 1)
continous = FALSE;
last_i32 = current_i32;
}
ok (early_break == FALSE,
"mongo_sync_cursor_next() can iterate over the whole stuff");
ok (continous == TRUE,
"mongo_sync_cursor_next() iterates over all elements");
cmp_ok (first_i32, "!=", last_i32,
"Iteration returns different elements, as expected");
cmp_ok (i, ">=", 10,
"Iteration really does return all documents");
mongo_sync_cursor_free (sc);
mongo_sync_disconnect (conn);
}
RUN_NET_TEST (6, func_mongo_sync_cursor_iterate);
|