Skip to content

Commit d677bbb

Browse files
authored
CDRIVER-3422 add unified test setup/teardown (#699)
1 parent 0efad4c commit d677bbb

File tree

3 files changed

+773
-53
lines changed

3 files changed

+773
-53
lines changed

src/libmongoc/tests/test-conveniences.c

Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,29 @@ tmp_bson (const char *json, ...)
137137
return doc;
138138
}
139139

140+
MONGOC_PRINTF_FORMAT (1, 2)
141+
const char *
142+
tmp_str (const char *format, ...)
143+
{
144+
va_list args;
145+
char *str;
146+
147+
test_conveniences_init ();
148+
va_start (args, format);
149+
str = bson_strdupv_printf (format, args);
150+
va_end (args);
151+
152+
_mongoc_array_append_val (&gTmpStringArray, str);
153+
return (const char *) str;
154+
}
155+
140156
const char *
141157
tmp_json (const bson_t *bson)
142158
{
143159
char *str;
144160

161+
test_conveniences_init ();
162+
145163
if (!bson) {
146164
return "(NULL)";
147165
}
@@ -231,6 +249,19 @@ bson_lookup_value (const bson_t *b, const char *key, bson_value_t *value)
231249
bson_value_copy (bson_iter_value (&iter), value);
232250
}
233251

252+
bson_t*
253+
bson_lookup_bson (const bson_t *b, const char *key) {
254+
bson_iter_t iter;
255+
bson_t tmp;
256+
257+
bson_lookup (b, key, &iter);
258+
if (!BSON_ITER_HOLDS_DOCUMENT (&iter) && !BSON_ITER_HOLDS_ARRAY (&iter)) {
259+
test_error ("Expected '%s' to resolve to BSON: %s", key, tmp_json (b));
260+
}
261+
262+
bson_iter_bson (&iter, &tmp);
263+
return bson_new_from_data (bson_get_data (&tmp), tmp.len);
264+
}
234265

235266
/*--------------------------------------------------------------------------
236267
*
@@ -1873,25 +1904,24 @@ semver_parse (const char *str, semver_t *out)
18731904
return;
18741905
}
18751906
out->has_minor = true;
1876-
out->minor = (int) bson_ascii_strtoll (str, &dot, 10);
1907+
out->minor = (int) bson_ascii_strtoll (dot, &dot, 10);
18771908

18781909
if (*dot == '.') {
18791910
dot++;
18801911
} else {
18811912
return;
18821913
}
18831914
out->has_patch = true;
1884-
out->patch = (int) bson_ascii_strtoll (str, &dot, 10);
1915+
out->patch = (int) bson_ascii_strtoll (dot, &dot, 10);
18851916
}
18861917

18871918
void
1888-
server_semver (semver_t *out) {
1889-
mongoc_client_t *client;
1919+
server_semver (mongoc_client_t *client, semver_t *out)
1920+
{
18901921
bson_t reply;
18911922
bson_error_t error;
1892-
const char* server_version_str;
1923+
const char *server_version_str;
18931924

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

19031933
bson_destroy (&reply);
1904-
mongoc_client_destroy (client);
19051934
}
19061935

1907-
int semver_cmp (semver_t *a, semver_t *b) {
1936+
int
1937+
semver_cmp (semver_t *a, semver_t *b)
1938+
{
19081939
if (a->major < b->major) {
19091940
return -1;
19101941
} else if (a->major > b->major) {
@@ -1925,3 +1956,17 @@ int semver_cmp (semver_t *a, semver_t *b) {
19251956

19261957
return 0;
19271958
}
1959+
1960+
int
1961+
semver_cmp_str (semver_t *a, const char* str) {
1962+
semver_t b;
1963+
1964+
semver_parse (str, &b);
1965+
return semver_cmp (a, &b);
1966+
}
1967+
1968+
const char *
1969+
semver_to_string (semver_t *semver)
1970+
{
1971+
return tmp_str ("%d.%d.%d", semver->major, semver->minor, semver->patch);
1972+
}

src/libmongoc/tests/test-conveniences.h

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ test_conveniences_cleanup ();
4343
bson_t *
4444
tmp_bson (const char *json, ...);
4545

46+
/* Return a string, with possible printf format directives. String is
47+
* automatically freed at test cleanup. */
48+
const char *
49+
tmp_str (const char *fmt, ...);
50+
4651
/* Return a JSON string representation of BSON. String is freed automatically at
4752
* test cleanup. */
4853
const char *
@@ -81,6 +86,9 @@ value_init_from_doc (bson_value_t *value, const bson_t *doc);
8186
void
8287
bson_lookup_value (const bson_t *b, const char *key, bson_value_t *value);
8388

89+
bson_t *
90+
bson_lookup_bson (const bson_t *b, const char *key);
91+
8492
void
8593
bson_lookup_doc (const bson_t *b, const char *key, bson_t *doc);
8694

@@ -235,8 +243,32 @@ void
235243
semver_parse (const char *str, semver_t *out);
236244

237245
void
238-
server_semver (semver_t *out);
246+
server_semver (mongoc_client_t *client, semver_t *out);
247+
248+
int
249+
semver_cmp (semver_t *a, semver_t *b);
250+
251+
int
252+
semver_cmp_str (semver_t *a, const char *str);
239253

240-
int semver_cmp (semver_t *a, semver_t *b);
254+
const char *
255+
semver_to_string (semver_t *str);
256+
257+
/* Iterate over a BSON document or array.
258+
*
259+
* Example of iterating and printing an array of BSON documents:
260+
*
261+
* bson_iter_t iter;
262+
* bson_t *arr = my_func();
263+
*
264+
* BSON_FOREACH (arr, iter) {
265+
* bson_t el;
266+
* bson_iter_bson (&iter, &el);
267+
* printf ("%d: %s", bson_iter_key (&iter), tmp_json (&el));
268+
* }
269+
*/
270+
#define BSON_FOREACH(bson, iter_varname) \
271+
for (bson_iter_init (&(iter_varname), (bson)); \
272+
bson_iter_next (&(iter_varname));)
241273

242274
#endif /* TEST_CONVENIENCES_H */

0 commit comments

Comments
 (0)