Feature #11266 » custom_req_response.patch
lib/webrick/httpserver.rb | ||
---|---|---|
def run(sock)
|
||
while true
|
||
res = HTTPResponse.new(@config)
|
||
req = HTTPRequest.new(@config)
|
||
req, res = create_request_and_response(@config)
|
||
server = self
|
||
begin
|
||
timeout = @config[:RequestTimeout]
|
||
... | ... | |
logger << AccessLog::format(fmt+"\n", param)
|
||
}
|
||
end
|
||
|
||
##
|
||
# Creates the HTTPRequest and HTTPResponse objects used when handling the HTTP
|
||
# request. Can be overridden by subclasses.
|
||
def create_request_and_response(with_webrick_config)
|
||
[HTTPRequest.new(with_webrick_config), HTTPResponse.new(with_webrick_config)]
|
||
end
|
||
|
||
##
|
||
# Mount table for the path a servlet is mounted on in the directory space
|
||
# of the server. Users of WEBrick can only access this indirectly via
|
test/webrick/test_httpserver.rb | ||
---|---|---|
assert_equal(stopped, 1)
|
||
end
|
||
class CustomRequest < ::WEBrick::HTTPRequest; end
|
||
class CustomResponse < ::WEBrick::HTTPResponse; end
|
||
class CustomServer < ::WEBrick::HTTPServer
|
||
def create_request_and_response(config)
|
||
[CustomRequest.new(config), CustomResponse.new(config)]
|
||
end
|
||
end
|
||
|
||
def test_custom_server_request_and_response
|
||
config = { :ServerName => "localhost" }
|
||
TestWEBrick.start_server(CustomServer, config){|server, addr, port, log|
|
||
server.mount_proc("/", lambda {|req, res|
|
||
assert_kind_of(CustomRequest, req)
|
||
assert_kind_of(CustomResponse, res)
|
||
res.body = "via custom response"
|
||
})
|
||
Thread.pass while server.status != :Running
|
||
Net::HTTP.start(addr, port) do |http|
|
||
req = Net::HTTP::Get.new("/")
|
||
http.request(req){|res|
|
||
assert_equal("via custom response", res.body)
|
||
}
|
||
server.shutdown
|
||
end
|
||
}
|
||
end
|
||
|
||
# This class is needed by test_response_io_with_chunked_set method
|
||
class EventManagerForChunkedResponseTest
|
||
def initialize
|