jettywrapper 1.2.0 → 1.2.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.
@@ -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