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