Skip to content

added daemon mode #11

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 9, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
dist/*
*.log
browserstack.err
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
source "http://rubygems.org"
gem "minitest"
gem "rake"

gem "json"
5 changes: 5 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
GEM
remote: http://rubygems.org/
specs:
json (1.8.3)
minitest (5.8.4)
rake (10.5.0)

PLATFORMS
ruby

DEPENDENCIES
json
minitest
rake

BUNDLED WITH
1.11.2
1 change: 1 addition & 0 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ task :build do
move_command = RbConfig::CONFIG['host_os'].match(/mswin|msys|mingw|cygwin|bccwin|wince|emc|win32/) ? "move" : "mv";
system "#{move_command} browserstack-local-*.gem dist"
system "gem install ./dist/browserstack-local-*.gem"
system "rm -rf dist"
end
4 changes: 2 additions & 2 deletions browserstack-local.gemspec
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
Gem::Specification.new do |s|
s.name = 'browserstack-local'
s.version = '0.1.1'
s.version = '0.2.0'
s.date = '2016-05-04'
s.summary = "BrowserStack Local"
s.description = "Ruby bindings for BrowserStack Local"
s.authors = [""]
s.authors = ["BrowserStack"]
s.email = '[email protected]'
s.files = ["lib/browserstack/local.rb", "lib/browserstack/localbinary.rb", "lib/browserstack/localexception.rb"]
s.homepage =
Expand Down
59 changes: 35 additions & 24 deletions lib/browserstack/local.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require 'browserstack/localbinary'
require 'browserstack/localexception'
require 'json'

module BrowserStack

Expand Down Expand Up @@ -75,36 +76,29 @@ def start(options = {})
end

if defined? spawn
@process = IO.popen(command_args)
@process = IO.popen(start_command_args)
else
@process = IO.popen(command)
@process = IO.popen(start_command)
end
@stdout = File.open(@logfile, "r")

while true
begin
line = @stdout.readline
line = @process.readline
rescue EOFError => e
sleep 1
next
end
break if line.nil?
if line.match(/\*\*\* Error\:/)
@stdout.close
raise BrowserStack::LocalException.new(line)

data = JSON.parse(line) rescue {"message" => "Unable to parse daemon mode JSON output"}
if data['state'].to_s != "connected"
@process.close
raise BrowserStack::LocalException.new(data["message"])
return
end
if line.strip == "Press Ctrl-C to exit"
@pid = @process.pid
@stdout.close
else
@pid = data["pid"]
break
end
end

while true
break if self.isRunning
sleep 1
end
end

def isRunning
Expand All @@ -113,20 +107,37 @@ def isRunning

def stop
return if @pid.nil?
Process.kill("TERM", @pid) rescue Process.kill(9, @pid)
@process.close
@pid = nil if @is_windows
while self.isRunning
sleep 1
if defined? spawn
@process = IO.popen(stop_command_args)
else
@process = IO.popen(stop_command)
end
@process.close
@pid = nil
end

def command
"#{@exec} #{@binary_path} -logFile '#{@logfile}' #{@folder_flag} #{@key} #{@folder_path} #{@force_local_flag} #{@local_identifier_flag} #{@only_flag} #{@only_automate_flag} #{@proxy_host} #{@proxy_port} #{@proxy_user} #{@proxy_pass} #{@force_proxy_flag} #{@force_flag} #{@verbose_flag} #{@hosts} #{@user_arguments.join(" ")}".strip
start_command
end

def start_command
"#{@binary_path} -d start -logFile '#{@logfile}' #{@folder_flag} #{@key} #{@folder_path} #{@force_local_flag} #{@local_identifier_flag} #{@only_flag} #{@only_automate_flag} #{@proxy_host} #{@proxy_port} #{@proxy_user} #{@proxy_pass} #{@force_proxy_flag} #{@force_flag} #{@verbose_flag} #{@hosts} #{@user_arguments.join(" ")} 2>&1".strip
end

def start_command_args
args = ["#{@binary_path}", "-d", "start", "-logFile", "#{@logfile}", "#{@key}", "#{@folder_flag}", "#{@folder_path}", "#{@force_local_flag}", "#{@local_identifier_flag}", "#{@only_flag}", "#{@only_automate_flag}", "#{@proxy_host}", "#{@proxy_port}", "#{@proxy_user}", "#{@proxy_pass}", "#{@force_proxy_flag}","#{@force_flag}", "#{@verbose_flag}", "#{@hosts}", "#{@user_arguments.join(" ")}"]
args = args.select {|a| a.to_s != "" }
args.push(:err => [:child, :out])
args
end

def stop_command
"#{@binary_path} -d stop #{@local_identifier_flag}".strip
end

def command_args
args = ["#{@binary_path}", "-logFile", "#{@logfile}", "#{@key}", "#{@folder_flag}", "#{@folder_path}", "#{@force_local_flag}", "#{@local_identifier_flag}", "#{@only_flag}", "#{@only_automate_flag}", "#{@proxy_host}", "#{@proxy_port}", "#{@proxy_user}", "#{@proxy_pass}", "#{@force_proxy_flag}","#{@force_flag}", "#{@verbose_flag}", "#{@hosts}", "#{@user_arguments.join(" ")}"]
def stop_command_args
args = ["#{@binary_path}", "-d", "stop", "#{@local_identifier_flag}"]
args = args.select {|a| a.to_s != "" }
args.push(:err => [:child, :out])
args
Expand Down