Failing test: Logging headers & errors fails when ConnectionFailed is raised #1512
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
I was not able to use faraday logging with the logging options
headers: true, errors: truewhen the connection can not be estabilshed and aFaraday::ConnectionFailederror should be raised, because it raised a different error instead:NoMethodError: undefined methodmap' for nil:NilClass`Here is the stacktrace:
The reason this happens is that the
Faraday::Logging::Formatter#exceptionmethod tries to log the headers of the exception, but there aren't any.#log_headersis still called though, becauseexc.respond_to?(:response_headers) && log_headers?(:error)is true, as theFaraday::Errorclass implements the#response_headersmethod. Again, the@responseof theexcinstance isnil, so when thedump_headersmethod is finally called, it is called withnil. And there it fails because it can't callmapon nil.There are various ways to solve this, but the simplest would be to check for nil in the
dump_headersmethod:You could also catch this in the exception method, but I think catching it in the dump_headers method is more robust: