FIX: `TurboTests::Runner` not failing on errors.

This commit is contained in:
Guo Xiang Tan 2020-06-23 11:45:18 +08:00
parent 97d12a3a8e
commit e3e7905d9e
No known key found for this signature in database
GPG Key ID: FBD110179AAC1F20
1 changed files with 26 additions and 5 deletions

View File

@ -32,6 +32,7 @@ module TurboTests
@messages = Queue.new
@threads = []
@error = false
end
def run
@ -43,6 +44,7 @@ module TurboTests
group_opts = {}
if use_runtime_info
FileUtils.rm("tmp/turbo_rspec_runtime.log", force: true)
group_opts[:runtime_log] = "tmp/turbo_rspec_runtime.log"
else
group_opts[:group_by] = :filesize
@ -73,7 +75,7 @@ module TurboTests
@threads.each(&:join)
@reporter.failed_examples.empty?
@reporter.failed_examples.empty? && !@error
end
protected
@ -86,12 +88,14 @@ module TurboTests
ActiveRecord::Tasks::DatabaseTasks.migrations_paths = ['db/migrate', 'db/post_migrate']
conn = ActiveRecord::Base.establish_connection(config).connection
begin
conn = ActiveRecord::Base.establish_connection(config).connection
ActiveRecord::Migration.check_pending!(conn)
rescue ActiveRecord::PendingMigrationError
puts "There are pending migrations, run rake parallel:migrate"
exit 1
ensure
conn&.close
end
end
@ -168,7 +172,8 @@ module TurboTests
STDERR.puts "Process #{process_id}: #{command_str}"
end
_stdin, stdout, stderr, _wait_thr = Open3.popen3(env, *command)
stdin, stdout, stderr, wait_thr = Open3.popen3(env, *command)
stdin.close
@threads <<
Thread.new do
@ -184,8 +189,16 @@ module TurboTests
@messages << { type: 'exit', process_id: process_id }
end
@threads << start_copy_thread(stdout, STDOUT)
@threads << start_copy_thread(stderr, STDERR)
stdout_thread = start_copy_thread(stdout, STDOUT)
stderr_thread = start_copy_thread(stderr, STDERR)
@threads << stdout_thread
@threads << stderr_thread
@threads << Thread.new do
if wait_thr.value.exitstatus != 0
@messages << { type: 'error', record_runtime: record_runtime }
end
end
end
end
@ -195,6 +208,7 @@ module TurboTests
begin
msg = src.readpartial(4096)
rescue EOFError
src.close
break
else
dst.write(msg)
@ -226,6 +240,13 @@ module TurboTests
end
when 'seed'
when 'close'
when 'error'
if message[:record_runtime]
STDERR.puts File.read("tmp/turbo_rspec_runtime.log")
end
@threads.each(&:kill)
@error = true
break
when 'exit'
exited += 1
if exited == @num_processes + 1