sauce 0.14.2 → 0.15.0.alpha.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/Rakefile +1 -29
- data/lib/generators/sauce/install/install_generator.rb +54 -0
- data/lib/generators/{templates → sauce/install/templates}/sauce.rake +0 -0
- data/lib/sauce/config.rb +48 -17
- data/lib/sauce/connect.rb +9 -2
- data/lib/sauce/integrations.rb +25 -15
- data/lib/sauce/raketasks.rb +9 -21
- data/lib/sauce/utilities.rb +21 -14
- data/sauce.gemspec +4 -19
- data/test/helper.rb +17 -1
- data/test/test_config.rb +54 -55
- data/test/test_connect.rb +16 -19
- data/test/test_selenium.rb +7 -11
- metadata +26 -61
- data/VERSION +0 -1
- data/lib/generators/sauce_generator.rb +0 -46
- data/test/api/test_jobs.rb +0 -145
- data/test/api/test_tunnels.rb +0 -108
- data/test/integrations/test_rails2.rb +0 -20
data/Rakefile
CHANGED
@@ -1,32 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
3
|
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "sauce"
|
8
|
-
gem.summary = "Ruby access to Sauce Labs' features"
|
9
|
-
gem.description = "A Ruby interface to Sauce Labs' services. Start/stop tunnels, retrieve Selenium logs, access video replays, etc."
|
10
|
-
gem.email = "help@saucelabs.com"
|
11
|
-
gem.homepage = "http://github.com/saucelabs/sauce"
|
12
|
-
gem.authors = ["Sean Grove", "Eric Allen", "Steven Hazel"]
|
13
|
-
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
14
|
-
gem.add_development_dependency "jeweler", ">= 1.4.0"
|
15
|
-
gem.add_runtime_dependency "rest-client", ">= 0"
|
16
|
-
gem.add_runtime_dependency "net-ssh", ">= 0"
|
17
|
-
gem.add_runtime_dependency "net-ssh-gateway", ">= 0"
|
18
|
-
gem.add_runtime_dependency "selenium-webdriver", ">= 0.1.2"
|
19
|
-
gem.add_runtime_dependency "childprocess", ">= 0.1.6"
|
20
|
-
gem.add_runtime_dependency "json", ">= 1.2.0"
|
21
|
-
gem.add_runtime_dependency "cmdparse", ">= 2.0.2"
|
22
|
-
gem.add_runtime_dependency "highline", ">= 1.5.0"
|
23
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
24
|
-
end
|
25
|
-
Jeweler::GemcutterTasks.new
|
26
|
-
rescue LoadError
|
27
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
28
|
-
end
|
29
|
-
|
30
4
|
require 'rake/testtask'
|
31
5
|
Rake::TestTask.new(:test) do |test|
|
32
6
|
test.libs << 'lib' << 'test'
|
@@ -42,7 +16,7 @@ namespace :test do
|
|
42
16
|
end
|
43
17
|
Rake::TestTask.new(:integrations) do |test|
|
44
18
|
test.libs << 'lib' << 'test'
|
45
|
-
test.pattern = 'test/
|
19
|
+
test.pattern = 'test/test_integrations.rb'
|
46
20
|
test.verbose = true
|
47
21
|
end
|
48
22
|
end
|
@@ -66,8 +40,6 @@ rescue LoadError
|
|
66
40
|
end
|
67
41
|
end
|
68
42
|
|
69
|
-
task :test => :check_dependencies
|
70
|
-
|
71
43
|
task :default => :test
|
72
44
|
|
73
45
|
require 'rake/rdoctask'
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Sauce
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path("../templates", __FILE__)
|
5
|
+
|
6
|
+
desc "Prep application for Sauce OnDemand Selenium tests"
|
7
|
+
|
8
|
+
argument :username, :type => :string, :required => false
|
9
|
+
argument :api_key, :type => :string, :required => false
|
10
|
+
|
11
|
+
def copy_rake_tasks
|
12
|
+
copy_file "sauce.rake", "lib/tasks/sauce.rake"
|
13
|
+
end
|
14
|
+
|
15
|
+
def configure_credentials
|
16
|
+
if username
|
17
|
+
system("sauce config #{username} #{api_key}")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def setup_spec
|
22
|
+
if File.directory? 'spec'
|
23
|
+
empty_directory "spec/selenium"
|
24
|
+
append_file "spec/spec_helper.rb", generate_config
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def setup_test
|
29
|
+
if File.directory? 'test'
|
30
|
+
empty_directory "test/selenium"
|
31
|
+
append_file "test/test_helper.rb", generate_config
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def generate_config
|
38
|
+
@random_id ||= rand(100000)
|
39
|
+
return <<-CONFIG
|
40
|
+
require 'sauce'
|
41
|
+
|
42
|
+
Sauce.config do |conf|
|
43
|
+
conf.browser_url = "http://#{@random_id}.test/"
|
44
|
+
conf.browsers = [
|
45
|
+
["Windows 2003", "firefox", "3."]
|
46
|
+
]
|
47
|
+
conf.application_host = "127.0.0.1"
|
48
|
+
conf.application_port = "3001"
|
49
|
+
end
|
50
|
+
CONFIG
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
File without changes
|
data/lib/sauce/config.rb
CHANGED
@@ -36,6 +36,7 @@ module Sauce
|
|
36
36
|
@opts.merge! DEFAULT_OPTIONS
|
37
37
|
@opts.merge! load_options_from_yaml
|
38
38
|
@opts.merge! load_options_from_environment
|
39
|
+
@opts.merge! load_options_from_heroku
|
39
40
|
@opts.merge! Sauce.get_config.opts rescue {}
|
40
41
|
@opts.merge! opts
|
41
42
|
end
|
@@ -80,30 +81,31 @@ module Sauce
|
|
80
81
|
private
|
81
82
|
|
82
83
|
def load_options_from_environment
|
83
|
-
|
84
|
-
|
85
|
-
opts[:port] = ENV['SAUCE_PORT']
|
86
|
-
opts[:browser_url] = ENV['SAUCE_BROWSER_URL']
|
87
|
-
|
88
|
-
opts[:username] = ENV['SAUCE_USERNAME']
|
89
|
-
opts[:access_key] = ENV['SAUCE_ACCESS_KEY']
|
90
|
-
|
91
|
-
opts[:os] = ENV['SAUCE_OS']
|
92
|
-
opts[:browser] = ENV['SAUCE_BROWSER']
|
93
|
-
opts[:browser_version] = ENV['SAUCE_BROWSER_VERSION']
|
94
|
-
opts[:job_name] = ENV['SAUCE_JOB_NAME']
|
95
|
-
|
96
|
-
opts[:firefox_profile_url] = ENV['SAUCE_FIREFOX_PROFILE_URL']
|
97
|
-
opts[:user_extensions_url] = ENV['SAUCE_USER_EXTENSIONS_URL']
|
84
|
+
return extract_options_from_hash(ENV)
|
85
|
+
end
|
98
86
|
|
99
|
-
|
87
|
+
def load_options_from_heroku
|
88
|
+
@@herkou_environment ||= begin
|
89
|
+
buffer = IO.popen("heroku config --shell") { |out| out.read }
|
90
|
+
if $?.exitstatus == 0
|
91
|
+
env = {}
|
92
|
+
buffer.split("\n").each do |line|
|
93
|
+
key, value = line.split("=")
|
94
|
+
env[key] = value
|
95
|
+
end
|
96
|
+
extract_options_from_hash(env)
|
97
|
+
else
|
98
|
+
{}
|
99
|
+
end
|
100
|
+
end
|
101
|
+
return @@herkou_environment
|
100
102
|
end
|
101
103
|
|
102
104
|
def load_options_from_yaml
|
103
105
|
paths = [
|
104
106
|
"ondemand.yml",
|
105
107
|
File.join("config", "ondemand.yml"),
|
106
|
-
File.
|
108
|
+
File.expand_path("../../../ondemand.yml", __FILE__),
|
107
109
|
File.join(File.expand_path("~"), ".sauce", "ondemand.yml")
|
108
110
|
]
|
109
111
|
|
@@ -115,5 +117,34 @@ module Sauce
|
|
115
117
|
end
|
116
118
|
return {}
|
117
119
|
end
|
120
|
+
|
121
|
+
def extract_options_from_hash(env)
|
122
|
+
opts = {}
|
123
|
+
opts[:host] = env['SAUCE_HOST']
|
124
|
+
opts[:port] = env['SAUCE_PORT']
|
125
|
+
opts[:browser_url] = env['SAUCE_BROWSER_URL']
|
126
|
+
|
127
|
+
opts[:username] = env['SAUCE_USERNAME']
|
128
|
+
opts[:access_key] = env['SAUCE_ACCESS_KEY']
|
129
|
+
|
130
|
+
opts[:os] = env['SAUCE_OS']
|
131
|
+
opts[:browser] = env['SAUCE_BROWSER']
|
132
|
+
opts[:browser_version] = env['SAUCE_BROWSER_VERSION']
|
133
|
+
opts[:job_name] = env['SAUCE_JOB_NAME']
|
134
|
+
|
135
|
+
opts[:firefox_profile_url] = env['SAUCE_FIREFOX_PROFILE_URL']
|
136
|
+
opts[:user_extensions_url] = env['SAUCE_USER_EXTENSIONS_URL']
|
137
|
+
|
138
|
+
if env.include? 'URL'
|
139
|
+
opts['SAUCE_BROWSER_URL'] = "http://#{env['URL']}/"
|
140
|
+
end
|
141
|
+
|
142
|
+
if env.include? 'SAUCE_BROWSERS'
|
143
|
+
browsers = JSON.parse(env['SAUCE_BROWSERS'])
|
144
|
+
opts[:browsers] = browsers.map { |x| [x['os'], x['browser'], x['version']] }
|
145
|
+
end
|
146
|
+
|
147
|
+
return opts.delete_if {|key, value| value.nil?}
|
148
|
+
end
|
118
149
|
end
|
119
150
|
end
|
data/lib/sauce/connect.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Sauce
|
2
2
|
class Connect
|
3
|
+
TIMEOUT = 300
|
4
|
+
|
3
5
|
attr_reader :status, :error
|
4
6
|
|
5
7
|
def initialize(options={})
|
@@ -14,7 +16,7 @@ module Sauce
|
|
14
16
|
options.delete(:tunnel_port)
|
15
17
|
config = Sauce::Config.new(options)
|
16
18
|
args = ['-u', config.username, '-k', config.access_key, '-s', host, '-p', port, '-d', config.domain, '-t', tunnel_port]
|
17
|
-
@pipe = IO.popen(([Sauce::Connect.find_sauce_connect] + args).join(' '))
|
19
|
+
@pipe = IO.popen((["exec", "\"#{Sauce::Connect.find_sauce_connect}\""] + args).join(' '))
|
18
20
|
at_exit do
|
19
21
|
Process.kill("INT", @pipe.pid)
|
20
22
|
while @ready
|
@@ -39,9 +41,14 @@ module Sauce
|
|
39
41
|
end
|
40
42
|
|
41
43
|
def wait_until_ready
|
42
|
-
|
44
|
+
start = Time.now
|
45
|
+
while !@ready and (Time.now-start) < TIMEOUT
|
43
46
|
sleep 0.4
|
44
47
|
end
|
48
|
+
|
49
|
+
if !@ready
|
50
|
+
raise "Sauce Connect failed to connect after #{TIMEOUT} seconds"
|
51
|
+
end
|
45
52
|
end
|
46
53
|
|
47
54
|
def disconnect
|
data/lib/sauce/integrations.rb
CHANGED
@@ -14,16 +14,19 @@ begin
|
|
14
14
|
|
15
15
|
before :suite do
|
16
16
|
config = Sauce::Config.new
|
17
|
-
if @@need_tunnel
|
18
|
-
|
19
|
-
|
17
|
+
if @@need_tunnel
|
18
|
+
if config.application_host && !config.local?
|
19
|
+
@@tunnel = Sauce::Connect.new(:host => config.application_host, :port => config.application_port || 80)
|
20
|
+
@@tunnel.wait_until_ready
|
21
|
+
end
|
22
|
+
@@server = Sauce::Utilities::RailsServer.new
|
23
|
+
@@server.start
|
20
24
|
end
|
21
25
|
end
|
22
26
|
|
23
27
|
after :suite do
|
24
|
-
if defined? @@tunnel
|
25
|
-
|
26
|
-
end
|
28
|
+
@@tunnel.disconnect if defined? @@tunnel
|
29
|
+
@@server.stop if defined? @@server
|
27
30
|
end
|
28
31
|
|
29
32
|
def execute(*args)
|
@@ -102,11 +105,15 @@ begin
|
|
102
105
|
@@tunnel = Sauce::Connect.new(:host => config.application_host, :port => config.application_port || 80)
|
103
106
|
@@tunnel.wait_until_ready
|
104
107
|
end
|
108
|
+
|
109
|
+
if ::RSpec.configuration.settings[:files_to_run].any? {|file| file =~ /spec\/selenium\//}
|
110
|
+
@@server = Sauce::Utilities::RailsServer.new
|
111
|
+
@@server.start
|
112
|
+
end
|
105
113
|
end
|
106
114
|
::RSpec.configuration.after :suite do
|
107
|
-
if defined? @@tunnel
|
108
|
-
|
109
|
-
end
|
115
|
+
@@tunnel.disconnect if defined? @@tunnel
|
116
|
+
@@server.stop if defined? @@server
|
110
117
|
end
|
111
118
|
end
|
112
119
|
end
|
@@ -177,11 +184,12 @@ begin
|
|
177
184
|
@sauce_tunnel = Sauce::Connect.new(:host => config.application_host, :port => config.application_port || 80)
|
178
185
|
@sauce_tunnel.wait_until_ready
|
179
186
|
end
|
187
|
+
@server = Sauce::Utilities::RailsServer.new
|
188
|
+
@server.start
|
180
189
|
end
|
181
190
|
result = run_without_tunnel.bind(self).call(*args)
|
182
|
-
if defined? @sauce_tunnel
|
183
|
-
|
184
|
-
end
|
191
|
+
@sauce_tunnel.disconnect if defined? @sauce_tunnel
|
192
|
+
@server.stop if defined? @server
|
185
193
|
return result
|
186
194
|
end
|
187
195
|
end
|
@@ -206,11 +214,13 @@ begin
|
|
206
214
|
@sauce_tunnel = Sauce::Connect.new(:host => config.application_host, :port => config.application_port || 80)
|
207
215
|
@sauce_tunnel.wait_until_ready
|
208
216
|
end
|
217
|
+
|
218
|
+
@server = Sauce::Utilities::RailsServer.new
|
219
|
+
@server.start
|
209
220
|
end
|
210
221
|
result = run_without_tunnel.bind(self).call(*args)
|
211
|
-
if defined? @sauce_tunnel
|
212
|
-
|
213
|
-
end
|
222
|
+
@sauce_tunnel.disconnect if defined? @sauce_tunnel
|
223
|
+
@server.stop if defined? @server
|
214
224
|
return result
|
215
225
|
end
|
216
226
|
end
|
data/lib/sauce/raketasks.rb
CHANGED
@@ -17,17 +17,13 @@ if defined?(Spec::Rake::SpecTask)
|
|
17
17
|
namespace :selenium do
|
18
18
|
desc "Run the Selenium acceptance tests in spec/selenium using Sauce OnDemand"
|
19
19
|
task :sauce => spec_prereq do
|
20
|
-
|
21
|
-
Rake::Task["spec:selenium:runtests"].invoke
|
22
|
-
end
|
20
|
+
Rake::Task["spec:selenium:runtests"].invoke
|
23
21
|
end
|
24
22
|
|
25
23
|
desc "Run the Selenium acceptance tests in spec/selenium using a local Selenium server"
|
26
24
|
task :local => spec_prereq do
|
27
|
-
|
28
|
-
|
29
|
-
Rake::Task["spec:selenium:runtests"].invoke
|
30
|
-
end
|
25
|
+
with_selenium_rc do
|
26
|
+
Rake::Task["spec:selenium:runtests"].invoke
|
31
27
|
end
|
32
28
|
end
|
33
29
|
|
@@ -55,17 +51,13 @@ if defined?(RSpec::Core::RakeTask)
|
|
55
51
|
namespace :selenium do
|
56
52
|
desc "Run the Selenium acceptance tests in spec/selenium using Sauce OnDemand"
|
57
53
|
task :sauce => spec_prereq do
|
58
|
-
|
59
|
-
Rake::Task["spec:selenium:runtests"].invoke
|
60
|
-
end
|
54
|
+
Rake::Task["spec:selenium:runtests"].invoke
|
61
55
|
end
|
62
56
|
|
63
57
|
desc "Run the Selenium acceptance tests in spec/selenium using a local Selenium server"
|
64
58
|
task :local => spec_prereq do
|
65
|
-
|
66
|
-
|
67
|
-
Rake::Task["spec:selenium:runtests"].invoke
|
68
|
-
end
|
59
|
+
with_selenium_rc do
|
60
|
+
Rake::Task["spec:selenium:runtests"].invoke
|
69
61
|
end
|
70
62
|
end
|
71
63
|
|
@@ -84,17 +76,13 @@ namespace :test do
|
|
84
76
|
namespace :selenium do
|
85
77
|
desc "Run the Selenium acceptance tests in test/selenium using Sauce OnDemand"
|
86
78
|
task :sauce do
|
87
|
-
|
88
|
-
Rake::Task["test:selenium:runtests"].invoke
|
89
|
-
end
|
79
|
+
Rake::Task["test:selenium:runtests"].invoke
|
90
80
|
end
|
91
81
|
|
92
82
|
desc "Run the Selenium acceptance tests in spec/selenium using a local Selenium server"
|
93
83
|
task :local do
|
94
|
-
|
95
|
-
|
96
|
-
Rake::Task["test:selenium:runtests"].invoke
|
97
|
-
end
|
84
|
+
with_selenium_rc do
|
85
|
+
Rake::Task["test:selenium:runtests"].invoke
|
98
86
|
end
|
99
87
|
end
|
100
88
|
|
data/lib/sauce/utilities.rb
CHANGED
@@ -47,24 +47,31 @@ module Sauce
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
50
|
+
class RailsServer
|
51
|
+
include Sauce::Utilities
|
52
|
+
def start
|
53
|
+
STDERR.puts "Starting Rails server on port 3001..."
|
54
|
+
if File.exists?('script/server')
|
55
|
+
@server = ChildProcess.build("ruby", "script/server", "-e", "test", "--port", "3001")
|
56
|
+
elsif File.exists?('script/rails')
|
57
|
+
@server = ChildProcess.build("bundle", "exec", "rails", "server", "-e", "test", "--port", "3001")
|
58
|
+
end
|
59
|
+
@server.io.inherit!
|
60
|
+
@server.start
|
61
|
+
|
62
|
+
wait_for_server_on_port(3001)
|
63
|
+
|
64
|
+
at_exit do
|
65
|
+
@server.stop
|
66
|
+
end
|
67
|
+
STDERR.puts "Rails server running!"
|
56
68
|
end
|
57
69
|
|
58
|
-
|
59
|
-
STDERR.puts "Rails server running!"
|
60
|
-
begin
|
61
|
-
yield
|
62
|
-
ensure
|
70
|
+
def stop
|
63
71
|
begin
|
64
|
-
|
65
|
-
Process.kill("INT", pid)
|
72
|
+
@server.stop
|
66
73
|
rescue
|
67
|
-
STDERR.puts "Rails server could not be killed.
|
74
|
+
STDERR.puts "Rails server could not be killed. Did it fail to start?"
|
68
75
|
end
|
69
76
|
end
|
70
77
|
end
|
data/sauce.gemspec
CHANGED
@@ -1,15 +1,12 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
5
2
|
|
6
3
|
Gem::Specification.new do |s|
|
7
4
|
s.name = %q{sauce}
|
8
|
-
s.version = "0.
|
5
|
+
s.version = "0.15.0.alpha.1"
|
9
6
|
|
10
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
8
|
s.authors = ["Sean Grove", "Eric Allen", "Steven Hazel"]
|
12
|
-
s.date = %q{2011-01-
|
9
|
+
s.date = %q{2011-01-26}
|
13
10
|
s.default_executable = %q{sauce}
|
14
11
|
s.description = %q{A Ruby interface to Sauce Labs' services. Start/stop tunnels, retrieve Selenium logs, access video replays, etc.}
|
15
12
|
s.email = %q{help@saucelabs.com}
|
@@ -23,7 +20,6 @@ Gem::Specification.new do |s|
|
|
23
20
|
"LICENSE",
|
24
21
|
"README.markdown",
|
25
22
|
"Rakefile",
|
26
|
-
"VERSION",
|
27
23
|
"bin/sauce",
|
28
24
|
"examples/helper.rb",
|
29
25
|
"examples/other_spec.rb",
|
@@ -32,8 +28,8 @@ Gem::Specification.new do |s|
|
|
32
28
|
"examples/test_saucelabs2.rb",
|
33
29
|
"generators/sauce/sauce_generator.rb",
|
34
30
|
"generators/sauce/templates/sauce.rake",
|
35
|
-
"lib/generators/
|
36
|
-
"lib/generators/templates/sauce.rake",
|
31
|
+
"lib/generators/sauce/install/install_generator.rb",
|
32
|
+
"lib/generators/sauce/install/templates/sauce.rake",
|
37
33
|
"lib/sauce.rb",
|
38
34
|
"lib/sauce/client.rb",
|
39
35
|
"lib/sauce/config.rb",
|
@@ -56,8 +52,6 @@ Gem::Specification.new do |s|
|
|
56
52
|
"support/simplejson/ordered_dict.py",
|
57
53
|
"support/simplejson/scanner.py",
|
58
54
|
"support/simplejson/tool.py",
|
59
|
-
"test/api/test_jobs.rb",
|
60
|
-
"test/api/test_tunnels.rb",
|
61
55
|
"test/helper.rb",
|
62
56
|
"test/test_config.rb",
|
63
57
|
"test/test_connect.rb",
|
@@ -73,10 +67,7 @@ Gem::Specification.new do |s|
|
|
73
67
|
"examples/saucelabs_spec.rb",
|
74
68
|
"examples/test_saucelabs.rb",
|
75
69
|
"examples/test_saucelabs2.rb",
|
76
|
-
"test/api/test_jobs.rb",
|
77
|
-
"test/api/test_tunnels.rb",
|
78
70
|
"test/helper.rb",
|
79
|
-
"test/integrations/test_rails2.rb",
|
80
71
|
"test/test_config.rb",
|
81
72
|
"test/test_connect.rb",
|
82
73
|
"test/test_selenium.rb"
|
@@ -86,8 +77,6 @@ Gem::Specification.new do |s|
|
|
86
77
|
s.specification_version = 3
|
87
78
|
|
88
79
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
89
|
-
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
90
|
-
s.add_development_dependency(%q<jeweler>, [">= 1.4.0"])
|
91
80
|
s.add_runtime_dependency(%q<rest-client>, [">= 0"])
|
92
81
|
s.add_runtime_dependency(%q<net-ssh>, [">= 0"])
|
93
82
|
s.add_runtime_dependency(%q<net-ssh-gateway>, [">= 0"])
|
@@ -97,8 +86,6 @@ Gem::Specification.new do |s|
|
|
97
86
|
s.add_runtime_dependency(%q<cmdparse>, [">= 2.0.2"])
|
98
87
|
s.add_runtime_dependency(%q<highline>, [">= 1.5.0"])
|
99
88
|
else
|
100
|
-
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
101
|
-
s.add_dependency(%q<jeweler>, [">= 1.4.0"])
|
102
89
|
s.add_dependency(%q<rest-client>, [">= 0"])
|
103
90
|
s.add_dependency(%q<net-ssh>, [">= 0"])
|
104
91
|
s.add_dependency(%q<net-ssh-gateway>, [">= 0"])
|
@@ -109,8 +96,6 @@ Gem::Specification.new do |s|
|
|
109
96
|
s.add_dependency(%q<highline>, [">= 1.5.0"])
|
110
97
|
end
|
111
98
|
else
|
112
|
-
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
113
|
-
s.add_dependency(%q<jeweler>, [">= 1.4.0"])
|
114
99
|
s.add_dependency(%q<rest-client>, [">= 0"])
|
115
100
|
s.add_dependency(%q<net-ssh>, [">= 0"])
|
116
101
|
s.add_dependency(%q<net-ssh-gateway>, [">= 0"])
|
data/test/helper.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'test/unit'
|
3
|
-
require 'shoulda'
|
4
3
|
require 'net/telnet'
|
4
|
+
require 'fileutils'
|
5
5
|
|
6
6
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
7
7
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
8
8
|
require 'sauce'
|
9
9
|
|
10
|
+
include Sauce::Utilities
|
11
|
+
|
10
12
|
Sauce.config do |config|
|
11
13
|
config.browsers = [
|
12
14
|
["Windows 2003", "firefox", "3.6."],
|
@@ -17,3 +19,17 @@ Sauce.config do |config|
|
|
17
19
|
#config.application_host = "localhost"
|
18
20
|
#config.application_port = "4444"
|
19
21
|
end
|
22
|
+
|
23
|
+
def ensure_rvm_installed
|
24
|
+
rvm_executable = File.expand_path("~/.rvm/bin/rvm")
|
25
|
+
if File.exist? rvm_executable
|
26
|
+
unless defined?(RVM)
|
27
|
+
rvm_lib_path = File.expand_path("~/.rvm/lib")
|
28
|
+
$LOAD_PATH.unshift(rvm_lib_path) unless $LOAD_PATH.include?(rvm_lib_path)
|
29
|
+
require 'rvm'
|
30
|
+
end
|
31
|
+
else
|
32
|
+
raise "You do not have RVM installed. It is required for the integration tests.\n" +
|
33
|
+
"Please install it from http://rvm.beginrescueend.com/"
|
34
|
+
end
|
35
|
+
end
|
data/test/test_config.rb
CHANGED
@@ -1,75 +1,74 @@
|
|
1
|
-
require
|
1
|
+
require File.expand_path("../helper", __FILE__)
|
2
2
|
|
3
3
|
class TestConfig < Test::Unit::TestCase
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
preserved_env[key] = ENV[key] if ENV[key]
|
9
|
-
end
|
10
|
-
begin
|
11
|
-
|
12
|
-
ENV['SAUCE_USERNAME'] = "test_user"
|
13
|
-
ENV['SAUCE_ACCESS_KEY'] = "test_access"
|
14
|
-
ENV['SAUCE_OS'] = "Linux"
|
15
|
-
ENV['SAUCE_BROWSER'] = "firefox"
|
16
|
-
ENV['SAUCE_BROWSER_VERSION'] = "3."
|
17
|
-
|
18
|
-
config = Sauce::Config.new
|
19
|
-
assert_equal "{\"name\":\"Unnamed Ruby job\",\"access-key\":\"test_access\",\"os\":\"Linux\",\"username\":\"test_user\",\"browser-version\":\"3.\",\"browser\":\"firefox\"}", config.to_browser_string
|
20
|
-
ensure
|
21
|
-
Sauce::Config::ENVIRONMENT_VARIABLES.each do |key|
|
22
|
-
ENV[key] = preserved_env[key] if preserved_env[key]
|
23
|
-
end
|
24
|
-
end
|
4
|
+
def test_generates_reasonable_browser_string_from_envrionment
|
5
|
+
preserved_env = {}
|
6
|
+
Sauce::Config::ENVIRONMENT_VARIABLES.each do |key|
|
7
|
+
preserved_env[key] = ENV[key] if ENV[key]
|
25
8
|
end
|
9
|
+
begin
|
26
10
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
11
|
+
ENV['SAUCE_USERNAME'] = "test_user"
|
12
|
+
ENV['SAUCE_ACCESS_KEY'] = "test_access"
|
13
|
+
ENV['SAUCE_OS'] = "Linux"
|
14
|
+
ENV['SAUCE_BROWSER'] = "firefox"
|
15
|
+
ENV['SAUCE_BROWSER_VERSION'] = "3."
|
32
16
|
|
33
|
-
should "Respond to convenience accessors" do
|
34
17
|
config = Sauce::Config.new
|
35
|
-
assert_equal "
|
18
|
+
assert_equal "{\"name\":\"Unnamed Ruby job\",\"access-key\":\"test_access\",\"os\":\"Linux\",\"username\":\"test_user\",\"browser-version\":\"3.\",\"browser\":\"firefox\"}", config.to_browser_string
|
19
|
+
ensure
|
20
|
+
Sauce::Config::ENVIRONMENT_VARIABLES.each do |key|
|
21
|
+
ENV[key] = preserved_env[key]
|
22
|
+
end
|
36
23
|
end
|
24
|
+
end
|
37
25
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
config.browser_version = "C"
|
26
|
+
def test_generates_browser_string_from_parameters
|
27
|
+
config = Sauce::Config.new(:username => "test_user", :access_key => "test_access",
|
28
|
+
:os => "Linux", :browser => "firefox", :browser_version => "3.")
|
29
|
+
assert_equal "{\"name\":\"Unnamed Ruby job\",\"access-key\":\"test_access\",\"os\":\"Linux\",\"username\":\"test_user\",\"browser-version\":\"3.\",\"browser\":\"firefox\"}", config.to_browser_string
|
30
|
+
end
|
44
31
|
|
45
|
-
|
46
|
-
|
32
|
+
def test_convenience_accessors
|
33
|
+
config = Sauce::Config.new
|
34
|
+
assert_equal "saucelabs.com", config.host
|
35
|
+
end
|
47
36
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
37
|
+
def test_gracefully_degrades_browsers_field
|
38
|
+
Sauce.config {|c|}
|
39
|
+
config = Sauce::Config.new
|
40
|
+
config.os = "A"
|
41
|
+
config.browser = "B"
|
42
|
+
config.browser_version = "C"
|
43
|
+
|
44
|
+
assert_equal [["A", "B", "C"]], config.browsers
|
53
45
|
end
|
54
46
|
|
55
|
-
|
56
|
-
|
57
|
-
|
47
|
+
def test_boolean_flags
|
48
|
+
config = Sauce::Config.new
|
49
|
+
config.foo = true
|
50
|
+
assert config.foo?
|
51
|
+
end
|
58
52
|
|
53
|
+
def test_sauce_config_default_os
|
54
|
+
Sauce.config {|c| c.os = "TEST_OS" }
|
55
|
+
begin
|
59
56
|
config = Sauce::Config.new
|
60
57
|
assert_equal "TEST_OS", config.os
|
61
|
-
|
62
|
-
|
63
|
-
should "Be callable twice" do
|
64
|
-
Sauce.config {|c| c.os = "A"}
|
65
|
-
assert_equal "A", Sauce::Config.new.os
|
58
|
+
ensure
|
66
59
|
Sauce.config {|c|}
|
67
|
-
assert_not_equal "A", Sauce::Config.new.os
|
68
60
|
end
|
61
|
+
end
|
69
62
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
63
|
+
def test_can_call_sauce_config_twice
|
64
|
+
Sauce.config {|c| c.os = "A"}
|
65
|
+
assert_equal "A", Sauce::Config.new.os
|
66
|
+
Sauce.config {|c|}
|
67
|
+
assert_not_equal "A", Sauce::Config.new.os
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_clears_config
|
71
|
+
Sauce.config {|c|}
|
72
|
+
assert_not_equal [["Windows 2003", "firefox", "3.6."]], Sauce::Config.new.browsers
|
74
73
|
end
|
75
74
|
end
|
data/test/test_connect.rb
CHANGED
@@ -1,25 +1,22 @@
|
|
1
|
-
require
|
1
|
+
require File.expand_path("../helper", __FILE__)
|
2
2
|
|
3
3
|
class TestConnect < Test::Unit::TestCase
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
connect.disconnect
|
12
|
-
end
|
13
|
-
|
14
|
-
should "set error flag if things don't go well" do
|
15
|
-
connect = Sauce::Connect.new(:host => "saucelabs.com", :port => 80, :username => 'fail')
|
16
|
-
start = Time.now
|
17
|
-
while Time.now-start < 20 && !connect.error
|
18
|
-
sleep 1
|
19
|
-
end
|
4
|
+
def test_running_when_ready
|
5
|
+
connect = Sauce::Connect.new(:host => "saucelabs.com", :port => 80)
|
6
|
+
assert_equal "uninitialized", connect.status
|
7
|
+
connect.wait_until_ready
|
8
|
+
assert_equal "running", connect.status
|
9
|
+
connect.disconnect
|
10
|
+
end
|
20
11
|
|
21
|
-
|
22
|
-
|
12
|
+
def test_error_flag
|
13
|
+
connect = Sauce::Connect.new(:host => "saucelabs.com", :port => 80, :username => 'fail')
|
14
|
+
start = Time.now
|
15
|
+
while Time.now-start < 20 && !connect.error
|
16
|
+
sleep 1
|
23
17
|
end
|
18
|
+
|
19
|
+
assert connect.error
|
20
|
+
connect.disconnect
|
24
21
|
end
|
25
22
|
end
|
data/test/test_selenium.rb
CHANGED
@@ -1,15 +1,11 @@
|
|
1
|
-
require
|
1
|
+
require File.expand_path("../helper", __FILE__)
|
2
2
|
|
3
3
|
class TestSelenium < Test::Unit::TestCase
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
selenium.start
|
11
|
-
selenium.open "/"
|
12
|
-
selenium.stop
|
13
|
-
end
|
4
|
+
def test_successful_connection_from_environment
|
5
|
+
selenium = Sauce::Selenium.new(:job_name => "Sauce gem test suite: test_selenium.rb",
|
6
|
+
:browser_url => "http://www.google.com/")
|
7
|
+
selenium.start
|
8
|
+
selenium.open "/"
|
9
|
+
selenium.stop
|
14
10
|
end
|
15
11
|
end
|
metadata
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sauce
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: -3702664274
|
5
|
+
prerelease: 7
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
|
8
|
+
- 15
|
9
|
+
- 0
|
10
|
+
- alpha
|
11
|
+
- 1
|
12
|
+
version: 0.15.0.alpha.1
|
11
13
|
platform: ruby
|
12
14
|
authors:
|
13
15
|
- Sean Grove
|
@@ -17,43 +19,13 @@ autorequire:
|
|
17
19
|
bindir: bin
|
18
20
|
cert_chain: []
|
19
21
|
|
20
|
-
date: 2011-01-
|
22
|
+
date: 2011-01-26 00:00:00 -08:00
|
21
23
|
default_executable: sauce
|
22
24
|
dependencies:
|
23
|
-
- !ruby/object:Gem::Dependency
|
24
|
-
name: thoughtbot-shoulda
|
25
|
-
prerelease: false
|
26
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
27
|
-
none: false
|
28
|
-
requirements:
|
29
|
-
- - ">="
|
30
|
-
- !ruby/object:Gem::Version
|
31
|
-
hash: 3
|
32
|
-
segments:
|
33
|
-
- 0
|
34
|
-
version: "0"
|
35
|
-
type: :development
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: jeweler
|
39
|
-
prerelease: false
|
40
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
hash: 7
|
46
|
-
segments:
|
47
|
-
- 1
|
48
|
-
- 4
|
49
|
-
- 0
|
50
|
-
version: 1.4.0
|
51
|
-
type: :development
|
52
|
-
version_requirements: *id002
|
53
25
|
- !ruby/object:Gem::Dependency
|
54
26
|
name: rest-client
|
55
27
|
prerelease: false
|
56
|
-
requirement: &
|
28
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
57
29
|
none: false
|
58
30
|
requirements:
|
59
31
|
- - ">="
|
@@ -63,11 +35,11 @@ dependencies:
|
|
63
35
|
- 0
|
64
36
|
version: "0"
|
65
37
|
type: :runtime
|
66
|
-
version_requirements: *
|
38
|
+
version_requirements: *id001
|
67
39
|
- !ruby/object:Gem::Dependency
|
68
40
|
name: net-ssh
|
69
41
|
prerelease: false
|
70
|
-
requirement: &
|
42
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
71
43
|
none: false
|
72
44
|
requirements:
|
73
45
|
- - ">="
|
@@ -77,11 +49,11 @@ dependencies:
|
|
77
49
|
- 0
|
78
50
|
version: "0"
|
79
51
|
type: :runtime
|
80
|
-
version_requirements: *
|
52
|
+
version_requirements: *id002
|
81
53
|
- !ruby/object:Gem::Dependency
|
82
54
|
name: net-ssh-gateway
|
83
55
|
prerelease: false
|
84
|
-
requirement: &
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
85
57
|
none: false
|
86
58
|
requirements:
|
87
59
|
- - ">="
|
@@ -91,11 +63,11 @@ dependencies:
|
|
91
63
|
- 0
|
92
64
|
version: "0"
|
93
65
|
type: :runtime
|
94
|
-
version_requirements: *
|
66
|
+
version_requirements: *id003
|
95
67
|
- !ruby/object:Gem::Dependency
|
96
68
|
name: selenium-webdriver
|
97
69
|
prerelease: false
|
98
|
-
requirement: &
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
99
71
|
none: false
|
100
72
|
requirements:
|
101
73
|
- - ">="
|
@@ -107,11 +79,11 @@ dependencies:
|
|
107
79
|
- 2
|
108
80
|
version: 0.1.2
|
109
81
|
type: :runtime
|
110
|
-
version_requirements: *
|
82
|
+
version_requirements: *id004
|
111
83
|
- !ruby/object:Gem::Dependency
|
112
84
|
name: childprocess
|
113
85
|
prerelease: false
|
114
|
-
requirement: &
|
86
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
115
87
|
none: false
|
116
88
|
requirements:
|
117
89
|
- - ">="
|
@@ -123,11 +95,11 @@ dependencies:
|
|
123
95
|
- 6
|
124
96
|
version: 0.1.6
|
125
97
|
type: :runtime
|
126
|
-
version_requirements: *
|
98
|
+
version_requirements: *id005
|
127
99
|
- !ruby/object:Gem::Dependency
|
128
100
|
name: json
|
129
101
|
prerelease: false
|
130
|
-
requirement: &
|
102
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
131
103
|
none: false
|
132
104
|
requirements:
|
133
105
|
- - ">="
|
@@ -139,11 +111,11 @@ dependencies:
|
|
139
111
|
- 0
|
140
112
|
version: 1.2.0
|
141
113
|
type: :runtime
|
142
|
-
version_requirements: *
|
114
|
+
version_requirements: *id006
|
143
115
|
- !ruby/object:Gem::Dependency
|
144
116
|
name: cmdparse
|
145
117
|
prerelease: false
|
146
|
-
requirement: &
|
118
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
147
119
|
none: false
|
148
120
|
requirements:
|
149
121
|
- - ">="
|
@@ -155,11 +127,11 @@ dependencies:
|
|
155
127
|
- 2
|
156
128
|
version: 2.0.2
|
157
129
|
type: :runtime
|
158
|
-
version_requirements: *
|
130
|
+
version_requirements: *id007
|
159
131
|
- !ruby/object:Gem::Dependency
|
160
132
|
name: highline
|
161
133
|
prerelease: false
|
162
|
-
requirement: &
|
134
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
163
135
|
none: false
|
164
136
|
requirements:
|
165
137
|
- - ">="
|
@@ -171,7 +143,7 @@ dependencies:
|
|
171
143
|
- 0
|
172
144
|
version: 1.5.0
|
173
145
|
type: :runtime
|
174
|
-
version_requirements: *
|
146
|
+
version_requirements: *id008
|
175
147
|
description: A Ruby interface to Sauce Labs' services. Start/stop tunnels, retrieve Selenium logs, access video replays, etc.
|
176
148
|
email: help@saucelabs.com
|
177
149
|
executables:
|
@@ -186,7 +158,6 @@ files:
|
|
186
158
|
- LICENSE
|
187
159
|
- README.markdown
|
188
160
|
- Rakefile
|
189
|
-
- VERSION
|
190
161
|
- bin/sauce
|
191
162
|
- examples/helper.rb
|
192
163
|
- examples/other_spec.rb
|
@@ -195,8 +166,8 @@ files:
|
|
195
166
|
- examples/test_saucelabs2.rb
|
196
167
|
- generators/sauce/sauce_generator.rb
|
197
168
|
- generators/sauce/templates/sauce.rake
|
198
|
-
- lib/generators/
|
199
|
-
- lib/generators/templates/sauce.rake
|
169
|
+
- lib/generators/sauce/install/install_generator.rb
|
170
|
+
- lib/generators/sauce/install/templates/sauce.rake
|
200
171
|
- lib/sauce.rb
|
201
172
|
- lib/sauce/client.rb
|
202
173
|
- lib/sauce/config.rb
|
@@ -219,13 +190,10 @@ files:
|
|
219
190
|
- support/simplejson/ordered_dict.py
|
220
191
|
- support/simplejson/scanner.py
|
221
192
|
- support/simplejson/tool.py
|
222
|
-
- test/api/test_jobs.rb
|
223
|
-
- test/api/test_tunnels.rb
|
224
193
|
- test/helper.rb
|
225
194
|
- test/test_config.rb
|
226
195
|
- test/test_connect.rb
|
227
196
|
- test/test_selenium.rb
|
228
|
-
- test/integrations/test_rails2.rb
|
229
197
|
has_rdoc: true
|
230
198
|
homepage: http://github.com/saucelabs/sauce
|
231
199
|
licenses: []
|
@@ -266,10 +234,7 @@ test_files:
|
|
266
234
|
- examples/saucelabs_spec.rb
|
267
235
|
- examples/test_saucelabs.rb
|
268
236
|
- examples/test_saucelabs2.rb
|
269
|
-
- test/api/test_jobs.rb
|
270
|
-
- test/api/test_tunnels.rb
|
271
237
|
- test/helper.rb
|
272
|
-
- test/integrations/test_rails2.rb
|
273
238
|
- test/test_config.rb
|
274
239
|
- test/test_connect.rb
|
275
240
|
- test/test_selenium.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.14.2
|
@@ -1,46 +0,0 @@
|
|
1
|
-
class SauceGenerator < Rails::Generators::Base
|
2
|
-
source_root File.expand_path("../templates", __FILE__)
|
3
|
-
|
4
|
-
argument :username, :type => nil
|
5
|
-
argument :api_key, :type => nil
|
6
|
-
|
7
|
-
def copy_rake_tasks
|
8
|
-
copy_file "sauce.rake", "lib/tasks/sauce.rake"
|
9
|
-
end
|
10
|
-
|
11
|
-
def configure_credentials
|
12
|
-
system("sauce config #{username} #{api_key}")
|
13
|
-
end
|
14
|
-
|
15
|
-
def setup_spec
|
16
|
-
if File.directory? 'spec'
|
17
|
-
empty_directory "spec/selenium"
|
18
|
-
append_file "spec/spec_helper.rb", generate_config
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def setup_test
|
23
|
-
if File.directory? 'test'
|
24
|
-
empty_directory "test/selenium"
|
25
|
-
append_file "test/test_helper.rb", generate_config
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def generate_config
|
32
|
-
@random_id ||= rand(100000)
|
33
|
-
return <<-CONFIG
|
34
|
-
require 'sauce'
|
35
|
-
|
36
|
-
Sauce.config do |conf|
|
37
|
-
conf.browser_url = "http://#{@random_id}.test/"
|
38
|
-
conf.browsers = [
|
39
|
-
["Windows 2003", "firefox", "3."]
|
40
|
-
]
|
41
|
-
conf.application_host = "127.0.0.1"
|
42
|
-
conf.application_port = "3001"
|
43
|
-
end
|
44
|
-
CONFIG
|
45
|
-
end
|
46
|
-
end
|
data/test/api/test_jobs.rb
DELETED
@@ -1,145 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
require 'json'
|
3
|
-
require 'yaml'
|
4
|
-
|
5
|
-
class TestSauce < Test::Unit::TestCase
|
6
|
-
context "A V1 jobs instance" do
|
7
|
-
setup do
|
8
|
-
# Create this file and put in your details to run the tests
|
9
|
-
account = YAML.load_file "account.yml"
|
10
|
-
@username = account["username"]
|
11
|
-
@access_key = account["access_key"]
|
12
|
-
@ip = account["ip"]
|
13
|
-
@client = Sauce::Client.new(:username => @username,
|
14
|
-
:access_key => @access_key,
|
15
|
-
:protocol => account["protocol"],
|
16
|
-
:host => account["host"],
|
17
|
-
:port => account["port"],
|
18
|
-
:api_path => account["api_path"],
|
19
|
-
:api_version => account["api_version"])
|
20
|
-
|
21
|
-
#@example_data = YAML.load_file('example_data.yml')
|
22
|
-
end
|
23
|
-
|
24
|
-
=begin
|
25
|
-
should "initialize with passed variables" do
|
26
|
-
client = Sauce::Client.new(:username => "test_user",
|
27
|
-
:access_key => "abc123")
|
28
|
-
|
29
|
-
job = client.jobs.new(JSON.parse(@example_data["example_job"]))
|
30
|
-
|
31
|
-
assert_equal "501aca56282545a9a21ad2fc592b03fa", job.id
|
32
|
-
assert_equal "joe", job.owner
|
33
|
-
assert_equal "complete", job.status
|
34
|
-
assert_equal "job-example-fixture", job.name
|
35
|
-
|
36
|
-
assert_equal "firefox", job.browser
|
37
|
-
assert_equal "3.5.", job.browser_version
|
38
|
-
assert_equal "Windows 2003", job.os
|
39
|
-
|
40
|
-
assert_equal 1253856281, job.creation_time
|
41
|
-
assert_equal 1253856366, job.start_time
|
42
|
-
assert_equal 1253856465, job.end_time
|
43
|
-
|
44
|
-
assert_equal "http://saucelabs.com/video/8b6bf8d360cc338cc7cf7f6e093264d0/video.flv", job.video_url
|
45
|
-
assert_equal "http://saucelabs.com/video/8b6bf8d360cc338cc7cf7f6e093264d0/selenium-server.log", job.log_url
|
46
|
-
|
47
|
-
assert_equal false, job.public
|
48
|
-
assert_equal ["test", "example", "python_is_fun"], job.tags
|
49
|
-
end
|
50
|
-
=end
|
51
|
-
|
52
|
-
# Note: Relies on server-side data fixture
|
53
|
-
should "retrieve and parse a job via the api" do
|
54
|
-
job = @client.jobs.find("gem-test-job")
|
55
|
-
|
56
|
-
assert_equal "gem-test-job", job.id
|
57
|
-
assert_equal "sah", job.owner
|
58
|
-
assert_equal "complete", job.status
|
59
|
-
assert_equal "job-example-fixture", job.name
|
60
|
-
|
61
|
-
assert_equal "firefox", job.browser
|
62
|
-
assert_equal "3.5.", job.browser_version
|
63
|
-
assert_equal "Windows 2003", job.os
|
64
|
-
|
65
|
-
assert_equal 1266030817, job.creation_time
|
66
|
-
assert_equal 1266030833, job.start_time
|
67
|
-
assert_equal 1266030871, job.end_time
|
68
|
-
|
69
|
-
assert_equal "http://saucelabs.com/jobs/gem-test-job/video.flv", job.video_url
|
70
|
-
assert_equal "http://saucelabs.com/jobs/gem-test-job/selenium-server.log", job.log_url
|
71
|
-
|
72
|
-
assert_equal false, job.public
|
73
|
-
assert_equal ['test', 'equal', 'multilingualism_is_fun'], job.tags
|
74
|
-
end
|
75
|
-
|
76
|
-
should "update writable properties" do
|
77
|
-
job = @client.jobs.find("gem-test-job")
|
78
|
-
|
79
|
-
# Make sure it's in the expected condition before changing
|
80
|
-
assert_equal false, job.public
|
81
|
-
assert_equal ["test", "example", "multilingualism_is_fun"], job.tags
|
82
|
-
assert_equal "job-example-fixture", job.name
|
83
|
-
|
84
|
-
job.public = true
|
85
|
-
job.tags = ["changed", "updated", "ruby_is_also_fun"]
|
86
|
-
job.name = "changed-job-name", job.name
|
87
|
-
job.save
|
88
|
-
|
89
|
-
# Fresh copy of the same job
|
90
|
-
job2 = @client.jobs.find("gem-test-job")
|
91
|
-
|
92
|
-
assert_equal true, job2.public
|
93
|
-
assert_equal ["changed", "updated", "ruby_is_also_fun"], job2.tags
|
94
|
-
assert_equal "changed-job-name", job2.name
|
95
|
-
|
96
|
-
# Return the job to its original state and check it out
|
97
|
-
job.public = false
|
98
|
-
job.tags = ["test", "example", "multilingualism_is_fun"]
|
99
|
-
job.name = "job-example-fixture", job.name
|
100
|
-
job.save
|
101
|
-
|
102
|
-
# Check to see if the change took
|
103
|
-
job2.refresh!
|
104
|
-
assert_equal job.public, job2.public
|
105
|
-
assert_equal job.tags, job2.tags
|
106
|
-
assert_equal job.name, job2.name
|
107
|
-
end
|
108
|
-
|
109
|
-
should "not update read-only properties" do
|
110
|
-
job = @client.jobs.find("gem-test-job")
|
111
|
-
|
112
|
-
# Make sure it's in the expected condition before changing
|
113
|
-
assert_equal "complete", job.status
|
114
|
-
assert_equal "sah", job.owner
|
115
|
-
assert_equal "Windows 2003", job.os
|
116
|
-
|
117
|
-
job.status = "groggy"
|
118
|
-
job.owner = "sjobs"
|
119
|
-
job.os = "darwin" # In a perfect world...
|
120
|
-
assert_equal "groggy", job.status
|
121
|
-
assert_equal "sjobs", job.owner
|
122
|
-
assert_equal "darwin", job.os
|
123
|
-
job.save
|
124
|
-
|
125
|
-
# Changes should go away when refreshed
|
126
|
-
job.refresh!
|
127
|
-
assert_equal "complete", job.status
|
128
|
-
assert_equal "sah", job.owner
|
129
|
-
assert_equal "Windows 2003", job.os
|
130
|
-
end
|
131
|
-
|
132
|
-
should "list the 100 most recent jobs" do
|
133
|
-
jobs = @client.jobs.all
|
134
|
-
|
135
|
-
assert_equal 2, jobs.count
|
136
|
-
end
|
137
|
-
|
138
|
-
should "show the full job information on index if requested" do
|
139
|
-
flunk "TODO: implement this"
|
140
|
-
end
|
141
|
-
|
142
|
-
def teardown
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
data/test/api/test_tunnels.rb
DELETED
@@ -1,108 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
class TestSauce < Test::Unit::TestCase
|
5
|
-
context "A V1 tunnel instance" do
|
6
|
-
setup do
|
7
|
-
# Create this file and put in your details to run the tests
|
8
|
-
account = YAML.load_file "account.yml"
|
9
|
-
@username = account["username"]
|
10
|
-
@access_key = account["access_key"]
|
11
|
-
@ip = account["ip"]
|
12
|
-
@client = Sauce::Client.new(:username => @username,
|
13
|
-
:access_key => @access_key,
|
14
|
-
:ip => @ip
|
15
|
-
)
|
16
|
-
|
17
|
-
#STDOUT.puts @client.api_url
|
18
|
-
@client.tunnels.destroy_all
|
19
|
-
end
|
20
|
-
|
21
|
-
should "initialize with passed variables" do
|
22
|
-
client = Sauce::Client.new(:username => "test_user",
|
23
|
-
:access_key => "abc123")
|
24
|
-
assert_equal "http://test_user:abc123@saucelabs.com:80/rest/v1/test_user/", client.api_url
|
25
|
-
end
|
26
|
-
|
27
|
-
should "create a tunnel with the current user" do
|
28
|
-
tunnel = @client.tunnels.create('DomainNames' => ["192.168.0.110"])
|
29
|
-
tunnel.refresh!
|
30
|
-
assert_not_nil tunnel
|
31
|
-
assert_equal @username, tunnel.owner
|
32
|
-
end
|
33
|
-
|
34
|
-
should "list current tunnels" do
|
35
|
-
@client.tunnels.create('DomainNames' => ["192.168.0.111"])
|
36
|
-
@client.tunnels.create('DomainNames' => ["192.168.0.112"])
|
37
|
-
@client.tunnels.create('DomainNames' => ["192.168.0.113"])
|
38
|
-
|
39
|
-
tunnels = @client.tunnels.all
|
40
|
-
assert_equal 3, tunnels.select{|t| t.status != "halting"}.count
|
41
|
-
end
|
42
|
-
|
43
|
-
should "destroy a tunnel" do
|
44
|
-
tunnel = @client.tunnels.create('DomainNames' => ["192.168.0.114"])
|
45
|
-
tunnel.destroy
|
46
|
-
assert_equal "halting", tunnel.status
|
47
|
-
end
|
48
|
-
|
49
|
-
should "destroy all tunnels" do
|
50
|
-
tunnel = @client.tunnels.create('DomainNames' => ["192.168.0.115"])
|
51
|
-
tunnel = @client.tunnels.create('DomainNames' => ["192.168.0.116"])
|
52
|
-
tunnel = @client.tunnels.create('DomainNames' => ["192.168.0.117"])
|
53
|
-
|
54
|
-
@client.tunnels.destroy_all
|
55
|
-
|
56
|
-
@client.tunnels.all.each do |tunnel|
|
57
|
-
# This could be failing because the tunnels are already dead. Our servers too fast?
|
58
|
-
tunnel.refresh!
|
59
|
-
assert_equal "halting", tunnel.status
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
should "say hello on port 1025 if healthy" do
|
64
|
-
tunnel = @client.tunnels.create('DomainNames' => [@ip])
|
65
|
-
|
66
|
-
max_retries = 30
|
67
|
-
retries = 0
|
68
|
-
until tunnel.status == "running" or retries >= max_retries
|
69
|
-
sleep 5
|
70
|
-
retries += 1
|
71
|
-
tunnel.refresh!
|
72
|
-
end
|
73
|
-
|
74
|
-
assert_equal true, tunnel.says_hello?
|
75
|
-
|
76
|
-
tunnel.destroy # cleanup
|
77
|
-
end
|
78
|
-
|
79
|
-
should "have a host if finished booting" do
|
80
|
-
tunnel = @client.tunnels.create('DomainNames' => [@ip])
|
81
|
-
|
82
|
-
max_retries = 30
|
83
|
-
retries = 0
|
84
|
-
until tunnel.status == "running" or retries >= max_retries
|
85
|
-
sleep 5
|
86
|
-
retries += 1
|
87
|
-
tunnel.refresh!
|
88
|
-
end
|
89
|
-
|
90
|
-
tunnel.refresh!
|
91
|
-
|
92
|
-
assert_not_nil tunnel.host
|
93
|
-
|
94
|
-
tunnel.destroy # cleanup
|
95
|
-
end
|
96
|
-
|
97
|
-
should "not attempt to telnet if status is not running" do
|
98
|
-
tunnel = @client.tunnels.create('DomainNames' => [@ip])
|
99
|
-
|
100
|
-
tunnel.status = "booting"
|
101
|
-
assert_equal false, tunnel.says_hello?
|
102
|
-
end
|
103
|
-
|
104
|
-
def teardown
|
105
|
-
@client.tunnels.destroy_all
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
require 'tmpdir'
|
3
|
-
require 'fileutils'
|
4
|
-
|
5
|
-
class TestRails2Integration < Test::Unit::TestCase
|
6
|
-
def setup
|
7
|
-
@dir = File.join(Dir.tmpdir, "sauce_gem_test_#{rand(100000)}")
|
8
|
-
Dir.mkdir(@dir)
|
9
|
-
Dir.chdir(@dir)
|
10
|
-
puts @dir
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_ruby18
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
def teardown
|
18
|
-
FileUtils.remove_dir(@dir)
|
19
|
-
end
|
20
|
-
end
|