From 913714b848e2e41876c96a60fe9913197005625b Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 4 Feb 2014 21:34:29 +0000 Subject: response: do not use MSG_MORE on empty bodies We must not cork response headers when the response body is empty, otherwise those headers will be delayed by 200ms. --- test/test_response.rb | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 test/test_response.rb (limited to 'test/test_response.rb') diff --git a/test/test_response.rb b/test/test_response.rb new file mode 100644 index 0000000..2e9a7ea --- /dev/null +++ b/test/test_response.rb @@ -0,0 +1,84 @@ +# Copyright (C) 2013, Eric Wong and all contributors +# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) +require_relative 'server_helper' + +class TestResponse < Testcase + ENV["N"].to_i > 1 and parallelize_me! + include ServerHelper + alias setup server_helper_setup + alias teardown server_helper_teardown + + def test_response_time_empty_body + err = @err + cfg = Yahns::Config.new + host, port = @srv.addr[3], @srv.addr[1] + cfg.instance_eval do + GTL.synchronize do + app = Rack::Builder.new do + use Rack::ContentLength + use Rack::ContentType, "text/plain" + run lambda { |_| [ 200, {}, [] ] } + end + app(:rack, app) do + listen "#{host}:#{port}" + end + end + logger(Logger.new(err.path)) + end + pid = mkserver(cfg) + Net::HTTP.start(host, port) { |h| + # warmup request + res = h.get("/") + assert_empty res.body + + t0 = Time.now + nr = 10 + nr.times do + res = h.get("/") + assert_empty res.body + end + diff = Time.now - t0 + assert_operator diff, :<, (0.200 * nr) + } + ensure + quit_wait(pid) + end + + def test_response_time_head + err = @err + cfg = Yahns::Config.new + host, port = @srv.addr[3], @srv.addr[1] + cfg.instance_eval do + GTL.synchronize do + require 'rack/lobster' + app = Rack::Builder.new do + use Rack::Head + use Rack::ContentLength + use Rack::ContentType, "text/plain" + run Rack::Lobster.new + end + app(:rack, app) do + listen "#{host}:#{port}" + end + end + logger(Logger.new(err.path)) + end + pid = mkserver(cfg) + Net::HTTP.start(host, port) { |h| + # warmup request + res = h.head("/") + assert_equal 200, res.code.to_i + + t0 = Time.now + nr = 10 + nr.times do + res = h.head("/") + assert_equal 200, res.code.to_i + end + diff = Time.now - t0 + assert_operator diff, :<, (0.200 * nr) + } + ensure + quit_wait(pid) + end +end -- cgit v1.2.3-24-ge0c7