From ad268cea66c2b91538dd60fc7f945348bb24214d Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 20 Nov 2010 08:07:12 +0800 Subject: tests: stream_input tests for mixed gets/read calls Some apps may do them, so make sure we do them correctly. --- test/unit/test_stream_input.rb | 37 +++++++++++++++++++++++++++++++++++++ test/unit/test_tee_input.rb | 8 ++++++++ 2 files changed, 45 insertions(+) diff --git a/test/unit/test_stream_input.rb b/test/unit/test_stream_input.rb index 0c4ec98..f59157a 100644 --- a/test/unit/test_stream_input.rb +++ b/test/unit/test_stream_input.rb @@ -153,6 +153,43 @@ class TestStreamInput < Test::Unit::TestCase assert_equal '', rv end + def test_gets_read_mix + r = init_request("hello\nasdfasdf") + si = Unicorn::StreamInput.new(@rd, r) + assert_equal "hello\n", si.gets + assert_equal "asdfasdf", si.read(9) + assert_nil si.read(9) + end + + def test_gets_read_mix_chunked + r = @parser = Unicorn::HttpParser.new + body = "6\r\nhello" + @buf = "POST / HTTP/1.1\r\n" \ + "Host: localhost\r\n" \ + "Transfer-Encoding: chunked\r\n" \ + "\r\n#{body}" + assert_equal @env, @parser.headers(@env, @buf) + assert_equal body, @buf + si = Unicorn::StreamInput.new(@rd, r) + @wr.syswrite "\n\r\n" + assert_equal "hello\n", si.gets + @wr.syswrite "8\r\nasdfasdf\r\n" + assert_equal"asdfasdf", si.read(9) + si.read(9) + @wr.syswrite "0\r\n\r\n" + assert_nil si.read(9) + end + + def test_gets_read_mix_big + r = init_request("hello\n#{'.' * 65536}") + si = Unicorn::StreamInput.new(@rd, r) + assert_equal "hello\n", si.gets + assert_equal '.' * 16384, si.read(16384) + assert_equal '.' * 16383, si.read(16383) + assert_equal '.' * 16384, si.read(16384) + assert_equal '.' * 16385, si.read(16385) + assert_nil si.gets + end + def init_request(body, size = nil) @parser = Unicorn::HttpParser.new body = body.to_s.freeze diff --git a/test/unit/test_tee_input.rb b/test/unit/test_tee_input.rb index e69c8f1..3766e1f 100644 --- a/test/unit/test_tee_input.rb +++ b/test/unit/test_tee_input.rb @@ -267,6 +267,14 @@ class TestTeeInput < Test::Unit::TestCase assert_equal "World", @env['HTTP_HELLO'] end + def test_gets_read_mix + r = init_request("hello\nasdfasdf") + ti = Unicorn::TeeInput.new(@rd, r) + assert_equal "hello\n", ti.gets + assert_equal "asdfasdf", ti.read(9) + assert_nil ti.read(9) + end + private def init_request(body, size = nil) -- cgit v1.2.3-24-ge0c7