class Object

Public Instance Methods

parse_task_args(test_tool=:rspec, args) click to toggle source
# File lib/tasks/parallel_testing.rb, line 104
def parse_task_args(test_tool=:rspec, args)
  default = {
    :concurrency => [Sauce::TestBroker.concurrency, 20].min
  }

  if test_tool == :rspec
    default[:test_options] = '-t sauce'
    default[:files] = 'spec'
  end

  if test_tool == :cucumber
    default[:files] = 'features'
  end

  env_args = {
    :concurrency => ENV['concurrency'],
    :features => ENV['features'],
    :parallel_options => ENV['parallel_test_options'],
    :test_options => ENV['test_options'],
    :files => ENV['test_files']
  }

  concurrency = args[:concurrency] || env_args[:concurrency] || default[:concurrency]
  test_options = args[:test_options] || env_args[:test_options] || default[:test_options]
  parallel_options = args[:parallel_options] || env_args[:parallel_options]
  files = args[:files] || env_args[:files] || default[:files]

  return_args = [
    '-n', concurrency.to_s,
    '--type'
  ]

  return_args.push 'saucerspec' if test_tool == :rspec
  return_args.push 'saucecucumber' if test_tool == :cucumber

  if test_options
    return_args.push '-o'
    return_args.push test_options
  end

  return_args.push *(parallel_options.split(' ')) if parallel_options
  return_args.concat files.split

  return return_args
end
run_parallel_tests(t, args, command) click to toggle source
# File lib/tasks/parallel_testing.rb, line 74
def run_parallel_tests(t, args, command)
  if ParallelTests.number_of_running_processes == 0
    username    = ENV["SAUCE_USERNAME"].to_s
    access_key  = ENV["SAUCE_ACCESS_KEY"].to_s
    if(!username.empty? && !access_key.empty?)
      parallel_arguments = parse_task_args(command, args)
      ParallelTests::CLI.new.run(parallel_arguments)
    else
      puts <<-ENDLINE
    -----------------------------------------------------------------------
    Your Sauce username and/or access key are unavailable. Please:
    1.  Set the SAUCE_USERNAME and SAUCE_ACCESS_KEY environment variables.
    2.  Rerun your tests.
    -----------------------------------------------------------------------
      ENDLINE
    end
  else
    puts <<-ENDLINE
  ---------------------------------------------------------------------------
  There are already parallel_tests processes running.  This can interfere
  with test startup and shutdown.

  If you're not running other parallel tests, this might be caused by zombie
  processes (The worst kind of processes).  Kill `em off and try again.
  ---------------------------------------------------------------------------
    ENDLINE
    exit(1)
  end
end
start_tunnel_for_parallel_tests(c) click to toggle source
# File lib/sauce/parallel.rb, line 3
def start_tunnel_for_parallel_tests(c)
  c[:start_tunnel] = ParallelTests.first_process?
  if ParallelTests.first_process?
    at_exit do
      if ParallelTests.first_process?
        ParallelTests.wait_for_other_processes_to_finish
      end
    end
  else
    while not File.exist? "sauce_connect.ready"
      sleep 0.5
    end
  end
end