Sha256: c5bbb856fea325fd1b506b473f7f48ecc89cd90afe965e56292458dde35f7c74
Contents?: true
Size: 1.2 KB
Versions: 1
Compression:
Stored size: 1.2 KB
Contents
module SauceTunnel class Tunnel class Error < StandardError; end attr_reader :sc_path, :sc_args def initialize(sc_path: "sc", sc_args: [], quiet: false, timeout: 120, shutdown_timeout: 20) @sc_path = sc_path @sc_args = sc_args @quiet = quiet @timeout = timeout @shutdown_timeout = shutdown_timeout @queue = SauceTunnel::SimpleQueue.new @up = false end def connect return if @wait_thread # don't start twice @stdin, @stdout, @stderr, @wait_thread = Open3.popen3(Shellwords.join([sc_path] + [sc_args].flatten)) @read_thread = Thread.new do while line = @stdout.gets puts line unless quiet? @queue.push(true) if line =~ /sauce connect is up/i end end end def await @up ||= @queue.pop(@timeout) self rescue ThreadError raise ConnectionError, "timed out trying to establish connection to SauceLabs" end def terminate if @wait_thread Process.kill("TERM", @wait_thread.pid) @wait_thread.join(@shutdown_timeout) end rescue Errno::ESRCH # do nothing, tunnel already shut down end def quiet? @quiet end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
sauce_tunnel-0.1.0 | lib/sauce_tunnel/tunnel.rb |