saucelabs-adapter 0.8.24 → 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.
- data/README.markdown +5 -0
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/generators/saucelabs_adapter/templates/selenium.yml +8 -6
- data/lib/saucelabs_adapter.rb +1 -0
- data/lib/saucelabs_adapter/rspec_adapter.rb +1 -1
- data/lib/saucelabs_adapter/selenium_config.rb +12 -4
- data/lib/saucelabs_adapter/test_unit_adapter.rb +1 -1
- data/lib/saucelabs_adapter/tunnel.rb +1 -0
- data/lib/saucelabs_adapter/tunnels/sauce_connect_tunnel.rb +37 -0
- metadata +130 -17
data/README.markdown
CHANGED
@@ -168,6 +168,11 @@ Resources
|
|
168
168
|
NOTABLE CHANGES
|
169
169
|
===============
|
170
170
|
|
171
|
+
0.9.0
|
172
|
+
-----
|
173
|
+
- Added support for :sauce_connect_tunnel tunnel method, which uses 'sauce connect'
|
174
|
+
from the 'sauce' gem. This also introduces a dependency on the sauce gem.
|
175
|
+
|
171
176
|
0.8.7
|
172
177
|
-----
|
173
178
|
- No longer exits when the tunnel status is 'deploying'
|
data/Rakefile
CHANGED
@@ -37,6 +37,7 @@ begin
|
|
37
37
|
gem.add_dependency 'net-ssh-gateway', '>= 1.0.1'
|
38
38
|
gem.add_dependency 'selenium-client', '>= 1.2.17'
|
39
39
|
gem.add_dependency 'lsof', '>= 0.3.0'
|
40
|
+
gem.add_dependency 'sauce', '>= 0.12.9'
|
40
41
|
# gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
41
42
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
42
43
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.9.0
|
@@ -42,15 +42,17 @@ saucelabs: &saucelabs
|
|
42
42
|
saucelabs_browser_version: "3."
|
43
43
|
saucelabs_max_duration_seconds: 1800
|
44
44
|
# Selenium RC browser connects to and tests the app at this URL:
|
45
|
-
application_address: "
|
45
|
+
# application_address: "localhost" # this will be overwritten if tunnel_method == :saucetunnel or :sauceconnecttunnel
|
46
46
|
application_port: 4000
|
47
|
+
tunnel_to_localhost_port: 4000
|
47
48
|
|
48
49
|
# App host can actually be a tunnel that tunnels from <application_address>:<application_port> to localhost:<tunnel_to_localhost_port>
|
49
|
-
# There are
|
50
|
+
# There are 4 kinds of tunnels:
|
50
51
|
#
|
51
|
-
tunnel_method: :
|
52
|
-
|
53
|
-
|
52
|
+
tunnel_method: :sauceconnecttunnel # this is the new preferred 'sauce connect' tunnel method from the 'sauce' gem
|
53
|
+
#
|
54
|
+
# tunnel_method: :saucetunnel # NOTE: this is the 'old' deprecated sauce tunnel method
|
55
|
+
# tunnel_startup_timeout: 240
|
54
56
|
#
|
55
57
|
# tunnel_method: :sshtunnel # WARNING: if other projects use the same port on the same machine at the same time, you can get intermittent errors.
|
56
58
|
# application_address: proxy.mycompany.com
|
@@ -64,7 +66,7 @@ saucelabs: &saucelabs
|
|
64
66
|
saucelabs_jsunit: &saucelabs_jsunit
|
65
67
|
<<: *saucelabs
|
66
68
|
# We are using the Jetty server for Saucelabs JsUnit selenium testing.
|
67
|
-
|
69
|
+
tunnel_to_localhost_port: "8080"
|
68
70
|
|
69
71
|
saucelabs_jsunit_firefox:
|
70
72
|
<<: *saucelabs_jsunit
|
data/lib/saucelabs_adapter.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'saucelabs_adapter/utilities'
|
2
2
|
require 'saucelabs_adapter/tunnel'
|
3
|
+
require 'saucelabs_adapter/tunnels/sauce_connect_tunnel'
|
3
4
|
require 'saucelabs_adapter/tunnels/sauce_tunnel'
|
4
5
|
require 'saucelabs_adapter/tunnels/ssh_tunnel'
|
5
6
|
require 'saucelabs_adapter/tunnels/other_tunnel'
|
@@ -29,7 +29,7 @@ if defined?(Spec::Runner)
|
|
29
29
|
else
|
30
30
|
puts "[saucelabs-adapter] Starting browser session" if ENV['SAUCELABS_ADAPTER_DEBUG']
|
31
31
|
@browser = selenium_config.create_driver
|
32
|
-
@browser.start_new_browser_session
|
32
|
+
@browser.start_new_browser_session :trustAllSSLCertificates => false
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -46,9 +46,10 @@ module SaucelabsAdapter
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def application_address
|
49
|
-
if start_tunnel? &&
|
50
|
-
|
51
|
-
# We
|
49
|
+
if start_tunnel? &&
|
50
|
+
[:sauceconnecttunnel, :saucetunnel].include?(@configuration['tunnel_method'].to_sym)
|
51
|
+
# We are using Sauce Labs and Sauce Connect Tunnel or Sauce Tunnel.
|
52
|
+
# We need to use a masquerade hostname on the EC2/Sauce end of the tunnel that will be unique within the scope of
|
52
53
|
# this account (e.g. pivotallabs). Therefore we mint a fairly unique hostname here.
|
53
54
|
hostname = Socket.gethostname.split(".").first
|
54
55
|
"#{hostname}-#{Process.pid}.com"
|
@@ -60,11 +61,15 @@ module SaucelabsAdapter
|
|
60
61
|
|
61
62
|
# Takes a Webrat::Configuration object and configures it by calling methods on it
|
62
63
|
def configure_webrat(webrat_configuration_object)
|
64
|
+
# NOTE: application_port_for_selenium requires version > 0.7.3 of webrat
|
65
|
+
# Prior versions only have application_address, and don't have a concept of
|
66
|
+
# starting a rails server at one port, and hitting it at selenium via another
|
63
67
|
{
|
64
68
|
'selenium_server_address' => :selenium_server_address,
|
65
69
|
'selenium_server_port' => :selenium_server_port,
|
66
70
|
'selenium_browser_key' => :selenium_browser_key,
|
67
71
|
'application_address' => :application_address,
|
72
|
+
'application_port_for_selenium' => :tunnel_to_localhost_port,
|
68
73
|
'application_port' => :application_port
|
69
74
|
}.each do |webrat_configuration_method, our_accessor|
|
70
75
|
webrat_configuration_object.send("#{webrat_configuration_method}=", self.send(our_accessor).to_s)
|
@@ -145,12 +150,15 @@ module SaucelabsAdapter
|
|
145
150
|
:saucelabs_max_duration_seconds ],
|
146
151
|
:when => "when selenium_server_address is saucelabs.com")
|
147
152
|
if tunnel_method
|
148
|
-
errors << require_attributes([:tunnel_to_localhost_port ], :when => "if tunnel_method is set")
|
149
153
|
case tunnel_method.to_sym
|
150
154
|
when nil, ""
|
151
155
|
when :saucetunnel
|
156
|
+
errors << require_attributes([:tunnel_to_localhost_port ], :when => "if tunnel_method is :saucetunnel")
|
157
|
+
when :sauceconnecttunnel
|
158
|
+
errors << require_attributes([:tunnel_to_localhost_port ], :when => "if tunnel_method is :sauceconnecttunnel")
|
152
159
|
when :othertunnel
|
153
160
|
errors << require_attributes([:application_address], :when => "when tunnel_method is :othertunnel")
|
161
|
+
errors << require_attributes([:tunnel_to_localhost_port ], :when => "if tunnel_method is :othertunnel")
|
154
162
|
when :sshtunnel
|
155
163
|
errors << require_attributes([:application_address], :when => "when tunnel_method is :sshtunnel")
|
156
164
|
errors << require_attributes([:tunnel_password, :tunnel_keyfile],
|
@@ -17,7 +17,7 @@ if defined?(ActiveSupport::TestCase) && ActiveSupport::TestCase.respond_to?(:set
|
|
17
17
|
else
|
18
18
|
puts "[saucelabs-adapter] Starting browser session"
|
19
19
|
@browser = selenium_config.create_driver
|
20
|
-
@browser.start_new_browser_session
|
20
|
+
@browser.start_new_browser_session :trustAllSSLCertificates => false
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'sauce'
|
2
|
+
|
3
|
+
module SaucelabsAdapter
|
4
|
+
class SauceConnectTunnel < Tunnel
|
5
|
+
|
6
|
+
include Utilities
|
7
|
+
|
8
|
+
def start_tunnel
|
9
|
+
say "Setting up sauce connect tunnel from Saucelabs..."
|
10
|
+
# sauce connect --user=<saucelabs_username> --api-key=<saucelabs_access_key> --host=localhost --port=8080 --domain='<local hostname>-<pid>.com'
|
11
|
+
# --logfile=/tmp/sauce_connect.log --debug-ssh
|
12
|
+
|
13
|
+
sauce_connect_args = {
|
14
|
+
:user => @se_config.saucelabs_username,
|
15
|
+
:'api-key' => @se_config.saucelabs_access_key,
|
16
|
+
:host => 'localhost',
|
17
|
+
:port => @se_config.application_port,
|
18
|
+
:tunnel_port => @se_config.tunnel_to_localhost_port,
|
19
|
+
:domain => @se_config.application_address,
|
20
|
+
:logfile => '/tmp/sauce_connect.log',
|
21
|
+
:'debug-ssh' => true
|
22
|
+
}
|
23
|
+
|
24
|
+
say "Setting up sauce connect tunnel from Saucelabs: #{sauce_connect_args.inspect}"
|
25
|
+
@sauce_tunnel = Sauce::Connect.new(sauce_connect_args)
|
26
|
+
say "Waiting for sauce connect tunnel to be ready..."
|
27
|
+
@sauce_tunnel.wait_until_ready
|
28
|
+
sleep 2
|
29
|
+
say "Sauce connect tunnel ready."
|
30
|
+
end
|
31
|
+
|
32
|
+
def shutdown
|
33
|
+
say "Shutdown for Sauce Connect Tunnel..."
|
34
|
+
@sauce_tunnel.disconnect
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: saucelabs-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 59
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 9
|
9
|
+
- 0
|
10
|
+
version: 0.9.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kelly Felkins, Chad Woolley, Sam Pierson, Nate Clark
|
@@ -15,14 +15,110 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-20 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
name:
|
24
|
+
name: activesupport
|
25
25
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ">="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
hash: 3
|
31
|
+
segments:
|
32
|
+
- 2
|
33
|
+
- 3
|
34
|
+
- 0
|
35
|
+
version: 2.3.0
|
36
|
+
requirement: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
name: sauce
|
41
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
hash: 61
|
47
|
+
segments:
|
48
|
+
- 0
|
49
|
+
- 12
|
50
|
+
- 9
|
51
|
+
version: 0.12.9
|
52
|
+
requirement: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
name: rspec
|
57
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - "="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 27
|
63
|
+
segments:
|
64
|
+
- 1
|
65
|
+
- 3
|
66
|
+
- 0
|
67
|
+
version: 1.3.0
|
68
|
+
requirement: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
name: rake
|
73
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - "="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
hash: 49
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
- 8
|
82
|
+
- 7
|
83
|
+
version: 0.8.7
|
84
|
+
requirement: *id004
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
name: json
|
89
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
hash: 1
|
95
|
+
segments:
|
96
|
+
- 1
|
97
|
+
- 4
|
98
|
+
- 3
|
99
|
+
version: 1.4.3
|
100
|
+
requirement: *id005
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
name: jeweler
|
105
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - "="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
hash: 7
|
111
|
+
segments:
|
112
|
+
- 1
|
113
|
+
- 5
|
114
|
+
- 2
|
115
|
+
version: 1.5.2
|
116
|
+
requirement: *id006
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
name: rest-client
|
121
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
26
122
|
none: false
|
27
123
|
requirements:
|
28
124
|
- - ">="
|
@@ -33,12 +129,12 @@ dependencies:
|
|
33
129
|
- 5
|
34
130
|
- 0
|
35
131
|
version: 1.5.0
|
36
|
-
requirement: *
|
132
|
+
requirement: *id007
|
37
133
|
- !ruby/object:Gem::Dependency
|
38
134
|
type: :runtime
|
39
135
|
prerelease: false
|
40
136
|
name: net-ssh
|
41
|
-
version_requirements: &
|
137
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
42
138
|
none: false
|
43
139
|
requirements:
|
44
140
|
- - ">="
|
@@ -49,12 +145,12 @@ dependencies:
|
|
49
145
|
- 0
|
50
146
|
- 12
|
51
147
|
version: 2.0.12
|
52
|
-
requirement: *
|
148
|
+
requirement: *id008
|
53
149
|
- !ruby/object:Gem::Dependency
|
54
150
|
type: :runtime
|
55
151
|
prerelease: false
|
56
152
|
name: net-ssh-gateway
|
57
|
-
version_requirements: &
|
153
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
58
154
|
none: false
|
59
155
|
requirements:
|
60
156
|
- - ">="
|
@@ -65,12 +161,12 @@ dependencies:
|
|
65
161
|
- 0
|
66
162
|
- 1
|
67
163
|
version: 1.0.1
|
68
|
-
requirement: *
|
164
|
+
requirement: *id009
|
69
165
|
- !ruby/object:Gem::Dependency
|
70
166
|
type: :runtime
|
71
167
|
prerelease: false
|
72
168
|
name: selenium-client
|
73
|
-
version_requirements: &
|
169
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
74
170
|
none: false
|
75
171
|
requirements:
|
76
172
|
- - ">="
|
@@ -81,12 +177,12 @@ dependencies:
|
|
81
177
|
- 2
|
82
178
|
- 17
|
83
179
|
version: 1.2.17
|
84
|
-
requirement: *
|
180
|
+
requirement: *id010
|
85
181
|
- !ruby/object:Gem::Dependency
|
86
182
|
type: :runtime
|
87
183
|
prerelease: false
|
88
184
|
name: lsof
|
89
|
-
version_requirements: &
|
185
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
90
186
|
none: false
|
91
187
|
requirements:
|
92
188
|
- - ">="
|
@@ -97,7 +193,23 @@ dependencies:
|
|
97
193
|
- 3
|
98
194
|
- 0
|
99
195
|
version: 0.3.0
|
100
|
-
requirement: *
|
196
|
+
requirement: *id011
|
197
|
+
- !ruby/object:Gem::Dependency
|
198
|
+
type: :runtime
|
199
|
+
prerelease: false
|
200
|
+
name: sauce
|
201
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
202
|
+
none: false
|
203
|
+
requirements:
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
hash: 61
|
207
|
+
segments:
|
208
|
+
- 0
|
209
|
+
- 12
|
210
|
+
- 9
|
211
|
+
version: 0.12.9
|
212
|
+
requirement: *id012
|
101
213
|
description: "This gem augments Test::Unit and Polonium/Webrat to run Selenium tests in the cloud. "
|
102
214
|
email: pair+kelly+sam@pivotallabs.com
|
103
215
|
executables: []
|
@@ -127,6 +239,7 @@ files:
|
|
127
239
|
- lib/saucelabs_adapter/test_unit_adapter.rb
|
128
240
|
- lib/saucelabs_adapter/tunnel.rb
|
129
241
|
- lib/saucelabs_adapter/tunnels/other_tunnel.rb
|
242
|
+
- lib/saucelabs_adapter/tunnels/sauce_connect_tunnel.rb
|
130
243
|
- lib/saucelabs_adapter/tunnels/sauce_tunnel.rb
|
131
244
|
- lib/saucelabs_adapter/tunnels/ssh_tunnel.rb
|
132
245
|
- lib/saucelabs_adapter/utilities.rb
|
@@ -145,8 +258,8 @@ homepage: http://github.com/pivotal/saucelabs-adapter
|
|
145
258
|
licenses: []
|
146
259
|
|
147
260
|
post_install_message:
|
148
|
-
rdoc_options:
|
149
|
-
|
261
|
+
rdoc_options: []
|
262
|
+
|
150
263
|
require_paths:
|
151
264
|
- lib
|
152
265
|
required_ruby_version: !ruby/object:Gem::Requirement
|