From 3cb8fb21ff4ed7f5b586b0d315409a607adf610c Mon Sep 17 00:00:00 2001 From: Nathaniel Bibler Date: Thu, 29 Mar 2012 15:34:26 -0400 Subject: [PATCH 1/2] Wrap known exceptions which bubble up through Net::HTTP --- lib/faraday/adapter/net_http.rb | 17 ++++++++++++++++- test/adapters/net_http_test.rb | 31 ++++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/lib/faraday/adapter/net_http.rb b/lib/faraday/adapter/net_http.rb index 26ac227b..817e13b7 100644 --- a/lib/faraday/adapter/net_http.rb +++ b/lib/faraday/adapter/net_http.rb @@ -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 diff --git a/test/adapters/net_http_test.rb b/test/adapters/net_http_test.rb index 25be6133..1f74441a 100644 --- a/test/adapters/net_http_test.rb +++ b/test/adapters/net_http_test.rb @@ -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 From b470b4275819d83e75ff1445d5463cdff79fce02 Mon Sep 17 00:00:00 2001 From: Nathaniel Bibler Date: Thu, 29 Mar 2012 15:42:24 -0400 Subject: [PATCH 2/2] Fix grammar on test name --- test/adapters/net_http_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/adapters/net_http_test.rb b/test/adapters/net_http_test.rb index 1f74441a..429b6dad 100644 --- a/test/adapters/net_http_test.rb +++ b/test/adapters/net_http_test.rb @@ -22,7 +22,7 @@ module Adapters @connection.get('/hello') end - def test_connection_errors_gets_wrapped + def test_connection_errors_get_wrapped exceptions = [ EOFError, Errno::ECONNABORTED,