Skip to content

CDRIVER-3422 add unified test setup/teardown #699

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Dec 4, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 53 additions & 8 deletions src/libmongoc/tests/test-conveniences.c
Original file line number Diff line number Diff line change
Expand Up @@ -137,11 +137,29 @@ tmp_bson (const char *json, ...)
return doc;
}

MONGOC_PRINTF_FORMAT (1, 2)
const char *
tmp_str (const char *format, ...)
{
va_list args;
char *str;

test_conveniences_init ();
va_start (args, format);
str = bson_strdupv_printf (format, args);
va_end (args);

_mongoc_array_append_val (&gTmpStringArray, str);
return (const char *) str;
}

const char *
tmp_json (const bson_t *bson)
{
char *str;

test_conveniences_init ();

if (!bson) {
return "(NULL)";
}
Expand Down Expand Up @@ -231,6 +249,19 @@ bson_lookup_value (const bson_t *b, const char *key, bson_value_t *value)
bson_value_copy (bson_iter_value (&iter), value);
}

bson_t*
bson_lookup_bson (const bson_t *b, const char *key) {
bson_iter_t iter;
bson_t tmp;

bson_lookup (b, key, &iter);
if (!BSON_ITER_HOLDS_DOCUMENT (&iter) && !BSON_ITER_HOLDS_ARRAY (&iter)) {
test_error ("Expected '%s' to resolve to BSON: %s", key, tmp_json (b));
}

bson_iter_bson (&iter, &tmp);
return bson_new_from_data (bson_get_data (&tmp), tmp.len);
}

/*--------------------------------------------------------------------------
*
Expand Down Expand Up @@ -1873,25 +1904,24 @@ semver_parse (const char *str, semver_t *out)
return;
}
out->has_minor = true;
out->minor = (int) bson_ascii_strtoll (str, &dot, 10);
out->minor = (int) bson_ascii_strtoll (dot, &dot, 10);

if (*dot == '.') {
dot++;
} else {
return;
}
out->has_patch = true;
out->patch = (int) bson_ascii_strtoll (str, &dot, 10);
out->patch = (int) bson_ascii_strtoll (dot, &dot, 10);
}

void
server_semver (semver_t *out) {
mongoc_client_t *client;
server_semver (mongoc_client_t *client, semver_t *out)
{
bson_t reply;
bson_error_t error;
const char* server_version_str;
const char *server_version_str;

client = test_framework_client_new ();
ASSERT_OR_PRINT (
mongoc_client_command_simple (
client, "admin", tmp_bson ("{'buildinfo': 1}"), NULL, &reply, &error),
Expand All @@ -1901,10 +1931,11 @@ server_semver (semver_t *out) {
semver_parse (server_version_str, out);

bson_destroy (&reply);
mongoc_client_destroy (client);
}

int semver_cmp (semver_t *a, semver_t *b) {
int
semver_cmp (semver_t *a, semver_t *b)
{
if (a->major < b->major) {
return -1;
} else if (a->major > b->major) {
Expand All @@ -1925,3 +1956,17 @@ int semver_cmp (semver_t *a, semver_t *b) {

return 0;
}

int
semver_cmp_str (semver_t *a, const char* str) {
semver_t b;

semver_parse (str, &b);
return semver_cmp (a, &b);
}

const char *
semver_to_string (semver_t *semver)
{
return tmp_str ("%d.%d.%d", semver->major, semver->minor, semver->patch);
}
36 changes: 34 additions & 2 deletions src/libmongoc/tests/test-conveniences.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ test_conveniences_cleanup ();
bson_t *
tmp_bson (const char *json, ...);

/* Return a string, with possible printf format directives. String is
* automatically freed at test cleanup. */
const char *
tmp_str (const char *fmt, ...);

/* Return a JSON string representation of BSON. String is freed automatically at
* test cleanup. */
const char *
Expand Down Expand Up @@ -81,6 +86,9 @@ value_init_from_doc (bson_value_t *value, const bson_t *doc);
void
bson_lookup_value (const bson_t *b, const char *key, bson_value_t *value);

bson_t *
bson_lookup_bson (const bson_t *b, const char *key);

void
bson_lookup_doc (const bson_t *b, const char *key, bson_t *doc);

Expand Down Expand Up @@ -235,8 +243,32 @@ void
semver_parse (const char *str, semver_t *out);

void
server_semver (semver_t *out);
server_semver (mongoc_client_t *client, semver_t *out);

int
semver_cmp (semver_t *a, semver_t *b);

int
semver_cmp_str (semver_t *a, const char *str);

int semver_cmp (semver_t *a, semver_t *b);
const char *
semver_to_string (semver_t *str);

/* Iterate over a BSON document or array.
*
* Example of iterating and printing an array of BSON documents:
*
* bson_iter_t iter;
* bson_t *arr = my_func();
*
* BSON_FOREACH (arr, iter) {
* bson_t el;
* bson_iter_bson (&iter, &el);
* printf ("%d: %s", bson_iter_key (&iter), tmp_json (&el));
* }
*/
#define BSON_FOREACH(bson, iter_varname) \
for (bson_iter_init (&(iter_varname), (bson)); \
bson_iter_next (&(iter_varname));)

#endif /* TEST_CONVENIENCES_H */
Loading