Sha256: 933fc895839f31df38f581ebaf6472049bd52bbbe3a0cf9a9d8cabea61459206

Contents?: true

Size: 1.9 KB

Versions: 3

Compression:

Stored size: 1.9 KB

Contents

# typed: strict
# frozen_string_literal: true

module Minitest
  module Distributed
    module Coordinators
      class MemoryCoordinator
        extend T::Sig
        include CoordinatorInterface

        sig { returns(Configuration) }
        attr_reader :configuration

        sig { returns(Queue) }
        attr_reader :queue

        sig { override.returns(ResultAggregate) }
        attr_reader :local_results

        alias_method :combined_results, :local_results

        sig { params(configuration: Configuration).void }
        def initialize(configuration:)
          @configuration = configuration

          @leader = T.let(Mutex.new, Mutex)
          @queue = T.let(Queue.new, Queue)
          @local_results = T.let(ResultAggregate.new, ResultAggregate)
        end

        sig { override.params(reporter: Minitest::CompositeReporter, options: T::Hash[Symbol, T.untyped]).void }
        def register_reporters(reporter:, options:)
          # No need for any additional reporters
        end

        sig { override.params(test_selector: TestSelector).void }
        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 { |test| queue << test }
            end
          end
        end

        sig { override.params(reporter: AbstractReporter).void }
        def consume(reporter:)
          until queue.empty? && queue.closed?
            enqueued_runnable = queue.pop
            reporter.prerecord(enqueued_runnable.runnable_class, enqueued_runnable.method_name)
            result = enqueued_runnable.run

            local_results.update_with_result(result)
            local_results.acks += 1

            reporter.record(result)

            queue.close if local_results.completed?
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
minitest-distributed-0.1.2 lib/minitest/distributed/coordinators/memory_coordinator.rb
minitest-distributed-0.1.1 lib/minitest/distributed/coordinators/memory_coordinator.rb
minitest-distributed-0.1.0 lib/minitest/distributed/coordinators/memory_coordinator.rb