rails/actioncable/test/server/health_check_test.rb
Hartley McGuire c3c844ef3a
Add Rack::Lint to ActionCable::Server health tests
This adds additional coverage to ActionCable::Server to validate that
its output follow the Rack SPEC.

In addition to using Rack::CONTENT_TYPE for the Content-Type header,
there was another change required: the Content-Type header cannot be
specified when the Response status is 204, so the default health check
status was updated to 200
2023-08-16 22:49:32 -04:00

58 lines
1.4 KiB
Ruby

# frozen_string_literal: true
require "test_helper"
require "active_support/core_ext/hash/indifferent_access"
class HealthCheckTest < ActionCable::TestCase
def setup
@config = ActionCable::Server::Configuration.new
@config.logger = Logger.new(nil)
@server = ActionCable::Server::Base.new config: @config
@server.config.cable = { adapter: "async" }.with_indifferent_access
@app = Rack::Lint.new(@server)
end
test "no health check app are mounted by default" do
get "/up"
assert_equal 404, response.first
end
test "setting health_check_path mount the configured health check application" do
@server.config.health_check_path = "/up"
get "/up"
assert_equal 200, response.first
assert_equal [], response.last.enum_for.to_a
end
test "health_check_application_can_be_customized" do
@server.config.health_check_path = "/up"
@server.config.health_check_application = health_check_application
get "/up"
assert_equal 200, response.first
assert_equal ["Hello world!"], response.last.enum_for.to_a
end
private
def get(path)
env = Rack::MockRequest.env_for "/up", "HTTP_HOST" => "localhost"
@response = @app.call env
end
attr_reader :response
def health_check_application
->(env) {
[
200,
{ Rack::CONTENT_TYPE => "text/html" },
["Hello world!"],
]
}
end
end