Skip to content

Commit 030dd8f

Browse files
committed
Merge pull request #11 from browserstack/daemon_mode
added daemon mode
2 parents 8c83f18 + 9e3001c commit 030dd8f

File tree

6 files changed

+45
-27
lines changed

6 files changed

+45
-27
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
dist/*
22
*.log
3+
browserstack.err

Gemfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
source "http://rubygems.org"
22
gem "minitest"
33
gem "rake"
4-
4+
gem "json"

Gemfile.lock

+5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
GEM
22
remote: http://rubygems.org/
33
specs:
4+
json (1.8.3)
45
minitest (5.8.4)
56
rake (10.5.0)
67

78
PLATFORMS
89
ruby
910

1011
DEPENDENCIES
12+
json
1113
minitest
1214
rake
15+
16+
BUNDLED WITH
17+
1.11.2

Rakefile

+1
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ task :build do
1212
move_command = RbConfig::CONFIG['host_os'].match(/mswin|msys|mingw|cygwin|bccwin|wince|emc|win32/) ? "move" : "mv";
1313
system "#{move_command} browserstack-local-*.gem dist"
1414
system "gem install ./dist/browserstack-local-*.gem"
15+
system "rm -rf dist"
1516
end

browserstack-local.gemspec

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
Gem::Specification.new do |s|
22
s.name = 'browserstack-local'
3-
s.version = '0.1.1'
3+
s.version = '0.2.0'
44
s.date = '2016-05-04'
55
s.summary = "BrowserStack Local"
66
s.description = "Ruby bindings for BrowserStack Local"
7-
s.authors = [""]
7+
s.authors = ["BrowserStack"]
88
s.email = '[email protected]'
99
s.files = ["lib/browserstack/local.rb", "lib/browserstack/localbinary.rb", "lib/browserstack/localexception.rb"]
1010
s.homepage =

lib/browserstack/local.rb

+35-24
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
require 'browserstack/localbinary'
22
require 'browserstack/localexception'
3+
require 'json'
34

45
module BrowserStack
56

@@ -75,36 +76,29 @@ def start(options = {})
7576
end
7677

7778
if defined? spawn
78-
@process = IO.popen(command_args)
79+
@process = IO.popen(start_command_args)
7980
else
80-
@process = IO.popen(command)
81+
@process = IO.popen(start_command)
8182
end
82-
@stdout = File.open(@logfile, "r")
8383

8484
while true
8585
begin
86-
line = @stdout.readline
86+
line = @process.readline
8787
rescue EOFError => e
8888
sleep 1
8989
next
9090
end
91-
break if line.nil?
92-
if line.match(/\*\*\* Error\:/)
93-
@stdout.close
94-
raise BrowserStack::LocalException.new(line)
91+
92+
data = JSON.parse(line) rescue {"message" => "Unable to parse daemon mode JSON output"}
93+
if data['state'].to_s != "connected"
94+
@process.close
95+
raise BrowserStack::LocalException.new(data["message"])
9596
return
96-
end
97-
if line.strip == "Press Ctrl-C to exit"
98-
@pid = @process.pid
99-
@stdout.close
97+
else
98+
@pid = data["pid"]
10099
break
101100
end
102101
end
103-
104-
while true
105-
break if self.isRunning
106-
sleep 1
107-
end
108102
end
109103

110104
def isRunning
@@ -113,20 +107,37 @@ def isRunning
113107

114108
def stop
115109
return if @pid.nil?
116-
Process.kill("TERM", @pid) rescue Process.kill(9, @pid)
117110
@process.close
118-
@pid = nil if @is_windows
119-
while self.isRunning
120-
sleep 1
111+
if defined? spawn
112+
@process = IO.popen(stop_command_args)
113+
else
114+
@process = IO.popen(stop_command)
121115
end
116+
@process.close
117+
@pid = nil
122118
end
123119

124120
def command
125-
"#{@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
121+
start_command
122+
end
123+
124+
def start_command
125+
"#{@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
126+
end
127+
128+
def start_command_args
129+
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(" ")}"]
130+
args = args.select {|a| a.to_s != "" }
131+
args.push(:err => [:child, :out])
132+
args
133+
end
134+
135+
def stop_command
136+
"#{@binary_path} -d stop #{@local_identifier_flag}".strip
126137
end
127138

128-
def command_args
129-
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(" ")}"]
139+
def stop_command_args
140+
args = ["#{@binary_path}", "-d", "stop", "#{@local_identifier_flag}"]
130141
args = args.select {|a| a.to_s != "" }
131142
args.push(:err => [:child, :out])
132143
args

0 commit comments

Comments
 (0)