mirror of
https://github.com/lostisland/faraday.git
synced 2025-08-29 00:03:58 -04:00
Wrap known exceptions which bubble up through Net::HTTP
This commit is contained in:
parent
ede22a7cf8
commit
3cb8fb21ff
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user