UnexpectedErrors may reference exceptions that can't be dumped
UnexpectedError exceptions wrap the original exception, and the original exception may contain a reference to something that can't be marshal dumped which will cause the process to die.
This commit is contained in:
parent
c6af3bad67
commit
efb835c9c0
@ -484,6 +484,9 @@ def shutdown
|
||||
method = job[1]
|
||||
reporter = job[2]
|
||||
result = Minitest.run_one_method klass, method
|
||||
if result.error?
|
||||
translate_exceptions result
|
||||
end
|
||||
queue.record reporter, result
|
||||
end
|
||||
}
|
||||
@ -491,6 +494,20 @@ def shutdown
|
||||
@size.times { @queue << nil }
|
||||
pool.each { |pid| Process.waitpid pid }
|
||||
end
|
||||
|
||||
private
|
||||
def translate_exceptions(result)
|
||||
result.failures.map! { |e|
|
||||
begin
|
||||
Marshal.dump e
|
||||
e
|
||||
rescue TypeError
|
||||
ex = Exception.new e.message
|
||||
ex.set_backtrace e.backtrace
|
||||
Minitest::UnexpectedError.new ex
|
||||
end
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
if ActiveSupport::Testing::Isolation.forking_env? && PROCESS_COUNT > 0
|
||||
|
Loading…
Reference in New Issue
Block a user