Module: Minitest::Queue

Defined in:
lib/minitest/queue.rb,
lib/minitest/queue/runner.rb,
lib/minitest/queue/statsd.rb,
lib/minitest/queue/error_report.rb,
lib/minitest/queue/junit_reporter.rb,
lib/minitest/queue/failure_formatter.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, JUnitReporter, LocalRequeueReporter, OrderReporter, Runner, SingleExample, Statsd

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#queue ⇒ Object

Returns the value of attribute queue.



122
123
124
# File 'lib/minitest/queue.rb', line 122

def queue
  @queue
end

Instance Method Details

#__run(*args) ⇒ Object



143
144
145
146
147
148
149
150
151
152
153
# File 'lib/minitest/queue.rb', line 143

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

    if queue.config.circuit_breaker.open?
      STDERR.puts "This worker is exiting early because it encountered too many consecutive test failures, probably because of some corrupted state."
    end
  else
    super
  end
end

#loaded_tests ⇒ Object



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

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



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

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



155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
# File 'lib/minitest/queue.rb', line 155

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

    if failed && queue.requeue(example)
      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
  end
end