sauce 0.10.0 → 0.11.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/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Sauce Labs Inc
1
+ Copyright (c) 2009-2010 Sauce Labs Inc
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/README.markdown CHANGED
@@ -13,9 +13,10 @@ Current:
13
13
 
14
14
  Planned:
15
15
 
16
+ * Include selenium-client RSpec/Test::Unit integration
17
+ * Webrat integration
16
18
  * Extend to automatic retrieval of jobs logs, videos, reverse tunnels
17
19
  * Start/stop local instances of Sauce RC
18
- * Webrat integration
19
20
 
20
21
  Install
21
22
  -------
@@ -145,4 +146,4 @@ Note on Patches/Pull Requests
145
146
 
146
147
  Copyright
147
148
  ---------
148
- Copyright (c) 2010 Sauce Labs Inc. See LICENSE for details.
149
+ Copyright (c) 2009-2010 Sauce Labs Inc. See LICENSE for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.10.0
1
+ 0.11.0
@@ -1,51 +1 @@
1
- spec_prereq = File.exist?(File.join(RAILS_ROOT, 'config', 'database.yml')) ? "db:test:prepare" : :noop
2
- task :noop do
3
- end
4
-
5
- namespace :spec do
6
- namespace :selenium do
7
- desc "Run the Selenium acceptance tests in spec/selenium using Sauce OnDemand"
8
- task :sauce => spec_prereq do
9
- server = IO.popen("script/server RAILS_ENV=test --port 3001")
10
- begin
11
- Rake::Task["spec:selenium:runtests"].invoke
12
- ensure
13
- Process.kill("INT", server.pid)
14
- end
15
- end
16
-
17
- desc "" # Hide it from rake -T
18
- Spec::Rake::SpecTask.new :runtests do |t|
19
- t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
20
- t.spec_files = FileList["spec/selenium/**/*_spec.rb"]
21
- end
22
- end
23
-
24
- task :selenium => "selenium:sauce"
25
- end
26
-
27
- namespace :test do
28
- namespace :selenium do
29
- desc "Run the Selenium acceptance tests in test/selenium using Sauce OnDemand"
30
- task :sauce do
31
- server = IO.popen("script/server --port 3001")
32
- begin
33
- Rake::Task["test:selenium:runtests"].invoke
34
- ensure
35
- Process.kill("INT", server.pid)
36
- end
37
- end
38
-
39
- Rake::TestTask.new(:runtests) do |t|
40
- t.libs << "test"
41
- t.pattern = 'test/selenium/**/*_test.rb'
42
- t.verbose = true
43
- end
44
- desc "" # Hide it from rake -T
45
- Rake::Task['test:selenium:runtests'].instance_variable_set(:@full_comment, nil)
46
- Rake::Task['test:selenium:runtests'].instance_variable_set(:@comment, nil)
47
- Rake::Task['test:selenium:runtests'].enhance(["db:test:prepare"])
48
- end
49
-
50
- task :selenium => "selenium:sauce"
51
- end
1
+ require 'sauce/raketasks'
data/lib/sauce.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rubygems'
2
+ require 'sauce/utilities'
2
3
  require 'sauce/tunnel'
3
4
  require 'sauce/job'
4
5
  require 'sauce/client'
data/lib/sauce/config.rb CHANGED
@@ -14,6 +14,7 @@ module Sauce
14
14
 
15
15
  class Config
16
16
  attr_reader :opts
17
+
17
18
  DEFAULT_OPTIONS = {
18
19
  :host => "saucelabs.com",
19
20
  :port => 4444,
@@ -21,7 +22,8 @@ module Sauce
21
22
  :os => "Linux",
22
23
  :browser => "firefox",
23
24
  :browser_version => "3.",
24
- :job_name => "Unnamed Ruby job"
25
+ :job_name => "Unnamed Ruby job",
26
+ :local_application_port => "3001"
25
27
  }
26
28
 
27
29
  def initialize(opts={})
@@ -65,6 +67,10 @@ module Sauce
65
67
  return URI.parse(@opts[:browser_url]).host
66
68
  end
67
69
 
70
+ def local?
71
+ return ENV['LOCAL_SELENIUM']
72
+ end
73
+
68
74
  private
69
75
 
70
76
  def load_options_from_environment
data/lib/sauce/connect.rb CHANGED
@@ -30,7 +30,7 @@ module Sauce
30
30
  if line =~ /- (Problem.*)$/
31
31
  @error = $1
32
32
  end
33
- puts line
33
+ puts line unless options[:quiet]
34
34
  end
35
35
  @ready = false
36
36
  }
@@ -1,3 +1,5 @@
1
+ # NOTE: This has been superseded by sauce/connect. Consider for deprecation
2
+
1
3
  # http://groups.google.com/group/capistrano/browse_thread/thread/455c0c8a6faa9cc8?pli=1
2
4
  class Net::SSH::Gateway
3
5
  # Opens a SSH tunnel from a port on a remote host to a given host and port
@@ -7,7 +7,7 @@ begin
7
7
 
8
8
  before :suite do
9
9
  config = Sauce::Config.new
10
- if config.application_host
10
+ if config.application_host && !config.local?
11
11
  @@tunnel = Sauce::Connect.new(:host => config.application_host, :port => config.application_port || 80)
12
12
  @@tunnel.wait_until_ready
13
13
  end
@@ -19,21 +19,22 @@ begin
19
19
  end
20
20
  end
21
21
 
22
- before(:each) do
23
- @selenium.start
24
- end
25
-
26
- after(:each) do
27
- @selenium.stop
28
- end
29
-
30
22
  def execute(*args)
31
23
  config = Sauce::Config.new
32
24
  description = [self.class.description, self.description].join(" ")
33
25
  config.browsers.each do |os, browser, version|
34
- @selenium = Sauce::Selenium.new({:os => os, :browser => browser, :browser_version => version,
35
- :job_name => "#{description}"})
26
+ if config.local?
27
+ @selenium = ::Selenium::Client::Driver.new(:host => "127.0.0.1",
28
+ :port => 4444,
29
+ :browser => "*" + browser,
30
+ :url => "http://127.0.0.1:#{config.local_application_port}/")
31
+ else
32
+ @selenium = Sauce::Selenium.new({:os => os, :browser => browser, :browser_version => version,
33
+ :job_name => "#{description}"})
34
+ end
35
+ @selenium.start
36
36
  super(*args)
37
+ @selenium.stop
37
38
  end
38
39
  end
39
40
 
@@ -61,8 +62,15 @@ begin
61
62
  unless name =~ /^default_test/
62
63
  config = Sauce::Config.new
63
64
  config.browsers.each do |os, browser, version|
64
- @selenium = Sauce::Selenium.new({:os => os, :browser => browser, :browser_version => version,
65
- :job_name => "#{name}"})
65
+ if config.local?
66
+ @selenium = ::Selenium::Client::Driver.new(:host => "127.0.0.1",
67
+ :port => 4444,
68
+ :browser => "*" + browser,
69
+ :url => "http://127.0.0.1:#{config.local_application_port}/")
70
+ else
71
+ @selenium = Sauce::Selenium.new({:os => os, :browser => browser, :browser_version => version,
72
+ :job_name => "#{name}"})
73
+ end
66
74
  @selenium.start
67
75
  super(*args, &blk)
68
76
  @selenium.stop
@@ -73,11 +81,6 @@ begin
73
81
  # Placeholder so test/unit ignores test cases without any tests.
74
82
  def default_test
75
83
  end
76
-
77
- def self.ensure_tunnel_running
78
- unless defined?(@tunnel)
79
- end
80
- end
81
84
  end
82
85
  end
83
86
  require 'test/unit/ui/console/testrunner'
@@ -95,7 +98,7 @@ begin
95
98
 
96
99
  def start_tunnel(msg)
97
100
  config = Sauce::Config.new
98
- if config.application_host
101
+ if config.application_host && !config.local?
99
102
  @sauce_tunnel = Sauce::Connect.new(:host => config.application_host, :port => config.application_port || 80)
100
103
  @sauce_tunnel.wait_until_ready
101
104
  end
@@ -123,8 +126,15 @@ if defined?(ActiveSupport::TestCase)
123
126
  unless name =~ /^default_test/
124
127
  config = Sauce::Config.new
125
128
  config.browsers.each do |os, browser, version|
126
- @selenium = Sauce::Selenium.new({:os => os, :browser => browser, :browser_version => version,
127
- :job_name => "#{name}"})
129
+ if config.local?
130
+ @selenium = ::Selenium::Client::Driver.new(:host => "127.0.0.1",
131
+ :port => 4444,
132
+ :browser => "*" + browser,
133
+ :url => "http://127.0.0.1:#{config.local_application_port}/")
134
+ else
135
+ @selenium = Sauce::Selenium.new({:os => os, :browser => browser, :browser_version => version,
136
+ :job_name => "#{name}"})
137
+ end
128
138
  @selenium.start
129
139
  super(*args, &blk)
130
140
  @selenium.stop
@@ -135,11 +145,6 @@ if defined?(ActiveSupport::TestCase)
135
145
  # Placeholder so test/unit ignores test cases without any tests.
136
146
  def default_test
137
147
  end
138
-
139
- def self.ensure_tunnel_running
140
- unless defined?(@tunnel)
141
- end
142
- end
143
148
  end
144
149
  end
145
150
  end
@@ -0,0 +1,67 @@
1
+ require 'sauce'
2
+
3
+ spec_prereq = File.exist?(File.join(RAILS_ROOT, 'config', 'database.yml')) ? "db:test:prepare" : :noop
4
+ task :noop do
5
+ end
6
+
7
+ include Sauce::Utilities
8
+
9
+ namespace :spec do
10
+ namespace :selenium do
11
+ desc "Run the Selenium acceptance tests in spec/selenium using Sauce OnDemand"
12
+ task :sauce => spec_prereq do
13
+ with_rails_server do
14
+ Rake::Task["spec:selenium:runtests"].invoke
15
+ end
16
+ end
17
+
18
+ desc "Run the Selenium acceptance tests in spec/selenium using a local Selenium server"
19
+ task :local => spec_prereq do
20
+ with_rails_server do
21
+ with_selenium_rc do
22
+ Rake::Task["spec:selenium:runtests"].invoke
23
+ end
24
+ end
25
+ end
26
+
27
+ desc "" # Hide it from rake -T
28
+ Spec::Rake::SpecTask.new :runtests do |t|
29
+ t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
30
+ t.spec_files = FileList["spec/selenium/**/*_spec.rb"]
31
+ end
32
+ end
33
+
34
+ task :selenium => "selenium:sauce"
35
+ end
36
+
37
+ namespace :test do
38
+ namespace :selenium do
39
+ desc "Run the Selenium acceptance tests in test/selenium using Sauce OnDemand"
40
+ task :sauce do
41
+ with_rails_server do
42
+ Rake::Task["test:selenium:runtests"].invoke
43
+ end
44
+ end
45
+
46
+ desc "Run the Selenium acceptance tests in spec/selenium using a local Selenium server"
47
+ task :local do
48
+ with_rails_server do
49
+ with_selenium_rc do
50
+ Rake::Task["test:selenium:runtests"].invoke
51
+ end
52
+ end
53
+ end
54
+
55
+ Rake::TestTask.new(:runtests) do |t|
56
+ t.libs << "test"
57
+ t.pattern = 'test/selenium/**/*_test.rb'
58
+ t.verbose = true
59
+ end
60
+ # Hide it from rake -T
61
+ Rake::Task['test:selenium:runtests'].instance_variable_set(:@full_comment, nil)
62
+ Rake::Task['test:selenium:runtests'].instance_variable_set(:@comment, nil)
63
+ Rake::Task['test:selenium:runtests'].enhance(["db:test:prepare"])
64
+ end
65
+
66
+ task :selenium => "selenium:sauce"
67
+ end
data/lib/sauce/tunnel.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # NOTE: This has been superseded by sauce/connect. Consider for deprecation
2
+
1
3
  require 'net/telnet'
2
4
  require 'net/ssh'
3
5
  require 'net/ssh/gateway'
@@ -0,0 +1,52 @@
1
+ module Sauce
2
+ module Utilities
3
+ def silence_stream(stream)
4
+ old_stream = stream.dup
5
+ stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
6
+ stream.sync = true
7
+ yield
8
+ ensure
9
+ stream.reopen(old_stream)
10
+ end
11
+
12
+ def with_selenium_rc
13
+ ENV['LOCAL_SELENIUM'] = "true"
14
+ STDERR.puts "Starting Selenium RC server on port 4444..."
15
+ server = ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", 4444)
16
+ server.jar_file = File.expand_path(File.dirname(__FILE__) + "/../../support/selenium-server.jar")
17
+ silence_stream(STDOUT) do
18
+ server.start :background => true
19
+ TCPSocket.wait_for_service(:host => "127.0.0.1", :port => 4444)
20
+ end
21
+ STDERR.puts "Selenium RC running!"
22
+ begin
23
+ yield
24
+ ensure
25
+ server.stop
26
+ end
27
+ end
28
+
29
+ def with_rails_server
30
+ STDERR.puts "Starting Rails server on port 3001..."
31
+ server = IO.popen("script/server RAILS_ENV=test --port 3001 2>&1")
32
+ pid = nil
33
+ Thread.new do
34
+ while (line = server.gets)
35
+ if line =~ /pid=(.*) /
36
+ pid = $1.to_i
37
+ end
38
+ end
39
+ end
40
+
41
+ silence_stream(STDOUT) do
42
+ TCPSocket.wait_for_service(:host => "127.0.0.1", :port => 3001)
43
+ end
44
+ STDERR.puts "Rails server running!"
45
+ begin
46
+ yield
47
+ ensure
48
+ Process.kill("INT", pid)
49
+ end
50
+ end
51
+ end
52
+ end
Binary file
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sauce
3
3
  version: !ruby/object:Gem::Version
4
- hash: 55
4
+ hash: 51
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 10
8
+ - 11
9
9
  - 0
10
- version: 0.10.0
10
+ version: 0.11.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sean Grove
@@ -155,9 +155,12 @@ files:
155
155
  - lib/sauce/heroku.rb
156
156
  - lib/sauce/integrations.rb
157
157
  - lib/sauce/job.rb
158
+ - lib/sauce/raketasks.rb
158
159
  - lib/sauce/selenium.rb
159
160
  - lib/sauce/tunnel.rb
161
+ - lib/sauce/utilities.rb
160
162
  - support/sauce_connect
163
+ - support/selenium-server.jar
161
164
  - support/simplejson/LICENSE.txt
162
165
  - support/simplejson/__init__.py
163
166
  - support/simplejson/decoder.py