Merge pull request #97 from serihiro/retry-request-with-unexpected-error
Retry http request when unexpected error occurs
This commit is contained in:
commit
8665196405
|
@ -88,6 +88,8 @@ END
|
||||||
def fetch_access_token(options = {})
|
def fetch_access_token(options = {})
|
||||||
c = options[:connection] || Faraday.default_connection
|
c = options[:connection] || Faraday.default_connection
|
||||||
c.headers = { 'Metadata-Flavor' => 'Google' }
|
c.headers = { 'Metadata-Flavor' => 'Google' }
|
||||||
|
|
||||||
|
retry_with_error do
|
||||||
resp = c.get(COMPUTE_AUTH_TOKEN_URI)
|
resp = c.get(COMPUTE_AUTH_TOKEN_URI)
|
||||||
case resp.status
|
case resp.status
|
||||||
when 200
|
when 200
|
||||||
|
@ -96,10 +98,12 @@ END
|
||||||
when 404
|
when 404
|
||||||
raise(Signet::AuthorizationError, NO_METADATA_SERVER_ERROR)
|
raise(Signet::AuthorizationError, NO_METADATA_SERVER_ERROR)
|
||||||
else
|
else
|
||||||
msg = "Unexpected error code #{resp.status}" + UNEXPECTED_ERROR_SUFFIX
|
msg = "Unexpected error code #{resp.status}" \
|
||||||
|
"#{UNEXPECTED_ERROR_SUFFIX}"
|
||||||
raise(Signet::AuthorizationError, msg)
|
raise(Signet::AuthorizationError, msg)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -77,6 +77,27 @@ module Signet
|
||||||
block.call(self)
|
block.call(self)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def retry_with_error(max_retry_count = 5)
|
||||||
|
retry_count = 0
|
||||||
|
|
||||||
|
begin
|
||||||
|
yield
|
||||||
|
rescue => e
|
||||||
|
if e.is_a?(Signet::AuthorizationError) || e.is_a?(Signet::ParseError)
|
||||||
|
raise e
|
||||||
|
end
|
||||||
|
|
||||||
|
if retry_count < max_retry_count
|
||||||
|
retry_count += 1
|
||||||
|
sleep retry_count * 0.3
|
||||||
|
retry
|
||||||
|
else
|
||||||
|
msg = "Unexpected error: #{e.inspect}"
|
||||||
|
raise(Signet::AuthorizationError, msg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -92,6 +92,8 @@ module Google
|
||||||
# Revokes the credential
|
# Revokes the credential
|
||||||
def revoke!(options = {})
|
def revoke!(options = {})
|
||||||
c = options[:connection] || Faraday.default_connection
|
c = options[:connection] || Faraday.default_connection
|
||||||
|
|
||||||
|
retry_with_error do
|
||||||
resp = c.get(REVOKE_TOKEN_URI, token: refresh_token || access_token)
|
resp = c.get(REVOKE_TOKEN_URI, token: refresh_token || access_token)
|
||||||
case resp.status
|
case resp.status
|
||||||
when 200
|
when 200
|
||||||
|
@ -103,6 +105,7 @@ module Google
|
||||||
"Unexpected error code #{resp.status}")
|
"Unexpected error code #{resp.status}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Verifies that a credential grants the requested scope
|
# Verifies that a credential grants the requested scope
|
||||||
#
|
#
|
||||||
|
|
|
@ -77,6 +77,20 @@ describe Google::Auth::GCECredentials do
|
||||||
.to raise_error Signet::AuthorizationError
|
.to raise_error Signet::AuthorizationError
|
||||||
expect(stub).to have_been_requested
|
expect(stub).to have_been_requested
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should fail with Signet::AuthorizationError if request times out' do
|
||||||
|
allow_any_instance_of(Faraday::Connection).to receive(:get)
|
||||||
|
.and_raise(Faraday::TimeoutError)
|
||||||
|
expect { @client.fetch_access_token! }
|
||||||
|
.to raise_error Signet::AuthorizationError
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should fail with Signet::AuthorizationError if request fails' do
|
||||||
|
allow_any_instance_of(Faraday::Connection).to receive(:get)
|
||||||
|
.and_raise(Faraday::ConnectionFailed, nil)
|
||||||
|
expect { @client.fetch_access_token! }
|
||||||
|
.to raise_error Signet::AuthorizationError
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -293,4 +293,20 @@ describe Google::Auth::UserRefreshCredentials do
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'when erros occured with request' do
|
||||||
|
it 'should fail with Signet::AuthorizationError if request times out' do
|
||||||
|
allow_any_instance_of(Faraday::Connection).to receive(:get)
|
||||||
|
.and_raise(Faraday::TimeoutError)
|
||||||
|
expect { @client.revoke! }
|
||||||
|
.to raise_error Signet::AuthorizationError
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should fail with Signet::AuthorizationError if request fails' do
|
||||||
|
allow_any_instance_of(Faraday::Connection).to receive(:get)
|
||||||
|
.and_raise(Faraday::ConnectionFailed, nil)
|
||||||
|
expect { @client.revoke! }
|
||||||
|
.to raise_error Signet::AuthorizationError
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue