jettywrapper 1.8.2 → 1.8.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +11 -3
- data/Gemfile +2 -1
- data/LICENSE +1086 -0
- data/gemfiles/rails4.1.gemfile +10 -0
- data/gemfiles/rails4.2.beta.gemfile +10 -0
- data/jettywrapper.gemspec +1 -1
- data/lib/jettywrapper.rb +60 -59
- data/lib/jettywrapper/version.rb +1 -1
- metadata +7 -3
data/jettywrapper.gemspec
CHANGED
@@ -14,8 +14,8 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.description = %q{Spin up a jetty instance (e.g., the one at https://github.com/projecthydra/hydra-jetty) and wrap test in it. This lets us run tests against a real copy of solr and fedora.}
|
15
15
|
s.files = `git ls-files`.split("\n")
|
16
16
|
s.test_files = `git ls-files -- {spec}/*`.split("\n")
|
17
|
-
# s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
17
|
s.require_paths = ["lib"]
|
18
|
+
s.license = 'APACHE2'
|
19
19
|
|
20
20
|
s.required_rubygems_version = ">= 1.3.6"
|
21
21
|
|
data/lib/jettywrapper.rb
CHANGED
@@ -4,6 +4,7 @@ require 'shellwords'
|
|
4
4
|
require 'socket'
|
5
5
|
require 'timeout'
|
6
6
|
require 'childprocess'
|
7
|
+
require 'active_support/benchmarkable'
|
7
8
|
require 'active_support/core_ext/hash'
|
8
9
|
require 'erb'
|
9
10
|
require 'yaml'
|
@@ -14,12 +15,12 @@ Dir[File.expand_path(File.join(File.dirname(__FILE__),"tasks/*.rake"))].each { |
|
|
14
15
|
|
15
16
|
# Jettywrapper is a Singleton class, so you can only create one jetty instance at a time.
|
16
17
|
class Jettywrapper
|
17
|
-
|
18
|
+
|
18
19
|
include Singleton
|
19
20
|
include ActiveSupport::Benchmarkable
|
20
|
-
|
21
|
-
|
22
|
-
attr_accessor :jetty_home # Jetty's home directory
|
21
|
+
|
22
|
+
|
23
|
+
attr_accessor :jetty_home # Jetty's home directory
|
23
24
|
attr_accessor :port # Jetty's port. Default is 8888. Note that attribute is named port, but params passed in expect :jetty_port
|
24
25
|
attr_accessor :startup_wait # How many seconds to wait for jetty to spin up. Default is 5.
|
25
26
|
attr_accessor :quiet # true (default) to reduce Jetty's output
|
@@ -27,14 +28,14 @@ class Jettywrapper
|
|
27
28
|
attr_accessor :base_path # The root of the application. Used for determining where log files and PID files should go.
|
28
29
|
attr_accessor :java_opts # Options to pass to java (ex. ["-Xmx512mb", "-Xms128mb"])
|
29
30
|
attr_accessor :jetty_opts # Options to pass to jetty (ex. ["etc/my_jetty.xml", "etc/other.xml"] as in http://wiki.eclipse.org/Jetty/Reference/jetty.xml_usage
|
30
|
-
|
31
|
+
|
31
32
|
# configure the singleton with some defaults
|
32
33
|
def initialize(params = {})
|
33
34
|
self.base_path = self.class.app_root
|
34
35
|
end
|
35
36
|
|
36
|
-
|
37
|
-
# Methods inside of the class << self block can be called directly on Jettywrapper, as class methods.
|
37
|
+
|
38
|
+
# Methods inside of the class << self block can be called directly on Jettywrapper, as class methods.
|
38
39
|
# Methods outside the class << self block must be called on Jettywrapper.instance, as instance methods.
|
39
40
|
class << self
|
40
41
|
|
@@ -68,10 +69,10 @@ class Jettywrapper
|
|
68
69
|
system "curl -L #{self.url} -o #{zip_file}"
|
69
70
|
abort "Unable to download jetty from #{self.url}" unless $?.success?
|
70
71
|
end
|
71
|
-
|
72
|
+
|
72
73
|
def unzip
|
73
74
|
download unless File.exists? zip_file
|
74
|
-
logger.info "Unpacking
|
75
|
+
logger.info "Unpacking #{zip_file}..."
|
75
76
|
tmp_save_dir = File.join tmp_dir, 'jetty_generator'
|
76
77
|
system "unzip -d #{tmp_save_dir} -qo #{zip_file}"
|
77
78
|
abort "Unable to unzip #{zip_file} into tmp_save_dir/" unless $?.success?
|
@@ -87,8 +88,8 @@ class Jettywrapper
|
|
87
88
|
|
88
89
|
def expanded_zip_dir(tmp_save_dir)
|
89
90
|
# This old way is more specific, but won't work for blacklight-jetty
|
90
|
-
#expanded_dir = Dir[File.join(tmp_save_dir, "hydra-jetty-*")].first
|
91
|
-
Dir[File.join(tmp_save_dir, "*")].first
|
91
|
+
#expanded_dir = Dir[File.join(tmp_save_dir, "hydra-jetty-*")].first
|
92
|
+
Dir[File.join(tmp_save_dir, "*")].first
|
92
93
|
end
|
93
94
|
|
94
95
|
def clean
|
@@ -112,25 +113,25 @@ class Jettywrapper
|
|
112
113
|
|
113
114
|
def env
|
114
115
|
@env ||= begin
|
115
|
-
case
|
116
|
-
when ENV['JETTYWRAPPER_ENV']
|
116
|
+
case
|
117
|
+
when ENV['JETTYWRAPPER_ENV']
|
117
118
|
ENV['JETTYWRAPPER_ENV']
|
118
119
|
when defined?(Rails) && Rails.respond_to?(:env)
|
119
120
|
Rails.env
|
120
|
-
when ENV['RAILS_ENV']
|
121
|
-
ENV['RAILS_ENV']
|
122
|
-
when ENV['environment']
|
123
|
-
ENV['environment']
|
121
|
+
when ENV['RAILS_ENV']
|
122
|
+
ENV['RAILS_ENV']
|
123
|
+
when ENV['environment']
|
124
|
+
ENV['environment']
|
124
125
|
else
|
125
126
|
default_environment
|
126
127
|
end
|
127
128
|
end
|
128
129
|
end
|
129
|
-
|
130
|
+
|
130
131
|
def default_environment
|
131
132
|
'development'
|
132
133
|
end
|
133
|
-
|
134
|
+
|
134
135
|
def load_config(config_name = env)
|
135
136
|
@env = config_name
|
136
137
|
jetty_file = "#{app_root}/config/jetty.yml"
|
@@ -159,15 +160,15 @@ class Jettywrapper
|
|
159
160
|
config = jetty_yml.with_indifferent_access
|
160
161
|
config[config_name] || config['default'.freeze]
|
161
162
|
end
|
162
|
-
|
163
163
|
|
164
|
-
|
164
|
+
|
165
|
+
# Set the jetty parameters. It accepts a Hash of symbols.
|
165
166
|
# @param [Hash<Symbol>] params
|
166
167
|
# :jetty_home Required. Jetty's home direcotry
|
167
168
|
# :jetty_port Jetty's port. Default is 8888. Note that attribute is named port, but params passed in expect :jetty_port
|
168
169
|
# :startup_wait How many seconds to wait for jetty to spin up. Default is 5. If jetty doesn't finish spinning up, tests can fail because they can't reach jetty.
|
169
170
|
# :solr_home Solr's home directory. Default is jetty_home/solr
|
170
|
-
# :quiet Keep True(default) to reduce jetty's output
|
171
|
+
# :quiet Keep True(default) to reduce jetty's output
|
171
172
|
# :java_opts options to pass to the jvm (ex. ["-Xmx512mb", "-Xms128mb"])
|
172
173
|
# :jetty_opts options to pass to jetty (ex. ["etc/my_jetty.xml", "etc/other.xml"] as in http://wiki.eclipse.org/Jetty/Reference/jetty.xml_usage
|
173
174
|
def configure(params = {})
|
@@ -183,25 +184,25 @@ class Jettywrapper
|
|
183
184
|
jetty_server.jetty_opts = params[:jetty_opts] || []
|
184
185
|
return jetty_server
|
185
186
|
end
|
186
|
-
|
187
|
-
|
187
|
+
|
188
|
+
|
188
189
|
# Wrap the tests. Startup jetty, yield to the test task, capture any errors, shutdown
|
189
|
-
# jetty, and return the error.
|
190
|
+
# jetty, and return the error.
|
190
191
|
# @example Using this method in a rake task
|
191
192
|
# require 'jettywrapper'
|
192
193
|
# desc "Spin up jetty and run tests against it"
|
193
194
|
# task :newtest do
|
194
|
-
# jetty_params = {
|
195
|
-
# :jetty_home => "/path/to/jetty",
|
196
|
-
# :quiet => false,
|
197
|
-
# :jetty_port => 8983,
|
195
|
+
# jetty_params = {
|
196
|
+
# :jetty_home => "/path/to/jetty",
|
197
|
+
# :quiet => false,
|
198
|
+
# :jetty_port => 8983,
|
198
199
|
# :startup_wait => 30,
|
199
200
|
# :jetty_opts => "/etc/jetty.xml"
|
200
201
|
# }
|
201
|
-
# error = Jettywrapper.wrap(jetty_params) do
|
202
|
-
# Rake::Task["rake:spec"].invoke
|
203
|
-
# Rake::Task["rake:cucumber"].invoke
|
204
|
-
# end
|
202
|
+
# error = Jettywrapper.wrap(jetty_params) do
|
203
|
+
# Rake::Task["rake:spec"].invoke
|
204
|
+
# Rake::Task["rake:cucumber"].invoke
|
205
|
+
# end
|
205
206
|
# raise "test failures: #{error}" if error
|
206
207
|
# end
|
207
208
|
def wrap(params)
|
@@ -223,42 +224,42 @@ class Jettywrapper
|
|
223
224
|
|
224
225
|
return error
|
225
226
|
end
|
226
|
-
|
227
|
+
|
227
228
|
# Convenience method for configuring and starting jetty with one command
|
228
229
|
# @param [Hash] params: The configuration to use for starting jetty
|
229
|
-
# @example
|
230
|
+
# @example
|
230
231
|
# Jettywrapper.start(:jetty_home => '/path/to/jetty', :jetty_port => '8983')
|
231
232
|
def start(params)
|
232
233
|
Jettywrapper.configure(params)
|
233
234
|
Jettywrapper.instance.start
|
234
235
|
return Jettywrapper.instance
|
235
236
|
end
|
236
|
-
|
237
|
+
|
237
238
|
# Convenience method for configuring and starting jetty with one command. Note
|
238
|
-
# that for stopping, only the :jetty_home value is required (including other values won't
|
239
|
-
# hurt anything, though).
|
239
|
+
# that for stopping, only the :jetty_home value is required (including other values won't
|
240
|
+
# hurt anything, though).
|
240
241
|
# @param [Hash] params: The jetty_home to use for stopping jetty
|
241
242
|
# @return [Jettywrapper.instance]
|
242
|
-
# @example
|
243
|
+
# @example
|
243
244
|
# Jettywrapper.stop_with_params(:jetty_home => '/path/to/jetty')
|
244
245
|
def stop(params)
|
245
246
|
Jettywrapper.configure(params)
|
246
247
|
Jettywrapper.instance.stop
|
247
248
|
return Jettywrapper.instance
|
248
249
|
end
|
249
|
-
|
250
|
+
|
250
251
|
# Determine whether the jetty at the given jetty_home is running
|
251
252
|
# @param [Hash] params: :jetty_home is required. Which jetty do you want to check the status of?
|
252
253
|
# @return [Boolean]
|
253
254
|
# @example
|
254
255
|
# Jettywrapper.is_jetty_running?(:jetty_home => '/path/to/jetty')
|
255
|
-
def is_jetty_running?(params)
|
256
|
+
def is_jetty_running?(params)
|
256
257
|
Jettywrapper.configure(params)
|
257
258
|
pid = Jettywrapper.instance.pid
|
258
259
|
return false unless pid
|
259
260
|
true
|
260
261
|
end
|
261
|
-
|
262
|
+
|
262
263
|
# Return the pid of the specified jetty, or return nil if it isn't running
|
263
264
|
# @param [Hash] params: :jetty_home is required.
|
264
265
|
# @return [Fixnum] or [nil]
|
@@ -270,7 +271,7 @@ class Jettywrapper
|
|
270
271
|
return nil unless pid
|
271
272
|
pid
|
272
273
|
end
|
273
|
-
|
274
|
+
|
274
275
|
# Check to see if the port is open so we can raise an error if we have a conflict
|
275
276
|
# @param [Fixnum] port the port to check
|
276
277
|
# @return [Boolean]
|
@@ -294,8 +295,8 @@ class Jettywrapper
|
|
294
295
|
|
295
296
|
return false
|
296
297
|
end
|
297
|
-
|
298
|
-
# Check to see if the pid is actually running. This only works on unix.
|
298
|
+
|
299
|
+
# Check to see if the pid is actually running. This only works on unix.
|
299
300
|
def is_pid_running?(pid)
|
300
301
|
begin
|
301
302
|
return Process.getpgid(pid) != -1
|
@@ -307,7 +308,7 @@ class Jettywrapper
|
|
307
308
|
def logger=(logger)
|
308
309
|
@@logger = logger
|
309
310
|
end
|
310
|
-
|
311
|
+
|
311
312
|
# If ::Rails.logger is defined and is not nil, it will be returned.
|
312
313
|
# If no logger has been defined, a new STDOUT Logger will be created.
|
313
314
|
def logger
|
@@ -315,12 +316,12 @@ class Jettywrapper
|
|
315
316
|
end
|
316
317
|
|
317
318
|
end #end of class << self
|
318
|
-
|
319
|
+
|
319
320
|
def logger
|
320
321
|
self.class.logger
|
321
322
|
end
|
322
|
-
|
323
|
-
# What command is being run to invoke jetty?
|
323
|
+
|
324
|
+
# What command is being run to invoke jetty?
|
324
325
|
def jetty_command
|
325
326
|
["java", java_variables, java_opts, "-jar", "start.jar", jetty_opts].flatten
|
326
327
|
end
|
@@ -330,8 +331,8 @@ class Jettywrapper
|
|
330
331
|
"-Dsolr.solr.home=#{Shellwords.escape(@solr_home)}"]
|
331
332
|
end
|
332
333
|
|
333
|
-
# Start the jetty server. Check the pid file to see if it is running already,
|
334
|
-
# and stop it if so. After you start jetty, write the PID to a file.
|
334
|
+
# Start the jetty server. Check the pid file to see if it is running already,
|
335
|
+
# and stop it if so. After you start jetty, write the PID to a file.
|
335
336
|
# This is the instance start method. It must be called on Jettywrapper.instance
|
336
337
|
# You're probably better off using Jettywrapper.start(:jetty_home => "/path/to/jetty")
|
337
338
|
# @example
|
@@ -342,10 +343,10 @@ class Jettywrapper
|
|
342
343
|
logger.debug "Starting jetty with these values: "
|
343
344
|
logger.debug "jetty_home: #{@jetty_home}"
|
344
345
|
logger.debug "jetty_command: #{jetty_command.join(' ')}"
|
345
|
-
|
346
|
+
|
346
347
|
# Check to see if we can start.
|
347
348
|
# 1. If there is a pid, check to see if it is really running
|
348
|
-
# 2. Check to see if anything is blocking the port we want to use
|
349
|
+
# 2. Check to see if anything is blocking the port we want to use
|
349
350
|
if pid
|
350
351
|
if Jettywrapper.is_pid_running?(pid)
|
351
352
|
raise("Server is already running with PID #{pid}")
|
@@ -379,12 +380,12 @@ class Jettywrapper
|
|
379
380
|
begin
|
380
381
|
Timeout::timeout(startup_wait) do
|
381
382
|
sleep 1 until (Jettywrapper.is_port_in_use? self.port)
|
382
|
-
end
|
383
|
+
end
|
383
384
|
rescue Timeout::Error
|
384
385
|
logger.warn "Waited #{startup_wait} seconds for jetty to start, but it is not yet listening on port #{self.port}. Continuing anyway."
|
385
386
|
end
|
386
387
|
end
|
387
|
-
|
388
|
+
|
388
389
|
def process
|
389
390
|
@process ||= begin
|
390
391
|
process = ChildProcess.build(*jetty_command)
|
@@ -411,7 +412,7 @@ class Jettywrapper
|
|
411
412
|
# Jettywrapper.configure(params)
|
412
413
|
# Jettywrapper.instance.stop
|
413
414
|
# return Jettywrapper.instance
|
414
|
-
def stop
|
415
|
+
def stop
|
415
416
|
logger.debug "Instance stop method called for pid '#{pid}'"
|
416
417
|
if pid
|
417
418
|
if @process
|
@@ -426,7 +427,7 @@ class Jettywrapper
|
|
426
427
|
end
|
427
428
|
end
|
428
429
|
end
|
429
|
-
|
430
|
+
|
430
431
|
|
431
432
|
# The fully qualified path to the pid_file
|
432
433
|
def pid_path
|
@@ -438,7 +439,7 @@ class Jettywrapper
|
|
438
439
|
def pid_file
|
439
440
|
jetty_home_to_pid_file(@jetty_home)
|
440
441
|
end
|
441
|
-
|
442
|
+
|
442
443
|
# Take the @jetty_home value and transform it into a legal filename
|
443
444
|
# @return [String] the name of the pid_file
|
444
445
|
# @example
|
@@ -455,7 +456,7 @@ class Jettywrapper
|
|
455
456
|
def pid_dir
|
456
457
|
File.expand_path(File.join(base_path,'tmp','pids'))
|
457
458
|
end
|
458
|
-
|
459
|
+
|
459
460
|
# Check to see if there is a pid file already
|
460
461
|
# @return true if the file exists, otherwise false
|
461
462
|
def pid_file?
|
data/lib/jettywrapper/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jettywrapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.
|
4
|
+
version: 1.8.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Beer
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-10-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: logger
|
@@ -139,10 +139,13 @@ files:
|
|
139
139
|
- CONTRIBUTING.md
|
140
140
|
- Gemfile
|
141
141
|
- History.txt
|
142
|
+
- LICENSE
|
142
143
|
- README.textile
|
143
144
|
- Rakefile
|
144
145
|
- TODO.txt
|
145
146
|
- config/jetty.yml
|
147
|
+
- gemfiles/rails4.1.gemfile
|
148
|
+
- gemfiles/rails4.2.beta.gemfile
|
146
149
|
- jettywrapper.gemspec
|
147
150
|
- lib/jettywrapper.rb
|
148
151
|
- lib/jettywrapper/version.rb
|
@@ -152,7 +155,8 @@ files:
|
|
152
155
|
- spec/spec_helper.rb
|
153
156
|
- tasks/jettywrapper.rake
|
154
157
|
homepage: https://github.com/projecthydra/jettywrapper
|
155
|
-
licenses:
|
158
|
+
licenses:
|
159
|
+
- APACHE2
|
156
160
|
metadata: {}
|
157
161
|
post_install_message:
|
158
162
|
rdoc_options: []
|