Wrap known exceptions which bubble up through Net::HTTP

This commit is contained in:
Nathaniel Bibler 2012-03-29 15:34:26 -04:00
parent ede22a7cf8
commit 3cb8fb21ff
2 changed files with 44 additions and 4 deletions

View File

@ -8,6 +8,21 @@ end
module Faraday
class Adapter
class NetHttp < Faraday::Adapter
NET_HTTP_EXCEPTIONS = [
EOFError,
Errno::ECONNABORTED,
Errno::ECONNREFUSED,
Errno::ECONNRESET,
Errno::EINVAL,
Net::HTTPBadResponse,
Net::HTTPHeaderSyntaxError,
Net::ProtocolError,
SocketError
]
NET_HTTP_EXCEPTIONS << OpenSSL::SSL::SSLError if defined?(OpenSSL)
def call(env)
super
url = env[:url]
@ -60,7 +75,7 @@ module Faraday
else
http.request http_request, env[:body]
end
rescue Errno::ECONNREFUSED
rescue *NET_HTTP_EXCEPTIONS
raise Error::ConnectionFailed, $!
end

View File

@ -22,10 +22,35 @@ module Adapters
@connection.get('/hello')
end
def test_connect_error_gets_wrapped
stub_request(:get, 'disney.com/hello').to_raise(Errno::ECONNREFUSED)
def test_connection_errors_gets_wrapped
exceptions = [
EOFError,
Errno::ECONNABORTED,
Errno::ECONNREFUSED,
Errno::ECONNRESET,
Errno::EINVAL,
Net::HTTPBadResponse,
Net::HTTPHeaderSyntaxError,
Net::ProtocolError,
SocketError
]
assert_raise Faraday::Error::ConnectionFailed do
exceptions << OpenSSL::SSL::SSLError if defined?(OpenSSL)
exceptions.each do |exception_class|
stub_request(:get, 'disney.com/hello').to_raise(exception_class)
assert_raise(Faraday::Error::ConnectionFailed,
"Failed to wrap #{exception_class} exceptions") do
@connection.get('/hello')
end
end
end
def test_timeout_errors_get_wrapped
stub_request(:get, 'disney.com/hello').to_raise(Timeout::Error)
assert_raise Faraday::Error::TimeoutError do
@connection.get('/hello')
end
end