@@ -137,11 +137,29 @@ tmp_bson (const char *json, ...)
137
137
return doc ;
138
138
}
139
139
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
+
140
156
const char *
141
157
tmp_json (const bson_t * bson )
142
158
{
143
159
char * str ;
144
160
161
+ test_conveniences_init ();
162
+
145
163
if (!bson ) {
146
164
return "(NULL)" ;
147
165
}
@@ -231,6 +249,19 @@ bson_lookup_value (const bson_t *b, const char *key, bson_value_t *value)
231
249
bson_value_copy (bson_iter_value (& iter ), value );
232
250
}
233
251
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
+ }
234
265
235
266
/*--------------------------------------------------------------------------
236
267
*
@@ -1873,25 +1904,24 @@ semver_parse (const char *str, semver_t *out)
1873
1904
return ;
1874
1905
}
1875
1906
out -> has_minor = true;
1876
- out -> minor = (int ) bson_ascii_strtoll (str , & dot , 10 );
1907
+ out -> minor = (int ) bson_ascii_strtoll (dot , & dot , 10 );
1877
1908
1878
1909
if (* dot == '.' ) {
1879
1910
dot ++ ;
1880
1911
} else {
1881
1912
return ;
1882
1913
}
1883
1914
out -> has_patch = true;
1884
- out -> patch = (int ) bson_ascii_strtoll (str , & dot , 10 );
1915
+ out -> patch = (int ) bson_ascii_strtoll (dot , & dot , 10 );
1885
1916
}
1886
1917
1887
1918
void
1888
- server_semver (semver_t * out ) {
1889
- mongoc_client_t * client ;
1919
+ server_semver (mongoc_client_t * client , semver_t * out )
1920
+ {
1890
1921
bson_t reply ;
1891
1922
bson_error_t error ;
1892
- const char * server_version_str ;
1923
+ const char * server_version_str ;
1893
1924
1894
- client = test_framework_client_new ();
1895
1925
ASSERT_OR_PRINT (
1896
1926
mongoc_client_command_simple (
1897
1927
client , "admin" , tmp_bson ("{'buildinfo': 1}" ), NULL , & reply , & error ),
@@ -1901,10 +1931,11 @@ server_semver (semver_t *out) {
1901
1931
semver_parse (server_version_str , out );
1902
1932
1903
1933
bson_destroy (& reply );
1904
- mongoc_client_destroy (client );
1905
1934
}
1906
1935
1907
- int semver_cmp (semver_t * a , semver_t * b ) {
1936
+ int
1937
+ semver_cmp (semver_t * a , semver_t * b )
1938
+ {
1908
1939
if (a -> major < b -> major ) {
1909
1940
return -1 ;
1910
1941
} else if (a -> major > b -> major ) {
@@ -1925,3 +1956,17 @@ int semver_cmp (semver_t *a, semver_t *b) {
1925
1956
1926
1957
return 0 ;
1927
1958
}
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
+ }
0 commit comments