hydra-testing 0.0.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.
@@ -0,0 +1,9 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ coverage
6
+ coverage.data
7
+ *~
8
+ .yardoc
9
+ doc
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.8.7@hydra-testing --create
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,40 @@
1
+ require 'rake'
2
+ require 'bundler'
3
+ require 'spec/rake/spectask'
4
+ require 'yard'
5
+
6
+ Bundler::GemHelper.install_tasks
7
+ Dir.glob('lib/tasks/*.rake').each { |r| import r }
8
+
9
+
10
+ begin
11
+ Bundler.setup(:default, :development)
12
+ rescue Bundler::BundlerError => e
13
+ $stderr.puts e.message
14
+ $stderr.puts "Run `bundle install` to install missing gems"
15
+ exit e.status_code
16
+ end
17
+
18
+ Spec::Rake::SpecTask.new(:spec) do |spec|
19
+ spec.libs << 'lib' << 'spec'
20
+ spec.spec_files = FileList['spec/**/*_spec.rb']
21
+ end
22
+
23
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
24
+ spec.libs << 'lib' << 'spec'
25
+ spec.pattern = 'spec/**/*_spec.rb'
26
+ spec.rcov = true
27
+ spec.rcov_opts = %w{--exclude spec\/*,gems\/*,ruby\/* --aggregate coverage.data}
28
+ end
29
+
30
+ task :clean do
31
+ puts 'Cleaning old coverage.data'
32
+ FileUtils.rm('coverage.data') if(File.exists? 'coverage.data')
33
+ end
34
+
35
+ YARD::Rake::YardocTask.new(:doc) do |t|
36
+ t.files = ['lib/**/*.rb'] # optional
37
+ # t.options = ['--any', '--extra', '--opts'] # optional
38
+ end
39
+
40
+ task :default => [:rcov, :doc]
@@ -0,0 +1,39 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "hydra-testing/version"
4
+ require 'bundler'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "hydra-testing"
8
+ s.version = Hydra::Testing::VERSION
9
+ s.platform = Gem::Platform::RUBY
10
+ s.authors = ["Bess Sadler"]
11
+ s.email = ["bess@stanford.edu"]
12
+ s.homepage = ""
13
+ s.summary = %q{Convenience tasks for automated testing for the hydra project.}
14
+ s.description = %q{Spin up a jetty instance (maybe even 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
+
16
+ s.rubyforge_project = "hydra-testing"
17
+
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
+ s.require_paths = ["lib"]
22
+
23
+ s.required_rubygems_version = ">= 1.3.6"
24
+
25
+ # Bundler will install these gems too if you've checked this out from source from git and run 'bundle install'
26
+ # It will not add these as dependencies if you require lyber-core for other projects
27
+ s.add_development_dependency "ruby-debug"
28
+ s.add_development_dependency "ruby-debug-base"
29
+ s.add_development_dependency "rspec", "< 2.0" # We're not ready to upgrade to rspec 2
30
+ s.add_development_dependency 'rspec-rails', '<2.0.0' # rspec-rails 2.0.0 requires Rails 3.
31
+ s.add_development_dependency 'mocha'
32
+ s.add_development_dependency 'cucumber', '>=0.8.5'
33
+ s.add_development_dependency 'cucumber-rails'
34
+ s.add_development_dependency 'gherkin'
35
+ s.add_development_dependency 'rcov'
36
+ s.add_development_dependency 'yard'
37
+
38
+ end
39
+
@@ -0,0 +1,125 @@
1
+ module Hydra
2
+ module Testing
3
+ class TestServer
4
+
5
+ require 'singleton'
6
+ include Singleton
7
+ attr_accessor :port, :jetty_home, :solr_home, :quiet, :fedora_home, :startup_wait
8
+
9
+ # configure the singleton with some defaults
10
+ def initialize
11
+ @pid = nil
12
+ end
13
+
14
+ class << self
15
+ def configure(params = {})
16
+ hydra_server = self.instance
17
+ hydra_server.quiet = params[:quiet].nil? ? true : params[:quiet]
18
+ if defined?(Rails.root)
19
+ base_path = Rails.root
20
+ else
21
+ raise "You must set either RAILS_ROOT or :jetty_home so I know where jetty is" unless params[:jetty_home]
22
+ end
23
+ hydra_server.jetty_home = params[:jetty_home] || File.expand_path(File.join(base_path, 'jetty'))
24
+ hydra_server.solr_home = params[:solr_home] || File.join( hydra_server.jetty_home, "solr")
25
+ hydra_server.fedora_home = params[:fedora_home] || File.join( hydra_server.jetty_home, "fedora","default")
26
+ hydra_server.port = params[:jetty_port] || 8888
27
+ hydra_server.startup_wait = params[:startup_wait] || 5
28
+ return hydra_server
29
+ end
30
+
31
+ def wrap(params = {})
32
+ error = false
33
+ jetty_server = self.instance
34
+ jetty_server.quiet = params[:quiet] || true
35
+ jetty_server.jetty_home = params[:jetty_home]
36
+ jetty_server.solr_home = params[:solr_home]
37
+ jetty_server.port = params[:jetty_port] || 8888
38
+ jetty_server.startup_wait = params[:startup_wait] || 5
39
+ jetty_server.fedora_home = params[:fedora_home] || File.join( jetty_server.jetty_home, "fedora","default")
40
+
41
+ begin
42
+ # puts "starting jetty on #{RUBY_PLATFORM}"
43
+ jetty_server.start
44
+ sleep jetty_server.startup_wait
45
+ yield
46
+ rescue
47
+ error = $!
48
+ puts "*** Error starting hydra-jetty: #{error}"
49
+ ensure
50
+ # puts "stopping jetty server"
51
+ jetty_server.stop
52
+ end
53
+
54
+ return error
55
+ end
56
+
57
+ end #end of class << self
58
+
59
+ def jetty_command
60
+ "java -Djetty.port=#{@port} -Dsolr.solr.home=#{@solr_home} -jar start.jar"
61
+ end
62
+
63
+ def start
64
+ puts "jetty_home: #{@jetty_home}"
65
+ puts "solr_home: #{@solr_home}"
66
+ puts "jetty_command: #{jetty_command}"
67
+ platform_specific_start
68
+ end
69
+
70
+ def stop
71
+ platform_specific_stop
72
+ end
73
+
74
+ if RUBY_PLATFORM =~ /mswin32/
75
+ require 'win32/process'
76
+
77
+ # start the solr server
78
+ def platform_specific_start
79
+ Dir.chdir(@jetty_home) do
80
+ @pid = Process.create(
81
+ :app_name => jetty_command,
82
+ :creation_flags => Process::DETACHED_PROCESS,
83
+ :process_inherit => false,
84
+ :thread_inherit => true,
85
+ :cwd => "#{@jetty_home}"
86
+ ).process_id
87
+ end
88
+ end
89
+
90
+ # stop a running solr server
91
+ def platform_specific_stop
92
+ Process.kill(1, @pid)
93
+ Process.wait
94
+ end
95
+ else # Not Windows
96
+
97
+ def jruby_raise_error?
98
+ raise 'JRuby requires that you start solr manually, then run "rake spec" or "rake features"' if defined?(JRUBY_VERSION)
99
+ end
100
+
101
+ # start the solr server
102
+ def platform_specific_start
103
+
104
+ jruby_raise_error?
105
+
106
+ puts self.inspect
107
+ Dir.chdir(@jetty_home) do
108
+ @pid = fork do
109
+ STDERR.close if @quiet
110
+ exec jetty_command
111
+ end
112
+ end
113
+ end
114
+
115
+ # stop a running solr server
116
+ def platform_specific_stop
117
+ jruby_raise_error?
118
+ Process.kill('TERM', @pid)
119
+ Process.wait
120
+ end
121
+ end
122
+
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,5 @@
1
+ module Hydra
2
+ module Testing
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,98 @@
1
+ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
+ require File.join(File.dirname(__FILE__), "/../../lib/hydra-testing")
3
+
4
+ module Hydra
5
+ module Testing
6
+ describe TestServer do
7
+
8
+ before(:all) do
9
+ @jetty_params = {
10
+ :quiet => false,
11
+ :jetty_home => "/path/to/jetty",
12
+ :jetty_port => 8888,
13
+ :solr_home => "/path/to/solr",
14
+ :fedora_home => "/path/to/fedora",
15
+ :startup_wait => 0
16
+ }
17
+ end
18
+
19
+ context "instantiation" do
20
+ it "can be instantiated" do
21
+ ts = Hydra::Testing::TestServer.instance
22
+ ts.class.should eql(Hydra::Testing::TestServer)
23
+ end
24
+
25
+ it "can be configured with a params hash" do
26
+ ts = Hydra::Testing::TestServer.configure(@jetty_params)
27
+ ts.quiet.should == false
28
+ ts.jetty_home.should == "/path/to/jetty"
29
+ ts.port.should == 8888
30
+ ts.solr_home.should == '/path/to/solr'
31
+ ts.fedora_home.should == '/path/to/fedora'
32
+ ts.startup_wait.should == 0
33
+ end
34
+
35
+ # passing in a hash is no longer optional
36
+ it "raises an error when called without a :jetty_home value" do
37
+ lambda { ts = Hydra::Testing::TestServer.configure }.should raise_exception
38
+ end
39
+
40
+ it "should override nil params with defaults" do
41
+ jetty_params = {
42
+ :quiet => nil,
43
+ :jetty_home => '/path/to/jetty',
44
+ :jetty_port => nil,
45
+ :solr_home => nil,
46
+ :fedora_home => nil,
47
+ :startup_wait => nil
48
+ }
49
+
50
+ ts = Hydra::Testing::TestServer.configure(jetty_params)
51
+ ts.quiet.should == true
52
+ ts.jetty_home.should == "/path/to/jetty"
53
+ ts.port.should == 8888
54
+ ts.solr_home.should == File.join(ts.jetty_home, "solr")
55
+ ts.fedora_home.should == File.join(ts.jetty_home, "fedora","default")
56
+ ts.startup_wait.should == 5
57
+ end
58
+ end # end of instantiation context
59
+
60
+ context "wrapping a task" do
61
+ it "wraps another method" do
62
+ Hydra::Testing::TestServer.any_instance.stubs(:start).returns(true)
63
+ Hydra::Testing::TestServer.any_instance.stubs(:stop).returns(true)
64
+ error = Hydra::Testing::TestServer.wrap(@jetty_params) do
65
+ end
66
+ error.should eql(false)
67
+ end
68
+
69
+ it "configures itself correctly when invoked via the wrap method" do
70
+ Hydra::Testing::TestServer.any_instance.stubs(:start).returns(true)
71
+ Hydra::Testing::TestServer.any_instance.stubs(:stop).returns(true)
72
+ error = Hydra::Testing::TestServer.wrap(@jetty_params) do
73
+ ts = Hydra::Testing::TestServer.instance
74
+ ts.quiet.should == true
75
+ ts.jetty_home.should == "/path/to/jetty"
76
+ ts.port.should == 8888
77
+ ts.solr_home.should == "/path/to/solr"
78
+ ts.fedora_home.should == "/path/to/fedora"
79
+ ts.startup_wait.should == 0
80
+ end
81
+ error.should eql(false)
82
+ end
83
+
84
+ it "captures any errors produced" do
85
+ Hydra::Testing::TestServer.any_instance.stubs(:start).returns(true)
86
+ Hydra::Testing::TestServer.any_instance.stubs(:stop).returns(true)
87
+ error = Hydra::Testing::TestServer.wrap(@jetty_params) do
88
+ raise "foo"
89
+ end
90
+ error.class.should eql(RuntimeError)
91
+ error.message.should eql("foo")
92
+ end
93
+
94
+ end
95
+
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,7 @@
1
+ $: << File.join(File.dirname(__FILE__), "/../../lib")
2
+ require 'spec/autorun'
3
+ # require 'spec/rails'
4
+
5
+ Spec::Runner.configure do |config|
6
+ config.mock_with :mocha
7
+ end
metadata ADDED
@@ -0,0 +1,223 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hydra-testing
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Bess Sadler
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-04-06 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ prerelease: false
32
+ requirement: *id001
33
+ name: ruby-debug
34
+ type: :development
35
+ - !ruby/object:Gem::Dependency
36
+ version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ hash: 3
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ prerelease: false
46
+ requirement: *id002
47
+ name: ruby-debug-base
48
+ type: :development
49
+ - !ruby/object:Gem::Dependency
50
+ version_requirements: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - <
54
+ - !ruby/object:Gem::Version
55
+ hash: 3
56
+ segments:
57
+ - 2
58
+ - 0
59
+ version: "2.0"
60
+ prerelease: false
61
+ requirement: *id003
62
+ name: rspec
63
+ type: :development
64
+ - !ruby/object:Gem::Dependency
65
+ version_requirements: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - <
69
+ - !ruby/object:Gem::Version
70
+ hash: 15
71
+ segments:
72
+ - 2
73
+ - 0
74
+ - 0
75
+ version: 2.0.0
76
+ prerelease: false
77
+ requirement: *id004
78
+ name: rspec-rails
79
+ type: :development
80
+ - !ruby/object:Gem::Dependency
81
+ version_requirements: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ prerelease: false
91
+ requirement: *id005
92
+ name: mocha
93
+ type: :development
94
+ - !ruby/object:Gem::Dependency
95
+ version_requirements: &id006 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ hash: 53
101
+ segments:
102
+ - 0
103
+ - 8
104
+ - 5
105
+ version: 0.8.5
106
+ prerelease: false
107
+ requirement: *id006
108
+ name: cucumber
109
+ type: :development
110
+ - !ruby/object:Gem::Dependency
111
+ version_requirements: &id007 !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ hash: 3
117
+ segments:
118
+ - 0
119
+ version: "0"
120
+ prerelease: false
121
+ requirement: *id007
122
+ name: cucumber-rails
123
+ type: :development
124
+ - !ruby/object:Gem::Dependency
125
+ version_requirements: &id008 !ruby/object:Gem::Requirement
126
+ none: false
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ hash: 3
131
+ segments:
132
+ - 0
133
+ version: "0"
134
+ prerelease: false
135
+ requirement: *id008
136
+ name: gherkin
137
+ type: :development
138
+ - !ruby/object:Gem::Dependency
139
+ version_requirements: &id009 !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ hash: 3
145
+ segments:
146
+ - 0
147
+ version: "0"
148
+ prerelease: false
149
+ requirement: *id009
150
+ name: rcov
151
+ type: :development
152
+ - !ruby/object:Gem::Dependency
153
+ version_requirements: &id010 !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ hash: 3
159
+ segments:
160
+ - 0
161
+ version: "0"
162
+ prerelease: false
163
+ requirement: *id010
164
+ name: yard
165
+ type: :development
166
+ description: Spin up a jetty instance (maybe even 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.
167
+ email:
168
+ - bess@stanford.edu
169
+ executables: []
170
+
171
+ extensions: []
172
+
173
+ extra_rdoc_files: []
174
+
175
+ files:
176
+ - .gitignore
177
+ - .rvmrc
178
+ - Gemfile
179
+ - Rakefile
180
+ - hydra-testing.gemspec
181
+ - lib/hydra-testing.rb
182
+ - lib/hydra-testing/version.rb
183
+ - spec/lib/hydra-testing_spec.rb
184
+ - spec/spec_helper.rb
185
+ has_rdoc: true
186
+ homepage: ""
187
+ licenses: []
188
+
189
+ post_install_message:
190
+ rdoc_options: []
191
+
192
+ require_paths:
193
+ - lib
194
+ required_ruby_version: !ruby/object:Gem::Requirement
195
+ none: false
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ hash: 3
200
+ segments:
201
+ - 0
202
+ version: "0"
203
+ required_rubygems_version: !ruby/object:Gem::Requirement
204
+ none: false
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ hash: 23
209
+ segments:
210
+ - 1
211
+ - 3
212
+ - 6
213
+ version: 1.3.6
214
+ requirements: []
215
+
216
+ rubyforge_project: hydra-testing
217
+ rubygems_version: 1.4.1
218
+ signing_key:
219
+ specification_version: 3
220
+ summary: Convenience tasks for automated testing for the hydra project.
221
+ test_files:
222
+ - spec/lib/hydra-testing_spec.rb
223
+ - spec/spec_helper.rb