module Minitest::ParalleForkFailFast
Public Instance Methods
parallel_fork_child_data(data)
click to toggle source
# File lib/minitest/parallel_fork/fail_fast.rb 41 def parallel_fork_child_data(data) 42 threads = {} 43 data.each{|pid, read| threads[pid] = Thread.new(read, &:read)} 44 results = [] 45 46 while sleep(0.01) && !threads.empty? 47 threads.to_a.each do |pid, thread| 48 unless thread.alive? 49 threads.delete(pid) 50 results << parallel_fork_data_from_marshal(thread.value) 51 52 if @parallel_fork_stop 53 # If any child failed fast, signal other children to fail fast 54 threads.each_key do |pid| 55 Process.kill(:USR1, pid) 56 end 57 58 # Set a flag indicating that all child processes have been signaled 59 @parallel_fork_stop = :FINISHED 60 end 61 end 62 end 63 end 64 65 results 66 end
parallel_fork_data_from_marshal(data)
click to toggle source
# File lib/minitest/parallel_fork/fail_fast.rb 15 def parallel_fork_data_from_marshal(data) 16 data = Marshal.load(data) 17 @parallel_fork_stop = true if data.pop 18 data 19 end
parallel_fork_data_to_marshal()
click to toggle source
Calls superclass method
# File lib/minitest/parallel_fork/fail_fast.rb 11 def parallel_fork_data_to_marshal 12 super << @parallel_fork_stop 13 end
parallel_fork_run_test_suite(suite, reporter, options)
click to toggle source
Calls superclass method
# File lib/minitest/parallel_fork/fail_fast.rb 31 def parallel_fork_run_test_suite(suite, reporter, options) 32 super 33 34 35 if parallel_fork_stat_reporter.results.any?{|r| !r.failure.is_a?(Minitest::Skip)} 36 # At least one failure or error, mark as failing fast 37 @parallel_fork_stop = true 38 end 39 end
parallel_fork_run_test_suites(suites, reporter, options)
click to toggle source
# File lib/minitest/parallel_fork/fail_fast.rb 21 def parallel_fork_run_test_suites(suites, reporter, options) 22 suites.each do |suite| 23 parallel_fork_run_test_suite(suite, reporter, options) 24 25 # Fail fast if this child process had a failure, 26 # Or the USR1 signal was received indicating other child processes had a failure. 27 break if @parallel_fork_stop 28 end 29 end
run_after_parallel_fork_hook(i)
click to toggle source
Calls superclass method
# File lib/minitest/parallel_fork/fail_fast.rb 4 def run_after_parallel_fork_hook(i) 5 super 6 Signal.trap(:USR1) do 7 @parallel_fork_stop = true 8 end 9 end