Skip to content
Snippets Groups Projects
Commit ce7d0571 authored by Carlos Villela's avatar Carlos Villela Committed by Thu Trang Pham
Browse files

[db-ip] Handle Geocoder::OverQueryLimitError gracefully (#1230)

* Handle Geocoder::OverQueryLimitError gracefully.

Geocoder::OverQueryLimitError errors were not being generated correctly, and the response was coming back empty but with no indication.

This changes the behavior slightly so that unknown errors are also returned.

* Add error handling tests

* Remove unnecessary config in tests
parent 1d39ae5f
No related branches found
No related tags found
No related merge requests found
......@@ -27,18 +27,22 @@ module Geocoder::Lookup
private
def results(query)
return [] unless doc = fetch_data(query)
return [] unless (doc = fetch_data(query))
if doc['error']
if doc['error'] == 'invalid API key'
raise_error(Geocoder::InvalidApiKey) || Geocoder.log(:warn, 'Invalid DB-IP API key.')
else
Geocoder.log(:warn, "DB-IP Geocoding API error: #{doc['error']}.")
end
case doc['error']
when 'maximum number of queries per day exceeded'
raise_error Geocoder::OverQueryLimitError ||
Geocoder.log(:warn, 'DB-API query limit exceeded.')
when 'invalid API key'
raise_error Geocoder::InvalidApiKey ||
Geocoder.log(:warn, 'Invalid DB-IP API key.')
when nil
[doc]
return []
else
return [ doc ]
raise_error Geocoder::Error ||
Geocoder.log(:warn, "Request failed: #{doc['error']}")
end
end
end
......
{"error":"maximum number of queries per day exceeded"}
\ No newline at end of file
{"error":"unknown error"}
\ No newline at end of file
......@@ -164,8 +164,8 @@ module Geocoder
require 'geocoder/lookups/db_ip_com'
class DbIpCom
private
def default_fixture_filename
"db_ip_com_23_255_240_0"
def fixture_prefix
"db_ip_com"
end
end
......
# encoding: utf-8
require 'test_helper'
class DbIpComTest < GeocoderTestCase
def configure_for_free_api_access
Geocoder.configure(ip_lookup: :db_ip_com, db_ip_com: { api_key: 'MY_API_KEY' })
set_api_key!(:db_ip_com)
......@@ -51,14 +49,28 @@ class DbIpComTest < GeocoderTestCase
def test_free_host_config
configure_for_free_api_access
lookup = Geocoder::Lookup::DbIpCom.new
query = Geocoder::Query.new("23.255.240.0")
query = Geocoder::Query.new('23.255.240.0')
assert_match 'http://api.db-ip.com/v2/MY_API_KEY/23.255.240.0', lookup.query_url(query)
end
def test_paid_host_config
configure_for_paid_api_access
lookup = Geocoder::Lookup::DbIpCom.new
query = Geocoder::Query.new("23.255.240.0")
query = Geocoder::Query.new('23.255.240.0')
assert_match 'https://api.db-ip.com/v2/MY_API_KEY/23.255.240.0', lookup.query_url(query)
end
def test_raises_over_limit_exception
Geocoder.configure always_raise: :all
assert_raises Geocoder::OverQueryLimitError do
Geocoder::Lookup::DbIpCom.new.send(:results, Geocoder::Query.new('quota exceeded'))
end
end
def test_raises_unknown_error
Geocoder.configure always_raise: :all
assert_raises Geocoder::Error do
Geocoder::Lookup::DbIpCom.new.send(:results, Geocoder::Query.new('unknown error'))
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment