Module: Minitest::Queue

Defined in:
lib/minitest/queue.rb,
lib/minitest/queue/runner.rb,
lib/minitest/queue/statsd.rb,
lib/minitest/queue/test_data.rb,
lib/minitest/queue/error_report.rb,
lib/minitest/queue/grind_recorder.rb,
lib/minitest/queue/grind_reporter.rb,
lib/minitest/queue/junit_reporter.rb,
lib/minitest/queue/failure_formatter.rb,
lib/minitest/queue/test_data_reporter.rb,
lib/minitest/queue/test_time_recorder.rb,
lib/minitest/queue/test_time_reporter.rb,
lib/minitest/queue/build_status_recorder.rb,
lib/minitest/queue/build_status_reporter.rb,
lib/minitest/queue/local_requeue_reporter.rb

Defined Under Namespace

Classes: BuildStatusRecorder, BuildStatusReporter, ErrorReport, FailureFormatter, GrindRecorder, GrindReporter, JUnitReporter, LocalRequeueReporter, OrderReporter, Runner, SingleExample, Statsd, TestData, TestDataReporter, TestTimeRecorder, TestTimeReporter

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#queue ⇒ Object

Returns the value of attribute queue.



129
130
131
# File 'lib/minitest/queue.rb', line 129

def queue
  @queue
end

Instance Method Details

#__run(*args) ⇒ Object



150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/minitest/queue.rb', line 150

def __run(*args)
  if queue
    run_from_queue(*args)

    if queue.config.circuit_breakers.any?(&:open?)
      STDERR.puts queue.config.circuit_breakers.map(&:message).join(' ').strip
    end

    if queue.max_test_failed?
      STDERR.puts 'This worker is exiting early because too many failed tests were encountered.'
    end
  else
    super
  end
end

#loaded_tests ⇒ Object



142
143
144
145
146
147
148
# File 'lib/minitest/queue.rb', line 142

def loaded_tests
  Minitest::Test.runnables.flat_map do |runnable|
    runnable.runnable_methods.map do |method_name|
      SingleExample.new(runnable, method_name)
    end
  end
end

#queue_reporters=(reporters) ⇒ Object



135
136
137
138
139
140
# File 'lib/minitest/queue.rb', line 135

def queue_reporters=(reporters)
  @queue_reporters ||= []
  Reporters.use!(((Reporters.reporters || []) - @queue_reporters) + reporters)
  Minitest.backtrace_filter.add_filter(%r{exe/minitest-queue|lib/ci/queue/})
  @queue_reporters = reporters
end

#run_from_queue(reporter) ⇒ Object



166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# File 'lib/minitest/queue.rb', line 166

def run_from_queue(reporter, *)
  queue.poll do |example|
    result = example.run
    failed = !(result.passed? || result.skipped?)

    if example.flaky?
      result.mark_as_flaked!
      failed = false
    end

    if failed
      queue.report_failure!
    else
      queue.report_success!
    end

    requeued = false
    if failed && CI::Queue.requeueable?(result) && queue.requeue(example)
      requeued = true
      result.requeue!
      reporter.record(result)
    elsif queue.acknowledge(example) || !failed
      # If the test was already acknowledged by another worker (we timed out)
      # Then we only record it if it is successful.
      reporter.record(result)
    end

    if !requeued && failed
      queue.increment_test_failed
    end
  end
end