about summary refs log tree commit homepage
path: root/test/test_response.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_response.rb')
-rw-r--r--test/test_response.rb29
1 files changed, 27 insertions, 2 deletions
diff --git a/test/test_response.rb b/test/test_response.rb
index a76c7c2..3feb5e9 100644
--- a/test/test_response.rb
+++ b/test/test_response.rb
@@ -485,7 +485,7 @@ class TestSession < Test::Unit::TestCase
     assert ! @c.closed?
   end
 
-  def test_rack_preserve_chunk_ary_no_keepalive
+  def test_rack_preserve_chunk_no_keepalive
     pid = fork do
       @s << "HTTP/1.1 200 OK\r\n"
       @s << "Connection: close\r\n"
@@ -501,11 +501,36 @@ class TestSession < Test::Unit::TestCase
     tmp = []
     assert ! body.parser.keepalive?
     assert_nothing_raised { body.each { |chunk| tmp << chunk.dup } }
-    assert_equal ["5\r\nhello\r\n0\r\nFoo: bar\r\n\r\n"], tmp
+    assert_equal "5\r\nhello\r\n0\r\nFoo: bar\r\n\r\n", tmp.join
     _, status = Process.waitpid2(pid)
     assert status.success?
     body.close
     assert @c.closed?
   end
 
+  def test_rack_preserve_chunk_no_keepalive
+    s = "HTTP/1.1 200 OK\r\n"
+    s << "Connection: close\r\n"
+    s << "Content-Length: 666\r\n"
+    s << "\r\n"
+    s << "hello"
+    @s.write(s)
+    @response = Kcar::Response.new(@c, [])
+    status, headers, body = @response.rack
+    assert_kind_of Array, headers
+    assert_equal status, "200 OK"
+    tmp = []
+    assert ! body.parser.keepalive?
+
+    closer = Thread.new do
+      Thread.pass until tmp[0]
+      @s.close
+    end
+    assert_raises(EOFError) {
+      body.each { |chunk| tmp << chunk.dup }
+    }
+    assert_nil @c.close
+    assert_equal "hello", tmp[0]
+    assert_nil closer.value
+  end
 end