geoip2_c 0.3.4 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +23 -0
  3. data/.github/workflows/ubuntu.yml +17 -8
  4. data/.github/workflows/windows.yml +18 -8
  5. data/.gitmodules +0 -3
  6. data/ext/geoip2/extconf.rb +9 -25
  7. data/ext/geoip2/geoip2.c +82 -32
  8. data/geoip2_c.gemspec +1 -0
  9. data/lib/geoip2/version.rb +1 -1
  10. metadata +18 -182
  11. data/ext/geoip2/libmaxminddb/.gitignore +0 -38
  12. data/ext/geoip2/libmaxminddb/.gitmodules +0 -9
  13. data/ext/geoip2/libmaxminddb/.perltidyrc +0 -11
  14. data/ext/geoip2/libmaxminddb/.travis.yml +0 -70
  15. data/ext/geoip2/libmaxminddb/.uncrustify.cfg +0 -78
  16. data/ext/geoip2/libmaxminddb/AUTHORS +0 -0
  17. data/ext/geoip2/libmaxminddb/Changes.md +0 -277
  18. data/ext/geoip2/libmaxminddb/LICENSE +0 -202
  19. data/ext/geoip2/libmaxminddb/Makefile.am +0 -41
  20. data/ext/geoip2/libmaxminddb/NOTICE +0 -13
  21. data/ext/geoip2/libmaxminddb/README.dev.md +0 -69
  22. data/ext/geoip2/libmaxminddb/README.md +0 -122
  23. data/ext/geoip2/libmaxminddb/appveyor.yml +0 -33
  24. data/ext/geoip2/libmaxminddb/bin/Makefile.am +0 -10
  25. data/ext/geoip2/libmaxminddb/bin/mmdblookup.c +0 -715
  26. data/ext/geoip2/libmaxminddb/bootstrap +0 -21
  27. data/ext/geoip2/libmaxminddb/common.mk +0 -7
  28. data/ext/geoip2/libmaxminddb/configure.ac +0 -132
  29. data/ext/geoip2/libmaxminddb/dev-bin/make-man-pages.pl +0 -76
  30. data/ext/geoip2/libmaxminddb/dev-bin/ppa-release.sh +0 -53
  31. data/ext/geoip2/libmaxminddb/dev-bin/regen-prototypes.pl +0 -136
  32. data/ext/geoip2/libmaxminddb/dev-bin/regen-win32-test-projs.pl +0 -54
  33. data/ext/geoip2/libmaxminddb/dev-bin/release.sh +0 -113
  34. data/ext/geoip2/libmaxminddb/dev-bin/uncrustify-all.sh +0 -21
  35. data/ext/geoip2/libmaxminddb/dev-bin/valgrind-all.pl +0 -53
  36. data/ext/geoip2/libmaxminddb/doc/libmaxminddb.md +0 -889
  37. data/ext/geoip2/libmaxminddb/doc/mmdblookup.md +0 -103
  38. data/ext/geoip2/libmaxminddb/include/maxminddb.h +0 -241
  39. data/ext/geoip2/libmaxminddb/include/maxminddb_config.h.in +0 -14
  40. data/ext/geoip2/libmaxminddb/projects/VS12/README.md +0 -59
  41. data/ext/geoip2/libmaxminddb/projects/VS12/libmaxminddb-release.props +0 -32
  42. data/ext/geoip2/libmaxminddb/projects/VS12/libmaxminddb-x64.props +0 -14
  43. data/ext/geoip2/libmaxminddb/projects/VS12/libmaxminddb.props +0 -32
  44. data/ext/geoip2/libmaxminddb/projects/VS12/libmaxminddb.sln +0 -150
  45. data/ext/geoip2/libmaxminddb/projects/VS12/libmaxminddb.vcxproj +0 -143
  46. data/ext/geoip2/libmaxminddb/projects/VS12/libmaxminddb.vcxproj.filters +0 -32
  47. data/ext/geoip2/libmaxminddb/projects/VS12/maxminddb_config.h +0 -14
  48. data/ext/geoip2/libmaxminddb/projects/VS12-tests/bad_pointers.vcxproj +0 -105
  49. data/ext/geoip2/libmaxminddb/projects/VS12-tests/basic_lookup.vcxproj +0 -105
  50. data/ext/geoip2/libmaxminddb/projects/VS12-tests/data_entry_list.vcxproj +0 -105
  51. data/ext/geoip2/libmaxminddb/projects/VS12-tests/data_types.vcxproj +0 -105
  52. data/ext/geoip2/libmaxminddb/projects/VS12-tests/dump.vcxproj +0 -105
  53. data/ext/geoip2/libmaxminddb/projects/VS12-tests/get_value.vcxproj +0 -105
  54. data/ext/geoip2/libmaxminddb/projects/VS12-tests/get_value_pointer_bug.vcxproj +0 -105
  55. data/ext/geoip2/libmaxminddb/projects/VS12-tests/ipv4_start_cache.vcxproj +0 -105
  56. data/ext/geoip2/libmaxminddb/projects/VS12-tests/ipv6_lookup_in_ipv4.vcxproj +0 -105
  57. data/ext/geoip2/libmaxminddb/projects/VS12-tests/libtap.vcxproj +0 -85
  58. data/ext/geoip2/libmaxminddb/projects/VS12-tests/maxminddb_test_helper.vcxproj +0 -107
  59. data/ext/geoip2/libmaxminddb/projects/VS12-tests/metadata.vcxproj +0 -105
  60. data/ext/geoip2/libmaxminddb/projects/VS12-tests/metadata_pointers.vcxproj +0 -105
  61. data/ext/geoip2/libmaxminddb/projects/VS12-tests/no_map_get_value.vcxproj +0 -105
  62. data/ext/geoip2/libmaxminddb/projects/VS12-tests/read_node.vcxproj +0 -105
  63. data/ext/geoip2/libmaxminddb/projects/VS12-tests/shared.vcxproj +0 -104
  64. data/ext/geoip2/libmaxminddb/projects/VS12-tests/threads.vcxproj +0 -103
  65. data/ext/geoip2/libmaxminddb/projects/VS12-tests/version.vcxproj +0 -105
  66. data/ext/geoip2/libmaxminddb/projects/test.vcxproj.template +0 -105
  67. data/ext/geoip2/libmaxminddb/src/Makefile.am +0 -25
  68. data/ext/geoip2/libmaxminddb/src/data-pool.c +0 -180
  69. data/ext/geoip2/libmaxminddb/src/data-pool.h +0 -52
  70. data/ext/geoip2/libmaxminddb/src/libmaxminddb.pc.in +0 -11
  71. data/ext/geoip2/libmaxminddb/src/maxminddb-compat-util.h +0 -167
  72. data/ext/geoip2/libmaxminddb/src/maxminddb.c +0 -2181
  73. data/ext/geoip2/libmaxminddb/t/Makefile.am +0 -27
  74. data/ext/geoip2/libmaxminddb/t/bad_databases_t.c +0 -67
  75. data/ext/geoip2/libmaxminddb/t/bad_pointers_t.c +0 -53
  76. data/ext/geoip2/libmaxminddb/t/basic_lookup_t.c +0 -207
  77. data/ext/geoip2/libmaxminddb/t/compile_c++_t.pl +0 -107
  78. data/ext/geoip2/libmaxminddb/t/data-pool-t.c +0 -374
  79. data/ext/geoip2/libmaxminddb/t/data_entry_list_t.c +0 -353
  80. data/ext/geoip2/libmaxminddb/t/data_types_t.c +0 -439
  81. data/ext/geoip2/libmaxminddb/t/dump_t.c +0 -103
  82. data/ext/geoip2/libmaxminddb/t/external_symbols_t.pl +0 -106
  83. data/ext/geoip2/libmaxminddb/t/get_value_pointer_bug_t.c +0 -66
  84. data/ext/geoip2/libmaxminddb/t/get_value_t.c +0 -249
  85. data/ext/geoip2/libmaxminddb/t/ipv4_start_cache_t.c +0 -36
  86. data/ext/geoip2/libmaxminddb/t/ipv6_lookup_in_ipv4_t.c +0 -48
  87. data/ext/geoip2/libmaxminddb/t/libtap/.gitignore +0 -13
  88. data/ext/geoip2/libmaxminddb/t/libtap/.travis.yml +0 -13
  89. data/ext/geoip2/libmaxminddb/t/libtap/COPYING +0 -165
  90. data/ext/geoip2/libmaxminddb/t/libtap/INSTALL +0 -41
  91. data/ext/geoip2/libmaxminddb/t/libtap/Makefile +0 -72
  92. data/ext/geoip2/libmaxminddb/t/libtap/Makefile.win +0 -37
  93. data/ext/geoip2/libmaxminddb/t/libtap/README.md +0 -268
  94. data/ext/geoip2/libmaxminddb/t/libtap/t/cmp_mem.c +0 -20
  95. data/ext/geoip2/libmaxminddb/t/libtap/t/cmp_mem.expected +0 -28
  96. data/ext/geoip2/libmaxminddb/t/libtap/t/cmpok.c +0 -16
  97. data/ext/geoip2/libmaxminddb/t/libtap/t/cmpok.expected +0 -37
  98. data/ext/geoip2/libmaxminddb/t/libtap/t/diag.c +0 -10
  99. data/ext/geoip2/libmaxminddb/t/libtap/t/diag.expected +0 -2
  100. data/ext/geoip2/libmaxminddb/t/libtap/t/diesok.c +0 -14
  101. data/ext/geoip2/libmaxminddb/t/libtap/t/diesok.expected +0 -6
  102. data/ext/geoip2/libmaxminddb/t/libtap/t/is.c +0 -24
  103. data/ext/geoip2/libmaxminddb/t/libtap/t/is.expected +0 -58
  104. data/ext/geoip2/libmaxminddb/t/libtap/t/like.c +0 -10
  105. data/ext/geoip2/libmaxminddb/t/libtap/t/like.expected +0 -4
  106. data/ext/geoip2/libmaxminddb/t/libtap/t/simple.c +0 -31
  107. data/ext/geoip2/libmaxminddb/t/libtap/t/simple.expected +0 -32
  108. data/ext/geoip2/libmaxminddb/t/libtap/t/skip.c +0 -23
  109. data/ext/geoip2/libmaxminddb/t/libtap/t/skip.expected +0 -9
  110. data/ext/geoip2/libmaxminddb/t/libtap/t/synopsis.c +0 -13
  111. data/ext/geoip2/libmaxminddb/t/libtap/t/synopsis.expected +0 -9
  112. data/ext/geoip2/libmaxminddb/t/libtap/t/test.c +0 -28
  113. data/ext/geoip2/libmaxminddb/t/libtap/t/todo.c +0 -17
  114. data/ext/geoip2/libmaxminddb/t/libtap/t/todo.expected +0 -11
  115. data/ext/geoip2/libmaxminddb/t/libtap/tap.c +0 -354
  116. data/ext/geoip2/libmaxminddb/t/libtap/tap.h +0 -115
  117. data/ext/geoip2/libmaxminddb/t/maxmind-db/.gitattributes +0 -1
  118. data/ext/geoip2/libmaxminddb/t/maxmind-db/.gitconfig +0 -2
  119. data/ext/geoip2/libmaxminddb/t/maxmind-db/.gitignore +0 -2
  120. data/ext/geoip2/libmaxminddb/t/maxmind-db/.perltidyallrc +0 -11
  121. data/ext/geoip2/libmaxminddb/t/maxmind-db/.tidyallrc +0 -7
  122. data/ext/geoip2/libmaxminddb/t/maxmind-db/LICENSE +0 -4
  123. data/ext/geoip2/libmaxminddb/t/maxmind-db/MaxMind-DB-spec.md +0 -558
  124. data/ext/geoip2/libmaxminddb/t/maxmind-db/README.md +0 -4
  125. data/ext/geoip2/libmaxminddb/t/maxmind-db/bad-data/README.md +0 -7
  126. data/ext/geoip2/libmaxminddb/t/maxmind-db/bad-data/libmaxminddb/libmaxminddb-offset-integer-overflow.mmdb +0 -0
  127. data/ext/geoip2/libmaxminddb/t/maxmind-db/bad-data/maxminddb-golang/cyclic-data-structure.mmdb +0 -0
  128. data/ext/geoip2/libmaxminddb/t/maxmind-db/bad-data/maxminddb-golang/invalid-bytes-length.mmdb +0 -1
  129. data/ext/geoip2/libmaxminddb/t/maxmind-db/bad-data/maxminddb-golang/invalid-data-record-offset.mmdb +0 -0
  130. data/ext/geoip2/libmaxminddb/t/maxmind-db/bad-data/maxminddb-golang/invalid-map-key-length.mmdb +0 -0
  131. data/ext/geoip2/libmaxminddb/t/maxmind-db/bad-data/maxminddb-golang/invalid-string-length.mmdb +0 -1
  132. data/ext/geoip2/libmaxminddb/t/maxmind-db/bad-data/maxminddb-golang/metadata-is-an-uint128.mmdb +0 -1
  133. data/ext/geoip2/libmaxminddb/t/maxmind-db/bad-data/maxminddb-golang/unexpected-bytes.mmdb +0 -0
  134. data/ext/geoip2/libmaxminddb/t/maxmind-db/perltidyrc +0 -12
  135. data/ext/geoip2/libmaxminddb/t/maxmind-db/source-data/GeoIP2-Anonymous-IP-Test.json +0 -32
  136. data/ext/geoip2/libmaxminddb/t/maxmind-db/source-data/GeoIP2-City-Test.json +0 -12616
  137. data/ext/geoip2/libmaxminddb/t/maxmind-db/source-data/GeoIP2-Connection-Type-Test.json +0 -102
  138. data/ext/geoip2/libmaxminddb/t/maxmind-db/source-data/GeoIP2-Country-Test.json +0 -10975
  139. data/ext/geoip2/libmaxminddb/t/maxmind-db/source-data/GeoIP2-DensityIncome-Test.json +0 -14
  140. data/ext/geoip2/libmaxminddb/t/maxmind-db/source-data/GeoIP2-Domain-Test.json +0 -452
  141. data/ext/geoip2/libmaxminddb/t/maxmind-db/source-data/GeoIP2-Enterprise-Test.json +0 -666
  142. data/ext/geoip2/libmaxminddb/t/maxmind-db/source-data/GeoIP2-ISP-Test.json +0 -12585
  143. data/ext/geoip2/libmaxminddb/t/maxmind-db/source-data/GeoIP2-Precision-Enterprise-Test.json +0 -1035
  144. data/ext/geoip2/libmaxminddb/t/maxmind-db/source-data/GeoLite2-ASN-Test.json +0 -37
  145. data/ext/geoip2/libmaxminddb/t/maxmind-db/source-data/README +0 -13
  146. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/GeoIP2-Anonymous-IP-Test.mmdb +0 -0
  147. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb +0 -0
  148. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb +0 -0
  149. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/GeoIP2-City-Test.mmdb +0 -0
  150. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/GeoIP2-Connection-Type-Test.mmdb +0 -0
  151. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/GeoIP2-Country-Test.mmdb +0 -0
  152. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/GeoIP2-DensityIncome-Test.mmdb +0 -0
  153. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/GeoIP2-Domain-Test.mmdb +0 -0
  154. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/GeoIP2-Enterprise-Test.mmdb +0 -0
  155. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/GeoIP2-ISP-Test.mmdb +0 -0
  156. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/GeoIP2-Precision-Enterprise-Test.mmdb +0 -0
  157. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/GeoLite2-ASN-Test.mmdb +0 -0
  158. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb +0 -0
  159. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-string-value-entries.mmdb +0 -0
  160. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-broken-pointers-24.mmdb +0 -0
  161. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb +0 -0
  162. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-decoder.mmdb +0 -0
  163. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-ipv4-24.mmdb +0 -0
  164. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-ipv4-28.mmdb +0 -0
  165. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-ipv4-32.mmdb +0 -0
  166. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-ipv6-24.mmdb +0 -0
  167. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-ipv6-28.mmdb +0 -0
  168. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-ipv6-32.mmdb +0 -0
  169. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-metadata-pointers.mmdb +0 -0
  170. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-mixed-24.mmdb +0 -0
  171. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-mixed-28.mmdb +0 -0
  172. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-mixed-32.mmdb +0 -0
  173. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/MaxMind-DB-test-nested.mmdb +0 -0
  174. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/README.md +0 -26
  175. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/maps-with-pointers.raw +0 -0
  176. data/ext/geoip2/libmaxminddb/t/maxmind-db/test-data/write-test-data.pl +0 -614
  177. data/ext/geoip2/libmaxminddb/t/maxmind-db/tidyall.ini +0 -5
  178. data/ext/geoip2/libmaxminddb/t/maxminddb_test_helper.c +0 -255
  179. data/ext/geoip2/libmaxminddb/t/maxminddb_test_helper.h +0 -69
  180. data/ext/geoip2/libmaxminddb/t/metadata_pointers_t.c +0 -32
  181. data/ext/geoip2/libmaxminddb/t/metadata_t.c +0 -226
  182. data/ext/geoip2/libmaxminddb/t/mmdblookup_t.pl +0 -158
  183. data/ext/geoip2/libmaxminddb/t/no_map_get_value_t.c +0 -32
  184. data/ext/geoip2/libmaxminddb/t/read_node_t.c +0 -157
  185. data/ext/geoip2/libmaxminddb/t/threads_t.c +0 -196
  186. data/ext/geoip2/libmaxminddb/t/version_t.c +0 -10
@@ -1,353 +0,0 @@
1
- #include "maxminddb_test_helper.h"
2
-
3
- MMDB_entry_data_list_s *test_array_value(MMDB_entry_data_list_s
4
- *entry_data_list)
5
- {
6
- MMDB_entry_data_list_s *array = entry_data_list = entry_data_list->next;
7
- cmp_ok(array->entry_data.type, "==", MMDB_DATA_TYPE_ARRAY,
8
- "'array' key's value is an array");
9
- cmp_ok(array->entry_data.data_size, "==", 3,
10
- "'array' key's value has 3 elements");
11
-
12
- MMDB_entry_data_list_s *idx0 = entry_data_list = entry_data_list->next;
13
- cmp_ok(idx0->entry_data.type, "==", MMDB_DATA_TYPE_UINT32,
14
- "first array entry is a UINT32");
15
- cmp_ok(idx0->entry_data.uint32, "==", 1, "first array entry value is 1");
16
-
17
- MMDB_entry_data_list_s *idx1 = entry_data_list = entry_data_list->next;
18
- cmp_ok(idx1->entry_data.type, "==", MMDB_DATA_TYPE_UINT32,
19
- "second array entry is a UINT32");
20
- cmp_ok(idx1->entry_data.uint32, "==", 2, "second array entry value is 2");
21
-
22
- MMDB_entry_data_list_s *idx2 = entry_data_list = entry_data_list->next;
23
- cmp_ok(idx2->entry_data.type, "==", MMDB_DATA_TYPE_UINT32,
24
- "third array entry is a UINT32");
25
- cmp_ok(idx2->entry_data.uint32, "==", 3, "third array entry value is 3");
26
-
27
- return entry_data_list;
28
- }
29
-
30
- MMDB_entry_data_list_s *test_boolean_value(MMDB_entry_data_list_s
31
- *entry_data_list)
32
- {
33
- MMDB_entry_data_list_s *value = entry_data_list = entry_data_list->next;
34
-
35
- cmp_ok(value->entry_data.type, "==", MMDB_DATA_TYPE_BOOLEAN,
36
- "'boolean' key's value is a boolean");
37
- ok(value->entry_data.boolean, "'boolean' key's value is true");
38
-
39
- return entry_data_list;
40
- }
41
-
42
- MMDB_entry_data_list_s *test_bytes_value(MMDB_entry_data_list_s
43
- *entry_data_list)
44
- {
45
- MMDB_entry_data_list_s *value = entry_data_list = entry_data_list->next;
46
-
47
- cmp_ok(value->entry_data.type, "==", MMDB_DATA_TYPE_BYTES,
48
- "'bytes' key's value is bytes");
49
- uint8_t *bytes = malloc(value->entry_data.data_size);
50
- if (NULL == bytes) {
51
- BAIL_OUT("malloc failed");
52
- }
53
- memcpy(bytes, value->entry_data.bytes, value->entry_data.data_size);
54
- uint8_t expect[] = { 0x00, 0x00, 0x00, 0x2a };
55
-
56
- ok(memcmp(bytes, expect, 4) == 0, "got expected value for bytes key");
57
-
58
- free((void *)bytes);
59
-
60
- return entry_data_list;
61
- }
62
-
63
- MMDB_entry_data_list_s *test_double_value(MMDB_entry_data_list_s
64
- *entry_data_list)
65
- {
66
- MMDB_entry_data_list_s *value = entry_data_list = entry_data_list->next;
67
-
68
- cmp_ok(value->entry_data.type, "==", MMDB_DATA_TYPE_DOUBLE,
69
- "'double' key's value is a double");
70
-
71
- compare_double(value->entry_data.double_value, 42.123456);
72
-
73
- return entry_data_list;
74
- }
75
-
76
- MMDB_entry_data_list_s *test_float_value(MMDB_entry_data_list_s
77
- *entry_data_list)
78
- {
79
- MMDB_entry_data_list_s *value = entry_data_list = entry_data_list->next;
80
-
81
- cmp_ok(value->entry_data.type, "==", MMDB_DATA_TYPE_FLOAT,
82
- "'float' key's value is a float");
83
-
84
- compare_float(value->entry_data.float_value, 1.1F);
85
-
86
- return entry_data_list;
87
- }
88
-
89
- MMDB_entry_data_list_s *test_int32_value(MMDB_entry_data_list_s
90
- *entry_data_list)
91
- {
92
- MMDB_entry_data_list_s *value = entry_data_list = entry_data_list->next;
93
-
94
- cmp_ok(value->entry_data.type, "==", MMDB_DATA_TYPE_INT32,
95
- "'int32' key's value is an int32");
96
-
97
- int32_t expect = 1 << 28;
98
- expect *= -1;
99
- cmp_ok(value->entry_data.int32, "==", expect,
100
- "got expected value for int32 key");
101
-
102
- return entry_data_list;
103
- }
104
-
105
- MMDB_entry_data_list_s *test_arrayX_value(MMDB_entry_data_list_s
106
- *entry_data_list)
107
- {
108
- MMDB_entry_data_list_s *arrayX = entry_data_list = entry_data_list->next;
109
- cmp_ok(arrayX->entry_data.type, "==", MMDB_DATA_TYPE_ARRAY,
110
- "'map{mapX}{arrayX}' key's value is an array");
111
- cmp_ok(arrayX->entry_data.data_size, "==", 3,
112
- "'map{mapX}{arrayX}' key's value has 3 elements");
113
-
114
- MMDB_entry_data_list_s *idx0 = entry_data_list = entry_data_list->next;
115
- cmp_ok(idx0->entry_data.type, "==", MMDB_DATA_TYPE_UINT32,
116
- "first array entry is a UINT32");
117
- cmp_ok(idx0->entry_data.uint32, "==", 7, "first array entry value is 7");
118
-
119
- MMDB_entry_data_list_s *idx1 = entry_data_list = entry_data_list->next;
120
- cmp_ok(idx1->entry_data.type, "==", MMDB_DATA_TYPE_UINT32,
121
- "second array entry is a UINT32");
122
- cmp_ok(idx1->entry_data.uint32, "==", 8, "second array entry value is 8");
123
-
124
- MMDB_entry_data_list_s *idx2 = entry_data_list = entry_data_list->next;
125
- cmp_ok(idx2->entry_data.type, "==", MMDB_DATA_TYPE_UINT32,
126
- "third array entry is a UINT32");
127
- cmp_ok(idx2->entry_data.uint32, "==", 9, "third array entry value is 9");
128
-
129
- return entry_data_list;
130
- }
131
-
132
- MMDB_entry_data_list_s *test_mapX_key_value_pair(MMDB_entry_data_list_s
133
- *entry_data_list)
134
- {
135
- MMDB_entry_data_list_s *mapX_key = entry_data_list = entry_data_list->next;
136
- cmp_ok(mapX_key->entry_data.type, "==", MMDB_DATA_TYPE_UTF8_STRING,
137
- "found a map key in 'map{mapX}'");
138
- const char *mapX_key_name = dup_entry_string_or_bail(mapX_key->entry_data);
139
-
140
- if (strcmp(mapX_key_name, "utf8_stringX") == 0) {
141
- MMDB_entry_data_list_s *mapX_value =
142
- entry_data_list = entry_data_list->next;
143
- cmp_ok(mapX_value->entry_data.type, "==", MMDB_DATA_TYPE_UTF8_STRING,
144
- "'map{mapX}{utf8_stringX}' type is utf8_string");
145
- const char *utf8_stringX_value = dup_entry_string_or_bail(
146
- mapX_value->entry_data);
147
- ok(strcmp(utf8_stringX_value, "hello") == 0,
148
- "map{mapX}{utf8_stringX} value is 'hello'");
149
- free((void *)utf8_stringX_value);
150
- } else if (strcmp(mapX_key_name, "arrayX") == 0) {
151
- entry_data_list = test_arrayX_value(entry_data_list);
152
- } else {
153
- ok(0, "unknown key found in map{mapX} - %s", mapX_key_name);
154
- }
155
-
156
- free((void *)mapX_key_name);
157
-
158
- return entry_data_list;
159
- }
160
-
161
- MMDB_entry_data_list_s *test_map_value(MMDB_entry_data_list_s *entry_data_list)
162
- {
163
- MMDB_entry_data_list_s *map = entry_data_list = entry_data_list->next;
164
- cmp_ok(map->entry_data.type, "==", MMDB_DATA_TYPE_MAP,
165
- "'map' key's value is a map");
166
- cmp_ok(map->entry_data.data_size, "==", 1,
167
- "'map' key's value has 1 key/value pair");
168
-
169
- MMDB_entry_data_list_s *map_key_1 = entry_data_list = entry_data_list->next;
170
- cmp_ok(map_key_1->entry_data.type, "==", MMDB_DATA_TYPE_UTF8_STRING,
171
- "found a map key in 'map'");
172
- const char *map_key_1_name =
173
- dup_entry_string_or_bail(map_key_1->entry_data);
174
- ok(strcmp(map_key_1_name, "mapX") == 0, "key name is mapX");
175
- free((void *)map_key_1_name);
176
-
177
- MMDB_entry_data_list_s *mapX = entry_data_list = entry_data_list->next;
178
- cmp_ok(mapX->entry_data.type, "==", MMDB_DATA_TYPE_MAP,
179
- "'map{mapX}' key's value is a map");
180
- cmp_ok(mapX->entry_data.data_size, "==", 2,
181
- "'map' key's value has 2 key/value pairs");
182
-
183
- entry_data_list = test_mapX_key_value_pair(entry_data_list);
184
- entry_data_list = test_mapX_key_value_pair(entry_data_list);
185
-
186
- return entry_data_list;
187
- }
188
-
189
- MMDB_entry_data_list_s *test_uint128_value(MMDB_entry_data_list_s
190
- *entry_data_list)
191
- {
192
- MMDB_entry_data_list_s *value = entry_data_list = entry_data_list->next;
193
-
194
- cmp_ok(value->entry_data.type, "==", MMDB_DATA_TYPE_UINT128,
195
- "'uint128' key's value is an uint128");
196
-
197
- #if MMDB_UINT128_IS_BYTE_ARRAY
198
- uint8_t expect[16] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
199
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
200
- ok(memcmp(value->entry_data.uint128, expect, 16) == 0,
201
- "uint128 field is 2**120");
202
- #else
203
- mmdb_uint128_t expect = 1;
204
- expect <<= 120;
205
- cmp_ok(value->entry_data.uint128, "==", expect, "uint128 field is 2**120");
206
- #endif
207
-
208
- return entry_data_list;
209
- }
210
-
211
- MMDB_entry_data_list_s *test_uint16_value(MMDB_entry_data_list_s
212
- *entry_data_list)
213
- {
214
- MMDB_entry_data_list_s *value = entry_data_list = entry_data_list->next;
215
-
216
- cmp_ok(value->entry_data.type, "==", MMDB_DATA_TYPE_UINT16,
217
- "'uint16' key's value is an uint16");
218
- uint16_t expect = 100;
219
- ok(value->entry_data.uint16 == expect, "uint16 field is 100");
220
-
221
- return entry_data_list;
222
- }
223
-
224
- MMDB_entry_data_list_s *test_uint32_value(MMDB_entry_data_list_s
225
- *entry_data_list)
226
- {
227
- MMDB_entry_data_list_s *value = entry_data_list = entry_data_list->next;
228
-
229
- cmp_ok(value->entry_data.type, "==", MMDB_DATA_TYPE_UINT32,
230
- "'uint32' key's value is an uint32");
231
- uint32_t expect = 1 << 28;
232
- cmp_ok(value->entry_data.uint32, "==", expect, "uint32 field is 100");
233
-
234
- return entry_data_list;
235
- }
236
-
237
- MMDB_entry_data_list_s *test_uint64_value(MMDB_entry_data_list_s
238
- *entry_data_list)
239
- {
240
- MMDB_entry_data_list_s *value = entry_data_list = entry_data_list->next;
241
-
242
- cmp_ok(value->entry_data.type, "==", MMDB_DATA_TYPE_UINT64,
243
- "'uint64' key's value is an uint64");
244
- uint64_t expect = 1;
245
- expect <<= 60;
246
- cmp_ok(value->entry_data.uint64, "==", expect, "uint64 field is 2**60");
247
-
248
- return entry_data_list;
249
- }
250
-
251
- MMDB_entry_data_list_s *test_utf8_string_value(MMDB_entry_data_list_s
252
- *entry_data_list)
253
- {
254
- MMDB_entry_data_list_s *value = entry_data_list = entry_data_list->next;
255
-
256
- cmp_ok(value->entry_data.type, "==", MMDB_DATA_TYPE_UTF8_STRING,
257
- "'utf8_string' key's value is a string");
258
- const char *utf8_string = dup_entry_string_or_bail(value->entry_data);
259
- // This is hex for "unicode! ☯ - ♫" as bytes
260
- char expect[19] =
261
- { 0x75, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x21, 0x20, 0xe2, 0x98,
262
- 0xaf, 0x20, 0x2d, 0x20, 0xe2, 0x99, 0xab, 0x00 };
263
-
264
- is(utf8_string, expect, "got expected value for utf8_string key");
265
-
266
- free((void *)utf8_string);
267
-
268
- return entry_data_list;
269
- }
270
-
271
- void run_tests(int mode, const char *description)
272
- {
273
- const char *filename = "MaxMind-DB-test-decoder.mmdb";
274
- const char *path = test_database_path(filename);
275
- MMDB_s *mmdb = open_ok(path, mode, description);
276
- free((void *)path);
277
-
278
- char *ip = "1.1.1.1";
279
- MMDB_lookup_result_s result =
280
- lookup_string_ok(mmdb, ip, filename, description);
281
-
282
- MMDB_entry_data_list_s *entry_data_list, *first;
283
- int status = MMDB_get_entry_data_list(&result.entry, &entry_data_list);
284
-
285
- if (MMDB_SUCCESS != status) {
286
- BAIL_OUT("MMDB_get_entry_data_list failed with %s",
287
- MMDB_strerror(status));
288
- } else {
289
- cmp_ok(status, "==", MMDB_SUCCESS,
290
- "MMDB_get_entry_data_list succeeded");
291
- }
292
-
293
- first = entry_data_list;
294
-
295
- cmp_ok(entry_data_list->entry_data.type, "==", MMDB_DATA_TYPE_MAP,
296
- "first entry in entry data list is a map");
297
- cmp_ok(entry_data_list->entry_data.data_size, "==", 12,
298
- "first map in entry data list has 12 k/v pairs");
299
-
300
- while (1) {
301
- MMDB_entry_data_list_s *key = entry_data_list = entry_data_list->next;
302
-
303
- if (!key) {
304
- break;
305
- }
306
-
307
- cmp_ok(key->entry_data.type, "==", MMDB_DATA_TYPE_UTF8_STRING,
308
- "found a map key");
309
-
310
- const char *key_name = dup_entry_string_or_bail(key->entry_data);
311
- if (strcmp(key_name, "array") == 0) {
312
- entry_data_list = test_array_value(entry_data_list);
313
- } else if (strcmp(key_name, "boolean") == 0) {
314
- entry_data_list = test_boolean_value(entry_data_list);
315
- } else if (strcmp(key_name, "bytes") == 0) {
316
- entry_data_list = test_bytes_value(entry_data_list);
317
- } else if (strcmp(key_name, "double") == 0) {
318
- entry_data_list = test_double_value(entry_data_list);
319
- } else if (strcmp(key_name, "float") == 0) {
320
- entry_data_list = test_float_value(entry_data_list);
321
- } else if (strcmp(key_name, "int32") == 0) {
322
- entry_data_list = test_int32_value(entry_data_list);
323
- } else if (strcmp(key_name, "map") == 0) {
324
- entry_data_list = test_map_value(entry_data_list);
325
- } else if (strcmp(key_name, "uint128") == 0) {
326
- entry_data_list = test_uint128_value(entry_data_list);
327
- } else if (strcmp(key_name, "uint16") == 0) {
328
- entry_data_list = test_uint16_value(entry_data_list);
329
- } else if (strcmp(key_name, "uint32") == 0) {
330
- entry_data_list = test_uint32_value(entry_data_list);
331
- } else if (strcmp(key_name, "uint64") == 0) {
332
- entry_data_list = test_uint64_value(entry_data_list);
333
- } else if (strcmp(key_name, "utf8_string") == 0) {
334
- entry_data_list = test_utf8_string_value(entry_data_list);
335
- } else {
336
- ok(0, "unknown key found in map - %s", key_name);
337
- }
338
-
339
- free((void *)key_name);
340
- }
341
-
342
- MMDB_free_entry_data_list(first);
343
-
344
- MMDB_close(mmdb);
345
- free(mmdb);
346
- }
347
-
348
- int main(void)
349
- {
350
- plan(NO_PLAN);
351
- for_all_modes(&run_tests);
352
- done_testing();
353
- }