jettywrapper 1.3.2 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/.gitmodules +0 -3
- data/.travis.yml +8 -0
- data/History.txt +3 -0
- data/README.textile +8 -0
- data/Rakefile +7 -9
- data/config/jetty.yml +1 -1
- data/jettywrapper.gemspec +2 -5
- data/lib/jettywrapper.rb +74 -15
- data/lib/jettywrapper/version.rb +1 -1
- data/lib/tasks/jettywrapper.rake +14 -0
- data/spec/lib/jettywrapper_integration_spec.rb +23 -17
- data/spec/lib/jettywrapper_spec.rb +111 -24
- data/spec/spec_helper.rb +2 -4
- metadata +127 -167
- data/.rvmrc +0 -1
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0ec0896737d3b6280dd860cf58a545b7d2981a5f
|
4
|
+
data.tar.gz: c07c9985c43d31605ad61466649cdecb62369995
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cea4d28ccafdbc46d26899bc3b28dab6e0880e3d4108e7d78542407e8d1ff5d96ff06305e9db96ef139f887ac4d1a76140a05f465a0c9a97fe3f03e3fa4b0b99
|
7
|
+
data.tar.gz: 49e83df77c93fdd816cd56cc2fba3d98440a9fe20ea9b5d43761803957fb3df9002a854733e9f9b1c7838173cce718afa28b90a7f7c9724a007ffe959850e506
|
data/.gitignore
CHANGED
data/.gitmodules
CHANGED
data/.travis.yml
ADDED
data/History.txt
CHANGED
data/README.textile
CHANGED
@@ -1,8 +1,16 @@
|
|
1
1
|
h1. jettywrapper
|
2
2
|
|
3
|
+
|
3
4
|
This gem is designed to make it easier to integrate a jetty servlet container into a rails project.
|
4
5
|
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.
|
5
6
|
|
7
|
+
jettywrapper supports
|
8
|
+
ruby 2.0.0
|
9
|
+
ruby 1.9.3
|
10
|
+
ruby 1.8.7
|
11
|
+
ree 1.8.7
|
12
|
+
jruby 1.6.6+
|
13
|
+
|
6
14
|
h2. Configuring Jettywrapper
|
7
15
|
|
8
16
|
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.
|
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'bundler'
|
3
|
-
require '
|
3
|
+
require 'rspec/core/rake_task'
|
4
4
|
require 'yard'
|
5
5
|
|
6
6
|
Bundler::GemHelper.install_tasks
|
@@ -15,15 +15,12 @@ rescue Bundler::BundlerError => e
|
|
15
15
|
exit e.status_code
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
spec.libs << 'lib' << 'spec'
|
20
|
-
spec.spec_files = FileList['spec/**/*_spec.rb']
|
18
|
+
RSpec::Core::RakeTask.new(:spec => 'jetty:clean') do |spec|
|
19
|
+
# spec.libs << 'lib' << 'spec'
|
20
|
+
# spec.spec_files = FileList['spec/**/*_spec.rb']
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
spec.libs << 'lib' << 'spec'
|
25
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
26
|
-
|
23
|
+
RSpec::Core::RakeTask.new(:coverage) do |spec|
|
27
24
|
ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
|
28
25
|
ENV['COVERAGE'] = 'true' unless ruby_engine == 'jruby'
|
29
26
|
|
@@ -57,4 +54,5 @@ rescue LoadError
|
|
57
54
|
end
|
58
55
|
end
|
59
56
|
|
60
|
-
task :default => [:coverage, :doc]
|
57
|
+
#task :default => [:coverage, :doc]
|
58
|
+
task :default => [:spec]
|
data/config/jetty.yml
CHANGED
data/jettywrapper.gemspec
CHANGED
@@ -25,14 +25,11 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.add_dependency "i18n"
|
26
26
|
s.add_dependency "activesupport", ">=3.0.0"
|
27
27
|
|
28
|
-
|
29
|
-
# It will not add these as dependencies if you require lyber-core for other projects
|
30
|
-
s.add_development_dependency "rspec", "< 2.0" # We're not ready to upgrade to rspec 2
|
31
|
-
s.add_development_dependency 'mocha'
|
28
|
+
s.add_development_dependency "rspec"
|
32
29
|
s.add_development_dependency 'rake'
|
33
30
|
|
34
31
|
|
35
|
-
s.add_development_dependency 'yard'
|
32
|
+
s.add_development_dependency 'yard'#, '0.6.5' # Yard > 0.6.5 won't generate docs.
|
36
33
|
# I don't know why & don't have time to
|
37
34
|
# debug it right now
|
38
35
|
|
data/lib/jettywrapper.rb
CHANGED
@@ -7,6 +7,7 @@ require 'timeout'
|
|
7
7
|
require 'childprocess'
|
8
8
|
require 'active_support/core_ext/hash'
|
9
9
|
require 'erb'
|
10
|
+
require 'yaml'
|
10
11
|
|
11
12
|
Dir[File.expand_path(File.join(File.dirname(__FILE__),"tasks/*.rake"))].each { |ext| load ext } if defined?(Rake)
|
12
13
|
|
@@ -16,6 +17,8 @@ class Jettywrapper
|
|
16
17
|
|
17
18
|
include Singleton
|
18
19
|
include Loggable
|
20
|
+
include ActiveSupport::Benchmarkable
|
21
|
+
|
19
22
|
|
20
23
|
attr_accessor :jetty_home # Jetty's home directory
|
21
24
|
attr_accessor :port # Jetty's port. Default is 8888. Note that attribute is named port, but params passed in expect :jetty_port
|
@@ -29,7 +32,6 @@ class Jettywrapper
|
|
29
32
|
# configure the singleton with some defaults
|
30
33
|
def initialize(params = {})
|
31
34
|
self.base_path = self.class.app_root
|
32
|
-
logger.debug 'Initializing jettywrapper'
|
33
35
|
end
|
34
36
|
|
35
37
|
|
@@ -37,6 +39,62 @@ class Jettywrapper
|
|
37
39
|
# Methods outside the class << self block must be called on Jettywrapper.instance, as instance methods.
|
38
40
|
class << self
|
39
41
|
|
42
|
+
def url=(url)
|
43
|
+
@url = url
|
44
|
+
end
|
45
|
+
|
46
|
+
def url
|
47
|
+
@url ||= defined?(ZIP_URL) ? ZIP_URL : 'https://github.com/projecthydra/hydra-jetty/archive/new-solr-schema.zip'
|
48
|
+
@url
|
49
|
+
end
|
50
|
+
|
51
|
+
def tmp_dir=(dir)
|
52
|
+
@tmp_dir = dir
|
53
|
+
end
|
54
|
+
|
55
|
+
def tmp_dir
|
56
|
+
@tmp_dir ||= 'tmp'
|
57
|
+
end
|
58
|
+
|
59
|
+
def zip_file
|
60
|
+
File.join tmp_dir, url.split('/').last
|
61
|
+
end
|
62
|
+
|
63
|
+
def jetty_dir
|
64
|
+
'jetty'
|
65
|
+
end
|
66
|
+
|
67
|
+
def download(url = 'https://github.com/projecthydra/hydra-jetty/archive/new-solr-schema.zip')
|
68
|
+
self.url = url
|
69
|
+
logger.info "Downloading jetty..."
|
70
|
+
FileUtils.mkdir tmp_dir unless File.exists? tmp_dir
|
71
|
+
system "curl -L #{url} -o #{zip_file}"
|
72
|
+
abort "Unable to download jetty from #{url}" unless $?.success?
|
73
|
+
end
|
74
|
+
|
75
|
+
def unzip
|
76
|
+
download unless File.exists? zip_file
|
77
|
+
logger.info "Unpacking jetty..."
|
78
|
+
tmp_save_dir = File.join tmp_dir, 'jetty_generator'
|
79
|
+
system "unzip -d #{tmp_save_dir} -qo #{zip_file}"
|
80
|
+
abort "Unable to unzip #{zip_file} into tmp_save_dir/" unless $?.success?
|
81
|
+
|
82
|
+
expanded_dir = expanded_zip_dir(tmp_save_dir)
|
83
|
+
system "mv #{expanded_dir} #{jetty_dir}"
|
84
|
+
abort "Unable to move #{expanded_dir} into #{jetty_dir}/" unless $?.success?
|
85
|
+
end
|
86
|
+
|
87
|
+
def expanded_zip_dir(tmp_save_dir)
|
88
|
+
# This old way is more specific, but won't work for blacklight-jetty
|
89
|
+
#expanded_dir = Dir[File.join(tmp_save_dir, "hydra-jetty-*")].first
|
90
|
+
Dir[File.join(tmp_save_dir, "*")].first
|
91
|
+
end
|
92
|
+
|
93
|
+
def clean
|
94
|
+
system "rm -rf #{jetty_dir}"
|
95
|
+
unzip
|
96
|
+
end
|
97
|
+
|
40
98
|
def reset_config
|
41
99
|
@app_root = nil
|
42
100
|
end
|
@@ -146,7 +204,7 @@ class Jettywrapper
|
|
146
204
|
yield
|
147
205
|
rescue
|
148
206
|
error = $!
|
149
|
-
|
207
|
+
logger.error "*** Error starting jetty: #{error}"
|
150
208
|
ensure
|
151
209
|
# puts "stopping jetty server"
|
152
210
|
jetty_server.stop
|
@@ -261,7 +319,6 @@ class Jettywrapper
|
|
261
319
|
def start
|
262
320
|
logger.debug "Starting jetty with these values: "
|
263
321
|
logger.debug "jetty_home: #{@jetty_home}"
|
264
|
-
logger.debug "solr_home: #{@solr_home}"
|
265
322
|
logger.debug "jetty_command: #{jetty_command.join(' ')}"
|
266
323
|
|
267
324
|
# Check to see if we can start.
|
@@ -278,19 +335,21 @@ class Jettywrapper
|
|
278
335
|
if Jettywrapper.is_port_in_use?(self.port)
|
279
336
|
raise("Port #{self.port} is already in use.")
|
280
337
|
end
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
338
|
+
benchmark "Started jetty" do
|
339
|
+
Dir.chdir(@jetty_home) do
|
340
|
+
process.start
|
341
|
+
end
|
342
|
+
FileUtils.makedirs(pid_dir) unless File.directory?(pid_dir)
|
343
|
+
begin
|
344
|
+
f = File.new(pid_path, "w")
|
345
|
+
rescue Errno::ENOENT, Errno::EACCES
|
346
|
+
f = File.new(File.join(base_path,'tmp',pid_file),"w")
|
347
|
+
end
|
348
|
+
f.puts "#{process.pid}"
|
349
|
+
f.close
|
350
|
+
logger.debug "Wrote pid file to #{pid_path} with value #{process.pid}"
|
351
|
+
startup_wait!
|
289
352
|
end
|
290
|
-
f.puts "#{process.pid}"
|
291
|
-
f.close
|
292
|
-
logger.debug "Wrote pid file to #{pid_path} with value #{process.pid}"
|
293
|
-
startup_wait!
|
294
353
|
end
|
295
354
|
|
296
355
|
# Wait for the jetty server to start and begin listening for requests
|
data/lib/jettywrapper/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
GEMVERSION = "1.
|
1
|
+
GEMVERSION = "1.4.0"
|
data/lib/tasks/jettywrapper.rake
CHANGED
@@ -2,6 +2,20 @@
|
|
2
2
|
require 'yaml'
|
3
3
|
|
4
4
|
namespace :jetty do
|
5
|
+
JETTY_DIR = 'jetty'
|
6
|
+
|
7
|
+
desc "download the jetty zip file"
|
8
|
+
task :download do
|
9
|
+
Jettywrapper.download
|
10
|
+
end
|
11
|
+
|
12
|
+
task :unzip do
|
13
|
+
Jettywrapper.unzip
|
14
|
+
end
|
15
|
+
|
16
|
+
task :clean do
|
17
|
+
Jettywrapper.clean
|
18
|
+
end
|
5
19
|
|
6
20
|
desc "Return the status of jetty"
|
7
21
|
task :status => :environment do
|
@@ -9,12 +9,14 @@ module Hydra
|
|
9
9
|
context "integration" do
|
10
10
|
before(:all) do
|
11
11
|
$stderr.reopen("/dev/null", "w")
|
12
|
+
Jettywrapper.logger.level=3
|
12
13
|
end
|
13
14
|
|
14
15
|
it "starts" do
|
15
16
|
jetty_params = {
|
16
17
|
:jetty_home => File.expand_path("#{File.dirname(__FILE__)}/../../jetty"),
|
17
|
-
:startup_wait =>
|
18
|
+
:startup_wait => 45,
|
19
|
+
:java_opts => ["-Xmx256m", '-XX:MaxPermSize=256m'],
|
18
20
|
:jetty_port => TEST_JETTY_PORTS.first
|
19
21
|
}
|
20
22
|
Jettywrapper.configure(jetty_params)
|
@@ -28,7 +30,7 @@ module Hydra
|
|
28
30
|
|
29
31
|
# Can we connect to solr?
|
30
32
|
require 'net/http'
|
31
|
-
response = Net::HTTP.get_response(URI.parse("http://localhost:#{jetty_params[:jetty_port]}/solr/
|
33
|
+
response = Net::HTTP.get_response(URI.parse("http://localhost:#{jetty_params[:jetty_port]}/solr/"))
|
32
34
|
response.code.should eql("200")
|
33
35
|
ts.stop
|
34
36
|
|
@@ -37,7 +39,8 @@ module Hydra
|
|
37
39
|
it "won't start if it's already running" do
|
38
40
|
jetty_params = {
|
39
41
|
:jetty_home => File.expand_path("#{File.dirname(__FILE__)}/../../jetty"),
|
40
|
-
:startup_wait =>
|
42
|
+
:startup_wait => 45,
|
43
|
+
:java_opts => ["-Xmx256m", '-XX:MaxPermSize=256m'],
|
41
44
|
:jetty_port => TEST_JETTY_PORTS.first
|
42
45
|
}
|
43
46
|
Jettywrapper.configure(jetty_params)
|
@@ -46,24 +49,27 @@ module Hydra
|
|
46
49
|
ts.stop
|
47
50
|
ts.start
|
48
51
|
ts.logger.debug "Jetty started from rspec at #{ts.pid}"
|
49
|
-
response = Net::HTTP.get_response(URI.parse("http://localhost:#{jetty_params[:jetty_port]}/solr/
|
52
|
+
response = Net::HTTP.get_response(URI.parse("http://localhost:#{jetty_params[:jetty_port]}/solr/"))
|
50
53
|
response.code.should eql("200")
|
51
54
|
lambda { ts.start }.should raise_exception(/Server is already running/)
|
52
55
|
ts.stop
|
53
56
|
end
|
54
57
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
58
|
+
describe "is_port_in_use?" do
|
59
|
+
describe "when a server is running on the port" do
|
60
|
+
before do
|
61
|
+
@s = TCPServer.new('127.0.0.1', TEST_JETTY_PORTS.last)
|
62
|
+
end
|
63
|
+
after do
|
64
|
+
@s.close
|
65
|
+
end
|
66
|
+
it "can check to see whether a port is already in use" do
|
67
|
+
Jettywrapper.is_port_in_use?(TEST_JETTY_PORTS.last).should eql(true)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
it "should be false when nothing is running" do
|
71
|
+
Jettywrapper.is_port_in_use?(TEST_JETTY_PORTS.last).should eql(false)
|
72
|
+
end
|
67
73
|
end
|
68
74
|
|
69
75
|
it "raises an error if you try to start a jetty that is already running" do
|
@@ -86,7 +92,7 @@ module Hydra
|
|
86
92
|
:jetty_port => TEST_JETTY_PORTS.first,
|
87
93
|
:startup_wait => 30
|
88
94
|
}
|
89
|
-
|
95
|
+
socket = TCPServer.new(TEST_JETTY_PORTS.first)
|
90
96
|
begin
|
91
97
|
ts = Jettywrapper.configure(jetty_params)
|
92
98
|
ts.stop
|
@@ -11,9 +11,98 @@ require 'rubygems'
|
|
11
11
|
:jetty_port => TEST_JETTY_PORTS.first,
|
12
12
|
:solr_home => "/path/to/solr",
|
13
13
|
:startup_wait => 0,
|
14
|
-
:java_opts => ["-
|
14
|
+
:java_opts => ["-Xmx256m"],
|
15
15
|
:jetty_opts => ["/path/to/jetty_xml", "/path/to/other_jetty_xml"]
|
16
16
|
}
|
17
|
+
|
18
|
+
Jettywrapper.logger.level=3
|
19
|
+
end
|
20
|
+
|
21
|
+
context "downloading" do
|
22
|
+
context "with default file" do
|
23
|
+
it "should download the zip file" do
|
24
|
+
Jettywrapper.should_receive(:system).with('curl -L https://github.com/projecthydra/hydra-jetty/archive/new-solr-schema.zip -o tmp/new-solr-schema.zip').and_return(system ('true'))
|
25
|
+
Jettywrapper.download
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "specifying the file" do
|
30
|
+
it "should download the zip file" do
|
31
|
+
Jettywrapper.should_receive(:system).with('curl -L http://example.co/file.zip -o tmp/file.zip').and_return(system ('true'))
|
32
|
+
Jettywrapper.download('http://example.co/file.zip')
|
33
|
+
Jettywrapper.url.should == 'http://example.co/file.zip'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "unzip" do
|
39
|
+
before do
|
40
|
+
Jettywrapper.url = nil
|
41
|
+
end
|
42
|
+
context "with default file" do
|
43
|
+
it "should download the zip file" do
|
44
|
+
File.should_receive(:exists?).and_return(true)
|
45
|
+
Jettywrapper.should_receive(:expanded_zip_dir).and_return('tmp/jetty_generator/hydra-jetty-new-solr-schema')
|
46
|
+
Jettywrapper.should_receive(:system).with('unzip -d tmp/jetty_generator -qo tmp/new-solr-schema.zip').and_return(system ('true'))
|
47
|
+
Jettywrapper.should_receive(:system).with('mv tmp/jetty_generator/hydra-jetty-new-solr-schema jetty').and_return(system ('true'))
|
48
|
+
Jettywrapper.unzip
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "specifying the file" do
|
53
|
+
before do
|
54
|
+
Jettywrapper.url = 'http://example.co/file.zip'
|
55
|
+
end
|
56
|
+
it "should download the zip file" do
|
57
|
+
File.should_receive(:exists?).and_return(true)
|
58
|
+
Jettywrapper.should_receive(:expanded_zip_dir).and_return('tmp/jetty_generator/interal_dir')
|
59
|
+
Jettywrapper.should_receive(:system).with('unzip -d tmp/jetty_generator -qo tmp/file.zip').and_return(system ('true'))
|
60
|
+
Jettywrapper.should_receive(:system).with('mv tmp/jetty_generator/interal_dir jetty').and_return(system ('true'))
|
61
|
+
Jettywrapper.unzip
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context ".url" do
|
67
|
+
before do
|
68
|
+
subject.url = nil
|
69
|
+
end
|
70
|
+
subject {Jettywrapper}
|
71
|
+
context "When a constant is set" do
|
72
|
+
before do
|
73
|
+
ZIP_URL = 'http://example.com/foo.zip'
|
74
|
+
end
|
75
|
+
after do
|
76
|
+
Object.send(:remove_const, :ZIP_URL)
|
77
|
+
end
|
78
|
+
its(:url) {should == 'http://example.com/foo.zip'}
|
79
|
+
end
|
80
|
+
context "when a url is set" do
|
81
|
+
before do
|
82
|
+
subject.url = 'http://example.com/bar.zip'
|
83
|
+
end
|
84
|
+
its(:url) {should == 'http://example.com/bar.zip'}
|
85
|
+
end
|
86
|
+
context "when url is not set" do
|
87
|
+
its(:url) {should == 'https://github.com/projecthydra/hydra-jetty/archive/new-solr-schema.zip'}
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context ".tmp_dir" do
|
92
|
+
subject {Jettywrapper}
|
93
|
+
context "when a dir is set" do
|
94
|
+
before do
|
95
|
+
subject.tmp_dir = '/opt/tmp'
|
96
|
+
end
|
97
|
+
its(:tmp_dir) {should == '/opt/tmp'}
|
98
|
+
end
|
99
|
+
context "when dir is not set" do
|
100
|
+
before do
|
101
|
+
subject.tmp_dir = nil
|
102
|
+
end
|
103
|
+
its(:tmp_dir) {should == 'tmp'}
|
104
|
+
end
|
105
|
+
|
17
106
|
end
|
18
107
|
|
19
108
|
context "app_root" do
|
@@ -50,33 +139,32 @@ require 'rubygems'
|
|
50
139
|
|
51
140
|
context "config" do
|
52
141
|
it "loads the application jetty.yml first" do
|
53
|
-
IO.
|
142
|
+
IO.should_receive(:read).with('./config/jetty.yml').and_return("default:\n")
|
54
143
|
config = Jettywrapper.load_config
|
55
144
|
end
|
56
145
|
|
57
146
|
it "loads the application jetty.yml using erb parsing" do
|
58
|
-
IO.
|
147
|
+
IO.should_receive(:read).with('./config/jetty.yml').and_return("default:\n a: <%= 123 %>")
|
59
148
|
config = Jettywrapper.load_config
|
60
149
|
config[:a] == 123
|
61
150
|
end
|
62
151
|
|
63
152
|
it "falls back on the distributed jetty.yml" do
|
64
|
-
|
65
|
-
|
66
|
-
IO.expects(:read).in_sequence(fallback_seq).with { |value| value =~ /jetty.yml/ }.returns("default:\n")
|
153
|
+
File.should_receive(:exists?).with('./config/jetty.yml').and_return(false)
|
154
|
+
IO.should_receive(:read).with { |value| value =~ /jetty.yml/ }.and_return("default:\n")
|
67
155
|
config = Jettywrapper.load_config
|
68
156
|
end
|
69
157
|
|
70
158
|
it "supports per-environment configuration" do
|
71
159
|
ENV['environment'] = 'test'
|
72
|
-
IO.
|
160
|
+
IO.should_receive(:read).with('./config/jetty.yml').and_return("default:\n a: 1\ntest:\n a: 2")
|
73
161
|
config = Jettywrapper.load_config
|
74
162
|
config[:a].should == 2
|
75
163
|
end
|
76
164
|
|
77
165
|
it "falls back on a 'default' environment configuration" do
|
78
166
|
ENV['environment'] = 'test'
|
79
|
-
IO.
|
167
|
+
IO.should_receive(:read).with('./config/jetty.yml').and_return("default:\n a: 1")
|
80
168
|
config = Jettywrapper.load_config
|
81
169
|
config[:a].should == 1
|
82
170
|
end
|
@@ -127,7 +215,7 @@ require 'rubygems'
|
|
127
215
|
command = ts.jetty_command
|
128
216
|
command.should include("-Dsolr.solr.home=#{@jetty_params[:solr_home]}")
|
129
217
|
command.should include("-Djetty.port=#{@jetty_params[:jetty_port]}")
|
130
|
-
command.should include("-
|
218
|
+
command.should include("-Xmx256m")
|
131
219
|
command.should include("start.jar")
|
132
220
|
command.slice(command.index('start.jar')+1, 2).should == @jetty_params[:jetty_opts]
|
133
221
|
end
|
@@ -143,7 +231,7 @@ require 'rubygems'
|
|
143
231
|
:jetty_home => '/tmp'
|
144
232
|
}
|
145
233
|
ts = Jettywrapper.configure(jetty_params)
|
146
|
-
Jettywrapper.any_instance.
|
234
|
+
Jettywrapper.any_instance.stub(:process).and_return(stub('proc', :start => nil, :pid=>5454))
|
147
235
|
ts.stop
|
148
236
|
ts.start
|
149
237
|
ts.pid.should eql(5454)
|
@@ -156,21 +244,19 @@ require 'rubygems'
|
|
156
244
|
}
|
157
245
|
ts = Jettywrapper.configure(jetty_params)
|
158
246
|
ts.stop
|
159
|
-
Jettywrapper.any_instance.
|
247
|
+
Jettywrapper.any_instance.stub(:process).and_return(stub('proc', :start => nil, :pid=>2323))
|
160
248
|
swp = Jettywrapper.start(jetty_params)
|
161
249
|
swp.pid.should eql(2323)
|
162
250
|
swp.pid_file.should eql("_tmp.pid")
|
163
251
|
swp.stop
|
164
252
|
end
|
165
253
|
|
166
|
-
it "checks to see if its pid files are stale"
|
167
|
-
@pending
|
168
|
-
end
|
254
|
+
it "checks to see if its pid files are stale"
|
169
255
|
|
170
256
|
# return true if it's running, otherwise return false
|
171
257
|
it "can get the status for a given jetty instance" do
|
172
258
|
# Don't actually start jetty, just fake it
|
173
|
-
Jettywrapper.any_instance.
|
259
|
+
Jettywrapper.any_instance.stub(:process).and_return(stub('proc', :start => nil, :pid=>12345))
|
174
260
|
|
175
261
|
jetty_params = {
|
176
262
|
:jetty_home => File.expand_path("#{File.dirname(__FILE__)}/../../jetty")
|
@@ -184,7 +270,7 @@ require 'rubygems'
|
|
184
270
|
|
185
271
|
it "can get the pid for a given jetty instance" do
|
186
272
|
# Don't actually start jetty, just fake it
|
187
|
-
Jettywrapper.any_instance.
|
273
|
+
Jettywrapper.any_instance.stub(:process).and_return(stub('proc', :start => nil, :pid=>54321))
|
188
274
|
jetty_params = {
|
189
275
|
:jetty_home => File.expand_path("#{File.dirname(__FILE__)}/../../jetty")
|
190
276
|
}
|
@@ -199,7 +285,7 @@ require 'rubygems'
|
|
199
285
|
jetty_params = {
|
200
286
|
:jetty_home => '/tmp', :jetty_port => 8777
|
201
287
|
}
|
202
|
-
Jettywrapper.any_instance.
|
288
|
+
Jettywrapper.any_instance.stub(:process).and_return(stub('proc', :start => nil, :pid=>2323))
|
203
289
|
swp = Jettywrapper.start(jetty_params)
|
204
290
|
(File.file? swp.pid_path).should eql(true)
|
205
291
|
|
@@ -222,7 +308,7 @@ require 'rubygems'
|
|
222
308
|
:jetty_home => '/tmp'
|
223
309
|
}
|
224
310
|
ts = Jettywrapper.configure(jetty_params)
|
225
|
-
Jettywrapper.any_instance.
|
311
|
+
Jettywrapper.any_instance.stub(:process).and_return(stub('proc', :start => nil, :pid=>2222))
|
226
312
|
ts.stop
|
227
313
|
ts.pid_file?.should eql(false)
|
228
314
|
ts.start
|
@@ -244,16 +330,16 @@ require 'rubygems'
|
|
244
330
|
|
245
331
|
context "wrapping a task" do
|
246
332
|
it "wraps another method" do
|
247
|
-
Jettywrapper.any_instance.
|
248
|
-
Jettywrapper.any_instance.
|
333
|
+
Jettywrapper.any_instance.stub(:start).and_return(true)
|
334
|
+
Jettywrapper.any_instance.stub(:stop).and_return(true)
|
249
335
|
error = Jettywrapper.wrap(@jetty_params) do
|
250
336
|
end
|
251
337
|
error.should eql(false)
|
252
338
|
end
|
253
339
|
|
254
340
|
it "configures itself correctly when invoked via the wrap method" do
|
255
|
-
Jettywrapper.any_instance.
|
256
|
-
Jettywrapper.any_instance.
|
341
|
+
Jettywrapper.any_instance.stub(:start).and_return(true)
|
342
|
+
Jettywrapper.any_instance.stub(:stop).and_return(true)
|
257
343
|
error = Jettywrapper.wrap(@jetty_params) do
|
258
344
|
ts = Jettywrapper.instance
|
259
345
|
ts.quiet.should == @jetty_params[:quiet]
|
@@ -266,8 +352,9 @@ require 'rubygems'
|
|
266
352
|
end
|
267
353
|
|
268
354
|
it "captures any errors produced" do
|
269
|
-
Jettywrapper.any_instance.
|
270
|
-
Jettywrapper.any_instance.
|
355
|
+
Jettywrapper.any_instance.stub(:start).and_return(true)
|
356
|
+
Jettywrapper.any_instance.stub(:stop).and_return(true)
|
357
|
+
Jettywrapper.instance.logger.should_receive(:error).with("*** Error starting jetty: this is an expected error message")
|
271
358
|
expect { error = Jettywrapper.wrap(@jetty_params) do
|
272
359
|
raise "this is an expected error message"
|
273
360
|
end }.to raise_error "this is an expected error message"
|
data/spec/spec_helper.rb
CHANGED
@@ -8,12 +8,10 @@ if ENV['COVERAGE'] and RUBY_VERSION =~ /^1.9/
|
|
8
8
|
SimpleCov.start
|
9
9
|
end
|
10
10
|
|
11
|
-
require '
|
12
|
-
# require 'spec/rails'
|
11
|
+
require 'rspec/autorun'
|
13
12
|
require 'jettywrapper'
|
14
13
|
|
15
|
-
|
16
|
-
config.mock_with :mocha
|
14
|
+
RSpec.configure do |config|
|
17
15
|
end
|
18
16
|
|
19
17
|
unless ENV.select { |k,v| k =~ /TEST_JETTY_PORT/ }.empty?
|
metadata
CHANGED
@@ -1,182 +1,154 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: jettywrapper
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 3
|
9
|
-
- 2
|
10
|
-
version: 1.3.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.4.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Chris Beer
|
14
8
|
- Justin Coyne
|
15
9
|
- Bess Sadler
|
16
10
|
autorequire:
|
17
11
|
bindir: bin
|
18
12
|
cert_chain: []
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
- !ruby/object:Gem::Dependency
|
23
|
-
type: :runtime
|
24
|
-
prerelease: false
|
25
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
|
-
requirements:
|
28
|
-
- - ">="
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
hash: 3
|
31
|
-
segments:
|
32
|
-
- 0
|
33
|
-
version: "0"
|
34
|
-
version_requirements: *id001
|
13
|
+
date: 2013-03-08 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
35
16
|
name: logger
|
36
|
-
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
37
22
|
type: :runtime
|
38
23
|
prerelease: false
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
segments:
|
46
|
-
- 0
|
47
|
-
version: "0"
|
48
|
-
version_requirements: *id002
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - '>='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
49
30
|
name: mediashelf-loggable
|
50
|
-
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - '>='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
51
36
|
type: :runtime
|
52
37
|
prerelease: false
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
segments:
|
60
|
-
- 0
|
61
|
-
version: "0"
|
62
|
-
version_requirements: *id003
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
63
44
|
name: childprocess
|
64
|
-
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
65
50
|
type: :runtime
|
66
51
|
prerelease: false
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
segments:
|
74
|
-
- 0
|
75
|
-
version: "0"
|
76
|
-
version_requirements: *id004
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
- !ruby/object:Gem::Dependency
|
77
58
|
name: i18n
|
78
|
-
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
79
64
|
type: :runtime
|
80
65
|
prerelease: false
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
segments:
|
88
|
-
- 3
|
89
|
-
- 0
|
90
|
-
- 0
|
91
|
-
version: 3.0.0
|
92
|
-
version_requirements: *id005
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
- !ruby/object:Gem::Dependency
|
93
72
|
name: activesupport
|
94
|
-
|
95
|
-
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 3.0.0
|
78
|
+
type: :runtime
|
96
79
|
prerelease: false
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
segments:
|
104
|
-
- 2
|
105
|
-
- 0
|
106
|
-
version: "2.0"
|
107
|
-
version_requirements: *id006
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 3.0.0
|
85
|
+
- !ruby/object:Gem::Dependency
|
108
86
|
name: rspec
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
hash: 3
|
118
|
-
segments:
|
119
|
-
- 0
|
120
|
-
version: "0"
|
121
|
-
version_requirements: *id007
|
122
|
-
name: mocha
|
123
|
-
- !ruby/object:Gem::Dependency
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
124
92
|
type: :development
|
125
93
|
prerelease: false
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
segments:
|
133
|
-
- 0
|
134
|
-
version: "0"
|
135
|
-
version_requirements: *id008
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
- !ruby/object:Gem::Dependency
|
136
100
|
name: rake
|
137
|
-
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - '>='
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
138
106
|
type: :development
|
139
107
|
prerelease: false
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
segments:
|
147
|
-
- 0
|
148
|
-
- 6
|
149
|
-
- 5
|
150
|
-
version: 0.6.5
|
151
|
-
version_requirements: *id009
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - '>='
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
- !ruby/object:Gem::Dependency
|
152
114
|
name: yard
|
153
|
-
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - '>='
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
154
120
|
type: :development
|
155
121
|
prerelease: false
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
segments:
|
163
|
-
- 0
|
164
|
-
version: "0"
|
165
|
-
version_requirements: *id010
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
- !ruby/object:Gem::Dependency
|
166
128
|
name: RedCloth
|
167
|
-
|
168
|
-
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - '>='
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
141
|
+
description: Spin up a jetty instance (e.g., the one at https://github.com/projecthydra/hydra-jetty)
|
142
|
+
and wrap test in it. This lets us run tests against a real copy of solr and fedora.
|
143
|
+
email:
|
169
144
|
- hydra-tech@googlegroups.com
|
170
145
|
executables: []
|
171
|
-
|
172
146
|
extensions: []
|
173
|
-
|
174
147
|
extra_rdoc_files: []
|
175
|
-
|
176
|
-
files:
|
148
|
+
files:
|
177
149
|
- .gitignore
|
178
150
|
- .gitmodules
|
179
|
-
- .
|
151
|
+
- .travis.yml
|
180
152
|
- Gemfile
|
181
153
|
- History.txt
|
182
154
|
- README.textile
|
@@ -193,38 +165,26 @@ files:
|
|
193
165
|
- tasks/jettywrapper.rake
|
194
166
|
homepage: https://github.com/projecthydra/jettywrapper
|
195
167
|
licenses: []
|
196
|
-
|
168
|
+
metadata: {}
|
197
169
|
post_install_message:
|
198
170
|
rdoc_options: []
|
199
|
-
|
200
|
-
require_paths:
|
171
|
+
require_paths:
|
201
172
|
- lib
|
202
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
212
|
-
none: false
|
213
|
-
requirements:
|
214
|
-
- - ">="
|
215
|
-
- !ruby/object:Gem::Version
|
216
|
-
hash: 23
|
217
|
-
segments:
|
218
|
-
- 1
|
219
|
-
- 3
|
220
|
-
- 6
|
173
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - '>='
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
|
+
requirements:
|
180
|
+
- - '>='
|
181
|
+
- !ruby/object:Gem::Version
|
221
182
|
version: 1.3.6
|
222
183
|
requirements: []
|
223
|
-
|
224
184
|
rubyforge_project:
|
225
|
-
rubygems_version:
|
185
|
+
rubygems_version: 2.0.0
|
226
186
|
signing_key:
|
227
|
-
specification_version:
|
187
|
+
specification_version: 4
|
228
188
|
summary: Convenience tasks for working with jetty from within a ruby project.
|
229
189
|
test_files: []
|
230
|
-
|
190
|
+
has_rdoc:
|
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm use ree-1.8.7@jettywrapper --create
|