1 /* Some test files may require something newer */ 2 #if !defined(_GNU_SOURCE) && !defined(_POSIX_C_SOURCE) 3 #define _POSIX_C_SOURCE 200112L 4 #endif 5 6 #if HAVE_CONFIG_H 7 #include <config.h> 8 #endif 9 #include "libtap/tap.h" 10 #include "maxminddb-compat-util.h" 11 #include "maxminddb.h" 12 #include <math.h> 13 #include <stdio.h> 14 #include <string.h> 15 16 #ifdef _WIN32 17 #include <winsock2.h> 18 #include <ws2tcpip.h> 19 20 #define R_OK 4 21 22 #else 23 #include <netdb.h> 24 #endif 25 26 #if (_MSC_VER && _MSC_VER < 1900) 27 /* _snprintf has security issues, but I don't think it is worth 28 worrying about for the unit tests. */ 29 #define snprintf _snprintf 30 #endif 31 32 #ifndef MMDB_TEST_HELPER_C 33 #define MMDB_TEST_HELPER_C (1) 34 35 #ifdef __GNUC__ 36 #define UNUSED(x) UNUSED_##x __attribute__((__unused__)) 37 #else 38 #define UNUSED 39 #endif 40 41 #define MAX_DESCRIPTION_LENGTH 500 42 43 extern void for_all_record_sizes(const char *filename_fmt, 44 void (*tests)(int record_size, 45 const char *filename, 46 const char *description)); 47 extern void for_all_modes(void (*tests)(int mode, const char *description)); 48 extern const char *test_database_path(const char *filename); 49 extern const char *dup_entry_string_or_bail(MMDB_entry_data_s entry_data); 50 extern MMDB_s *open_ok(const char *db_file, int mode, const char *mode_desc); 51 extern MMDB_lookup_result_s lookup_string_ok(MMDB_s *mmdb, 52 const char *ip, 53 const char *file, 54 const char *mode_desc); 55 extern MMDB_lookup_result_s lookup_sockaddr_ok(MMDB_s *mmdb, 56 const char *ip, 57 const char *file, 58 const char *mode_desc); 59 extern void test_lookup_errors(int gai_error, 60 int mmdb_error, 61 const char *function, 62 const char *ip, 63 const char *file, 64 const char *mode_desc); 65 extern MMDB_entry_data_s data_ok(MMDB_lookup_result_s *result, 66 uint32_t expect_type, 67 const char *description, 68 ...); 69 extern void compare_double(double got, double expect); 70 extern void compare_float(float got, float expect); 71 72 #endif 73