headless 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +4 -0
- data/headless.gemspec +1 -1
- data/lib/headless.rb +13 -0
- data/spec/headless_spec.rb +4 -1
- metadata +4 -4
data/CHANGELOG
CHANGED
data/headless.gemspec
CHANGED
data/lib/headless.rb
CHANGED
|
@@ -44,6 +44,8 @@ class Headless
|
|
|
44
44
|
DEFAULT_DISPLAY_NUMBER = 99
|
|
45
45
|
MAX_DISPLAY_NUMBER = 10_000
|
|
46
46
|
DEFAULT_DISPLAY_DIMENSIONS = '1280x1024x24'
|
|
47
|
+
# How long should we wait for Xvfb to open a display, before assuming that it is frozen (in seconds)
|
|
48
|
+
XVFB_LAUNCH_TIMEOUT = 10
|
|
47
49
|
|
|
48
50
|
class Exception < RuntimeError
|
|
49
51
|
end
|
|
@@ -72,6 +74,7 @@ class Headless
|
|
|
72
74
|
@video_capture_options = options.fetch(:video, {})
|
|
73
75
|
@destroy_at_exit = options.fetch(:destroy_at_exit, true)
|
|
74
76
|
|
|
77
|
+
# FIXME Xvfb launch should not happen inside the constructor
|
|
75
78
|
attach_xvfb
|
|
76
79
|
end
|
|
77
80
|
|
|
@@ -142,9 +145,18 @@ private
|
|
|
142
145
|
#TODO error reporting
|
|
143
146
|
result = system "#{CliUtil.path_to("Xvfb")} :#{display} -screen 0 #{dimensions} -ac >/dev/null 2>&1 &"
|
|
144
147
|
raise Headless::Exception.new("Xvfb did not launch - something's wrong") unless result
|
|
148
|
+
ensure_xvfb_is_running
|
|
145
149
|
return true
|
|
146
150
|
end
|
|
147
151
|
|
|
152
|
+
def ensure_xvfb_is_running
|
|
153
|
+
start_time = Time.now
|
|
154
|
+
begin
|
|
155
|
+
sleep 0.01 # to avoid cpu hogging
|
|
156
|
+
raise Headless::Exception.new("Xvfb is frozen") if (Time.now-start_time)>=XVFB_LAUNCH_TIMEOUT
|
|
157
|
+
end while !xvfb_running?
|
|
158
|
+
end
|
|
159
|
+
|
|
148
160
|
def xvfb_running?
|
|
149
161
|
!!read_xvfb_pid
|
|
150
162
|
end
|
|
@@ -168,3 +180,4 @@ private
|
|
|
168
180
|
end
|
|
169
181
|
end
|
|
170
182
|
end
|
|
183
|
+
|
data/spec/headless_spec.rb
CHANGED
|
@@ -17,7 +17,7 @@ describe Headless do
|
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
context "when Xvfb not started yet" do
|
|
20
|
+
context "when Xvfb is not started yet" do
|
|
21
21
|
it "starts Xvfb" do
|
|
22
22
|
Headless.any_instance.should_receive(:system).with("/usr/bin/Xvfb :99 -screen 0 1280x1024x24 -ac >/dev/null 2>&1 &").and_return(true)
|
|
23
23
|
|
|
@@ -168,5 +168,8 @@ private
|
|
|
168
168
|
Headless::CliUtil.stub!(:application_exists?).and_return(true)
|
|
169
169
|
Headless::CliUtil.stub!(:read_pid).and_return(nil)
|
|
170
170
|
Headless::CliUtil.stub!(:path_to).and_return("/usr/bin/Xvfb")
|
|
171
|
+
|
|
172
|
+
# TODO this is wrong. But, as long as Xvfb is started inside the constructor (which is also wrong), I don't see another option to make tests pass
|
|
173
|
+
Headless.any_instance.stub(:ensure_xvfb_is_running).and_return(true)
|
|
171
174
|
end
|
|
172
175
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: headless
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.1
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-
|
|
12
|
+
date: 2013-02-20 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rake
|
|
@@ -79,7 +79,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
79
79
|
version: '0'
|
|
80
80
|
segments:
|
|
81
81
|
- 0
|
|
82
|
-
hash:
|
|
82
|
+
hash: -3030427348639260588
|
|
83
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
84
|
none: false
|
|
85
85
|
requirements:
|
|
@@ -88,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
88
88
|
version: '0'
|
|
89
89
|
segments:
|
|
90
90
|
- 0
|
|
91
|
-
hash:
|
|
91
|
+
hash: -3030427348639260588
|
|
92
92
|
requirements:
|
|
93
93
|
- Xvfb
|
|
94
94
|
rubyforge_project:
|