health_check 1.3.1 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -16,56 +16,103 @@ bundler_args: "--binstubs"
16
16
  script: ./test/test_with_railsapp
17
17
 
18
18
  rvm:
19
- - 1.8.7
20
- - 1.9.2
21
- - 1.9.3
22
19
  - 2.0.0
23
- - jruby-19mode
24
- - rbx-19mode
25
- - ree
26
20
 
27
21
  gemfile:
28
- - test/rails_3.2.gemfile
29
-
30
- env:
31
- - RUBYGEMS_VERSION=
22
+ - test/rails_4.0.gemfile
32
23
 
33
24
  matrix:
34
- exclude:
25
+ allow_failures:
26
+ - rvm: rbx-19mode
27
+ gemfile: test/rails_4.0.gemfile
28
+ env: RAILS_ENV2=development
29
+
30
+ - rvm: 1.9.3
31
+ gemfile: test/rails_edge.gemfile
32
+
33
+ - rvm: 2.0.0
34
+ gemfile: test/rails_edge.gemfile
35
+
36
+ - rvm: ruby-head
37
+ gemfile: test/rails_edge.gemfile
38
+
39
+ - rvm: jruby-head
40
+ gemfile: test/rails_edge.gemfile
41
+
42
+ include:
43
+ # rails edge
44
+
45
+ - rvm: 1.9.3
46
+ gemfile: test/rails_edge.gemfile
47
+
48
+ - rvm: 2.0.0
49
+ gemfile: test/rails_edge.gemfile
50
+
51
+ - rvm: ruby-head
52
+ gemfile: test/rails_edge.gemfile
53
+
54
+ - rvm: jruby-head
55
+ gemfile: test/rails_edge.gemfile
56
+
57
+ # rails 4.0 June 25, 2013
58
+
59
+ - rvm: 1.9.3
60
+ gemfile: test/rails_4.0.gemfile
61
+
62
+ - rvm: jruby-19mode
63
+ gemfile: test/rails_4.0.gemfile
64
+
65
+ - rvm: rbx-19mode
66
+ gemfile: test/rails_4.0.gemfile
67
+ env: RAILS_ENV2=development
68
+
69
+ - rvm: 2.0.0
70
+ gemfile: test/rails_4.0.gemfile
71
+ env: RAILS_SERVER=puma
72
+
73
+ - rvm: 2.0.0
74
+ gemfile: test/rails_4.0.gemfile
75
+ env: RAILS_SERVER=passenger
76
+
77
+ - rvm: 2.0.0
78
+ gemfile: test/rails_4.0.gemfile
79
+ env: RAILS_SERVER=thin
80
+
81
+ - rvm: 2.0.0
82
+ gemfile: test/rails_4.0.gemfile
83
+ env: RAILS_SERVER=unicorn
84
+
85
+ # rails 3.2 jan 20, 2012
35
86
  - rvm: 1.8.7
36
87
  gemfile: test/rails_3.2.gemfile
37
- env: RUBYGEMS_VERSION=
38
88
 
39
- - rvm: jruby-19mode
89
+ #- rvm: 1.9.2
90
+ # gemfile: test/rails_3.2.gemfile
91
+
92
+ - rvm: 1.9.3
40
93
  gemfile: test/rails_3.2.gemfile
41
- env: RUBYGEMS_VERSION=
42
94
 
43
- include:
44
- # rails 2.3 march 16 2009 - ruby 1.8.7
45
- - rvm: 1.8.7
46
- gemfile: test/rails_2.3.gemfile
47
- env: RUBYGEMS_VERSION=1.8.25
95
+ - rvm: ree
96
+ gemfile: test/rails_3.2.gemfile
48
97
 
49
- # rails 3.0 aug 29 2010 - ruby 1.8.7
50
- - rvm: 1.8.7
51
- gemfile: test/rails_3.0.gemfile
52
- env: RUBYGEMS_VERSION=
98
+ - rvm: jruby-19mode
99
+ gemfile: test/rails_3.2.gemfile
100
+
101
+ - rvm: rbx-19mode
102
+ gemfile: test/rails_3.2.gemfile
53
103
 
54
104
  # rails 3.1 aug 31, 2011 - ruby 1.8.7 or 1.9.2
55
105
  - rvm: 1.8.7
56
106
  gemfile: test/rails_3.1.gemfile
57
- env: RUBYGEMS_VERSION=
58
107
 
59
108
  - rvm: 1.9.2
60
109
  gemfile: test/rails_3.1.gemfile
61
- env: RUBYGEMS_VERSION=
62
110
 
63
- # rails 4.0 - in development as of 5 mar 2013 - ruby 2.0
64
- - rvm: 2.0.0
65
- gemfile: test/rails_4.0.gemfile
66
- env: RUBYGEMS_VERSION=
111
+ # rails 3.0 aug 29 2010 - ruby 1.8.7
112
+ - rvm: 1.8.7
113
+ gemfile: test/rails_3.0.gemfile
67
114
 
68
- - rvm: jruby-19mode
69
- gemfile: test/rails_3.2.gemfile
115
+ # rails 2.3 march 16 2009 - ruby 1.8.7
116
+ - rvm: 1.8.7
117
+ gemfile: test/rails_2.3.gemfile
70
118
  env: RUBYGEMS_VERSION=1.8.25
71
-
data/CHANGELOG CHANGED
@@ -1,5 +1,13 @@
1
1
  = Change Log =
2
2
 
3
+ * 1.4.1 - Rails 4 and route changes
4
+ * Now handles routes being generated multiple times by some gem / rails / ruby combinations - Previously multiple calls to health_check_routes where ignored, now explicit calls to health_check_route always adds the route but flags that it doesn't have to be added again on the end of the list
5
+ * Uses ActiveRecord::Migration.check_pending! if available and returns the message if an exception is raised (Rails 4.0+)
6
+ * Simplified routing rules down to one rule for Rails 3.0+
7
+ * Includes some changes for rails 4.1 (edge) - but still a work in progress
8
+ * 1.3.1 - Include changes from contributers:
9
+ * Migrations with dots are now handled
10
+ * the list of checks for "full" / "all" can be configured
3
11
  * 1.2.0 - The gem can now be configured, including timeouts, status codes and text returned on success
4
12
  - Customn checks can be added via initializer like config.add_custom_check { CustomCheckClass.a_custom_check }
5
13
  - You can now request the response to be json or xml (via url or Content-accepted header)
data/README.rdoc CHANGED
@@ -41,7 +41,7 @@ The email gateway is not checked unless the smtp settings have been changed.
41
41
  Specify full or include email in the list of checks to verify the smtp settings
42
42
  (eg use 127.0.0.1 instead of localhost).
43
43
 
44
- Note: rails 4.0 also checks migrations and throws an ActiveRecord::PendingMigrationError exception (http error 500) if there is an error
44
+ Note: rails 4.0 also checks migrations by default in development mode and throws an ActiveRecord::PendingMigrationError exception (http error 500) if there is an error
45
45
 
46
46
  == Installation
47
47
 
@@ -101,7 +101,7 @@ To change the configuration of health_check, create a file `config/initializers/
101
101
  config.http_status_for_error_object = 500
102
102
 
103
103
  # You can set what tests are run with the 'full' or 'all' parameter
104
- self.full_checks = ['database', 'migrations', 'custom', 'email', 'cache']
104
+ config.full_checks = ['database', 'migrations', 'custom', 'email', 'cache']
105
105
 
106
106
  # Add one or more custom checks that return a blank string if ok, or an error message if there is an error
107
107
  config.add_custom_check do
@@ -128,7 +128,8 @@ See
128
128
  * NewRelic Availability Monitoring - http://newrelic.com/docs/features/availability-monitoring-faq
129
129
  * Uptime by OpenACS - http://uptime.openacs.org/uptime/
130
130
  * Engine Yard's guide - https://support.cloud.engineyard.com/entries/20996821-monitor-application-uptime (although the guide is based on fitter_happier plugin it will also work with this gem)
131
- * Any other montoring service that can be set to check for the word success in the test returned from a url
131
+ * Nagios check_http (with -s success) - https://www.nagios-plugins.org/doc/man/check_http.html
132
+ * Any other montoring service that can be set to check for the word success in the text returned from a url
132
133
 
133
134
  === Requesting Json and XML responses
134
135
 
data/config/routes.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  if defined?(HealthCheck::Engine)
2
- Rails.application.routes.draw do
3
- health_check_routes
2
+ unless HealthCheck::Engine.routes_manually_defined
3
+ # Ifmountable use: HealthCheck::Engine.routes.draw do
4
+ Rails.application.routes.draw do
5
+ health_check_routes(false)
6
+ end
4
7
  end
5
8
  end
@@ -6,7 +6,7 @@ module HealthCheck
6
6
 
7
7
  session(:off) if Rails.version < '3.0'
8
8
 
9
- layout nil
9
+ layout false if self.respond_to? :layout
10
10
 
11
11
  def index
12
12
  checks = params[:checks] || 'standard'
@@ -51,24 +51,28 @@ module HealthCheck
51
51
 
52
52
  # Silence logger as much as we can
53
53
 
54
- def process_with_silent_log(method_name, *args)
55
- if logger
56
- @old_logger_level = logger.level
57
- if Rails.version >= '3.2'
58
- silence do
59
- process_without_silent_log(method_name, *args)
54
+ if Rails.version < '4.1'
55
+
56
+ def process_with_silent_log(method_name, *args)
57
+ if logger
58
+ @old_logger_level = logger.level
59
+ if Rails.version >= '3.2'
60
+ silence do
61
+ process_without_silent_log(method_name, *args)
62
+ end
63
+ else
64
+ logger.silence do
65
+ process_without_silent_log(method_name, *args)
66
+ end
60
67
  end
61
68
  else
62
- logger.silence do
63
- process_without_silent_log(method_name, *args)
64
- end
69
+ process_without_silent_log(method_name, *args)
65
70
  end
66
- else
67
- process_without_silent_log(method_name, *args)
68
71
  end
69
- end
70
72
 
71
- alias_method_chain :process, :silent_log
73
+ alias_method_chain :process, :silent_log
74
+
75
+ end
72
76
 
73
77
  end
74
78
  end
@@ -2,14 +2,9 @@ if defined?(HealthCheck::Engine)
2
2
 
3
3
  module ActionDispatch::Routing
4
4
  class Mapper
5
- def health_check_routes
6
- unless HealthCheck::Engine.routes_defined
7
- HealthCheck::Engine.routes_defined = true
8
- get 'health_check', :to => 'health_check/health_check#index'
9
- get 'health_check.:format', :to => 'health_check/health_check#index'
10
- get 'health_check/:checks', :to => 'health_check/health_check#index'
11
- get 'health_check/:checks.:format', :to => 'health_check/health_check#index'
12
- end
5
+ def health_check_routes(routes_manually_defined = true)
6
+ HealthCheck::Engine.routes_manually_defined ||= routes_manually_defined
7
+ get 'health_check(/:checks)(.:format)', :to => 'health_check/health_check#index'
13
8
  end
14
9
  end
15
10
  end
@@ -29,10 +29,19 @@ module HealthCheck
29
29
  when "email"
30
30
  errors << HealthCheck::Utils.check_email
31
31
  when "migrations", "migration"
32
- database_version = HealthCheck::Utils.get_database_version
33
- migration_version = HealthCheck::Utils.get_migration_version
34
- if database_version.to_i != migration_version.to_i
35
- errors << "Current database version (#{database_version}) does not match latest migration (#{migration_version}). "
32
+ if defined?(ActiveRecord::Migration) and ActiveRecord::Migration.respond_to?(:check_pending!)
33
+ # Rails 4+
34
+ begin
35
+ ActiveRecord::Migration.check_pending!
36
+ rescue ActiveRecord::PendingMigrationError => ex
37
+ errors << ex.message
38
+ end
39
+ else
40
+ database_version = HealthCheck::Utils.get_database_version
41
+ migration_version = HealthCheck::Utils.get_migration_version
42
+ if database_version.to_i != migration_version.to_i
43
+ errors << "Current database version (#{database_version}) does not match latest migration (#{migration_version}). "
44
+ end
36
45
  end
37
46
  when 'cache'
38
47
  errors << HealthCheck::Utils.check_cache
@@ -1,4 +1,4 @@
1
1
  module HealthCheck
2
- VERSION = "1.3.1"
2
+ VERSION = "1.4.1"
3
3
  end
4
4
 
data/lib/health_check.rb CHANGED
@@ -5,7 +5,7 @@ module HealthCheck
5
5
 
6
6
  if Rails.version >= '3.0'
7
7
  class Engine < Rails::Engine
8
- cattr_accessor :routes_defined
8
+ cattr_accessor :routes_manually_defined
9
9
  end
10
10
  end
11
11
 
data/test/init_variables CHANGED
@@ -10,6 +10,7 @@ base_dir=$PWD
10
10
  tmp_dir=$base_dir/tmp
11
11
  railsapp=$tmp_dir/railsapp
12
12
  custom_file="$railsapp/tmp/custom_check.ok"
13
+ catchall_file="$railsapp/tmp/catchall_route.enabled"
13
14
  success=successful
14
15
 
15
16
  rehash=''
@@ -2,9 +2,7 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
- # Bundle edge Rails instead:
6
-
7
- ruby "1.9.3" if RUBY_VERSION < '1.9'
5
+ ruby '1.9.3' if RUBY_VERSION < '1.9.3'
8
6
 
9
7
  gem 'rails', "~> 4.0.0"
10
8
  gem 'rake', '>= 0.8.3'
@@ -0,0 +1,21 @@
1
+ # Gemfile for health_test testing
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Bundle edge Rails instead:
6
+
7
+ ruby '1.9.3' if RUBY_VERSION < '1.9.3'
8
+
9
+ gem 'rails'
10
+ gem 'rake'
11
+ gem 'rack'
12
+
13
+ group :development, :test do
14
+ if defined?(JRUBY_VERSION)
15
+ gem 'jruby-openssl'
16
+ gem 'activerecord-jdbcsqlite3-adapter'
17
+ else
18
+ gem 'sqlite3'
19
+ end
20
+ gem 'shoulda'
21
+ end
data/test/setup_railsapp CHANGED
@@ -10,7 +10,7 @@ do
10
10
  echo "Aborting..."
11
11
  exit 2
12
12
  ;;
13
- */test/rails_[0-9].[0-9]*.gemfile)
13
+ */test/rails_edge.gemfile|*/test/rails_[0-9].[0-9]*.gemfile)
14
14
  if [ -f "$BUNDLE_GEMFILE" ]; then
15
15
  break
16
16
  fi
@@ -63,7 +63,7 @@ echo Gems in tmp/gems:
63
63
  ls tmp/gems
64
64
 
65
65
  echo Environment:
66
- env | egrep 'TRAVIS|RAILS|RUBY|_ENV|GEM|BUNDLE'
66
+ env | egrep 'TRAVIS|RAILS|RUBY|_ENV|GEM|BUNDLE' || echo "No relevant variables set"
67
67
 
68
68
  cd $tmp_dir
69
69
 
@@ -83,7 +83,14 @@ case "$actual_rails_version" in
83
83
  $rails railsapp -d $db
84
84
  ;;
85
85
  *' '[34].*)
86
- $rails new railsapp -d $db
86
+ case "$BUNDLE_GEMFILE" in
87
+ *rails_edge.gemfile)
88
+ $rails new railsapp -d $db --edge
89
+ ;;
90
+ *)
91
+ $rails new railsapp -d $db
92
+ ;;
93
+ esac
87
94
  ;;
88
95
  *)
89
96
  echo "Unknown rails version"
@@ -122,10 +129,6 @@ HealthCheck.setup do |config|
122
129
  end
123
130
  !
124
131
 
125
- echo "Last ten lines of config/environment.rb:"
126
- tail -10 config/environment.rb
127
- echo
128
-
129
132
  echo Unsetting BUNDLE_GEMFILE '(so Gemfile for rails application will be used)'
130
133
  unset BUNDLE_GEMFILE
131
134
 
@@ -134,9 +137,15 @@ then
134
137
  echo Adding health_check as gem to Gemfile...
135
138
  echo "gem 'health_check', :path => '$base_dir'" >> Gemfile
136
139
 
137
- echo
138
- echo Gemfile contents:
139
- cat Gemfile
140
+ case "$RAILS_SERVER" in
141
+ webrick|'')
142
+ echo "Using default webrick server"
143
+ ;;
144
+ *)
145
+ echo "Adding $RAILS_SERVER gem to Gemfile (for use as server)"
146
+ echo "gem '$RAILS_SERVER'" >> Gemfile
147
+ ;;
148
+ esac
140
149
  echo
141
150
  echo running bundle install --binstubs
142
151
  bundle install --binstubs
@@ -152,6 +161,9 @@ then
152
161
  rake="$railsapp/bin/rake"
153
162
  # Fix for rvm, otherwise bundle run from rails create fails
154
163
  export PATH="`pwd`/bin:$PATH"
164
+ echo ================= Gemfile ===================
165
+ cat Gemfile
166
+ echo
155
167
  else
156
168
  dest=$railsapp/vendor/plugins/health_check
157
169
  echo Installing health_check as plugin in $dest ...
@@ -169,18 +181,37 @@ else
169
181
  )
170
182
  fi
171
183
 
172
- echo Setting RAILS_ENV=test RACK_ENV=test
173
- export RAILS_ENV=test RACK_ENV=test
184
+ for e in test ${RAILS_ENV2:-production}
185
+ do
186
+ if [ -f config/environments/$e.rb ]; then
187
+ echo ======== config/environments/$e.rb ================
188
+ sed -i.bak -e 's/config.serve_static_assets = false/config.serve_static_assets = true # NOTE: health_check test: changed to true/' \
189
+ -e 's/config.active_record.migration_error = :page_load/# & # NOTE: health_check test: commented out/' \
190
+ config/environments/$e.rb
191
+ cat config/environments/$e.rb || true
192
+ echo
193
+ fi
194
+ done
195
+ echo "============== config/environment.rb ============="
196
+ cat config/environment.rb
197
+ echo
174
198
 
199
+ echo ========================
175
200
  case $db in
176
201
  jdbcsqlite3)
177
- echo
178
- echo 'Jruby requires the database to be created before the server is started: running rake db:migrate'
179
- $rake db:migrate
180
- echo
181
- ;;
202
+ for e in test ${RAILS_ENV2:-production}
203
+ do
204
+ echo
205
+ export RAILS_ENV=$e RACK_ENV=$e
206
+ echo "Jruby requires the database to be created before the server is started: running RAILS_ENV=$e rake db:migrate"
207
+ $rake db:migrate
208
+ echo
209
+ done
210
+ ;;
182
211
  esac
183
212
 
213
+ echo STATIC-FILE > public/static.txt
214
+
184
215
  cat > public/ajax_example.html <<'EOF'
185
216
  <html>
186
217
  <head>
@@ -252,6 +283,74 @@ cat > public/ajax_example.html <<'EOF'
252
283
  </html>
253
284
  EOF
254
285
 
286
+ cat > app/controllers/example_controller.rb <<'EOF'
287
+ class ExampleController < ApplicationController
288
+
289
+ def index
290
+ render :text => 'example page'
291
+ end
292
+
293
+ def catchall
294
+ render :text => 'catch all route'
295
+ end
296
+
297
+ end
298
+
299
+ EOF
300
+
301
+ if [ -s config/routes.rb ]; then
302
+ mv -f config/routes.rb config/routes.rb-old
303
+ var=`ruby -n -e 'print $1 if /^[^#]+ do \|([^\|]+)\|/' config/routes.rb-old`
304
+ (
305
+ ruby -n -e 'print if not /^end/..9999' config/routes.rb-old | tee /tmp/t$$
306
+ if [ ! -s /tmp/t$$ ]; then
307
+ echo "WARNING: ruby -n -e failed silently - using sed instead!! (rbx-19mode has that problem)" >&3
308
+ sed -e '/^end/,$d' config/routes.rb-old
309
+ fi
310
+
311
+ case "$var" in
312
+ '')
313
+ echo " # -----------------------------------------"
314
+ echo " # START OF SECTION FOR TESTING HEALTH_CHECK"
315
+ echo " get 'example(/:action(/:id))(.:format)' => 'example'"
316
+ echo " if File.exists?('$catchall_file')"
317
+ echo " health_check_routes"
318
+ echo " # CATCH ALL ROUTE"
319
+ echo " get '*path' => 'example#catchall'"
320
+ echo " end"
321
+ echo " # END OF SECTION FOR TESTING HEALTH_CHECK"
322
+ echo " # ---------------------------------------"
323
+ ;;
324
+ *)
325
+ echo " # -----------------------------------------"
326
+ echo " # START OF SECTION FOR TESTING HEALTH_CHECK"
327
+ echo " # example controller"
328
+ echo " ${var}.connect 'example(/:action(/:id))(.:format)', :controller => 'example'"
329
+ echo " if File.exists?('$catchall_file')"
330
+ echo " # health_check routes already at the top in rails 2.3! do not need to call health_check_routes"
331
+ echo " # CATCH ALL ROUTE"
332
+ echo " ${var}.connect '*path', :controller => 'example', :action => 'catchall'"
333
+ echo " end"
334
+ echo " # END OF SECTION FOR TESTING HEALTH_CHECK"
335
+ echo " # ---------------------------------------"
336
+ ;;
337
+ esac
338
+ ruby -n -e 'print if /^end/..9999' config/routes.rb-old | tee /tmp/t$$
339
+ if [ ! -s /tmp/t$$ ]; then
340
+ echo "WARNING: ruby -n -e failed silently - using sed instead!! (rbx-19mode has that problem)" >&3
341
+ sed -n -e '/^end/,$p' config/routes.rb-old
342
+ fi
343
+ ) 3>&1 > config/routes.rb
344
+
345
+ #echo =============== config/routes.rb-old ========================
346
+ #cat config/routes.rb-old
347
+ echo =============== config/routes.rb ========================
348
+ cat config/routes.rb
349
+ else
350
+ echo NO config/routes.rb file!!
351
+ fi
352
+ echo =======================================
353
+
255
354
  echo
256
355
  echo "Created $actual_rails_version app in $railsapp using adapter $db"
257
356
  echo -n "Using "
@@ -26,6 +26,7 @@ esac
26
26
 
27
27
  cd $railsapp
28
28
  date > $custom_file
29
+ rm -f $catchall_file
29
30
 
30
31
  testurl="$base_dir/test/testurl"
31
32
  fake_smtp_server="$base_dir/test/fake_smtp_server"
@@ -33,6 +34,104 @@ fake_smtp_server="$base_dir/test/fake_smtp_server"
33
34
  server_pid=''
34
35
  fake_smtp_pid=''
35
36
 
37
+ pick_a_port()
38
+ {
39
+ while :
40
+ do
41
+ port=`expr 10000 + $RANDOM`
42
+ # Check Tcp ports in Listen mode with No address resolution
43
+ if (netstat -tln | egrep ":${port} .*:"); then
44
+ echo "(Skipping used port)"
45
+ else
46
+ break
47
+ fi
48
+ done
49
+ }
50
+
51
+
52
+ start_server()
53
+ {
54
+ # restart migration list
55
+ rm -rf db/migrate db/schema.rb
56
+ mkdir -p db/migrate
57
+
58
+ # Increment port each time to make sure we have not trouble with address/port already allocated
59
+ pick_a_port
60
+ host=http://127.0.0.1:${port}
61
+ bundle_prefix=''
62
+ if [ -f Gemfile ]
63
+ then
64
+ bundle_prefix='bundle exec'
65
+ fi
66
+ server_arg=${RAILS_SERVER:-webrick}
67
+ case "$server_arg" in
68
+ puma)
69
+ $bundle_prefix puma -b tcp://127.0.0.1:$port &
70
+ ;;
71
+ passenger)
72
+ $bundle_prefix passenger start -p $port &
73
+ ;;
74
+ thin)
75
+ $bundle_prefix thin start -p $port &
76
+ ;;
77
+ unicorn)
78
+ $bundle_prefix unicorn_rails -l 127.0.0.1:$port &
79
+ ;;
80
+ *)
81
+ if [ -x script/server ]
82
+ then
83
+ echo Starting server on port $port using $bundle_prefix ./script/server ...
84
+ $bundle_prefix ./script/server $server_arg -p $port &
85
+ else
86
+ echo Starting server on port $port using $rails s ...
87
+ $bundle_prefix $rails server $server_arg -p $port &
88
+ fi
89
+ ;;
90
+ esac
91
+ server_pid=$!
92
+ sleep 3
93
+ echo
94
+ echo 'Checking server is up ...'
95
+ for i in 1 2 3 4 5 6
96
+ do
97
+ if $testurl ${host}/static.txt ; then
98
+ break
99
+ fi
100
+ if kill -0 $server_pid ; then
101
+ echo "waiting ${i} ..."
102
+ else
103
+ echo "ERROR: Server has died!!"
104
+ exit 3
105
+ fi
106
+ done
107
+ }
108
+
109
+ stop_server()
110
+ {
111
+ case "$server_pid" in
112
+ [0-9]*)
113
+ echo ========================================================
114
+ echo "Killing rails server [pid: $server_pid]"
115
+ kill -1 $server_pid || true
116
+ sleep 2
117
+ kill -9 $server_pid || true
118
+ ;;
119
+ esac
120
+ case "$fake_smtp_pid" in
121
+ [0-9]*)
122
+ echo ========================================================
123
+ echo "Killing fake smtp server [pid: $fake_smtp_pid]"
124
+ kill -1 $fake_smtp_pid || true
125
+ sleep 2
126
+ kill -9 $fake_smtp_pid || true
127
+ ;;
128
+ esac
129
+ server_pid=''
130
+ fake_smtp_pid=''
131
+ wait
132
+ sleep 2
133
+ }
134
+
36
135
  finish()
37
136
  {
38
137
  set +e
@@ -49,21 +148,7 @@ finish()
49
148
  tail -50 $railsapp/log/test.log
50
149
  fi
51
150
 
52
- case "$fake_smtp_pid" in
53
- [0-9]*)
54
- echo ========================================================
55
- echo "Killing fake smtp server [pid: $fake_smtp_pid]"
56
- kill -9 $fake_smtp_pid
57
- ;;
58
- esac
59
- case "$server_pid" in
60
- [0-9]*)
61
- echo ========================================================
62
- echo "Killing rails server [pid: $server_pid]"
63
- kill -9 $server_pid
64
- ;;
65
- esac
66
- wait
151
+ stop_server
67
152
  trap "" 0
68
153
  echo ========================================================
69
154
  echo TEST ${1:-FAILED}
@@ -73,151 +158,188 @@ finish()
73
158
 
74
159
  trap "finish FAILED 1" 0
75
160
 
76
- port=3456
77
-
78
- if [ -x script/server ]
79
- then
80
- if [ -f Gemfile ]
81
- then
82
- echo Starting server on port $port using bundle exec ./script/server ...
83
- bundle exec ./script/server webrick -p $port &
84
- else
85
- echo Starting server on port $port using ./script/server ...
86
- ./script/server webrick -p $port &
87
- fi
88
- else
89
- echo Starting server on port $port using $rails s ...
90
- $rails s webrick -p $port &
91
- fi
92
- server_pid=$!
93
- sleep 17
94
-
95
- echo STATIC-FILE > public/static.txt
96
-
97
- host=http://localhost:${port}
98
-
99
- # get a static file
100
- echo
101
- echo 'TESTING can get a static file ...'
102
- $testurl ${host}/static.txt 200 text/plain STATIC-FILE
103
- echo
104
-
105
- echo 'TESTING health_check/migration should pass with no database migrations ...'
106
- mkdir -p db/migrate
107
- ls db/migrate
108
- $testurl ${host}/health_check/migration 200 text/plain $success
109
- echo
110
-
111
- echo 'TESTING health_check/migration should fail without initial database migration ...'
112
- cp $base_dir/test/migrate/nine/* db/migrate
113
- ls db/migrate
114
- $testurl ${host}/health_check/migration 550 text/plain failed
115
- echo
116
-
117
- echo 'TESTING health_check/database should pass without initial database migration (since it ignores the difference) ...'
118
- $testurl ${host}/health_check/database 200 text/plain $success
119
- echo
120
-
121
- echo 'TESTING health_check/site should pass ...'
122
- $testurl ${host}/health_check/site 200 text/plain $success
123
- echo
124
-
125
- echo 'TESTING health_check/migration should pass after initial database migration ...'
126
- $rake db:migrate
127
- $testurl ${host}/health_check/migration 200 text/plain $success
128
- echo
129
-
130
- echo 'TESTING health_check/migration should fail without all migrations ...'
131
- cp $base_dir/test/migrate/twelve/* db/migrate
132
-
133
- case "$actual_rails_version" in
134
- *' '[12].*|*' '3.[01]*)
135
- echo removing db/migrate/*.*.rb "($actual_rails_version does not support extra dots in migration names)"
136
- rm -f db/migrate/*.*.rb
137
- ;;
138
- esac
139
- ls db/migrate
140
- $testurl ${host}/health_check/migration 550 text/plain failed
141
- echo
142
-
143
- echo 'TESTING health_check/migration should pass after both database migrations ...'
144
- $rake db:migrate
145
- $testurl ${host}/health_check/migration 200 text/plain $success
146
- echo
161
+ common_tests()
162
+ {
147
163
 
148
- echo 'TESTING health_check/migration should pass after both database migrations ...'
149
- $rake db:migrate
150
- $testurl ${host}/health_check/migration 200 text/plain $success
151
- echo
164
+ echo 'CHECKING routes exist...'
165
+ $rake routes | tee /tmp/t$$
166
+ echo
167
+ case `egrep health_check /tmp/t$$ || true` in
168
+ '')
169
+ echo WARNING - routes for health_check not listed!
170
+ ;;
171
+ esac
152
172
 
153
- echo 'TESTING health_check/email should fail without smtp available ...'
154
- $testurl ${host}/health_check/email 550 text/plain failed
155
- echo
173
+ echo
174
+ echo 'TESTING can get a static file ...'
175
+ $testurl ${host}/static.txt 200 text/plain STATIC-FILE
176
+ echo
177
+
178
+ echo
179
+ echo 'TESTING can get an example controller ...'
180
+ $testurl ${host}/example 200 text/html 'example page'
181
+ echo
182
+
183
+ echo
184
+ echo 'TESTING direct call to catchall method on example controller ...'
185
+ $testurl ${host}/example/catchall 200 text/html 'catch all route'
186
+ echo
187
+
188
+ echo 'TESTING health_check/migration should pass with no database migrations ...'
189
+ ls db/migrate
190
+ $testurl ${host}/health_check/migration 200 text/plain $success
191
+ echo
192
+
193
+ echo 'TESTING health_check/migration should fail without initial database migration ...'
194
+ cp $base_dir/test/migrate/nine/* db/migrate
195
+ ls db/migrate
196
+ $testurl ${host}/health_check/migration 550 text/plain failed
197
+ echo
198
+
199
+ echo 'TESTING health_check/database should pass without initial database migration (since it ignores the difference) ...'
200
+ $testurl ${host}/health_check/database 200 text/plain $success
201
+ echo
202
+
203
+ echo 'TESTING health_check/site should pass ...'
204
+ $testurl ${host}/health_check/site 200 text/plain $success
205
+ echo
206
+
207
+ echo 'TESTING health_check/migration should pass after initial database migration ...'
208
+ $rake db:migrate
209
+ $testurl ${host}/health_check/migration 200 text/plain $success
210
+ echo
211
+
212
+ echo 'TESTING health_check/migration should fail without all migrations ...'
213
+ cp $base_dir/test/migrate/twelve/* db/migrate
214
+
215
+ case "$actual_rails_version" in
216
+ *' '[12].*|*' '3.[01]*)
217
+ echo removing db/migrate/*.*.rb "($actual_rails_version does not support extra dots in migration names)"
218
+ rm -f db/migrate/*.*.rb
219
+ ;;
220
+ esac
221
+ ls db/migrate
222
+ $testurl ${host}/health_check/migration 550 text/plain failed
223
+ echo
224
+
225
+ echo 'TESTING health_check/migration should pass after both database migrations ...'
226
+ $rake db:migrate
227
+ $testurl ${host}/health_check/migration 200 text/plain $success
228
+ echo
229
+
230
+ echo 'TESTING health_check/migration should pass after both database migrations ...'
231
+ $rake db:migrate
232
+ $testurl ${host}/health_check/migration 200 text/plain $success
233
+ echo
234
+
235
+ echo 'TESTING health_check/email should fail without smtp available ...'
236
+ $testurl ${host}/health_check/email 550 text/plain failed
237
+ echo
238
+
239
+ echo 'TESTING health_check/email should pass with smtp available ...'
240
+ $fake_smtp_server &
241
+ fake_smtp_pid=$!
242
+ sleep 5
243
+ $testurl ${host}/health_check/email 200 text/plain $success
244
+ echo
245
+
246
+ echo 'TESTING health_check (all) should fail without smtp available ...'
247
+ $testurl ${host}/health_check 550 text/plain failed
248
+ echo
249
+
250
+ echo 'TESTING health_check/all should fail without smtp available ...'
251
+ $testurl ${host}/health_check 550 text/plain failed
252
+ echo
253
+
254
+ kill -9 $fake_smtp_pid || echo fake_smtp_server had finished as expected
255
+ echo 'TESTING health_check (all) should pass with smtp available ...'
256
+ $fake_smtp_server &
257
+ fake_smtp_pid=$!
258
+ sleep 5
259
+ $testurl ${host}/health_check 200 text/plain $success
260
+ echo
261
+
262
+ kill -9 $fake_smtp_pid || echo fake_smtp_server had finished as expected
263
+ echo 'TESTING health_check/all should pass with smtp available ...'
264
+ $fake_smtp_server &
265
+ fake_smtp_pid=$!
266
+ sleep 5
267
+ $testurl ${host}/health_check/all 200 text/plain $success
268
+ echo
269
+
270
+ echo 'TESTING health_check/custom should pass ...'
271
+ $testurl ${host}/health_check/custom 200 text/plain $success
272
+ echo
273
+
274
+ echo 'TESTING health_check/custom.html should pass (returning plain text) ...'
275
+ $testurl ${host}/health_check/custom.html 200 text/plain $success
276
+ echo
277
+
278
+ echo 'TESTING health_check/custom.json should pass ...'
279
+ $testurl ${host}/health_check/custom.json 200 application/json '"healthy":true'
280
+ $testurl ${host}/health_check/custom.json 200 application/json "\"message\":\"$success\""
281
+ echo
282
+
283
+ echo 'TESTING health_check/custom.xml should pass ...'
284
+ $testurl ${host}/health_check/custom.xml 200 application/xml '<healthy type="boolean">true</healthy>'
285
+ $testurl ${host}/health_check/custom.xml 200 application/xml "<message>$success</message>"
286
+ echo
287
+
288
+ echo 'TESTING health_check/custom should fail when custom returns string ...'
289
+ rm -f $custom_file
290
+ $testurl ${host}/health_check/custom 550 text/plain failed
291
+ echo
292
+
293
+ echo 'TESTING health_check (all) should fail when custom check fails ...'
294
+ $testurl ${host}/health_check 550 text/plain "$custom_file is missing!"
295
+ echo
296
+
297
+ echo 'TESTING health_check.json (all) should fail when custom check fails ...'
298
+ $testurl ${host}/health_check.json 555 application/json '"healthy":false'
299
+ $testurl ${host}/health_check.json 555 application/json "$custom_file is missing!"
300
+ echo
301
+
302
+ echo 'TESTING health_check.xml (all) should fail when custom check fails ...'
303
+ $testurl ${host}/health_check.xml 555 application/xml '<healthy type="boolean">false</healthy>'
304
+ echo
305
+
306
+ date > $custom_file
307
+ }
156
308
 
157
- echo 'TESTING health_check/email should pass with smtp available ...'
158
- $fake_smtp_server &
159
- fake_smtp_pid=$!
160
- sleep 5
161
- $testurl ${host}/health_check/email 200 text/plain $success
162
- echo
309
+ echo ========================================================
310
+ echo TESTING WITHOUT CATCHALL in test env
311
+ echo ========================================================
312
+ export RAILS_ENV=test RACK_ENV=test
163
313
 
164
- echo 'TESTING health_check (all) should fail without smtp available ...'
165
- $testurl ${host}/health_check 550 text/plain failed
166
- echo
314
+ start_server
167
315
 
168
- echo 'TESTING health_check/all should fail without smtp available ...'
169
- $testurl ${host}/health_check 550 text/plain failed
170
- echo
316
+ # get a static file
171
317
 
172
- kill -9 $fake_smtp_pid || echo fake_smtp_server had finished as expected
173
- echo 'TESTING health_check (all) should pass with smtp available ...'
174
- $fake_smtp_server &
175
- fake_smtp_pid=$!
176
- sleep 5
177
- $testurl ${host}/health_check 200 text/plain $success
178
318
  echo
319
+ echo 'TESTING no catchall route active ...'
320
+ expected_status=404,500,502
321
+ $testurl ${host}/another/url $expected_status
179
322
 
180
- kill -9 $fake_smtp_pid || echo fake_smtp_server had finished as expected
181
- echo 'TESTING health_check/all should pass with smtp available ...'
182
- $fake_smtp_server &
183
- fake_smtp_pid=$!
184
- sleep 5
185
- $testurl ${host}/health_check/all 200 text/plain $success
186
- echo
323
+ common_tests
187
324
 
188
- echo 'TESTING health_check/custom should pass ...'
189
- $testurl ${host}/health_check/custom 200 text/plain $success
190
- echo
325
+ echo ========================================================
326
+ echo TESTING WITH CATCHALL in ${RAILS_ENV2:-production} env
327
+ echo ========================================================
328
+ export RAILS_ENV=${RAILS_ENV2:-production} RACK_ENV=${RAILS_ENV2:-production}
191
329
 
192
- echo 'TESTING health_check/custom.json should pass ...'
193
- $testurl ${host}/health_check/custom.json 200 application/json '"healthy":true'
194
- $testurl ${host}/health_check/custom.json 200 application/json "\"message\":\"$success\""
195
- echo
330
+ date > $catchall_file
196
331
 
197
- echo 'TESTING health_check/custom.xml should pass ...'
198
- $testurl ${host}/health_check/custom.xml 200 application/xml '<healthy type="boolean">true</healthy>'
199
- $testurl ${host}/health_check/custom.xml 200 application/xml "<message>$success</message>"
200
- echo
332
+ stop_server
333
+ start_server
201
334
 
202
- echo 'TESTING health_check/custom should fail when custom returns string ...'
203
- rm -f $custom_file
204
- $testurl ${host}/health_check/custom 550 text/plain failed
205
335
  echo
206
-
207
- echo 'TESTING health_check (all) should fail when custom check fails ...'
208
- $testurl ${host}/health_check 550 text/plain "$custom_file is missing!"
336
+ echo 'TESTING catchall route active ...'
337
+ $testurl ${host}/another/url 200 text/html 'catch all route'
209
338
  echo
210
339
 
211
- echo 'TESTING health_check.json (all) should fail when custom check fails ...'
212
- $testurl ${host}/health_check.json 555 application/json '"healthy":false'
213
- $testurl ${host}/health_check.json 555 application/json "$custom_file is missing!"
214
- echo
340
+ common_tests
215
341
 
216
- echo 'TESTING health_check.xml (all) should fail when custom check fails ...'
217
- $testurl ${host}/health_check.xml 555 application/xml '<healthy type="boolean">false</healthy>'
218
- echo
219
-
220
- date > $custom_file
342
+ rm -f $catchall_file
221
343
 
222
344
  finish PASSED 0
223
345
  exit 0
data/test/testurl CHANGED
@@ -30,16 +30,16 @@ puts " response code: #{response.code} #{response.message}"
30
30
  puts " content_type: #{response.content_type}"
31
31
  puts " body: #{page_content}"
32
32
 
33
- if ARGV[1]
34
- if response.code == ARGV[1]
35
- puts "PASS (response code was #{ARGV[1]})"
33
+ if ARGV[1] and ARGV[1] != ''
34
+ if ARGV[1].split(',').include?(response.code)
35
+ puts "PASS (response code was #{response.code} which matched #{ARGV[1]})"
36
36
  else
37
37
  puts "FAIL (response code was #{response.code}, expected #{ARGV[1]})"
38
38
  exit 1
39
39
  end
40
40
  end
41
41
 
42
- if ARGV[2]
42
+ if ARGV[2] and ARGV[2] != ''
43
43
  if response.content_type == ARGV[2]
44
44
  puts "PASS (content type was #{response.content_type})"
45
45
  else
@@ -48,7 +48,7 @@ if ARGV[2]
48
48
  end
49
49
  end
50
50
 
51
- if ARGV[3]
51
+ if ARGV[3] and ARGV[3] != ''
52
52
  if page_content.to_s.include? ARGV[3]
53
53
  puts "PASS (found #{ARGV[3]})"
54
54
  else
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: health_check
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 5
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 3
8
+ - 4
9
9
  - 1
10
- version: 1.3.1
10
+ version: 1.4.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ian Heggie
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-09-25 00:00:00 +10:00
18
+ date: 2013-10-21 00:00:00 +11:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -137,6 +137,7 @@ files:
137
137
  - test/rails_3.1.gemfile
138
138
  - test/rails_3.2.gemfile
139
139
  - test/rails_4.0.gemfile
140
+ - test/rails_edge.gemfile
140
141
  - test/setup_railsapp
141
142
  - test/test_helper.rb
142
143
  - test/test_with_railsapp
@@ -190,6 +191,7 @@ test_files:
190
191
  - test/rails_3.1.gemfile
191
192
  - test/rails_3.2.gemfile
192
193
  - test/rails_4.0.gemfile
194
+ - test/rails_edge.gemfile
193
195
  - test/setup_railsapp
194
196
  - test/test_helper.rb
195
197
  - test/test_with_railsapp