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