diff options
Diffstat (limited to 'test/test_auto_chunk.rb')
-rw-r--r-- | test/test_auto_chunk.rb | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/test/test_auto_chunk.rb b/test/test_auto_chunk.rb new file mode 100644 index 0000000..a97fe26 --- /dev/null +++ b/test/test_auto_chunk.rb @@ -0,0 +1,56 @@ +# Copyright (C) 2013-2016 all contributors <yahns-public@yhbt.net> +# License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt> +# frozen_string_literal: true +require_relative 'server_helper' + +class TestAutoChunk < Testcase + ENV["N"].to_i > 1 and parallelize_me! + include ServerHelper + alias setup server_helper_setup + alias teardown server_helper_teardown + + def test_auto_head + 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::ContentType, "text/plain" + run(lambda do |env| + [ 200, {}, %w(a b c) ] + end) + end + app(:rack, app) { listen "#{host}:#{port}" } + end + logger(Logger.new(err.path)) + end + pid = mkserver(cfg) + s = TCPSocket.new(host, port) + s.write("GET / HTTP/1.0\r\n\r\n") + assert s.wait(30), "IO wait failed" + buf = s.read + assert_match %r{\r\n\r\nabc\z}, buf + s.close + + s = TCPSocket.new(host, port) + s.write("GET / HTTP/1.1\r\nHost: example.com\r\n\r\n") + buf = ''.dup + Timeout.timeout(30) do + until buf =~ /\r\n\r\n1\r\na\r\n1\r\nb\r\n1\r\nc\r\n0\r\n\r\n\z/ + buf << s.readpartial(16384) + end + end + assert_match(%r{^Transfer-Encoding: chunked\r\n}, buf) + s.close + + Net::HTTP.start(host, port) do |http| + req = Net::HTTP::Get.new("/") + res = http.request(req) + assert_equal 200, res.code.to_i + assert_equal 'abc', res.body + end + ensure + quit_wait(pid) + end +end |