about summary refs log tree commit homepage
path: root/test/unit/test_chunked_reader.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/test_chunked_reader.rb')
-rw-r--r--test/unit/test_chunked_reader.rb37
1 files changed, 25 insertions, 12 deletions
diff --git a/test/unit/test_chunked_reader.rb b/test/unit/test_chunked_reader.rb
index 6a26c8f..67fe43b 100644
--- a/test/unit/test_chunked_reader.rb
+++ b/test/unit/test_chunked_reader.rb
@@ -8,6 +8,7 @@ require 'digest/sha1'
 class TestChunkedReader < Test::Unit::TestCase
 
   def setup
+    @env = {}
     @rd, @wr = IO.pipe
     @rd.binmode
     @wr.binmode
@@ -27,7 +28,7 @@ class TestChunkedReader < Test::Unit::TestCase
   end
 
   def test_error
-    cr = bin_reader(@rd, "8\r\nasdfasdf\r\n8\r\nasdfasdfa#{'a' * 1024}")
+    cr = bin_reader("8\r\nasdfasdf\r\n8\r\nasdfasdfa#{'a' * 1024}")
     a = nil
     assert_nothing_raised { a = cr.readpartial(8192) }
     assert_equal 'asdfasdf', a
@@ -37,30 +38,30 @@ class TestChunkedReader < Test::Unit::TestCase
   end
 
   def test_eof1
-    cr = bin_reader(@rd, "0\r\n")
+    cr = bin_reader("0\r\n")
     assert_raises(EOFError) { cr.readpartial(8192) }
   end
 
   def test_eof2
-    cr = bin_reader(@rd, "0\r\n\r\n")
+    cr = bin_reader("0\r\n\r\n")
     assert_raises(EOFError) { cr.readpartial(8192) }
   end
 
   def test_readpartial1
-    cr = bin_reader(@rd, "4\r\nasdf\r\n0\r\n")
+    cr = bin_reader("4\r\nasdf\r\n0\r\n")
     assert_equal 'asdf', cr.readpartial(8192)
     assert_raises(EOFError) { cr.readpartial(8192) }
   end
 
   def test_gets1
-    cr = bin_reader(@rd, "4\r\nasdf\r\n0\r\n")
+    cr = bin_reader("4\r\nasdf\r\n0\r\n")
     STDOUT.sync = true
     assert_equal 'asdf', cr.gets
     assert_raises(EOFError) { cr.readpartial(8192) }
   end
 
   def test_gets2
-    cr = bin_reader(@rd, "4\r\nasd\n\r\n0\r\n\r\n")
+    cr = bin_reader("4\r\nasd\n\r\n0\r\n\r\n")
     assert_equal "asd\n", cr.gets
     assert_nil cr.gets
   end
@@ -70,7 +71,7 @@ class TestChunkedReader < Test::Unit::TestCase
     str = ('a' * max).freeze
     first = 5
     last = str.size - first
-    cr = bin_reader(@rd,
+    cr = bin_reader(
       "#{'%x' % first}\r\n#{str[0, first]}\r\n" \
       "#{'%x' % last}\r\n#{str[-last, last]}\r\n" \
       "0\r\n")
@@ -83,7 +84,7 @@ class TestChunkedReader < Test::Unit::TestCase
     str = ('a' * max).freeze
     first = 5
     last = str.size - first
-    cr = bin_reader(@rd,
+    cr = bin_reader(
       "#{'%x' % first}\r\n#{str[0, first]}\r\n" \
       "#{'%x' % last}\r\n#{str[-last, last]}\r\n" \
       "0\r\n")
@@ -101,7 +102,7 @@ class TestChunkedReader < Test::Unit::TestCase
     str = ("z\n" * max).freeze
     first = 5
     last = str.size - first
-    cr = bin_reader(@rd,
+    cr = bin_reader(
       "#{'%x' % first}\r\n#{str[0, first]}\r\n" \
       "#{'%x' % last}\r\n#{str[-last, last]}\r\n" \
       "0\r\n")
@@ -110,7 +111,7 @@ class TestChunkedReader < Test::Unit::TestCase
   end
 
   def test_dd
-    cr = bin_reader(@rd, "6\r\nhello\n\r\n")
+    cr = bin_reader("6\r\nhello\n\r\n")
     tmp = Tempfile.new('test_dd')
     tmp.sync = true
 
@@ -157,11 +158,23 @@ class TestChunkedReader < Test::Unit::TestCase
     assert_equal sha1_file.hexdigest, sha1.hexdigest
   end
 
+  def test_trailer
+    @env['HTTP_TRAILER'] = 'Content-MD5'
+    pid = fork { @wr.syswrite("Content-MD5: asdf\r\n") }
+    cr = bin_reader("8\r\nasdfasdf\r\n8\r\nasdfasdf\r\n0\r\n")
+    assert_equal 'asdfasdf', cr.readpartial(4096)
+    assert_equal 'asdfasdf', cr.readpartial(4096)
+    assert_raises(EOFError) { cr.readpartial(4096) }
+    pid, status = Process.waitpid2(pid)
+    assert status.success?
+    assert_equal 'asdf', @env['HTTP_CONTENT_MD5']
+  end
+
 private
 
-  def bin_reader(sock, buf)
+  def bin_reader(buf)
     buf.force_encoding(Encoding::BINARY) if buf.respond_to?(:force_encoding)
-    Unicorn::ChunkedReader.new(sock, buf)
+    Unicorn::ChunkedReader.new(@env, @rd, buf)
   end
 
 end