class Sauce::Utilities::Connect

Constants

TIMEOUT

Attributes

tunnel[R]

Public Class Methods

close() click to toggle source
# File lib/sauce/utilities/connect.rb, line 48
def self.close
  if @tunnel
    if ParallelTests.first_process?
      Sauce.logger.debug "#{Thread.current.object_id} - First parallel process waiting for other processes before closing Sauce Connect."
      ParallelTests.wait_for_other_processes_to_finish
      Sauce.logger.debug "#{Thread.current.object_id} - All other parallel processes closed - Closing Sauce Connect tunnel #{@tunnel}."
      @tunnel.disconnect
      @tunnel = nil
    end
  end
end
start(options={}) click to toggle source
# File lib/sauce/utilities/connect.rb, line 13
def self.start(options={})
  begin
    Sauce.logger.debug "Requiring Sauce Connect gem."
    require "sauce/connect"
  rescue LoadError => e
    STDERR.puts 'Please install the `sauce-connect` gem if you intend on using Sauce Connect with your tests!'
    exit(1)
  end

  options[:timeout] = TIMEOUT unless options[:timeout]
  if ParallelTests.first_process?
    Sauce.logger.debug "#{Thread.current.object_id} - First parallel process attempting to start Sauce Connect."
    unless @tunnel
      @tunnel = Sauce::Connect.new options
      @tunnel.connect
      @tunnel.wait_until_ready
    else
      Sauce.logger.warn "#{Thread.current.object_id} - Tunnel already existed somehow."
    end
    @tunnel
  else
    Sauce.logger.debug "#{Thread.current.object_id} - Waiting for a Sauce Connect tunnel to be ready."
    timeout_after = Time.now + options[:timeout]
    # Ensure first process has a change to start up
    sleep 5
    readyfile_found = File.exist? "sauce_connect.ready" 
    until (Time.now > timeout_after) || readyfile_found
      readyfile_found = File.exist? "sauce_connect.ready"
      sleep 1
    end

    raise(TunnelNeverStarted, "Sauce Connect was not started within #{TIMEOUT} seconds") unless readyfile_found
  end
end
start_from_config(config) click to toggle source
# File lib/sauce/utilities/connect.rb, line 9
def self.start_from_config(config)
  self.start(:host => config[:application_host], :port => config[:application_port], :quiet => true)
end