diff --git a/lib/geocoder/lookups/base.rb b/lib/geocoder/lookups/base.rb index cb41337b95347aa1730fcd234196d73e2974c3a0..22a7c349546c1ed9316a618524305c9b70e02080 100644 --- a/lib/geocoder/lookups/base.rb +++ b/lib/geocoder/lookups/base.rb @@ -169,6 +169,8 @@ module Geocoder parse_raw_data fetch_raw_data(query) rescue SocketError => err raise_error(err) or warn "Geocoding API connection cannot be established." + rescue Errno::ECONNREFUSED => err + raise_error(err) or warn "Geocoding API connection refused." rescue TimeoutError => err raise_error(err) or warn "Geocoding API not responding fast enough " + "(use Geocoder.configure(:timeout => ...) to set limit)." diff --git a/test/test_helper.rb b/test/test_helper.rb index 2309827b16d10b49e1aa5f1dffaaf79f4b8fdf0d..d872af3d1c85eaf88d23d5e8e5112744747ba3e5 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -110,6 +110,7 @@ module Geocoder def make_api_request(query) raise TimeoutError if query.text == "timeout" raise SocketError if query.text == "socket_error" + raise Errno::ECONNREFUSED if query.text == "connection_refused" read_fixture fixture_for_query(query) end end diff --git a/test/unit/error_handling_test.rb b/test/unit/error_handling_test.rb index e999af9468256d0ad3853021c43c91d52305aa2c..29f2ccbb1d9878c107bd64b49a942fdc9c849785 100644 --- a/test/unit/error_handling_test.rb +++ b/test/unit/error_handling_test.rb @@ -41,4 +41,16 @@ class ErrorHandlingTest < GeocoderTestCase end end end + + def test_always_raise_connection_refused_error + Geocoder.configure(:always_raise => [Errno::ECONNREFUSED]) + Geocoder::Lookup.all_services_except_test.each do |l| + next if l == :maxmind_local # local, does not raise timeout + lookup = Geocoder::Lookup.get(l) + set_api_key!(l) + assert_raises Errno::ECONNREFUSED do + lookup.send(:results, Geocoder::Query.new("connection_refused")) + end + end + end end