Skip to content
Browse files

Merge pull request #129 from nbibler/net_http_exception_wrapping

Wrap known exceptions which bubble up through Net::HTTP
  • Loading branch information...
2 parents 9f1181c + b470b42 commit d68d862310ee82c92ef8c771ca11eddb408a05e1 @technoweenie committed Apr 14, 2012
Showing with 44 additions and 4 deletions.
  1. +16 −1 lib/faraday/adapter/net_http.rb
  2. +28 −3 test/adapters/net_http_test.rb
View
17 lib/faraday/adapter/net_http.rb
@@ -8,6 +8,21 @@
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]
@@ -61,7 +76,7 @@ def call(env)
else
http.request http_request, env[:body]
end
- rescue Errno::ECONNREFUSED
+ rescue *NET_HTTP_EXCEPTIONS
raise Error::ConnectionFailed, $!
end
View
31 test/adapters/net_http_test.rb
@@ -22,10 +22,35 @@ def test_handles_compression_transparently_on_get
@connection.get('/hello')
end
- def test_connect_error_gets_wrapped
- stub_request(:get, 'disney.com/hello').to_raise(Errno::ECONNREFUSED)
+ def test_connection_errors_get_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

0 comments on commit d68d862

Please sign in to comment.
Something went wrong with that request. Please try again.