2011-12-05 12:01:19 -05:00
|
|
|
require 'test/unit'
|
2012-04-29 15:18:21 -04:00
|
|
|
require 'rack'
|
2011-12-05 12:01:19 -05:00
|
|
|
require 'puma/app/status'
|
|
|
|
|
|
|
|
class TestAppStatus < Test::Unit::TestCase
|
|
|
|
class FakeServer
|
|
|
|
def initialize
|
|
|
|
@status = :running
|
|
|
|
@backlog = 0
|
|
|
|
@running = 0
|
|
|
|
end
|
|
|
|
|
|
|
|
attr_reader :status
|
|
|
|
attr_accessor :backlog, :running
|
|
|
|
|
|
|
|
def stop
|
|
|
|
@status = :stop
|
|
|
|
end
|
|
|
|
|
|
|
|
def halt
|
|
|
|
@status = :halt
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def setup
|
|
|
|
@server = FakeServer.new
|
2011-12-05 18:58:23 -05:00
|
|
|
@app = Puma::App::Status.new(@server, @server)
|
2011-12-06 19:22:02 -05:00
|
|
|
@app.auth_token = nil
|
|
|
|
end
|
|
|
|
|
2012-04-29 15:18:21 -04:00
|
|
|
def lint(env)
|
|
|
|
app = Rack::Lint.new @app
|
|
|
|
mock_env = Rack::MockRequest.env_for env['PATH_INFO']
|
|
|
|
app.call mock_env
|
|
|
|
end
|
|
|
|
|
2011-12-06 19:22:02 -05:00
|
|
|
def test_bad_token
|
|
|
|
@app.auth_token = "abcdef"
|
|
|
|
|
|
|
|
env = { 'PATH_INFO' => "/whatever" }
|
|
|
|
|
2011-12-07 17:48:41 -05:00
|
|
|
status, _, _ = @app.call env
|
2011-12-06 19:22:02 -05:00
|
|
|
|
|
|
|
assert_equal 403, status
|
2012-04-29 15:18:21 -04:00
|
|
|
lint(env)
|
2011-12-06 19:22:02 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_good_token
|
|
|
|
@app.auth_token = "abcdef"
|
|
|
|
|
|
|
|
env = {
|
|
|
|
'PATH_INFO' => "/whatever",
|
|
|
|
'QUERY_STRING' => "token=abcdef"
|
|
|
|
}
|
|
|
|
|
2011-12-07 17:48:41 -05:00
|
|
|
status, _, _ = @app.call env
|
2011-12-06 19:22:02 -05:00
|
|
|
|
|
|
|
assert_equal 404, status
|
2012-04-29 15:18:21 -04:00
|
|
|
lint(env)
|
2011-12-05 12:01:19 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_unsupported
|
|
|
|
env = { 'PATH_INFO' => "/not-real" }
|
|
|
|
|
2011-12-07 17:48:41 -05:00
|
|
|
status, _, _ = @app.call env
|
2011-12-05 12:01:19 -05:00
|
|
|
|
|
|
|
assert_equal 404, status
|
2012-04-29 15:18:21 -04:00
|
|
|
lint(env)
|
2011-12-05 12:01:19 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_stop
|
|
|
|
env = { 'PATH_INFO' => "/stop" }
|
|
|
|
|
2011-12-07 17:48:41 -05:00
|
|
|
status, _ , body = @app.call env
|
2011-12-05 12:01:19 -05:00
|
|
|
|
|
|
|
assert_equal :stop, @server.status
|
|
|
|
assert_equal 200, status
|
|
|
|
assert_equal ['{ "status": "ok" }'], body
|
2012-04-29 15:18:21 -04:00
|
|
|
lint(env)
|
2011-12-05 12:01:19 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_halt
|
|
|
|
env = { 'PATH_INFO' => "/halt" }
|
|
|
|
|
2011-12-07 17:48:41 -05:00
|
|
|
status, _ , body = @app.call env
|
2011-12-05 12:01:19 -05:00
|
|
|
|
|
|
|
assert_equal :halt, @server.status
|
|
|
|
assert_equal 200, status
|
|
|
|
assert_equal ['{ "status": "ok" }'], body
|
2012-04-29 15:18:21 -04:00
|
|
|
lint(env)
|
2011-12-05 12:01:19 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_stats
|
|
|
|
env = { 'PATH_INFO' => "/stats" }
|
|
|
|
|
|
|
|
@server.backlog = 1
|
|
|
|
@server.running = 9
|
|
|
|
|
2011-12-07 17:48:41 -05:00
|
|
|
status, _ , body = @app.call env
|
2011-12-05 12:01:19 -05:00
|
|
|
|
|
|
|
assert_equal 200, status
|
|
|
|
assert_equal ['{ "backlog": 1, "running": 9 }'], body
|
2012-04-29 15:18:21 -04:00
|
|
|
lint(env)
|
2011-12-05 12:01:19 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|