health_check 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +11 -0
- data/README.rdoc +20 -7
- data/Rakefile +3 -32
- data/lib/health_check.rb +15 -1
- data/lib/health_check/health_check_controller.rb +33 -21
- data/lib/health_check/health_check_routes.rb +1 -1
- data/lib/health_check/middleware_health_check.rb +72 -7
- data/lib/health_check/utils.rb +8 -5
- data/lib/health_check/version.rb +1 -1
- data/test/setup_railsapp +10 -7
- data/test/test_with_railsapp +122 -16
- data/test/testurl +6 -1
- metadata +2 -8
- data/test/test_helper.rb +0 -68
- data/test/unit/health_check_controller_test.rb +0 -175
- data/test/unit/routes_test.rb +0 -42
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b5a934dfee4618efc3d217163112b251e926879
|
4
|
+
data.tar.gz: 811fdba5dd439ef0016ca94c8c2b0b6dbac19a99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd09549905a225cc3c25a02f295335dcb013cb565c52095d4b87e1fb4e74552d4231637d7a4e9b7698c28f896103cf529cd1aefbbf1089dfb1b161c650ca11da
|
7
|
+
data.tar.gz: 44fc64d17c2722c5bd3841d65dabf2bc5f55b0a61b01a862484ea79f4b64ebe29d4300667b5c6f572eb50f5c90c8be59bcb783517721c2de18e3bbdc54929f42
|
data/CHANGELOG
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
= Change Log =
|
2
2
|
|
3
|
+
* 2.5.0
|
4
|
+
* Added whitelist for IP# (Thanks Fernando Alvarez)
|
5
|
+
* reworked whitelist PR
|
6
|
+
* Expanded tests for whitelist and basic authentication
|
7
|
+
* reworked middleware, simplified error codes, added whitelist and basic authentication into middleware
|
8
|
+
* Removed unit tests as they where aonly applicable under rails 2.3 when installed in vendor/plugins
|
9
|
+
* #55 by mnoack - correct binstubs arg in test
|
10
|
+
* #54 by gkop - Lograge config snippet works with Rails 4.2.7.1, lograge 0.4.1
|
11
|
+
* Used ideas from #52 - use middleware to catch Rails stack exceptions
|
12
|
+
* #51 by tokenshift - Fixing NameError on `basic_auth_username`.
|
13
|
+
* Changes to address #50 by fillphafftek - allow standard check to be run from middleware if configured to do so, removed requirement for "middleware" to be passed in url for middleware tests
|
3
14
|
* 2.4.0
|
4
15
|
* Added tests for middleware
|
5
16
|
* Changed contributed middleware code to conform to existing url scheme
|
data/README.rdoc
CHANGED
@@ -76,7 +76,7 @@ To change the configuration of health_check, create a file `config/initializers/
|
|
76
76
|
|
77
77
|
HealthCheck.setup do |config|
|
78
78
|
|
79
|
-
# uri prefix
|
79
|
+
# uri prefix (no leading slash)
|
80
80
|
config.uri = 'health_check'
|
81
81
|
|
82
82
|
# Text output upon success
|
@@ -124,6 +124,13 @@ To change the configuration of health_check, create a file `config/initializers/
|
|
124
124
|
# These default to nil and the endpoint is not protected
|
125
125
|
config.basic_auth_username = 'my_username'
|
126
126
|
config.basic_auth_password = 'my_password'
|
127
|
+
|
128
|
+
# Whitelist requesting IPs
|
129
|
+
# Defaults to blank and allows any IP
|
130
|
+
config.origin_ip_whitelist = %w(123.123.123.123)
|
131
|
+
|
132
|
+
# http status code used when the ip is not allowed for the request
|
133
|
+
config.http_status_for_ip_whitelist_error = 403
|
127
134
|
end
|
128
135
|
|
129
136
|
You may call add_custom_check multiple times with different tests. These tests will be included in the default list ("standard").
|
@@ -133,15 +140,21 @@ If you have a catchall route then add the following line above the catch all rou
|
|
133
140
|
|
134
141
|
=== Installing As Middleware
|
135
142
|
|
136
|
-
Install health_check as middleware if you want to ignore exceptions from later parts of the Rails middleware stack,
|
137
|
-
eg DB connection errors from QueryCache.
|
138
|
-
health check rather than the full stack check. The "middleware" check will fail if you have not installed health_check as middleware.
|
143
|
+
Install health_check as middleware if you want to sometimes ignore exceptions from later parts of the Rails middleware stack,
|
144
|
+
eg DB connection errors from QueryCache. The "middleware" check will fail if you have not installed health_check as middleware.
|
139
145
|
|
140
146
|
To install health_check as middleware add the following line to the config/application.rb:
|
141
147
|
config.middleware.insert_after "Rails::Rack::Logger", HealthCheck::MiddlewareHealthcheck
|
142
148
|
|
143
149
|
Note: health_check is installed as a full rails engine even if it has been installed as middleware. This is so the
|
144
|
-
|
150
|
+
remaining checks continue to run through the complete rails stack.
|
151
|
+
|
152
|
+
You can also adjust what checks are run from middleware, eg if you want to exclude the checking of the database etc, then set
|
153
|
+
config.middleware_checks = ['middleware', 'standard', 'custom']
|
154
|
+
config.standard_checks = ['middleware', 'custom']
|
155
|
+
|
156
|
+
Middleware checks are run first, and then full stack checks.
|
157
|
+
When installed as middleware, exceptions thrown when running the full stack tests are formatted in the standard way.
|
145
158
|
|
146
159
|
== Uptime Monitoring
|
147
160
|
|
@@ -200,7 +213,7 @@ It is recomended that you use silencer, lograge or one of the other log filterin
|
|
200
213
|
|
201
214
|
For example, with lograge use the following to exclude health_check from being logged:
|
202
215
|
|
203
|
-
config.lograge.ignore_actions = ["
|
216
|
+
config.lograge.ignore_actions = ["HealthCheck::HealthCheckController#index"]
|
204
217
|
|
205
218
|
Likewise you will probably want to exclude health_check from monitoring systems like newrelic.
|
206
219
|
|
@@ -277,7 +290,7 @@ The command `rake test` will also launch these tests, except it cannot install t
|
|
277
290
|
|
278
291
|
== Copyright
|
279
292
|
|
280
|
-
Copyright (c) 2010-
|
293
|
+
Copyright (c) 2010-2016 Ian Heggie, released under the MIT license.
|
281
294
|
See MIT-LICENSE for details.
|
282
295
|
|
283
296
|
== Contributors
|
data/Rakefile
CHANGED
@@ -3,38 +3,9 @@ require "bundler/gem_tasks"
|
|
3
3
|
#require 'rubygems'
|
4
4
|
require 'rake'
|
5
5
|
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
if File.exists?(environment_file) and File.directory?(plugin_dir)
|
11
|
-
# test as plugin
|
12
|
-
|
13
|
-
require 'rake/testtask'
|
14
|
-
Rake::TestTask.new(:test) do |test|
|
15
|
-
test.libs << 'lib' << 'test'
|
16
|
-
test.pattern = 'test/**/*_test.rb'
|
17
|
-
test.verbose = true
|
18
|
-
end
|
19
|
-
|
20
|
-
begin
|
21
|
-
require 'rcov/rcovtask'
|
22
|
-
Rcov::RcovTask.new do |test|
|
23
|
-
test.libs << 'test'
|
24
|
-
test.pattern = 'test/**/*_test.rb'
|
25
|
-
test.verbose = true
|
26
|
-
end
|
27
|
-
rescue LoadError
|
28
|
-
task :rcov do
|
29
|
-
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
else
|
34
|
-
#tests as gem
|
35
|
-
task :test do
|
36
|
-
exec '/bin/bash', './test/test_with_railsapp'
|
37
|
-
end
|
6
|
+
#tests as gem
|
7
|
+
task :test do
|
8
|
+
exec '/bin/bash', './test/test_with_railsapp'
|
38
9
|
end
|
39
10
|
|
40
11
|
task :default => :test
|
data/lib/health_check.rb
CHANGED
@@ -23,6 +23,14 @@ module HealthCheck
|
|
23
23
|
mattr_accessor :http_status_for_error_object
|
24
24
|
self.http_status_for_error_object = 500
|
25
25
|
|
26
|
+
# http status code used when the ip is not allowed for the request
|
27
|
+
mattr_accessor :http_status_for_ip_whitelist_error
|
28
|
+
self.http_status_for_ip_whitelist_error = 403
|
29
|
+
|
30
|
+
# ips allowed to perform requests
|
31
|
+
mattr_accessor :origin_ip_whitelist
|
32
|
+
self.origin_ip_whitelist = []
|
33
|
+
|
26
34
|
# max-age of response in seconds
|
27
35
|
# cache-control is public when max_age > 1 and basic authentication is used
|
28
36
|
mattr_accessor :max_age
|
@@ -32,7 +40,7 @@ module HealthCheck
|
|
32
40
|
mattr_accessor :buckets
|
33
41
|
self.buckets = {}
|
34
42
|
|
35
|
-
# health check uri path
|
43
|
+
# health check uri path
|
36
44
|
mattr_accessor :uri
|
37
45
|
self.uri = 'health_check'
|
38
46
|
|
@@ -49,6 +57,12 @@ module HealthCheck
|
|
49
57
|
self.full_checks = ['database', 'migrations', 'custom', 'email', 'cache', 'redis-if-present', 'sidekiq-redis-if-present', 'resque-redis-if-present', 's3-if-present']
|
50
58
|
self.standard_checks = [ 'database', 'migrations', 'custom', 'emailconf' ]
|
51
59
|
|
60
|
+
# Middleware based checks
|
61
|
+
mattr_accessor :middleware_checks
|
62
|
+
self.middleware_checks = [ 'middleware' ]
|
63
|
+
|
64
|
+
mattr_accessor :installed_as_middleware
|
65
|
+
|
52
66
|
def self.add_custom_check(&block)
|
53
67
|
custom_checks << block
|
54
68
|
end
|
@@ -5,6 +5,7 @@ module HealthCheck
|
|
5
5
|
class HealthCheckController < ActionController::Base
|
6
6
|
|
7
7
|
layout false if self.respond_to? :layout
|
8
|
+
before_action :check_origin_ip
|
8
9
|
before_action :authenticate
|
9
10
|
|
10
11
|
def index
|
@@ -13,34 +14,21 @@ module HealthCheck
|
|
13
14
|
if max_age > 1
|
14
15
|
last_modified = Time.at((last_modified.to_f / max_age).floor * max_age).utc
|
15
16
|
end
|
16
|
-
public = (max_age > 1) && ! basic_auth_username
|
17
|
+
public = (max_age > 1) && ! HealthCheck.basic_auth_username
|
17
18
|
if stale?(:last_modified => last_modified, :public => public)
|
18
|
-
|
19
|
-
|
20
|
-
checks = params[:checks] || 'standard'
|
19
|
+
checks = params[:checks] ? params[:checks].split('_') : ['standard']
|
20
|
+
checks -= HealthCheck.middleware_checks if HealthCheck.installed_as_middleware
|
21
21
|
begin
|
22
22
|
errors = HealthCheck::Utils.process_checks(checks)
|
23
23
|
rescue Exception => e
|
24
24
|
errors = e.message.blank? ? e.class.to_s : e.message.to_s
|
25
|
-
end
|
25
|
+
end
|
26
26
|
response.headers['Cache-control'] = (public ? 'public' : 'private') + ', no-cache, must-revalidate' + (max_age > 0 ? ", max-age=#{max_age}" : '')
|
27
27
|
if errors.blank?
|
28
|
-
|
29
|
-
respond_to do |format|
|
30
|
-
format.html { render plain_key => HealthCheck.success, :content_type => 'text/plain' }
|
31
|
-
format.json { render :json => obj }
|
32
|
-
format.xml { render :xml => obj }
|
33
|
-
format.any { render plain_key => HealthCheck.success, :content_type => 'text/plain' }
|
34
|
-
end
|
28
|
+
send_response nil, :ok, :ok
|
35
29
|
else
|
36
30
|
msg = "health_check failed: #{errors}"
|
37
|
-
|
38
|
-
respond_to do |format|
|
39
|
-
format.html { render plain_key => msg, :status => HealthCheck.http_status_for_error_text, :content_type => 'text/plain' }
|
40
|
-
format.json { render :json => obj, :status => HealthCheck.http_status_for_error_object}
|
41
|
-
format.xml { render :xml => obj, :status => HealthCheck.http_status_for_error_object }
|
42
|
-
format.any { render plain_key => msg, :status => HealthCheck.http_status_for_error_text, :content_type => 'text/plain' }
|
43
|
-
end
|
31
|
+
send_response msg, HealthCheck.http_status_for_error_text, HealthCheck.http_status_for_error_object
|
44
32
|
# Log a single line as some uptime checkers only record that it failed, not the text returned
|
45
33
|
if logger
|
46
34
|
logger.info msg
|
@@ -49,20 +37,44 @@ module HealthCheck
|
|
49
37
|
end
|
50
38
|
end
|
51
39
|
|
52
|
-
|
53
40
|
protected
|
54
41
|
|
42
|
+
def send_response(msg, text_status, obj_status)
|
43
|
+
healthy = !msg
|
44
|
+
msg ||= HealthCheck.success
|
45
|
+
obj = { :healthy => healthy, :message => msg}
|
46
|
+
respond_to do |format|
|
47
|
+
format.html { render plain_key => msg, :status => text_status, :content_type => 'text/plain' }
|
48
|
+
format.json { render :json => obj, :status => obj_status }
|
49
|
+
format.xml { render :xml => obj, :status => obj_status }
|
50
|
+
format.any { render plain_key => msg, :status => text_status, :content_type => 'text/plain' }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
55
54
|
def authenticate
|
56
55
|
return unless HealthCheck.basic_auth_username && HealthCheck.basic_auth_password
|
57
|
-
authenticate_or_request_with_http_basic do |username, password|
|
56
|
+
authenticate_or_request_with_http_basic('Health Check') do |username, password|
|
58
57
|
username == HealthCheck.basic_auth_username && password == HealthCheck.basic_auth_password
|
59
58
|
end
|
60
59
|
end
|
61
60
|
|
61
|
+
def check_origin_ip
|
62
|
+
unless HealthCheck.origin_ip_whitelist.blank? ||
|
63
|
+
HealthCheck.origin_ip_whitelist.include?(request.ip)
|
64
|
+
render plain_key => 'Health check is not allowed for the requesting IP',
|
65
|
+
:status => HealthCheck.http_status_for_ip_whitelist_error,
|
66
|
+
:content_type => 'text/plain'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
62
70
|
# turn cookies for CSRF off
|
63
71
|
def protect_against_forgery?
|
64
72
|
false
|
65
73
|
end
|
66
74
|
|
75
|
+
def plain_key
|
76
|
+
# Rails 4.0 doesn't have :plain, but it is deprecated later on
|
77
|
+
Rails.version < '4.1' ? :text : :plain
|
78
|
+
end
|
67
79
|
end
|
68
80
|
end
|
@@ -8,7 +8,7 @@ module ActionDispatch::Routing
|
|
8
8
|
|
9
9
|
def add_health_check_routes(prefix = nil)
|
10
10
|
HealthCheck.uri = prefix if prefix
|
11
|
-
match "#{HealthCheck.uri}(/:checks)(.:format)", :to => 'health_check/health_check#index', via: [:get, :post]
|
11
|
+
match "#{HealthCheck.uri}(/:checks)(.:format)", :to => 'health_check/health_check#index', via: [:get, :post], :defaults => { :format => 'txt' }
|
12
12
|
end
|
13
13
|
|
14
14
|
end
|
@@ -6,13 +6,20 @@ module HealthCheck
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def call(env)
|
9
|
-
|
10
|
-
if
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
(response_type, middleware_checks, full_stack_checks) = parse_env(env)
|
10
|
+
if response_type
|
11
|
+
if error_response = (ip_blocked(env) || not_authenticated(env))
|
12
|
+
return error_response
|
13
|
+
end
|
14
|
+
HealthCheck.installed_as_middleware = true
|
15
|
+
errors = ''
|
14
16
|
begin
|
15
|
-
|
17
|
+
# Process the checks to be run from middleware
|
18
|
+
errors = HealthCheck::Utils.process_checks(middleware_checks, true)
|
19
|
+
# Process remaining checks through the full stack if there are any
|
20
|
+
unless full_stack_checks.empty?
|
21
|
+
return @app.call(env)
|
22
|
+
end
|
16
23
|
rescue => e
|
17
24
|
errors = e.message.blank? ? e.class.to_s : e.message.to_s
|
18
25
|
end
|
@@ -21,17 +28,75 @@ module HealthCheck
|
|
21
28
|
if response_type == 'xml'
|
22
29
|
content_type = 'text/xml'
|
23
30
|
msg = { healthy: healthy, message: msg }.to_xml
|
31
|
+
error_code = HealthCheck.http_status_for_error_object
|
24
32
|
elsif response_type == 'json'
|
25
33
|
content_type = 'application/json'
|
26
34
|
msg = { healthy: healthy, message: msg }.to_json
|
35
|
+
error_code = HealthCheck.http_status_for_error_object
|
27
36
|
else
|
28
37
|
content_type = 'text/plain'
|
38
|
+
error_code = HealthCheck.http_status_for_error_text
|
29
39
|
end
|
30
|
-
[ (healthy ? 200 :
|
40
|
+
[ (healthy ? 200 : error_code), { 'Content-Type' => content_type }, [msg] ]
|
31
41
|
else
|
32
42
|
@app.call(env)
|
33
43
|
end
|
34
44
|
end
|
35
45
|
|
46
|
+
protected
|
47
|
+
|
48
|
+
def parse_env(env)
|
49
|
+
uri = env['PATH_INFO']
|
50
|
+
if uri =~ /^\/#{Regexp.escape HealthCheck.uri}(\/([-_0-9a-zA-Z]*))?(\.(\w*))?$/
|
51
|
+
checks = $2.to_s == '' ? ['standard'] : $2.split('_')
|
52
|
+
response_type = $4.to_s
|
53
|
+
middleware_checks = checks & HealthCheck.middleware_checks
|
54
|
+
full_stack_checks = (checks - HealthCheck.middleware_checks) - ['and']
|
55
|
+
[response_type, middleware_checks, full_stack_checks ]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def ip_blocked(env)
|
60
|
+
return false if HealthCheck.origin_ip_whitelist.blank?
|
61
|
+
req = Rack::Request.new(env)
|
62
|
+
unless HealthCheck.origin_ip_whitelist.include?(req.ip)
|
63
|
+
[ HealthCheck.http_status_for_ip_whitelist_error,
|
64
|
+
{ 'Content-Type' => 'text/plain' },
|
65
|
+
[ 'Health check is not allowed for the requesting IP' ]
|
66
|
+
]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def not_authenticated(env)
|
71
|
+
return false unless HealthCheck.basic_auth_username && HealthCheck.basic_auth_password
|
72
|
+
auth = MiddlewareHealthcheck::Request.new(env)
|
73
|
+
if auth.provided? && auth.basic? && Rack::Utils.secure_compare(HealthCheck.basic_auth_username, auth.username) && Rack::Utils.secure_compare(HealthCheck.basic_auth_password, auth.password)
|
74
|
+
env['REMOTE_USER'] = auth.username
|
75
|
+
return false
|
76
|
+
end
|
77
|
+
[ 401,
|
78
|
+
{ 'Content-Type' => 'text/plain', 'WWW-Authenticate' => 'Basic realm="Health Check"' },
|
79
|
+
[ ]
|
80
|
+
]
|
81
|
+
end
|
82
|
+
|
83
|
+
class Request < Rack::Auth::AbstractRequest
|
84
|
+
def basic?
|
85
|
+
"basic" == scheme
|
86
|
+
end
|
87
|
+
|
88
|
+
def credentials
|
89
|
+
@credentials ||= params.unpack("m*").first.split(/:/, 2)
|
90
|
+
end
|
91
|
+
|
92
|
+
def username
|
93
|
+
credentials.first
|
94
|
+
end
|
95
|
+
|
96
|
+
def password
|
97
|
+
credentials.last
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
36
101
|
end
|
37
102
|
end
|
data/lib/health_check/utils.rb
CHANGED
@@ -17,9 +17,10 @@ module HealthCheck
|
|
17
17
|
|
18
18
|
cattr_accessor :default_smtp_settings
|
19
19
|
|
20
|
-
|
20
|
+
# process an array containing a list of checks
|
21
|
+
def self.process_checks(checks, called_from_middleware = false)
|
21
22
|
errors = ''
|
22
|
-
checks.
|
23
|
+
checks.each do |check|
|
23
24
|
case check
|
24
25
|
when 'and', 'site'
|
25
26
|
# do nothing
|
@@ -63,15 +64,17 @@ module HealthCheck
|
|
63
64
|
when 's3'
|
64
65
|
errors << HealthCheck::S3HealthCheck.check
|
65
66
|
when "standard"
|
66
|
-
errors << HealthCheck::Utils.process_checks(HealthCheck.standard_checks
|
67
|
+
errors << HealthCheck::Utils.process_checks(HealthCheck.standard_checks, called_from_middleware)
|
68
|
+
when "middleware"
|
69
|
+
errors << "Health check not called from middleware - probably not installed as middleware." unless called_from_middleware
|
67
70
|
when "custom"
|
68
71
|
HealthCheck.custom_checks.each do |custom_check|
|
69
72
|
errors << custom_check.call(self)
|
70
73
|
end
|
71
74
|
when "all", "full"
|
72
|
-
errors << HealthCheck::Utils.process_checks(HealthCheck.full_checks
|
75
|
+
errors << HealthCheck::Utils.process_checks(HealthCheck.full_checks, called_from_middleware)
|
73
76
|
else
|
74
|
-
return "invalid argument to health_test.
|
77
|
+
return "invalid argument to health_test."
|
75
78
|
end
|
76
79
|
end
|
77
80
|
return errors
|
data/lib/health_check/version.rb
CHANGED
data/test/setup_railsapp
CHANGED
@@ -70,16 +70,16 @@ rake="$base_dir/test/bin/rake"
|
|
70
70
|
|
71
71
|
echo Checking $rails is present ...
|
72
72
|
[ -f $rails -a -f $rake ] || bundle exec rake rails:update:bin || echo '(ignored rake rails:update:bin exit status)'
|
73
|
-
[ -f $rails ] || bundle
|
74
|
-
[ -f $rails ] || bundle
|
73
|
+
[ -f $rails ] || bundle binstubs railties || echo '(ignored bundle exit status)'
|
74
|
+
[ -f $rails ] || bundle binstubs rails || echo '(ignored bundle exit status)'
|
75
75
|
if [ ! -f $rails ]; then
|
76
76
|
echo "Test aborted (unable to create $rails)"
|
77
77
|
exit 2
|
78
78
|
fi
|
79
79
|
|
80
80
|
if [ ! -f $rake ]; then
|
81
|
-
echo "Running bundle
|
82
|
-
if ! bundle
|
81
|
+
echo "Running bundle binstubs rake ..."
|
82
|
+
if ! bundle binstubs rake || [ ! -f $rake ]; then
|
83
83
|
echo "Test aborted (unable to create $rake)"
|
84
84
|
exit 2
|
85
85
|
fi
|
@@ -168,6 +168,9 @@ HealthCheck.setup do |config|
|
|
168
168
|
config.http_status_for_error_text = 550
|
169
169
|
config.http_status_for_error_object = 555
|
170
170
|
config.uri = '$route_prefix'
|
171
|
+
config.origin_ip_whitelist = ENV['IP_WHITELIST'].split(',') unless ENV['IP_WHITELIST'].blank?
|
172
|
+
config.basic_auth_username = ENV['AUTH_USER'] unless ENV['AUTH_USER'].blank?
|
173
|
+
config.basic_auth_password = ENV['AUTH_PASSWORD'] unless ENV['AUTH_PASSWORD'].blank?
|
171
174
|
|
172
175
|
config.add_custom_check do
|
173
176
|
File.exists?("$custom_file") ? '' : '$custom_file is missing!'
|
@@ -208,15 +211,15 @@ then
|
|
208
211
|
|
209
212
|
echo Checking $rails is present ...
|
210
213
|
[ -f $rails -a -f $rake ] || bundle exec rake rails:update:bin || echo '(ignored rake rails:update:bin exit status)'
|
211
|
-
[ -f $rails ] || bundle
|
212
|
-
[ -f $rails ] || bundle
|
214
|
+
[ -f $rails ] || bundle binstubs railties || echo '(ignored bundle exit status)'
|
215
|
+
[ -f $rails ] || bundle binstubs rails || echo '(ignored bundle exit status)'
|
213
216
|
if [ ! -f $rails ]; then
|
214
217
|
echo "Test aborted (unable to create $rails)"
|
215
218
|
exit 2
|
216
219
|
fi
|
217
220
|
|
218
221
|
echo Checking $rake is present ...
|
219
|
-
[ -f $rake ] || bundle
|
222
|
+
[ -f $rake ] || bundle binstubs rake || echo '(ignored bundle exit status)'
|
220
223
|
if [ ! -f $rake ]; then
|
221
224
|
echo "Test aborted (unable to create $rake)"
|
222
225
|
exit 2
|
data/test/test_with_railsapp
CHANGED
@@ -141,24 +141,33 @@ stop_server()
|
|
141
141
|
[0-9]*)
|
142
142
|
echo ========================================================
|
143
143
|
echo "Killing rails server [pid: $server_pid]"
|
144
|
-
kill -
|
145
|
-
[
|
146
|
-
|
147
|
-
|
144
|
+
kill -QUIT $server_pid || echo server has already exited ..
|
145
|
+
if [ -x bin/spring ] ; then
|
146
|
+
echo Stopping spring ...
|
147
|
+
bin/spring stop || echo spring had already exited ..
|
148
|
+
fi
|
149
|
+
sleep 1
|
150
|
+
kill -9 $server_pid || echo server had already exited ...
|
151
|
+
sleep 1
|
152
|
+
# needed for unicorn - it doesn't die when it is supposed to
|
153
|
+
killall "$server_arg" || echo server and child processes had already stopped ...
|
148
154
|
;;
|
149
155
|
esac
|
150
156
|
case "$fake_smtp_pid" in
|
151
157
|
[0-9]*)
|
152
158
|
echo ========================================================
|
153
159
|
echo "Killing fake smtp server [pid: $fake_smtp_pid]"
|
154
|
-
kill -
|
160
|
+
kill -QUIT $fake_smtp_pid || echo fake_smtp had already exited ..
|
155
161
|
sleep 2
|
156
|
-
kill -9 $fake_smtp_pid ||
|
162
|
+
kill -9 $fake_smtp_pid || echo fake_smtp had already exited ..
|
157
163
|
;;
|
158
164
|
esac
|
159
165
|
server_pid=''
|
160
166
|
fake_smtp_pid=''
|
167
|
+
ps -f
|
168
|
+
echo Waiting for sub processes to complete ...
|
161
169
|
wait
|
170
|
+
echo Finished waiting for sub processes, sleeping 2 seconds ...
|
162
171
|
sleep 2
|
163
172
|
}
|
164
173
|
|
@@ -188,7 +197,9 @@ finish()
|
|
188
197
|
stop_server
|
189
198
|
trap "" 0
|
190
199
|
echo ========================================================
|
191
|
-
echo
|
200
|
+
ps uxf || echo ps failed
|
201
|
+
echo ========================================================
|
202
|
+
echo TEST ${1:-FAILED}, exiting with status ${2:-2}
|
192
203
|
echo ========================================================
|
193
204
|
exit ${2:-2}
|
194
205
|
}
|
@@ -476,22 +487,114 @@ common_tests()
|
|
476
487
|
date > $custom_file
|
477
488
|
}
|
478
489
|
|
479
|
-
|
480
490
|
# required for rails 4.1+ in production mode
|
481
491
|
export SECRET_KEY_BASE=cf2f49c38a3fe67416ddf680f4f3187c0fce7dd1b9b117b34d195df75b274e08a04877e23803b2fdf1aa9a655269d94bc4888aa325cf7e721cc47368cfe56a80
|
482
492
|
|
483
493
|
# required for rails 5 to server static files
|
484
494
|
export RAILS_SERVE_STATIC_FILES=on
|
485
495
|
|
496
|
+
export IP_WHITELIST='123.123.123.123'
|
497
|
+
unset AUTH_USER
|
498
|
+
unset AUTH_PASSWORD
|
499
|
+
|
486
500
|
case "$run_test" in
|
487
|
-
|
501
|
+
''|[12])
|
502
|
+
echo ========================================================
|
503
|
+
echo TESTING whitelist ban WITHOUT CATCHALL in test env
|
504
|
+
echo ========================================================
|
505
|
+
export RAILS_ENV=test RACK_ENV=test
|
506
|
+
|
507
|
+
start_server
|
508
|
+
|
509
|
+
echo '1: TESTING controller prohibited by ip...'
|
510
|
+
expected_status=403
|
511
|
+
$testurl ${host}/${route_prefix}/site $expected_status
|
512
|
+
|
513
|
+
if $has_middleware; then
|
514
|
+
echo
|
515
|
+
echo '2: TESTING middleware prohibited by ip...'
|
516
|
+
expected_status=403
|
517
|
+
$testurl ${host}/${route_prefix}/middleware $expected_status
|
518
|
+
fi
|
488
519
|
;;
|
489
|
-
|
520
|
+
esac
|
521
|
+
|
522
|
+
export IP_WHITELIST=''
|
523
|
+
export AUTH_USER='someone'
|
524
|
+
export AUTH_PASSWORD='secret'
|
525
|
+
|
526
|
+
case "$run_test" in
|
527
|
+
''|[3456789]|10)
|
490
528
|
echo ========================================================
|
491
|
-
echo TESTING WITHOUT CATCHALL in test env
|
529
|
+
echo TESTING basic auth, no whitelist WITHOUT CATCHALL in test env
|
492
530
|
echo ========================================================
|
493
531
|
export RAILS_ENV=test RACK_ENV=test
|
494
532
|
|
533
|
+
case "$run_trest" in
|
534
|
+
'')
|
535
|
+
stop_server
|
536
|
+
cleanup_db
|
537
|
+
;;
|
538
|
+
esac
|
539
|
+
|
540
|
+
start_server
|
541
|
+
|
542
|
+
expected_status=401
|
543
|
+
echo '3: TESTING controller without authentication insists on authentication ...'
|
544
|
+
AUTH_USER= $testurl ${host}/${route_prefix}/site $expected_status
|
545
|
+
|
546
|
+
echo '4: TESTING controller with wrong password insists on authentication ...'
|
547
|
+
AUTH_PASSWORD=wrong $testurl ${host}/${route_prefix}/site $expected_status
|
548
|
+
|
549
|
+
echo '5: TESTING controller with wrong user insists on authentication ...'
|
550
|
+
AUTH_USER=wrong $testurl ${host}/${route_prefix}/site $expected_status
|
551
|
+
|
552
|
+
echo '6: TESTING controller with authentication works ...'
|
553
|
+
expected_status=200
|
554
|
+
$testurl ${host}/${route_prefix}/site $expected_status
|
555
|
+
|
556
|
+
if $has_middleware; then
|
557
|
+
echo
|
558
|
+
echo '7: TESTING middleware without authentication insists on authentication ...'
|
559
|
+
expected_status=401
|
560
|
+
AUTH_USER= $testurl ${host}/${route_prefix}/middleware $expected_status
|
561
|
+
|
562
|
+
echo
|
563
|
+
echo '8: TESTING middleware with wrong password insists on authentication ...'
|
564
|
+
AUTH_PASSWORD=wrong $testurl ${host}/${route_prefix}/middleware $expected_status
|
565
|
+
|
566
|
+
echo
|
567
|
+
echo '9: TESTING middleware with wrong user insists on authentication ...'
|
568
|
+
AUTH_USER=wrong $testurl ${host}/${route_prefix}/middleware $expected_status
|
569
|
+
|
570
|
+
echo
|
571
|
+
echo '10: TESTING middleware with authentication works ...'
|
572
|
+
expected_status=200
|
573
|
+
$testurl ${host}/${route_prefix}/middleware $expected_status
|
574
|
+
else
|
575
|
+
echo
|
576
|
+
echo "Skipped middleware tests as it is not configured..."
|
577
|
+
fi
|
578
|
+
;;
|
579
|
+
esac
|
580
|
+
|
581
|
+
unset AUTH_USER
|
582
|
+
unset AUTH_PASSWORD
|
583
|
+
|
584
|
+
case "$run_test" in
|
585
|
+
''|1??)
|
586
|
+
echo ========================================================
|
587
|
+
echo TESTING WITHOUT CATCHALL, no whitelist or user in test env
|
588
|
+
echo ========================================================
|
589
|
+
export RAILS_ENV=test RACK_ENV=test
|
590
|
+
|
591
|
+
case "$run_trest" in
|
592
|
+
'')
|
593
|
+
stop_server
|
594
|
+
cleanup_db
|
595
|
+
;;
|
596
|
+
esac
|
597
|
+
|
495
598
|
start_server
|
496
599
|
|
497
600
|
# get a static file
|
@@ -505,15 +608,18 @@ case "$run_test" in
|
|
505
608
|
expected_status=404,500,502
|
506
609
|
$testurl ${host}/health_check/site $expected_status
|
507
610
|
|
508
|
-
common_tests
|
611
|
+
common_tests 100
|
509
612
|
;;
|
510
613
|
esac
|
511
614
|
|
615
|
+
export IP_WHITELIST='127.0.0.1'
|
616
|
+
export AUTH_USER='someone'
|
617
|
+
export AUTH_PASSWORD='secret'
|
512
618
|
|
513
619
|
case "$run_test" in
|
514
|
-
''
|
620
|
+
''|2??)
|
515
621
|
echo ========================================================
|
516
|
-
echo TESTING WITH CATCHALL in ${RAILS_ENV2:-production} env
|
622
|
+
echo TESTING WITH CATCHALL with whitelist and user in ${RAILS_ENV2:-production} env
|
517
623
|
echo ========================================================
|
518
624
|
export RAILS_ENV=${RAILS_ENV2:-production} RACK_ENV=${RAILS_ENV2:-production}
|
519
625
|
|
@@ -533,7 +639,7 @@ case "$run_test" in
|
|
533
639
|
$testurl ${host}/another/url 200 text/html 'catch all route'
|
534
640
|
echo
|
535
641
|
|
536
|
-
common_tests
|
642
|
+
common_tests 200
|
537
643
|
;;
|
538
644
|
esac
|
539
645
|
|
@@ -542,4 +648,4 @@ rm -f $catchall_file
|
|
542
648
|
finish PASSED 0
|
543
649
|
exit 0
|
544
650
|
|
545
|
-
# vi: sw=4 ai sm:
|
651
|
+
# vi: sw=4 ai sm:
|
data/test/testurl
CHANGED
@@ -3,7 +3,11 @@ require 'net/http'
|
|
3
3
|
require 'uri'
|
4
4
|
|
5
5
|
def open(url)
|
6
|
-
|
6
|
+
parsed_uri = URI.parse(url)
|
7
|
+
http = Net::HTTP.new(parsed_uri.host, parsed_uri.port)
|
8
|
+
req = Net::HTTP::Get.new(parsed_uri.request_uri)
|
9
|
+
req.basic_auth(ENV['AUTH_USER'], ENV['AUTH_PASSWORD'].to_s) if ENV['AUTH_USER']
|
10
|
+
http.request(req)
|
7
11
|
end
|
8
12
|
|
9
13
|
response = open(ARGV[0]) rescue nil
|
@@ -11,6 +15,7 @@ unless response
|
|
11
15
|
i=0
|
12
16
|
print "waiting.."
|
13
17
|
while i < 120 and not response
|
18
|
+
#puts 'RESPONSE:', response.inspect
|
14
19
|
print "."
|
15
20
|
STDOUT.flush
|
16
21
|
i += 1
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: health_check
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian Heggie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -110,11 +110,8 @@ files:
|
|
110
110
|
- test/rails_5.0.gemfile
|
111
111
|
- test/rails_edge.gemfile
|
112
112
|
- test/setup_railsapp
|
113
|
-
- test/test_helper.rb
|
114
113
|
- test/test_with_railsapp
|
115
114
|
- test/testurl
|
116
|
-
- test/unit/health_check_controller_test.rb
|
117
|
-
- test/unit/routes_test.rb
|
118
115
|
homepage: https://github.com/ianheggie/health_check
|
119
116
|
licenses: []
|
120
117
|
metadata: {}
|
@@ -153,8 +150,5 @@ test_files:
|
|
153
150
|
- test/rails_5.0.gemfile
|
154
151
|
- test/rails_edge.gemfile
|
155
152
|
- test/setup_railsapp
|
156
|
-
- test/test_helper.rb
|
157
153
|
- test/test_with_railsapp
|
158
154
|
- test/testurl
|
159
|
-
- test/unit/health_check_controller_test.rb
|
160
|
-
- test/unit/routes_test.rb
|
data/test/test_helper.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
ENV['RAILS_ENV'] = 'test'
|
2
|
-
|
3
|
-
require 'test/unit'
|
4
|
-
require 'rubygems'
|
5
|
-
|
6
|
-
# Tests are conducted with health_test as a plugin
|
7
|
-
environment_file = File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'config', 'environment.rb')
|
8
|
-
if File.exists?(environment_file)
|
9
|
-
# test as plugin
|
10
|
-
require environment_file
|
11
|
-
else
|
12
|
-
#tests as gem
|
13
|
-
fail "TODO: Work out how to test as a gem (test as a plugin instead)"
|
14
|
-
end
|
15
|
-
|
16
|
-
gem "shoulda"
|
17
|
-
require 'shoulda'
|
18
|
-
require 'shoulda/action_controller'
|
19
|
-
|
20
|
-
# rails test help
|
21
|
-
|
22
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
23
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
24
|
-
|
25
|
-
# gem init
|
26
|
-
#require 'health_check'
|
27
|
-
|
28
|
-
# plugin init
|
29
|
-
require File.join(File.dirname(__FILE__), '..', 'init')
|
30
|
-
|
31
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:", :database => 'health_test_test')
|
32
|
-
|
33
|
-
EXAMPLE_SMTP_SETTINGS = {
|
34
|
-
:address => "smtp.gmail.com",
|
35
|
-
:domain => "test.example.com",
|
36
|
-
:port => 587
|
37
|
-
}
|
38
|
-
|
39
|
-
ActionMailer::Base.delivery_method = :test
|
40
|
-
|
41
|
-
# Make sure sendmail settings are set to something that is executrable (we wont actually execute it)
|
42
|
-
sendmail_path = '/usr/sbin/sendmail'
|
43
|
-
['/bin/true', 'c:/windows/explorer.exe', 'c:/winnt/explorer.exe',
|
44
|
-
File.join(Rails.root, 'script', 'about')].each do |f|
|
45
|
-
sendmail_path = f if File.executable? f
|
46
|
-
end
|
47
|
-
|
48
|
-
EXAMPLE_SENDMAIL_SETTINGS = {
|
49
|
-
:location => sendmail_path,
|
50
|
-
:arguments => '--help'
|
51
|
-
}
|
52
|
-
|
53
|
-
def setup_db(version)
|
54
|
-
ActiveRecord::Base.connection.initialize_schema_migrations_table
|
55
|
-
ActiveRecord::Schema.define(:version => version) do
|
56
|
-
create_table :kitchen do |t|
|
57
|
-
t.column :owner, :string
|
58
|
-
t.column :description, :string
|
59
|
-
end
|
60
|
-
end if version
|
61
|
-
end
|
62
|
-
|
63
|
-
def teardown_db
|
64
|
-
ActiveRecord::Base.connection.tables.each do |table|
|
65
|
-
ActiveRecord::Base.connection.drop_table(table)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
@@ -1,175 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
-
|
3
|
-
class HealthCheckControllerTest < ActionController::TestCase
|
4
|
-
#context "HealthCheck plugin" do
|
5
|
-
# should route :get, "/health_check", :controller => :health_check, :action => :index
|
6
|
-
# should route :get, "/health_check/two_checks", :controller => :health_check, :action => :index, :checks => 'two_checks'
|
7
|
-
#end
|
8
|
-
|
9
|
-
context "GET standard on empty db" do
|
10
|
-
setup do
|
11
|
-
HealthCheck.db_migrate_path = File.join(File.dirname(__FILE__), 'migrate', 'empty')
|
12
|
-
setup_db(nil)
|
13
|
-
ActionMailer::Base.delivery_method = :test
|
14
|
-
get :index
|
15
|
-
end
|
16
|
-
|
17
|
-
teardown do
|
18
|
-
teardown_db
|
19
|
-
end
|
20
|
-
|
21
|
-
should respond_with :success
|
22
|
-
should_not set_the_flash
|
23
|
-
should respond_with_content_type 'text/plain'
|
24
|
-
should_not render_with_layout
|
25
|
-
should "return 'success' text" do
|
26
|
-
assert_equal HealthCheck.success, @response.body
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context "GET migrations on db with migrations" do
|
31
|
-
setup do
|
32
|
-
HealthCheck.db_migrate_path = File.join(File.dirname(__FILE__), 'migrate', 'twelve')
|
33
|
-
setup_db(12)
|
34
|
-
ActionMailer::Base.delivery_method = :test
|
35
|
-
get :check, :checks => 'migrations'
|
36
|
-
end
|
37
|
-
|
38
|
-
teardown do
|
39
|
-
teardown_db
|
40
|
-
end
|
41
|
-
|
42
|
-
should respond_with :success
|
43
|
-
should_not set_the_flash
|
44
|
-
should respond_with_content_type 'text/plain'
|
45
|
-
should_not render_with_layout
|
46
|
-
should "return 'success' text" do
|
47
|
-
assert_equal HealthCheck.success, @response.body
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
context "GET standard with unactioned migrations" do
|
52
|
-
setup do
|
53
|
-
HealthCheck.db_migrate_path = File.join(File.dirname(__FILE__), 'migrate', 'twelve')
|
54
|
-
setup_db(nil)
|
55
|
-
ActionMailer::Base.delivery_method = :test
|
56
|
-
get :index
|
57
|
-
end
|
58
|
-
|
59
|
-
teardown do
|
60
|
-
teardown_db
|
61
|
-
end
|
62
|
-
|
63
|
-
should respond_with 500
|
64
|
-
should_not set_the_flash
|
65
|
-
should respond_with_content_type 'text/plain'
|
66
|
-
should_not render_with_layout
|
67
|
-
should "not return 'success' text" do
|
68
|
-
assert_not_equal HealthCheck.success, @response.body
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context "GET email with :test" do
|
73
|
-
setup do
|
74
|
-
ActionMailer::Base.delivery_method = :test
|
75
|
-
get :check, :checks => 'email'
|
76
|
-
end
|
77
|
-
|
78
|
-
should respond_with :success
|
79
|
-
should_not set_the_flash
|
80
|
-
should respond_with_content_type 'text/plain'
|
81
|
-
should_not render_with_layout
|
82
|
-
should "return 'success' text" do
|
83
|
-
assert_equal HealthCheck.success, @response.body
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
context "GET standard with bad smtp" do
|
88
|
-
setup do
|
89
|
-
HealthCheck.db_migrate_path = File.join(File.dirname(__FILE__), 'migrate', 'twelve')
|
90
|
-
setup_db(12)
|
91
|
-
HealthCheck.smtp_timeout = 2.0
|
92
|
-
ActionMailer::Base.delivery_method = :smtp
|
93
|
-
ActionMailer::Base.smtp_settings = {
|
94
|
-
:address => "127.0.0.1",
|
95
|
-
:domain => "testing.example.com",
|
96
|
-
:port => 7
|
97
|
-
}
|
98
|
-
get :index
|
99
|
-
end
|
100
|
-
|
101
|
-
teardown do
|
102
|
-
teardown_db
|
103
|
-
end
|
104
|
-
|
105
|
-
should respond_with 500
|
106
|
-
should_not set_the_flash
|
107
|
-
should respond_with_content_type 'text/plain'
|
108
|
-
should_not render_with_layout
|
109
|
-
should "not return 'success' text" do
|
110
|
-
assert_not_equal HealthCheck.success, @response.body
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
|
115
|
-
context "GET email with :smtp" do
|
116
|
-
setup do
|
117
|
-
# it should not care that the database isnt setup correctly
|
118
|
-
HealthCheck.db_migrate_path = File.join(File.dirname(__FILE__), 'migrate', 'empty')
|
119
|
-
setup_db(nil)
|
120
|
-
ActionMailer::Base.delivery_method = :smtp
|
121
|
-
HealthCheck.smtp_timeout = 60.0
|
122
|
-
ActionMailer::Base.smtp_settings = EXAMPLE_SMTP_SETTINGS
|
123
|
-
get :check, :checks => 'email'
|
124
|
-
end
|
125
|
-
|
126
|
-
should respond_with :success
|
127
|
-
should respond_with_content_type 'text/plain'
|
128
|
-
should "return 'success' text" do
|
129
|
-
assert_equal HealthCheck.success, @response.body
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
|
134
|
-
context "GET database_migration_email with missing sendmail" do
|
135
|
-
setup do
|
136
|
-
HealthCheck.db_migrate_path = File.join(File.dirname(__FILE__), 'migrate', 'twelve')
|
137
|
-
setup_db(12)
|
138
|
-
ActionMailer::Base.delivery_method = :sendmail
|
139
|
-
ActionMailer::Base.sendmail_settings = { :location => '/no/such/executable', :arguments => '' }
|
140
|
-
get :check, :checks => 'database_migration_email'
|
141
|
-
end
|
142
|
-
|
143
|
-
teardown do
|
144
|
-
teardown_db
|
145
|
-
end
|
146
|
-
|
147
|
-
should respond_with 500
|
148
|
-
should_not set_the_flash
|
149
|
-
should respond_with_content_type 'text/plain'
|
150
|
-
should_not render_with_layout
|
151
|
-
should "not return 'success' text" do
|
152
|
-
assert_not_equal HealthCheck.success, @response.body
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
context "GET all with :sendmail" do
|
157
|
-
setup do
|
158
|
-
ActionMailer::Base.delivery_method = :sendmail
|
159
|
-
ActionMailer::Base.sendmail_settings = EXAMPLE_SENDMAIL_SETTINGS
|
160
|
-
HealthCheck.db_migrate_path = File.join(File.dirname(__FILE__), 'migrate', 'empty')
|
161
|
-
setup_db(nil)
|
162
|
-
get :check, :checks => 'all'
|
163
|
-
end
|
164
|
-
|
165
|
-
teardown do
|
166
|
-
teardown_db
|
167
|
-
end
|
168
|
-
|
169
|
-
should respond_with :success
|
170
|
-
should respond_with_content_type 'text/plain'
|
171
|
-
should "return 'success' text" do
|
172
|
-
assert_equal HealthCheck.success, @response.body
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
data/test/unit/routes_test.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
-
|
3
|
-
class RoutingTest < Test::Unit::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
if defined?(Rails) and defined?(Rails.application) and Rails.application.routes
|
7
|
-
Rails.application.routes.draw do |map|
|
8
|
-
# do nothing - routes should be added automatically
|
9
|
-
end
|
10
|
-
else
|
11
|
-
ActionController::Routing::Routes.draw do |map|
|
12
|
-
# do nothing - routes should be added automatically
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_health_check_plain_route
|
18
|
-
assert_recognition :get, "/health_check", :controller => "health_check", :action => "index"
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_health_check_checks_specified_route
|
22
|
-
assert_recognition :get, "/health_check/two_checks", :controller => "health_check", :action => "check", :checks => 'two_checks'
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
# yes, I know about assert_recognizes, but it has proven problematic to
|
28
|
-
# use in these tests, since it uses RouteSet#recognize (which actually
|
29
|
-
# tries to instantiate the controller) and because it uses an awkward
|
30
|
-
# parameter order.
|
31
|
-
def assert_recognition(method, path, options)
|
32
|
-
if defined?(Rails) and defined?(Rails.application) and Rails.application.routes
|
33
|
-
result = Rails.application.routes.recognize_path(path, :method => method)
|
34
|
-
else
|
35
|
-
result = ActionController::Routing::Routes.recognize_path(path, :method => method)
|
36
|
-
end
|
37
|
-
assert_equal options, result
|
38
|
-
end
|
39
|
-
|
40
|
-
# with Thanks to http://izumi.plan99.net/manuals/creating_plugins-8f53e4d6.html
|
41
|
-
|
42
|
-
end
|