maxmind-geoip2 1.4.0 → 1.5.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 (94) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +1 -1
  4. data/lib/maxmind/geoip2/record/traits.rb +9 -1
  5. data/lib/maxmind/geoip2/version.rb +1 -1
  6. metadata +9 -91
  7. data/CLAUDE.md +0 -390
  8. data/Gemfile +0 -5
  9. data/Gemfile.lock +0 -126
  10. data/README.dev.md +0 -4
  11. data/Rakefile +0 -14
  12. data/maxmind-geoip2.gemspec +0 -41
  13. data/test/data/LICENSE-APACHE +0 -202
  14. data/test/data/LICENSE-MIT +0 -17
  15. data/test/data/MaxMind-DB-spec.md +0 -573
  16. data/test/data/README.md +0 -11
  17. data/test/data/bad-data/README.md +0 -7
  18. data/test/data/bad-data/libmaxminddb/libmaxminddb-offset-integer-overflow.mmdb +0 -0
  19. data/test/data/bad-data/maxminddb-golang/cyclic-data-structure.mmdb +0 -0
  20. data/test/data/bad-data/maxminddb-golang/invalid-bytes-length.mmdb +0 -1
  21. data/test/data/bad-data/maxminddb-golang/invalid-data-record-offset.mmdb +0 -0
  22. data/test/data/bad-data/maxminddb-golang/invalid-map-key-length.mmdb +0 -0
  23. data/test/data/bad-data/maxminddb-golang/invalid-string-length.mmdb +0 -1
  24. data/test/data/bad-data/maxminddb-golang/metadata-is-an-uint128.mmdb +0 -1
  25. data/test/data/bad-data/maxminddb-golang/unexpected-bytes.mmdb +0 -0
  26. data/test/data/bad-data/maxminddb-python/bad-unicode-in-map-key.mmdb +0 -0
  27. data/test/data/cmd/write-test-data/main.go +0 -68
  28. data/test/data/go.mod +0 -13
  29. data/test/data/go.sum +0 -16
  30. data/test/data/pkg/writer/decoder.go +0 -178
  31. data/test/data/pkg/writer/geoip2.go +0 -184
  32. data/test/data/pkg/writer/ip.go +0 -39
  33. data/test/data/pkg/writer/maxmind.go +0 -246
  34. data/test/data/pkg/writer/nestedstructures.go +0 -73
  35. data/test/data/pkg/writer/writer.go +0 -61
  36. data/test/data/source-data/GeoIP-Anonymous-Plus-Test.json +0 -175
  37. data/test/data/source-data/GeoIP2-Anonymous-IP-Test.json +0 -55
  38. data/test/data/source-data/GeoIP2-City-Test.json +0 -13272
  39. data/test/data/source-data/GeoIP2-Connection-Type-Test.json +0 -127
  40. data/test/data/source-data/GeoIP2-Country-Test.json +0 -15978
  41. data/test/data/source-data/GeoIP2-DensityIncome-Test.json +0 -14
  42. data/test/data/source-data/GeoIP2-Domain-Test.json +0 -457
  43. data/test/data/source-data/GeoIP2-Enterprise-Test.json +0 -1110
  44. data/test/data/source-data/GeoIP2-IP-Risk-Test.json +0 -31
  45. data/test/data/source-data/GeoIP2-ISP-Test.json +0 -12605
  46. data/test/data/source-data/GeoIP2-Precision-Enterprise-Sandbox-Test.json +0 -296
  47. data/test/data/source-data/GeoIP2-Precision-Enterprise-Test.json +0 -3189
  48. data/test/data/source-data/GeoIP2-Static-IP-Score-Test.json +0 -2147
  49. data/test/data/source-data/GeoIP2-User-Count-Test.json +0 -2855
  50. data/test/data/source-data/GeoLite2-ASN-Test.json +0 -4120
  51. data/test/data/source-data/GeoLite2-City-Test.json +0 -12969
  52. data/test/data/source-data/GeoLite2-Country-Test.json +0 -11369
  53. data/test/data/test-data/GeoIP-Anonymous-Plus-Test.mmdb +0 -0
  54. data/test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb +0 -0
  55. data/test/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb +0 -0
  56. data/test/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb +0 -0
  57. data/test/data/test-data/GeoIP2-City-Test.mmdb +0 -0
  58. data/test/data/test-data/GeoIP2-Connection-Type-Test.mmdb +0 -0
  59. data/test/data/test-data/GeoIP2-Country-Test.mmdb +0 -0
  60. data/test/data/test-data/GeoIP2-DensityIncome-Test.mmdb +0 -0
  61. data/test/data/test-data/GeoIP2-Domain-Test.mmdb +0 -0
  62. data/test/data/test-data/GeoIP2-Enterprise-Test.mmdb +0 -0
  63. data/test/data/test-data/GeoIP2-IP-Risk-Test.mmdb +0 -0
  64. data/test/data/test-data/GeoIP2-ISP-Test.mmdb +0 -0
  65. data/test/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb +0 -0
  66. data/test/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb +0 -0
  67. data/test/data/test-data/GeoIP2-User-Count-Test.mmdb +0 -0
  68. data/test/data/test-data/GeoLite2-ASN-Test.mmdb +0 -0
  69. data/test/data/test-data/GeoLite2-City-Test.mmdb +0 -0
  70. data/test/data/test-data/GeoLite2-Country-Test.mmdb +0 -0
  71. data/test/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb +0 -0
  72. data/test/data/test-data/MaxMind-DB-string-value-entries.mmdb +0 -0
  73. data/test/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb +0 -0
  74. data/test/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb +0 -0
  75. data/test/data/test-data/MaxMind-DB-test-decoder.mmdb +0 -0
  76. data/test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb +0 -0
  77. data/test/data/test-data/MaxMind-DB-test-ipv4-28.mmdb +0 -0
  78. data/test/data/test-data/MaxMind-DB-test-ipv4-32.mmdb +0 -0
  79. data/test/data/test-data/MaxMind-DB-test-ipv6-24.mmdb +0 -0
  80. data/test/data/test-data/MaxMind-DB-test-ipv6-28.mmdb +0 -0
  81. data/test/data/test-data/MaxMind-DB-test-ipv6-32.mmdb +0 -0
  82. data/test/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb +0 -0
  83. data/test/data/test-data/MaxMind-DB-test-mixed-24.mmdb +0 -0
  84. data/test/data/test-data/MaxMind-DB-test-mixed-28.mmdb +0 -0
  85. data/test/data/test-data/MaxMind-DB-test-mixed-32.mmdb +0 -0
  86. data/test/data/test-data/MaxMind-DB-test-nested.mmdb +0 -0
  87. data/test/data/test-data/MaxMind-DB-test-pointer-decoder.mmdb +0 -0
  88. data/test/data/test-data/README.md +0 -42
  89. data/test/data/test-data/maps-with-pointers.raw +0 -0
  90. data/test/data/tidyall.ini +0 -5
  91. data/test/test_client.rb +0 -467
  92. data/test/test_model_country.rb +0 -95
  93. data/test/test_model_names.rb +0 -50
  94. data/test/test_reader.rb +0 -589
data/test/test_reader.rb DELETED
@@ -1,589 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ipaddr'
4
- require 'maxmind/db'
5
- require 'maxmind/geoip2'
6
- require 'minitest/autorun'
7
-
8
- class ReaderTest < Minitest::Test
9
- def test_anonymous_ip
10
- reader = MaxMind::GeoIP2::Reader.new(
11
- 'test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb',
12
- )
13
- ip = '1.2.0.1'
14
- record = reader.anonymous_ip(ip)
15
-
16
- assert(record.anonymous?)
17
- assert(record.anonymous_vpn?)
18
- refute(record.hosting_provider?)
19
- refute(record.public_proxy?)
20
- refute(record.residential_proxy?)
21
- refute(record.tor_exit_node?)
22
- assert_equal(ip, record.ip_address)
23
- assert_equal('1.2.0.0/16', record.network)
24
-
25
- reader.close
26
- end
27
-
28
- def test_anonymous_ip_residential_proxy
29
- reader = MaxMind::GeoIP2::Reader.new(
30
- 'test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb',
31
- )
32
- ip = '81.2.69.1'
33
- record = reader.anonymous_ip(ip)
34
-
35
- assert(record.residential_proxy?)
36
-
37
- reader.close
38
- end
39
-
40
- def test_anonymous_plus
41
- reader = MaxMind::GeoIP2::Reader.new(
42
- 'test/data/test-data/GeoIP-Anonymous-Plus-Test.mmdb',
43
- )
44
- ip = '1.2.0.1'
45
- record = reader.anonymous_plus(ip)
46
-
47
- assert_equal(30, record.anonymizer_confidence)
48
- assert(record.anonymous?)
49
- assert(record.anonymous_vpn?)
50
- refute(record.hosting_provider?)
51
- assert_equal(Date.new(2025, 4, 14), record.network_last_seen)
52
- assert_equal('foo', record.provider_name)
53
- refute(record.public_proxy?)
54
- refute(record.residential_proxy?)
55
- refute(record.tor_exit_node?)
56
-
57
- assert_equal(ip, record.ip_address)
58
- assert_equal('1.2.0.1/32', record.network)
59
-
60
- reader.close
61
- end
62
-
63
- def test_asn
64
- reader = MaxMind::GeoIP2::Reader.new(
65
- 'test/data/test-data/GeoLite2-ASN-Test.mmdb',
66
- )
67
- ip = '1.128.0.1'
68
- record = reader.asn(ip)
69
-
70
- assert_equal(1221, record.autonomous_system_number)
71
- assert_equal('Telstra Pty Ltd', record.autonomous_system_organization)
72
- assert_equal(ip, record.ip_address)
73
- assert_equal('1.128.0.0/11', record.network)
74
-
75
- reader.close
76
- end
77
-
78
- def test_city
79
- reader = MaxMind::GeoIP2::Reader.new(
80
- 'test/data/test-data/GeoIP2-City-Test.mmdb',
81
- )
82
- record = reader.city('2.125.160.216')
83
-
84
- assert_equal('EU', record.continent.code)
85
-
86
- assert_equal(2_655_045, record.city.geoname_id)
87
- assert_equal({ 'en' => 'Boxford' }, record.city.names)
88
- assert_equal('Boxford', record.city.name)
89
- assert_nil(record.city.confidence)
90
-
91
- assert_equal(100, record.location.accuracy_radius)
92
- assert_in_delta(51.75, record.location.latitude)
93
- assert_in_delta(-1.25, record.location.longitude)
94
- assert_equal('Europe/London', record.location.time_zone)
95
-
96
- assert_equal(2, record.subdivisions.size)
97
- assert_equal('England', record.subdivisions[0].name)
98
- assert_equal('West Berkshire', record.subdivisions[1].name)
99
- assert_equal('West Berkshire', record.most_specific_subdivision.name)
100
-
101
- record = reader.city('216.160.83.56')
102
-
103
- assert_equal(819, record.location.metro_code)
104
-
105
- assert_equal('98354', record.postal.code)
106
-
107
- assert_equal(1, record.subdivisions.size)
108
- assert_equal(5_815_135, record.subdivisions[0].geoname_id)
109
- assert_equal('WA', record.subdivisions[0].iso_code)
110
- assert_equal(
111
- {
112
- 'en' => 'Washington',
113
- 'es' => 'Washington',
114
- 'fr' => 'État de Washington',
115
- 'ja' => 'ワシントン州',
116
- 'ru' => 'Вашингтон',
117
- 'zh-CN' => '华盛顿州',
118
- },
119
- record.subdivisions[0].names,
120
- )
121
-
122
- assert_equal('WA', record.most_specific_subdivision.iso_code)
123
-
124
- # This IP has is_anycast.
125
-
126
- ip_address = '214.1.1.0'
127
- record = reader.city(ip_address)
128
-
129
- assert(record.traits.anycast?)
130
-
131
- reader.close
132
- end
133
-
134
- def test_city_no_subdivisions
135
- reader = MaxMind::GeoIP2::Reader.new(
136
- 'test/data/test-data/GeoIP2-City-Test.mmdb',
137
- )
138
- record = reader.city('2001:218::')
139
-
140
- assert_empty(record.subdivisions)
141
- assert_nil(record.most_specific_subdivision)
142
-
143
- reader.close
144
- end
145
-
146
- def test_connection_type
147
- reader = MaxMind::GeoIP2::Reader.new(
148
- 'test/data/test-data/GeoIP2-Connection-Type-Test.mmdb',
149
- )
150
- ip = '1.0.1.1'
151
- record = reader.connection_type(ip)
152
-
153
- assert_equal('Cellular', record.connection_type)
154
- assert_equal(ip, record.ip_address)
155
- assert_equal('1.0.1.0/24', record.network)
156
-
157
- reader.close
158
- end
159
-
160
- def test_country
161
- reader = MaxMind::GeoIP2::Reader.new(
162
- 'test/data/test-data/GeoIP2-Country-Test.mmdb',
163
- )
164
- record = reader.country('2.125.160.216')
165
-
166
- assert_equal('EU', record.continent.code)
167
- assert_equal(6_255_148, record.continent.geoname_id)
168
- assert_equal(
169
- {
170
- 'de' => 'Europa',
171
- 'en' => 'Europe',
172
- 'es' => 'Europa',
173
- 'fr' => 'Europe',
174
- 'ja' => 'ヨーロッパ',
175
- 'pt-BR' => 'Europa',
176
- 'ru' => 'Европа',
177
- 'zh-CN' => '欧洲',
178
- },
179
- record.continent.names,
180
- )
181
- assert_equal('Europe', record.continent.name)
182
-
183
- assert_equal(2_635_167, record.country.geoname_id)
184
- refute(record.country.in_european_union?)
185
- assert_equal('GB', record.country.iso_code)
186
- assert_equal(
187
- {
188
- 'de' => 'Vereinigtes Königreich',
189
- 'en' => 'United Kingdom',
190
- 'es' => 'Reino Unido',
191
- 'fr' => 'Royaume-Uni',
192
- 'ja' => 'イギリス',
193
- 'pt-BR' => 'Reino Unido',
194
- 'ru' => 'Великобритания',
195
- 'zh-CN' => '英国',
196
- },
197
- record.country.names,
198
- )
199
- assert_equal('United Kingdom', record.country.name)
200
-
201
- assert_equal(3_017_382, record.registered_country.geoname_id)
202
- assert(record.registered_country.in_european_union?)
203
- assert_equal('FR', record.registered_country.iso_code)
204
- assert_equal(
205
- {
206
- 'de' => 'Frankreich',
207
- 'en' => 'France',
208
- 'es' => 'Francia',
209
- 'fr' => 'France',
210
- 'ja' => 'フランス共和国',
211
- 'pt-BR' => 'França',
212
- 'ru' => 'Франция',
213
- 'zh-CN' => '法国',
214
- },
215
- record.registered_country.names,
216
- )
217
- assert_equal('France', record.registered_country.name)
218
-
219
- record = reader.country('202.196.224.0')
220
-
221
- assert_equal(6_252_001, record.represented_country.geoname_id)
222
- assert_equal('US', record.represented_country.iso_code)
223
- assert_equal(
224
- {
225
- 'de' => 'USA',
226
- 'en' => 'United States',
227
- 'es' => 'Estados Unidos',
228
- 'fr' => 'États-Unis',
229
- 'ja' => 'アメリカ合衆国',
230
- 'pt-BR' => 'Estados Unidos',
231
- 'ru' => 'США',
232
- 'zh-CN' => '美国',
233
- },
234
- record.represented_country.names,
235
- )
236
- assert_equal('United States', record.represented_country.name)
237
- assert_equal('military', record.represented_country.type)
238
-
239
- record = reader.country('81.2.69.163')
240
-
241
- assert_equal('81.2.69.163', record.traits.ip_address)
242
- assert_equal('81.2.69.160/27', record.traits.network)
243
-
244
- # This IP has is_anycast.
245
-
246
- ip_address = '214.1.1.0'
247
- record = reader.country(ip_address)
248
-
249
- assert(record.traits.anycast?)
250
-
251
- assert_raises(NoMethodError) { record.foo }
252
- reader.close
253
- end
254
-
255
- def test_is_method_returns_false
256
- reader = MaxMind::GeoIP2::Reader.new(
257
- 'test/data/test-data/GeoIP2-Country-Test.mmdb',
258
- )
259
- record = reader.country('74.209.24.0')
260
-
261
- refute(record.country.in_european_union?)
262
-
263
- reader.close
264
- end
265
-
266
- def test_domain
267
- reader = MaxMind::GeoIP2::Reader.new(
268
- 'test/data/test-data/GeoIP2-Domain-Test.mmdb',
269
- )
270
- ip = '1.2.0.1'
271
- record = reader.domain(ip)
272
-
273
- assert_equal('maxmind.com', record.domain)
274
- assert_equal(ip, record.ip_address)
275
- assert_equal('1.2.0.0/16', record.network)
276
-
277
- reader.close
278
- end
279
-
280
- def test_enterprise
281
- reader = MaxMind::GeoIP2::Reader.new(
282
- 'test/data/test-data/GeoIP2-Enterprise-Test.mmdb',
283
- )
284
- record = reader.enterprise('2.125.160.216')
285
-
286
- assert_equal(50, record.city.confidence)
287
- assert_equal(2_655_045, record.city.geoname_id)
288
- assert_equal({ 'en' => 'Boxford' }, record.city.names)
289
- assert_equal('Boxford', record.city.name)
290
-
291
- ip_address = '74.209.24.0'
292
- record = reader.enterprise(ip_address)
293
-
294
- assert_equal(11, record.city.confidence)
295
- assert_equal(99, record.country.confidence)
296
- assert_equal(6_252_001, record.country.geoname_id)
297
- refute(record.country.in_european_union?)
298
-
299
- assert_equal(27, record.location.accuracy_radius)
300
-
301
- refute(record.registered_country.in_european_union?)
302
-
303
- assert_equal('Cable/DSL', record.traits.connection_type)
304
- assert(record.traits.legitimate_proxy?)
305
-
306
- assert_equal(ip_address, record.traits.ip_address)
307
- assert_equal('74.209.16.0/20', record.traits.network)
308
-
309
- # This IP has MCC/MNC data.
310
-
311
- ip_address = '149.101.100.0'
312
- record = reader.enterprise(ip_address)
313
-
314
- assert_equal('310', record.traits.mobile_country_code)
315
- assert_equal('004', record.traits.mobile_network_code)
316
-
317
- # This IP has is_anycast.
318
-
319
- ip_address = '214.1.1.0'
320
- record = reader.enterprise(ip_address)
321
-
322
- assert(record.traits.anycast?)
323
-
324
- reader.close
325
- end
326
-
327
- def test_isp
328
- reader = MaxMind::GeoIP2::Reader.new(
329
- 'test/data/test-data/GeoIP2-ISP-Test.mmdb',
330
- )
331
- ip = '1.128.1.1'
332
- record = reader.isp(ip)
333
-
334
- assert_equal(1221, record.autonomous_system_number)
335
- assert_equal('Telstra Pty Ltd', record.autonomous_system_organization)
336
- assert_equal('Telstra Internet', record.isp)
337
- assert_equal('Telstra Internet', record.organization)
338
- assert_equal(ip, record.ip_address)
339
- assert_equal('1.128.0.0/11', record.network)
340
-
341
- # This IP has MCC/MNC data.
342
-
343
- ip_address = '149.101.100.0'
344
- record = reader.isp(ip_address)
345
-
346
- assert_equal('310', record.mobile_country_code)
347
- assert_equal('004', record.mobile_network_code)
348
-
349
- reader.close
350
- end
351
-
352
- def test_no_traits
353
- reader = MaxMind::GeoIP2::Reader.new(
354
- 'test/data/test-data/GeoIP2-Enterprise-Test.mmdb',
355
- )
356
- record = reader.enterprise('2.125.160.216')
357
-
358
- assert_equal('2.125.160.216', record.traits.ip_address)
359
- assert_equal('2.125.160.216/29', record.traits.network)
360
- assert_nil(record.traits.autonomous_system_number)
361
- refute(record.traits.anonymous?)
362
-
363
- reader.close
364
- end
365
-
366
- def test_no_location
367
- reader = MaxMind::GeoIP2::Reader.new(
368
- 'test/data/test-data/GeoIP2-Enterprise-Test.mmdb',
369
- )
370
- record = reader.enterprise('212.47.235.81')
371
-
372
- assert_nil(record.location.accuracy_radius)
373
-
374
- reader.close
375
- end
376
-
377
- def test_no_postal
378
- reader = MaxMind::GeoIP2::Reader.new(
379
- 'test/data/test-data/GeoIP2-Enterprise-Test.mmdb',
380
- )
381
- record = reader.enterprise('212.47.235.81')
382
-
383
- assert_nil(record.postal.code)
384
-
385
- reader.close
386
- end
387
-
388
- def test_no_city
389
- reader = MaxMind::GeoIP2::Reader.new(
390
- 'test/data/test-data/GeoIP2-Enterprise-Test.mmdb',
391
- )
392
- record = reader.enterprise('212.47.235.81')
393
-
394
- assert_nil(record.city.confidence)
395
- assert_nil(record.city.name)
396
- assert_nil(record.city.names)
397
-
398
- reader.close
399
- end
400
-
401
- def test_no_continent
402
- reader = MaxMind::GeoIP2::Reader.new(
403
- 'test/data/test-data/GeoIP2-Enterprise-Test.mmdb',
404
- )
405
- record = reader.enterprise('212.47.235.81')
406
-
407
- assert_nil(record.continent.code)
408
-
409
- reader.close
410
- end
411
-
412
- def test_no_country
413
- reader = MaxMind::GeoIP2::Reader.new(
414
- 'test/data/test-data/GeoIP2-Enterprise-Test.mmdb',
415
- )
416
- record = reader.enterprise('212.47.235.81')
417
-
418
- assert_nil(record.country.confidence)
419
-
420
- reader.close
421
- end
422
-
423
- def test_no_represented_country
424
- reader = MaxMind::GeoIP2::Reader.new(
425
- 'test/data/test-data/GeoIP2-Enterprise-Test.mmdb',
426
- )
427
- record = reader.enterprise('212.47.235.81')
428
-
429
- assert_nil(record.represented_country.type)
430
-
431
- reader.close
432
- end
433
-
434
- def database_types
435
- [
436
- { 'file' => 'City', 'method' => 'city' },
437
- { 'file' => 'Country', 'method' => 'country' },
438
- ]
439
- end
440
-
441
- def test_default_locale
442
- database_types.each do |t|
443
- reader = MaxMind::GeoIP2::Reader.new(
444
- "test/data/test-data/GeoIP2-#{t['file']}-Test.mmdb",
445
- )
446
- record = reader.send(t['method'], '81.2.69.160')
447
-
448
- assert_equal('United Kingdom', record.country.name)
449
- reader.close
450
- end
451
- end
452
-
453
- def test_locale_list
454
- database_types.each do |t|
455
- reader = MaxMind::GeoIP2::Reader.new(
456
- "test/data/test-data/GeoIP2-#{t['file']}-Test.mmdb",
457
- %w[xx ru pt-BR es en],
458
- )
459
- record = reader.send(t['method'], '81.2.69.160')
460
-
461
- assert_equal('Великобритания', record.country.name)
462
- reader.close
463
- end
464
- end
465
-
466
- def test_has_ip_address_and_network
467
- database_types.each do |t|
468
- reader = MaxMind::GeoIP2::Reader.new(
469
- "test/data/test-data/GeoIP2-#{t['file']}-Test.mmdb",
470
- )
471
- record = reader.send(t['method'], '81.2.69.163')
472
-
473
- assert_equal('81.2.69.163', record.traits.ip_address)
474
- assert_equal('81.2.69.160/27', record.traits.network)
475
- reader.close
476
- end
477
- end
478
-
479
- def test_is_in_european_union
480
- database_types.each do |t|
481
- reader = MaxMind::GeoIP2::Reader.new(
482
- "test/data/test-data/GeoIP2-#{t['file']}-Test.mmdb",
483
- )
484
- record = reader.send(t['method'], '81.2.69.160')
485
-
486
- refute(record.country.in_european_union?)
487
- refute(record.registered_country.in_european_union?)
488
- reader.close
489
- end
490
- end
491
-
492
- def test_unknown_address
493
- database_types.each do |t|
494
- reader = MaxMind::GeoIP2::Reader.new(
495
- "test/data/test-data/GeoIP2-#{t['file']}-Test.mmdb",
496
- )
497
- error = assert_raises(
498
- MaxMind::GeoIP2::AddressNotFoundError,
499
- ) { reader.send(t['method'], '10.10.10.0') }
500
- assert_equal(
501
- 'The address 10.10.10.0 is not in the database.',
502
- error.message,
503
- )
504
- reader.close
505
- end
506
- end
507
-
508
- def test_incorrect_database
509
- reader = MaxMind::GeoIP2::Reader.new(
510
- 'test/data/test-data/GeoIP2-City-Test.mmdb',
511
- )
512
- error = assert_raises(ArgumentError) { reader.country('10.10.10.10') }
513
- assert_equal(
514
- 'The country method cannot be used with the GeoIP2-City database.',
515
- error.message,
516
- )
517
- reader.close
518
- end
519
-
520
- def test_invalid_address
521
- reader = MaxMind::GeoIP2::Reader.new(
522
- 'test/data/test-data/GeoIP2-City-Test.mmdb',
523
- )
524
- error = assert_raises(
525
- IPAddr::InvalidAddressError,
526
- ) { reader.city('invalid') }
527
- # Ruby 2.5 says just 'invalid address'. Ruby 2.6+ says 'invalid address:
528
- # invalid'.
529
- assert_match('invalid address', error.message)
530
- reader.close
531
- end
532
-
533
- def test_metadata
534
- reader = MaxMind::GeoIP2::Reader.new(
535
- 'test/data/test-data/GeoIP2-City-Test.mmdb',
536
- )
537
-
538
- assert_equal('GeoIP2-City', reader.metadata.database_type)
539
- reader.close
540
- end
541
-
542
- def test_constructor_with_minimum_keyword_arguments
543
- reader = MaxMind::GeoIP2::Reader.new(
544
- database: 'test/data/test-data/GeoIP2-Country-Test.mmdb',
545
- )
546
- record = reader.country('81.2.69.160')
547
-
548
- assert_equal('United Kingdom', record.country.name)
549
- reader.close
550
- end
551
-
552
- def test_constructor_with_all_keyword_arguments
553
- reader = MaxMind::GeoIP2::Reader.new(
554
- database: 'test/data/test-data/GeoIP2-Country-Test.mmdb',
555
- locales: %w[ru],
556
- mode: MaxMind::DB::MODE_MEMORY,
557
- )
558
- record = reader.country('81.2.69.160')
559
-
560
- assert_equal('Великобритания', record.country.name)
561
- reader.close
562
- end
563
-
564
- def test_constructor_missing_database
565
- error = assert_raises(ArgumentError) do
566
- MaxMind::GeoIP2::Reader.new
567
- end
568
- assert_equal('Invalid database parameter', error.message)
569
-
570
- error = assert_raises(ArgumentError) do
571
- MaxMind::GeoIP2::Reader.new(
572
- locales: %w[ru],
573
- )
574
- end
575
- assert_equal('Invalid database parameter', error.message)
576
- end
577
-
578
- def test_old_constructor_parameters
579
- reader = MaxMind::GeoIP2::Reader.new(
580
- 'test/data/test-data/GeoIP2-Country-Test.mmdb',
581
- %w[ru],
582
- mode: MaxMind::DB::MODE_MEMORY,
583
- )
584
- record = reader.country('81.2.69.160')
585
-
586
- assert_equal('Великобритания', record.country.name)
587
- reader.close
588
- end
589
- end