class Sauce::TestBroker

Constants

AUTH_DETAILS
CUCUMBER_CONFIG_FILES
RSPEC_CONFIG_FILES
SAUCE_ACCESS_KEY
SAUCE_USERNAME

Public Class Methods

concurrency() click to toggle source
# File lib/sauce/parallel/test_broker.rb, line 69
def self.concurrency
  response = RestClient.get "#{rest_jobs_url}/#{SAUCE_USERNAME}/limits"
  res = JSON.parse(response)["concurrency"]
end
environment_mutex() click to toggle source
# File lib/sauce/parallel/test_broker.rb, line 19
def self.environment_mutex
  @@m ||= Mutex.new
end
find_config_file(primary_files, secondary_files) click to toggle source
# File lib/sauce/parallel/test_broker.rb, line 98
def self.find_config_file(primary_files, secondary_files)
  find_in_file_list(primary_files) || find_in_file_list(secondary_files)
end
find_in_file_list(list) click to toggle source
# File lib/sauce/parallel/test_broker.rb, line 102
def self.find_in_file_list(list)
  list.find { |file_path| File.exists?(file_path) }
end
group_index(group) click to toggle source
# File lib/sauce/parallel/test_broker.rb, line 57
def self.group_index(group)
  @group_indexes[group].shift
end
load_sauce_config(tool=:rspec) click to toggle source
# File lib/sauce/parallel/test_broker.rb, line 78
def self.load_sauce_config(tool=:rspec)
  case tool
    when :rspec
      primary_files = RSPEC_CONFIG_FILES
      secondary_files = CUCUMBER_CONFIG_FILES
    when :cucumber
      primary_files = CUCUMBER_CONFIG_FILES
      secondary_files = RSPEC_CONFIG_FILES
  end

  configuration_file = self.find_config_file(primary_files, secondary_files)
  unless configuration_file
    possible_config_files = primary_files + secondary_files
    error_message = "Could not find Sauce configuration. Please make sure one of the following files exists:\n"
    error_message << possible_config_files.map { |file_path| "  - #{file_path}" }.join("\n")
    raise error_message
  end
  require configuration_file
end
next_environment(group) click to toggle source
# File lib/sauce/parallel/test_broker.rb, line 23
def self.next_environment(group)
  environment_mutex.synchronize do
    browsers = {}
    group.each do |file|
      file = "./" + file
      test_groups[file] ||= TestGroup.new(self.test_platforms)
      browsers[file] ||= []
      browsers[file] << test_groups[file].next_platform
    end

    on_windows = RbConfig::CONFIG['host_os'] =~ /cygwin|mswin|mingw|bccwin|wince|emx/
    format_string = on_windows ? "%s" : "'%s'"
    perfile_browsers = format_string % [JSON.generate(browsers)]

    return {:SAUCE_PERFILE_BROWSERS => perfile_browsers}
  end
end
reset() click to toggle source
# File lib/sauce/parallel/test_broker.rb, line 12
def self.reset
  if defined? @@platforms
    remove_class_variable(:@@platforms)
  end
  @groups = {}
end
rest_jobs_url() click to toggle source
# File lib/sauce/parallel/test_broker.rb, line 74
def self.rest_jobs_url
  "https://#{AUTH_DETAILS}@saucelabs.com/rest/v1"
end
test_groups() click to toggle source
# File lib/sauce/parallel/test_broker.rb, line 41
def self.test_groups
  @groups ||= {}
end
test_groups=(groups) click to toggle source
# File lib/sauce/parallel/test_broker.rb, line 45
def self.test_groups=(groups)
  @groups = groups.reduce({}) do |hash, g|
    hash[g] = TestGroup.new(self.test_platforms)
    hash
  end

  @group_indexes = groups.uniq.reduce({}) do |rh, g|
    rh[g] =(groups.each_index.select {|i| groups[i] == g})
    rh
  end
end
test_platforms(tool=:rspec) click to toggle source
# File lib/sauce/parallel/test_broker.rb, line 61
def self.test_platforms(tool=:rspec)
  unless defined? @@platforms
    load_sauce_config(tool)
    @@platforms ||= Sauce.get_config[:browsers]
  end
  @@platforms
end