require 'abstract_unit' class RequestIdTest < ActiveSupport::TestCase test "passing on the request id from the outside" do assert_equal "external-uu-rid", stub_request('HTTP_X_REQUEST_ID' => 'external-uu-rid').uuid end test "ensure that only alphanumeric uurids are accepted" do assert_equal "X-Hacked-HeaderStuff", stub_request('HTTP_X_REQUEST_ID' => '; X-Hacked-Header: Stuff').uuid end test "ensure that 255 char limit on the request id is being enforced" do assert_equal "X" * 255, stub_request('HTTP_X_REQUEST_ID' => 'X' * 500).uuid end test "generating a request id when none is supplied" do assert_match /\w+/, stub_request.uuid end private def stub_request(env = {}) ActionDispatch::RequestId.new(->(env) { [ 200, env, [] ] }).call(env) ActionDispatch::Request.new(env) end end # FIXME: Testing end-to-end doesn't seem to work # # class RequestIdResponseTest < ActionDispatch::IntegrationTest # class TestController < ActionController::Base # def index # head :ok # end # end # # test "request id is passed all the way to the response" do # with_test_route_set do # get '/' # puts @response.headers.inspect # assert_equal "internal-uu-rid", @response.headers["X-Request-Id"] # end # end # # # private # def with_test_route_set # with_routing do |set| # set.draw do # match ':action', to: ::RequestIdResponseTest::TestController # end # # @app = self.class.build_app(set) do |middleware| # middleware.use ActionDispatch::RequestId # end # # yield # end # end # end