class Minitest::Distributed::Coordinators::MemoryCoordinator

Attributes

combined_results[R]
configuration[R]
local_results[R]
queue[R]

Public Class Methods

new(configuration:) click to toggle source
# File lib/minitest/distributed/coordinators/memory_coordinator.rb, line 23
def initialize(configuration:)
  @configuration = configuration

  @leader = T.let(Mutex.new, Mutex)
  @queue = T.let(Queue.new, Queue)
  @local_results = T.let(ResultAggregate.new(max_failures: configuration.max_failures), ResultAggregate)
  @aborted = T.let(false, T::Boolean)
end

Public Instance Methods

aborted?() click to toggle source
# File lib/minitest/distributed/coordinators/memory_coordinator.rb, line 38
def aborted?
  @aborted
end
consume(reporter:) click to toggle source
# File lib/minitest/distributed/coordinators/memory_coordinator.rb, line 63
def consume(reporter:)
  until queue.closed?
    enqueued_runnable = T.let(queue.pop, EnqueuedRunnable)

    reporter.prerecord(enqueued_runnable.runnable_class, enqueued_runnable.method_name)

    initial_result = enqueued_runnable.run
    enqueued_result = enqueued_runnable.commit_result(initial_result) do |result_to_commit|
      if ResultType.of(result_to_commit) == ResultType::Requeued
        queue << enqueued_runnable.next_attempt
      end
      EnqueuedRunnable::Result::Commit.success
    end

    reporter.record(enqueued_result.committed_result)
    local_results.update_with_result(enqueued_result)

    # We abort a run if we reach the maximum number of failures
    queue.close if combined_results.abort?
    queue.close if combined_results.complete?
  end
end
produce(test_selector:) click to toggle source
# File lib/minitest/distributed/coordinators/memory_coordinator.rb, line 43
def produce(test_selector:)
  if @leader.try_lock
    tests = test_selector.tests
    @local_results.size = tests.size
    if tests.empty?
      queue.close
    else
      tests.each do |runnable|
        queue << EnqueuedRunnable.new(
          class_name: T.must(runnable.class.name),
          method_name: runnable.name,
          test_timeout_seconds: configuration.test_timeout_seconds,
          max_attempts: configuration.max_attempts,
        )
      end
    end
  end
end
register_reporters(reporter:, options:) click to toggle source
# File lib/minitest/distributed/coordinators/memory_coordinator.rb, line 33
def register_reporters(reporter:, options:)
  # No need for any additional reporters
end