jettywrapper 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,6 @@
1
+ 1.2.1
2
+ Fixed :restart task
3
+
1
4
  1.2.0
2
5
  Added per environment configuration
3
6
  Fixes for JRuby
@@ -1,64 +1,33 @@
1
1
  h1. jettywrapper
2
2
 
3
- This gem is designed to make it easier to run automated tests against jetty. Solr comes bundled in a jetty instance, and the hydra project has taken a similar approach with hydra-jetty, an instance of jetty pre-configured to load fedora, solr, and various other java servlets of use to the hydra project.
4
-
5
- h2. Instructions for the impatient:
6
-
7
- bc..
8
- require 'jettywrapper'
9
- desc "Hudson build"
10
- task :hudson do
11
- if (ENV['RAILS_ENV'] == "test")
12
- jetty_params = {
13
- :jetty_home => File.expand_path(File.dirname(__FILE__) + '/../../jetty'),
14
- :quiet => false,
15
- :jetty_port => 8983,
16
- :solr_home => File.expand_path(File.dirname(__FILE__) + '/../../jetty/solr/test-core'),
17
- :fedora_home => File.expand_path(File.dirname(__FILE__) + '/../../jetty/fedora/default'),
18
- :startup_wait => 30
19
- }
20
- Rake::Task["db:drop"].invoke
21
- Rake::Task["db:migrate"].invoke
22
- Rake::Task["db:migrate:plugins"].invoke
23
- error = Jettywrapper.wrap(jetty_params) do
24
- Rake::Task["libra_oa:default_fixtures:refresh"].invoke
25
- Rake::Task["hydra:fixtures:refresh"].invoke
26
- Rake::Task["spec"].invoke
27
- Rake::Task["cucumber"].invoke
28
- end
29
- raise "test failures: #{error}" if error
30
- else
31
- system("rake hudson RAILS_ENV=test")
32
- fail unless $?.success?
33
- end
34
- end
3
+ This gem is designed to make it easier to integrate a jetty servlet container into a rails project.
4
+ Jettywrapper provides rake tasks for starting and stopping jetty, as well as a method (Jettywrapper.wrap) that will start the server before the block and stop the server after the block, which is useful for automated testing.
35
5
 
36
- h2. Important note on creating nested rake tasks:
6
+ h2. Configuring Jettywrapper
37
7
 
38
- When creating your rake tasks, keep in mind that rake does not by default propogate up errors raised from system commands.
39
- If you use system(), the return value will be false for any exit codes other than 0. If you use backticks or %x(), you must use $? to check the exit status code
40
- after the call. Failure to do so could result in false successes.
8
+ Jettywrapper starts the process with a list of options that you can specify in config/jetty.yml (otherwise a default is used). You can provide a per environment configuration, or you can have a default configuration which will be used when a per-environment configuration is not specified.
41
9
 
42
- h3. Example 1: Checking return value from system()
10
+ <pre>default:
11
+  jetty_port: 8983
12
+  java_opts:
13
+    - "-XX:MaxPermSize=128m"
14
+    - "-Xmx256m"
15
+ </pre>
43
16
 
44
- bc..
45
- #retval should return false for non-zero exit codes
46
- retval = system("rake hudson RAILS_ENV=test")
47
- fail unless retval
48
17
 
49
- h3. Example 2: Checking $? with system()
50
18
 
51
- bc..
52
- system("rake hudson RAILS_ENV=test")
53
- raise "rake hudson encoutered errors" unless $?.success?
19
+ h2. Example rake task:
54
20
 
55
- h3. Example 3: An alternative method: using %x[] or backticks with $?
21
+ bc.. require 'jettywrapper'
22
+ desc "Hudson build"
23
+ task :hudson do
24
+ jetty_params = Jettywrapper.load_config.merge({:jetty_home => File.expand_path(File.dirname(__FILE__) + '/../jetty')})
25
+ error = Jettywrapper.wrap(jetty_params) do
26
+ Rake::Task["spec"].invoke
27
+ end
28
+ raise "test failures: #{error}" if error
29
+ end
56
30
 
57
- bc..
58
- # %x[] or `` will return everything sent to stdout from the command
59
- puts %x[cucumber --tags ~@pending --tags ~@overwritten features]
60
- raise "Cucumber failed." unless $?.success?
61
-
62
31
  h2. Testing the gem
63
32
 
64
33
  If you haven't already, clone the git repository
@@ -23,6 +23,7 @@ class Jettywrapper
23
23
  attr_accessor :solr_home # Where is solr located? Default is jetty_home/solr
24
24
  attr_accessor :base_path # The root of the application. Used for determining where log files and PID files should go.
25
25
  attr_accessor :java_opts # Options to pass to java (ex. ["-Xmx512mb", "-Xms128mb"])
26
+ attr_accessor :port # The port jetty should listen on
26
27
 
27
28
  # configure the singleton with some defaults
28
29
  def initialize(params = {})
@@ -70,9 +71,9 @@ class Jettywrapper
70
71
  # @param [Symbol] :quiet Keep quiet about jetty output? Default is true.
71
72
  # @param [Symbol] :java_opts A list of options to pass to the jvm
72
73
  def configure(params = {})
73
- hydra_server = self.instance
74
- hydra_server.reset_process!
75
- hydra_server.quiet = params[:quiet].nil? ? true : params[:quiet]
74
+ jetty_server = self.instance
75
+ jetty_server.reset_process!
76
+ jetty_server.quiet = params[:quiet].nil? ? true : params[:quiet]
76
77
  if defined?(Rails.root)
77
78
  base_path = Rails.root
78
79
  elsif defined?(APP_ROOT)
@@ -80,12 +81,12 @@ class Jettywrapper
80
81
  else
81
82
  raise "You must set either Rails.root, APP_ROOT or pass :jetty_home as a parameter so I know where jetty is" unless params[:jetty_home]
82
83
  end
83
- hydra_server.jetty_home = params[:jetty_home] || File.expand_path(File.join(base_path, 'jetty'))
84
- hydra_server.solr_home = params[:solr_home] || File.join( hydra_server.jetty_home, "solr")
85
- hydra_server.port = params[:jetty_port] || 8888
86
- hydra_server.startup_wait = params[:startup_wait] || 5
87
- hydra_server.java_opts = params[:java_opts] || []
88
- return hydra_server
84
+ jetty_server.jetty_home = params[:jetty_home] || File.expand_path(File.join(base_path, 'jetty'))
85
+ jetty_server.solr_home = params[:solr_home] || File.join( jetty_server.jetty_home, "solr")
86
+ jetty_server.port = params[:jetty_port] || 8888
87
+ jetty_server.startup_wait = params[:startup_wait] || 5
88
+ jetty_server.java_opts = params[:java_opts] || []
89
+ return jetty_server
89
90
  end
90
91
 
91
92
 
@@ -113,11 +114,10 @@ class Jettywrapper
113
114
 
114
115
  begin
115
116
  jetty_server.start
116
- sleep jetty_server.startup_wait
117
117
  yield
118
118
  rescue
119
119
  error = $!
120
- puts "*** Error starting hydra-jetty: #{error}"
120
+ puts "*** Error starting jetty: #{error}"
121
121
  ensure
122
122
  # puts "stopping jetty server"
123
123
  jetty_server.stop
@@ -243,8 +243,8 @@ class Jettywrapper
243
243
  logger.warn "Removing stale PID file at #{pid_path}"
244
244
  File.delete(pid_path)
245
245
  end
246
- if Jettywrapper.is_port_in_use?(@jetty_port)
247
- raise("Port #{self.jetty_port} is already in use.")
246
+ if Jettywrapper.is_port_in_use?(self.port)
247
+ raise("Port #{self.port} is already in use.")
248
248
  end
249
249
  end
250
250
  Dir.chdir(@jetty_home) do
@@ -259,13 +259,25 @@ class Jettywrapper
259
259
  f.puts "#{process.pid}"
260
260
  f.close
261
261
  logger.debug "Wrote pid file to #{pid_path} with value #{process.pid}"
262
+ startup_wait!
263
+ end
264
+
265
+ # Wait for the jetty server to start and begin listening for requests
266
+ def startup_wait!
267
+ begin
268
+ Timeout::timeout(startup_wait) do
269
+ sleep 1 until (Jettywrapper.is_port_in_use? self.port)
270
+ end
271
+ rescue Timeout::Error
272
+ logger.warn "Waited #{startup_wait} seconds for jetty to start, but it is not yet listening on port #{self.port}. Continuing anyway."
273
+ end
262
274
  end
263
275
 
264
276
  def process
265
277
  @process ||= begin
266
278
  process = ChildProcess.build(*jetty_command)
267
279
  if self.quiet
268
- process.io.stderr = File.open("jettywrapper.log", "w+")
280
+ process.io.stderr = File.open(File.expand_path("jettywrapper.log"), "w+")
269
281
  process.io.stdout = process.io.stderr
270
282
  logger.warn "Logging jettywrapper stdout to #{File.expand_path(process.io.stderr.path)}"
271
283
  else
@@ -1 +1 @@
1
- GEMVERSION = "1.2.0"
1
+ GEMVERSION = "1.2.1"
@@ -22,7 +22,7 @@ namespace :jetty do
22
22
  end
23
23
 
24
24
  desc "Restarts jetty"
25
- task :restart do
25
+ task :restart => :environment do
26
26
  Jettywrapper.stop(JETTY_CONFIG)
27
27
  Jettywrapper.start(JETTY_CONFIG)
28
28
  end
@@ -12,7 +12,8 @@ module Hydra
12
12
 
13
13
  it "starts" do
14
14
  jetty_params = {
15
- :jetty_home => File.expand_path("#{File.dirname(__FILE__)}/../../jetty")
15
+ :jetty_home => File.expand_path("#{File.dirname(__FILE__)}/../../jetty"),
16
+ :startup_wait => 30
16
17
  }
17
18
  Jettywrapper.configure(jetty_params)
18
19
  ts = Jettywrapper.instance
@@ -22,7 +23,6 @@ module Hydra
22
23
  ts.logger.debug "Jetty started from rspec at #{ts.pid}"
23
24
  pid_from_file = File.open( ts.pid_path ) { |f| f.gets.to_i }
24
25
  ts.pid.should eql(pid_from_file)
25
- sleep 30 # give jetty time to start
26
26
 
27
27
  # Can we connect to solr?
28
28
  require 'net/http'
@@ -34,14 +34,14 @@ module Hydra
34
34
 
35
35
  it "won't start if it's already running" do
36
36
  jetty_params = {
37
- :jetty_home => File.expand_path("#{File.dirname(__FILE__)}/../../jetty")
37
+ :jetty_home => File.expand_path("#{File.dirname(__FILE__)}/../../jetty"),
38
+ :startup_wait => 30
38
39
  }
39
40
  Jettywrapper.configure(jetty_params)
40
41
  ts = Jettywrapper.instance
41
42
  ts.logger.debug "Stopping jetty from rspec."
42
43
  ts.stop
43
44
  ts.start
44
- sleep 30
45
45
  ts.logger.debug "Jetty started from rspec at #{ts.pid}"
46
46
  response = Net::HTTP.get_response(URI.parse("http://localhost:8888/solr/development/admin/"))
47
47
  response.code.should eql("200")
@@ -52,13 +52,13 @@ module Hydra
52
52
  it "can check to see whether a port is already in use" do
53
53
  params = {
54
54
  :jetty_home => File.expand_path("#{File.dirname(__FILE__)}/../../jetty"),
55
- :jetty_port => '9999'
55
+ :jetty_port => '9999',
56
+ :startup_wait => 30
56
57
  }
57
58
  Jettywrapper.stop(params)
58
59
  sleep 10
59
60
  Jettywrapper.is_port_in_use?(params[:jetty_port]).should eql(false)
60
61
  Jettywrapper.start(params)
61
- sleep 30
62
62
  Jettywrapper.is_port_in_use?(params[:jetty_port]).should eql(true)
63
63
  Jettywrapper.stop(params)
64
64
  end
@@ -66,13 +66,13 @@ module Hydra
66
66
  it "raises an error if you try to start a jetty that is already running" do
67
67
  jetty_params = {
68
68
  :jetty_home => File.expand_path("#{File.dirname(__FILE__)}/../../jetty"),
69
- :jetty_port => '8983'
69
+ :jetty_port => '8983',
70
+ :startup_wait => 30
70
71
  }
71
72
  ts = Jettywrapper.configure(jetty_params)
72
73
  ts.stop
73
74
  ts.pid_file?.should eql(false)
74
75
  ts.start
75
- sleep 30
76
76
  lambda{ ts.start }.should raise_exception
77
77
  ts.stop
78
78
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jettywrapper
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 2
9
- - 0
10
- version: 1.2.0
9
+ - 1
10
+ version: 1.2.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bess Sadler
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-29 00:00:00 -06:00
18
+ date: 2012-01-11 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency