spec_helper: fix Timeout::Error/SystemExit handling.

These need to be manually caught and set otherwise they will not be
retried by `rspec-retry`. This is particularly annoying and a cause of
CI failures when tests timeout but are not retried.

Fixes https://github.com/Homebrew/brew/issues/8979
This commit is contained in:
Mike McQuaid 2020-10-29 09:50:17 +00:00
parent 447fbc1cfc
commit 9d7b0bad11
No known key found for this signature in database
GPG Key ID: 48A898132FD8EE70

View File

@ -189,20 +189,15 @@ RSpec.configure do |config|
end
begin
timeout = example.metadata.fetch(:timeout, 120)
inner_timeout = nil
timeout = example.metadata.fetch(:timeout, 60)
Timeout.timeout(timeout) do
example.run
rescue Timeout::Error => e
inner_timeout = e
end
rescue Timeout::Error
raise "Example exceeded maximum runtime of #{timeout} seconds."
rescue Timeout::Error => e
example.example.set_exception(e)
end
raise inner_timeout if inner_timeout
rescue SystemExit => e
raise "Unexpected exit with status #{e.status}."
example.example.set_exception(e)
ensure
ENV.replace(@__env)