Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .rubocop.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
require: rubocop-performance
plugins:
- rubocop-minitest
- rubocop-performance
- rubocop-rake
- rubocop-thread_safety

AllCops:
TargetRubyVersion: '3.2'
Expand Down Expand Up @@ -34,3 +38,7 @@ Style/TrailingCommaInHashLiteral:

Gemspec/DevelopmentDependencies:
Enabled: false

# Sometimes it makes sense to have lots of assertions.
Minitest/MultipleAssertions:
Enabled: false
3 changes: 1 addition & 2 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,4 @@ end
RuboCop::RakeTask.new

desc 'Run tests and RuboCop'
task default: :test
task default: :rubocop
task default: %i[test rubocop]
3 changes: 3 additions & 0 deletions maxmind-db.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,8 @@ Gem::Specification.new do |s|
s.add_development_dependency 'minitest'
s.add_development_dependency 'rake'
s.add_development_dependency 'rubocop'
s.add_development_dependency 'rubocop-minitest'
s.add_development_dependency 'rubocop-performance'
s.add_development_dependency 'rubocop-rake'
s.add_development_dependency 'rubocop-thread_safety'
end
1 change: 1 addition & 0 deletions test/test_decoder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ def test_pointer

def test_string
values = validate_type_decoding('string', @@strings)

values.each do |s|
assert_equal(Encoding::UTF_8, s.encoding)
end
Expand Down
29 changes: 20 additions & 9 deletions test/test_reader.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ def test_reader_inspect
modes.each do |mode|
filename = 'test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb'
reader = MaxMind::DB.new(filename, mode: mode)

assert_instance_of(String, reader.inspect)
end
end
Expand Down Expand Up @@ -157,10 +158,11 @@ def test_decoder
'test/data/test-data/MaxMind-DB-test-decoder.mmdb'
)
record = reader.get('::1.1.1.0')

assert_equal([1, 2, 3], record['array'])
assert_equal(true, record['boolean'])
assert(record['boolean'])
assert_equal("\x00\x00\x00*".b, record['bytes'])
assert_equal(42.123456, record['double'])
assert_in_delta(42.123456, record['double'])
assert_in_delta(1.1, record['float'])
assert_equal(-268_435_456, record['int32'])
assert_equal(
Expand All @@ -184,6 +186,7 @@ def test_metadata_pointers
reader = MaxMind::DB.new(
'test/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb'
)

assert_equal('Lots of pointers in metadata', reader.metadata.database_type)
reader.close
end
Expand All @@ -192,6 +195,7 @@ def test_no_ipv4_search_tree
reader = MaxMind::DB.new(
'test/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb'
)

assert_equal('::0/64', reader.get('1.1.1.1'))
assert_equal('::0/64', reader.get('192.1.1.1'))
reader.close
Expand Down Expand Up @@ -244,15 +248,15 @@ def test_ip_validation
e = assert_raises ArgumentError do
reader.get('not_ip')
end
assert(e.message.include?('invalid address'))
assert_includes(e.message, 'invalid address')
reader.close
end

def test_missing_database
e = assert_raises SystemCallError do
MaxMind::DB.new('file-does-not-exist.mmdb')
end
assert(e.message.include?('No such file or directory'))
assert_includes(e.message, 'No such file or directory')
end

def test_nondatabase
Expand All @@ -269,14 +273,14 @@ def test_too_many_constructor_args
e = assert_raises ArgumentError do
MaxMind::DB.new('README.md', {}, 'blah')
end
assert(e.message.include?('wrong number of arguments'))
assert_includes(e.message, 'wrong number of arguments')
end

def test_no_constructor_args
e = assert_raises ArgumentError do
MaxMind::DB.new
end
assert(e.message.include?('wrong number of arguments'))
assert_includes(e.message, 'wrong number of arguments')
end

def test_too_many_get_args
Expand All @@ -286,7 +290,7 @@ def test_too_many_get_args
e = assert_raises ArgumentError do
reader.get('1.1.1.1', 'blah')
end
assert(e.message.include?('wrong number of arguments'))
assert_includes(e.message, 'wrong number of arguments')
reader.close
end

Expand All @@ -297,7 +301,7 @@ def test_no_get_args
e = assert_raises ArgumentError do
reader.get
end
assert(e.message.include?('wrong number of arguments'))
assert_includes(e.message, 'wrong number of arguments')
reader.close
end

Expand All @@ -308,7 +312,7 @@ def test_metadata_args
e = assert_raises ArgumentError do
reader.metadata('hi')
end
assert(e.message.include?('wrong number of arguments'))
assert_includes(e.message, 'wrong number of arguments')
reader.close
end

Expand Down Expand Up @@ -353,6 +357,7 @@ def test_closed_metadata
'test/data/test-data/MaxMind-DB-test-decoder.mmdb'
)
reader.close

assert_equal(
{ 'en' => 'MaxMind DB Decoder Test database - contains every MaxMind DB data type' },
reader.metadata.description,
Expand All @@ -373,7 +378,9 @@ def test_threads

threads = []
num_threads.times do |i|
# rubocop:disable ThreadSafety/NewThread
threads << Thread.new do
# rubocop:enable ThreadSafety/NewThread
num_lookups.times do |j|
thread_lookups[i] << reader.get("65.115.240.#{j}")
thread_lookups[i] << reader.get("2a02:2770:3::#{j}")
Expand Down Expand Up @@ -474,6 +481,7 @@ def check_metadata(reader, ip_version, record_size)
def check_ipv4(reader, filename)
6.times do |i|
address = "1.1.1.#{2**i}"

assert_equal(
{ 'ip' => address },
reader.get(address),
Expand All @@ -492,6 +500,7 @@ def check_ipv4(reader, filename)
}
pairs.each do |key_address, value_address|
data = { 'ip' => value_address }

assert_equal(
data,
reader.get(key_address),
Expand All @@ -511,6 +520,7 @@ def check_ipv6(reader, filename)
subnets = [
'::1:ffff:ffff', '::2:0:0', '::2:0:40', '::2:0:50', '::2:0:58',
]

subnets.each do |address|
assert_equal(
{ 'ip' => address },
Expand All @@ -529,6 +539,7 @@ def check_ipv6(reader, filename)
'::2:0:57' => '::2:0:50',
'::2:0:59' => '::2:0:58',
}

pairs.each do |key_address, value_address|
assert_equal(
{ 'ip' => value_address },
Expand Down
Loading