class RSpec::Queue::ReportRunner

Attributes

configuration[R]

Public Instance Methods

call(options, stdout, stderr) click to toggle source
# File lib/rspec/queue.rb, line 267
def call(options, stdout, stderr)
  setup(options, stdout, stderr)

  queue = CI::Queue.from_uri(queue_url, RSpec::Queue.config)

  supervisor = begin
    queue.supervisor
  rescue NotImplementedError => error
    abort! error.message
  end

  step("Waiting for workers to complete")

  unless supervisor.wait_for_workers
    unless supervisor.queue_initialized?
      abort! "No master was elected. Did all workers crash?"
    end

    unless supervisor.exhausted?
      abort! "#{supervisor.size} tests weren't run."
    end
  end

  # TODO: better reporting
  errors = supervisor.build.error_reports.sort_by(&:first).map(&:last)
  if errors.empty?
    step(green('No errors found'))
    0
  else
    message = errors.size == 1 ? "1 error found" : "#{errors.size} errors found"
    step(red(message), collapsed: false)
    puts errors
    1
  end
end

Private Instance Methods

setup(options, out, err) click to toggle source
# File lib/rspec/queue.rb, line 307
def setup(options, out, err)
  @options       = options
  @configuration = RSpec.configuration
  @world         = RSpec.world
  @configuration.error_stream = err
  @configuration.output_stream = out if @configuration.output_stream == $stdout
  @options.options.delete(:requires) # Prevent loading of spec_helper so the app doesn't need to boot
  @options.configure(@configuration)

  invalid_usage!('Missing --queue parameter') unless queue_url
  invalid_usage!('Missing --build parameter') unless RSpec::Queue.config.build_id
end