class ActiveSupport::Testing::Parallelization::Server
Inherits From
-
module
DRb::
DRbUndumped
Public class methods
Source code GitHub
# File activesupport/lib/active_support/testing/parallelization/server.rb, line 14
def initialize
@queue = Queue.new
@active_workers = Concurrent::Map.new
@in_flight = Concurrent::Map.new
end
Public instance methods
Source code GitHub
# File activesupport/lib/active_support/testing/parallelization/server.rb, line 31
def <<(o)
o[2] = DRbObject.new(o[2]) if o
@queue << o
end
Source code GitHub
# File activesupport/lib/active_support/testing/parallelization/server.rb, line 51
def active_workers?
@active_workers.size > 0
end
Source code GitHub
# File activesupport/lib/active_support/testing/parallelization/server.rb, line 55
def interrupt
@queue.clear
end
Source code GitHub
# File activesupport/lib/active_support/testing/parallelization/server.rb, line 36
def pop
if test = @queue.pop
@in_flight[[test[0].to_s, test[1]]] = test
test
end
end
Source code GitHub
# File activesupport/lib/active_support/testing/parallelization/server.rb, line 20
def record(reporter, result)
raise DRb::DRbConnError if result.is_a?(DRb::DRbUnknown)
@in_flight.delete([result.klass, result.name])
reporter.synchronize do
reporter.prerecord(PrerecordResultClass.new(result.klass), result.name)
reporter.record(result)
end
end
Source code GitHub
# File activesupport/lib/active_support/testing/parallelization/server.rb, line 59
def shutdown
# Wait for initial queue to drain
while @queue.length != 0
sleep 0.1
end
@queue.close
# Wait until all workers have finished
while active_workers?
sleep 0.1
end
@in_flight.values.each do |(klass, name, reporter)|
result = Minitest::Result.from(klass.new(name))
error = RuntimeError.new("result not reported")
error.set_backtrace([""])
result.failures << Minitest::UnexpectedError.new(error)
reporter.synchronize do
reporter.record(result)
end
end
end
Source code GitHub
# File activesupport/lib/active_support/testing/parallelization/server.rb, line 43
def start_worker(worker_id)
@active_workers[worker_id] = true
end
Source code GitHub
# File activesupport/lib/active_support/testing/parallelization/server.rb, line 47
def stop_worker(worker_id)
@active_workers.delete(worker_id)
end