unobtainium 0.8.1 → 0.9.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Gemfile.lock +10 -9
- data/lib/unobtainium/driver.rb +6 -1
- data/lib/unobtainium/drivers/appium.rb +8 -6
- data/lib/unobtainium/drivers/phantom.rb +148 -32
- data/lib/unobtainium/drivers/selenium.rb +4 -1
- data/lib/unobtainium/support/identifiers.rb +25 -0
- data/lib/unobtainium/support/port_scanner.rb +15 -3
- data/lib/unobtainium/version.rb +1 -1
- data/lib/unobtainium/world.rb +8 -4
- data/spec/data/driverconfig.yml +9 -2
- data/spec/driver_spec.rb +30 -1
- data/spec/drivers_appium_spec.rb +244 -0
- data/spec/drivers_phantom_spec.rb +247 -0
- data/spec/drivers_selenium_spec.rb +170 -0
- data/spec/mock_driver.rb +23 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/support_identifiers_spec.rb +42 -0
- data/spec/{port_scanner_spec.rb → support_port_scanner_spec.rb} +49 -0
- data/spec/{runner_spec.rb → support_runner_spec.rb} +0 -0
- data/spec/{utility_spec.rb → support_utility_spec.rb} +0 -0
- data/spec/world_spec.rb +39 -1
- data/unobtainium.gemspec +1 -1
- metadata +19 -10
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative '../lib/unobtainium/support/identifiers'
|
3
|
+
|
4
|
+
describe ::Unobtainium::Support::Identifiers do
|
5
|
+
let(:tester) { Class.new { extend ::Unobtainium::Support::Identifiers } }
|
6
|
+
|
7
|
+
it "creates IDs starting with the given scope" do
|
8
|
+
expect(tester.identifier('noodle', 'foo')).to start_with 'noodle'
|
9
|
+
end
|
10
|
+
|
11
|
+
it "creates the same ID for identical input" do
|
12
|
+
opts = { foo: 'bar', "baz" => 42 }
|
13
|
+
first = tester.identifier('test', 'mylabel', opts.dup)
|
14
|
+
second = tester.identifier('test', 'mylabel', opts.dup)
|
15
|
+
expect(first).to eql second
|
16
|
+
end
|
17
|
+
|
18
|
+
context "different input" do
|
19
|
+
it "creates different IDs for different scopes" do
|
20
|
+
opts = { foo: 'bar', "baz" => 42 }
|
21
|
+
first = tester.identifier('scope1', 'mylabel', opts.dup)
|
22
|
+
second = tester.identifier('scope2', 'mylabel', opts.dup)
|
23
|
+
expect(first).not_to eql second
|
24
|
+
end
|
25
|
+
|
26
|
+
it "creates different IDs for different labels" do
|
27
|
+
opts = { foo: 'bar', "baz" => 42 }
|
28
|
+
first = tester.identifier('test', 'label1', opts.dup)
|
29
|
+
second = tester.identifier('test', 'label2', opts.dup)
|
30
|
+
expect(first).not_to eql second
|
31
|
+
end
|
32
|
+
|
33
|
+
it "creates different IDs for different options" do
|
34
|
+
opts1 = { foo: 'bar', "baz" => 42 }
|
35
|
+
opts2 = opts1.dup
|
36
|
+
opts2['baz'] = 123
|
37
|
+
first = tester.identifier('test', 'mylabel', opts1)
|
38
|
+
second = tester.identifier('test', 'mylabel', opts2)
|
39
|
+
expect(first).not_to eql second
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -47,6 +47,27 @@ describe ::Unobtainium::Support::PortScanner do
|
|
47
47
|
tester.port_open?('localhost', 1234, :FOO)
|
48
48
|
end.to raise_error(ArgumentError)
|
49
49
|
end
|
50
|
+
|
51
|
+
it "handles unsupported protocols gracefully" do
|
52
|
+
allow_any_instance_of(Socket).to receive(:connect_nonblock).and_raise(
|
53
|
+
Errno::EINVAL # or EAFNOSUPPORT
|
54
|
+
)
|
55
|
+
expect(tester.port_open?('localhost', 1234, [:INET, :INET6])).to be_falsy
|
56
|
+
end
|
57
|
+
|
58
|
+
it "retries for several seconds if a socket is being created" do
|
59
|
+
allow_any_instance_of(Socket).to receive(:connect_nonblock).and_raise(
|
60
|
+
Errno::EINPROGRESS
|
61
|
+
)
|
62
|
+
before = Time.now.utc
|
63
|
+
expect(tester.port_open?('localhost', 1234, [:INET, :INET6])).to be_falsy
|
64
|
+
after = Time.now.utc
|
65
|
+
|
66
|
+
elapsed = after - before
|
67
|
+
expected_max_time = ::Unobtainium::Support::PortScanner::MAX_RETRIES \
|
68
|
+
* ::Unobtainium::Support::PortScanner::RETRY_DELAY
|
69
|
+
expect(elapsed).to be <= expected_max_time
|
70
|
+
end
|
50
71
|
end
|
51
72
|
|
52
73
|
describe "scan" do
|
@@ -113,6 +134,14 @@ describe ::Unobtainium::Support::PortScanner do
|
|
113
134
|
expect(tester.scan('localhost', 1230..4330, amount: :first)).to eql [1234]
|
114
135
|
end
|
115
136
|
|
137
|
+
it "can return successfully after the first find" do
|
138
|
+
allow_any_instance_of(Socket).to receive(:connect_nonblock) do |sock, addr|
|
139
|
+
connect_mock(sock, addr)
|
140
|
+
end
|
141
|
+
|
142
|
+
expect(tester.scan('localhost', 1230..4330, amount: :first)).to eql [1234]
|
143
|
+
end
|
144
|
+
|
116
145
|
it "can scan for closed/available ports" do
|
117
146
|
allow_any_instance_of(Socket).to receive(:connect_nonblock) do |sock, addr|
|
118
147
|
connect_mock(sock, addr)
|
@@ -121,6 +150,26 @@ describe ::Unobtainium::Support::PortScanner do
|
|
121
150
|
expect(tester.scan('localhost', 1233..1234, for: :closed)).to eql [1233]
|
122
151
|
end
|
123
152
|
|
153
|
+
it "can scan for the first closed/available port" do
|
154
|
+
allow_any_instance_of(Socket).to receive(:connect_nonblock) do |sock, addr|
|
155
|
+
connect_mock(sock, addr)
|
156
|
+
end
|
157
|
+
|
158
|
+
opts = {
|
159
|
+
amount: :first,
|
160
|
+
for: :closed,
|
161
|
+
}
|
162
|
+
expect(tester.scan('localhost', 1232..1234, opts)).to eql [1232]
|
163
|
+
end
|
164
|
+
|
165
|
+
it "can scan for the first string port" do
|
166
|
+
allow_any_instance_of(Socket).to receive(:connect_nonblock) do |sock, addr|
|
167
|
+
connect_mock(sock, addr)
|
168
|
+
end
|
169
|
+
|
170
|
+
expect(tester.scan('localhost', '1234', amount: :first)).to eql [1234]
|
171
|
+
end
|
172
|
+
|
124
173
|
it "rejects bad amounts" do
|
125
174
|
expect do
|
126
175
|
tester.scan('localhost', 1230..4330, amount: :foo)
|
File without changes
|
File without changes
|
data/spec/world_spec.rb
CHANGED
@@ -19,6 +19,11 @@ describe ::Unobtainium::World do
|
|
19
19
|
@tester = Tester.new
|
20
20
|
end
|
21
21
|
|
22
|
+
it "has set the config file as expected" do
|
23
|
+
expect(::Unobtainium::World.config_file).to end_with \
|
24
|
+
File.join('data', 'driverconfig.yml')
|
25
|
+
end
|
26
|
+
|
22
27
|
it "loads the global config" do
|
23
28
|
expect(@tester.config["drivers.mock.mockoption"]).to eql 42
|
24
29
|
end
|
@@ -32,7 +37,40 @@ describe ::Unobtainium::World do
|
|
32
37
|
end
|
33
38
|
|
34
39
|
it "extends driver options, but doesn't pass 'base' on" do
|
35
|
-
expect(@tester.config["drivers.leaf.base"]).to eql %w(.
|
40
|
+
expect(@tester.config["drivers.leaf.base"]).to eql %w(.global
|
41
|
+
.drivers.mock
|
42
|
+
.drivers.branch1
|
43
|
+
.drivers.branch2)
|
36
44
|
expect(@tester.driver.passed_options["base"]).to be_nil
|
37
45
|
end
|
46
|
+
|
47
|
+
context "object identity" do
|
48
|
+
context "#driver" do
|
49
|
+
it "returns the same object for the same config" do
|
50
|
+
first = @tester.driver.object_id
|
51
|
+
second = @tester.driver.object_id
|
52
|
+
expect(first).to eql second
|
53
|
+
end
|
54
|
+
|
55
|
+
it "returns a different object for different config" do
|
56
|
+
first = @tester.driver(:mock, foo: true).object_id
|
57
|
+
second = @tester.driver(:mock, foo: false).object_id
|
58
|
+
expect(first).not_to eql second
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "driver.impl" do
|
63
|
+
it "returns the same object for the same config" do
|
64
|
+
first = @tester.driver.impl.object_id
|
65
|
+
second = @tester.driver.impl.object_id
|
66
|
+
expect(first).to eql second
|
67
|
+
end
|
68
|
+
|
69
|
+
it "returns a different object for different config" do
|
70
|
+
first = @tester.driver(:mock, foo: true).impl.object_id
|
71
|
+
second = @tester.driver(:mock, foo: false).impl.object_id
|
72
|
+
expect(first).not_to eql second
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
38
76
|
end
|
data/unobtainium.gemspec
CHANGED
@@ -57,7 +57,7 @@ Gem::Specification.new do |spec|
|
|
57
57
|
|
58
58
|
spec.add_dependency "sys-proctable", "~> 1.1"
|
59
59
|
spec.add_dependency "ptools", "~> 1.3"
|
60
|
-
spec.add_dependency "collapsium", "~> 0.
|
60
|
+
spec.add_dependency "collapsium", "~> 0.8"
|
61
61
|
spec.add_dependency "collapsium-config", "~> 0.4"
|
62
62
|
end
|
63
63
|
# rubocop:enable Metrics/BlockLength
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unobtainium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jens Finkhaeuser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -198,14 +198,14 @@ dependencies:
|
|
198
198
|
requirements:
|
199
199
|
- - "~>"
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version: '0.
|
201
|
+
version: '0.8'
|
202
202
|
type: :runtime
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
206
|
- - "~>"
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version: '0.
|
208
|
+
version: '0.8'
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
210
|
name: collapsium-config
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -253,6 +253,7 @@ files:
|
|
253
253
|
- lib/unobtainium/drivers/phantom.rb
|
254
254
|
- lib/unobtainium/drivers/selenium.rb
|
255
255
|
- lib/unobtainium/runtime.rb
|
256
|
+
- lib/unobtainium/support/identifiers.rb
|
256
257
|
- lib/unobtainium/support/port_scanner.rb
|
257
258
|
- lib/unobtainium/support/runner.rb
|
258
259
|
- lib/unobtainium/support/util.rb
|
@@ -262,12 +263,16 @@ files:
|
|
262
263
|
- media/video.ogv
|
263
264
|
- spec/data/driverconfig.yml
|
264
265
|
- spec/driver_spec.rb
|
266
|
+
- spec/drivers_appium_spec.rb
|
267
|
+
- spec/drivers_phantom_spec.rb
|
268
|
+
- spec/drivers_selenium_spec.rb
|
265
269
|
- spec/mock_driver.rb
|
266
|
-
- spec/port_scanner_spec.rb
|
267
|
-
- spec/runner_spec.rb
|
268
270
|
- spec/runtime_spec.rb
|
269
271
|
- spec/spec_helper.rb
|
270
|
-
- spec/
|
272
|
+
- spec/support_identifiers_spec.rb
|
273
|
+
- spec/support_port_scanner_spec.rb
|
274
|
+
- spec/support_runner_spec.rb
|
275
|
+
- spec/support_utility_spec.rb
|
271
276
|
- spec/world_spec.rb
|
272
277
|
- unobtainium.gemspec
|
273
278
|
homepage: https://github.com/jfinkhaeuser/unobtainium
|
@@ -301,10 +306,14 @@ test_files:
|
|
301
306
|
- features/world.feature
|
302
307
|
- spec/data/driverconfig.yml
|
303
308
|
- spec/driver_spec.rb
|
309
|
+
- spec/drivers_appium_spec.rb
|
310
|
+
- spec/drivers_phantom_spec.rb
|
311
|
+
- spec/drivers_selenium_spec.rb
|
304
312
|
- spec/mock_driver.rb
|
305
|
-
- spec/port_scanner_spec.rb
|
306
|
-
- spec/runner_spec.rb
|
307
313
|
- spec/runtime_spec.rb
|
308
314
|
- spec/spec_helper.rb
|
309
|
-
- spec/
|
315
|
+
- spec/support_identifiers_spec.rb
|
316
|
+
- spec/support_port_scanner_spec.rb
|
317
|
+
- spec/support_runner_spec.rb
|
318
|
+
- spec/support_utility_spec.rb
|
310
319
|
- spec/world_spec.rb
|