7 class TestChunkedReader < Test::Unit::TestCase
10 @cr = Unicorn::ChunkedReader.new
14 @rd.sync = @wr.sync = true
19 return if $$ != @start_pid
25 @cr.reopen(@rd, "0\r\n")
26 assert_raises(EOFError) { @cr.readpartial(8192) }
30 @cr.reopen(@rd, "0\r\n\r\n")
31 assert_raises(EOFError) { @cr.readpartial(8192) }
35 @cr.reopen(@rd, "4\r\nasdf\r\n0\r\n")
36 assert_equal 'asdf', @cr.readpartial(8192)
37 assert_raises(EOFError) { @cr.readpartial(8192) }
41 @cr.reopen(@rd, "4\r\nasdf\r\n0\r\n")
43 assert_equal 'asdf', @cr.gets
44 assert_raises(EOFError) { @cr.readpartial(8192) }
48 @cr.reopen(@rd, "4\r\nasd\n\r\n0\r\n\r\n")
49 assert_equal "asd\n", @cr.gets
54 max = Unicorn::Const::CHUNK_SIZE * 2
55 str = ('a' * max).freeze
57 last = str.size - first
59 "#{'%x' % first}\r\n#{str[0, first]}\r\n" \
60 "#{'%x' % last}\r\n#{str[-last, last]}\r\n" \
62 assert_equal str, @cr.gets
66 def test_readpartial_gets_mixed1
67 max = Unicorn::Const::CHUNK_SIZE * 2
68 str = ('a' * max).freeze
70 last = str.size - first
72 "#{'%x' % first}\r\n#{str[0, first]}\r\n" \
73 "#{'%x' % last}\r\n#{str[-last, last]}\r\n" \
75 partial = @cr.readpartial(16384)
76 assert String === partial
78 len = max - partial.size
79 assert_equal(str[-len, len], @cr.gets)
80 assert_raises(EOFError) { @cr.readpartial(1) }
84 def test_gets_mixed_readpartial
86 str = ("z\n" * max).freeze
88 last = str.size - first
90 "#{'%x' % first}\r\n#{str[0, first]}\r\n" \
91 "#{'%x' % last}\r\n#{str[-last, last]}\r\n" \
93 assert_equal("z\n", @cr.gets)
94 assert_equal("z\n", @cr.gets)
98 @cr.reopen(@rd, "6\r\nhello\n\r\n")
99 tmp = Tempfile.new('test_dd')
106 crd.sync = cwr.sync = true
112 exec('dd', 'if=/dev/urandom', 'bs=93390', 'count=16')
116 buf = crd.readpartial(16384)
118 @wr.write("#{'%x' % buf.size}\r\n#{buf}\r\n")
120 @wr.write("0\r\n\r\n")
125 assert_equal "hello\n", @cr.gets
126 sha1 = Digest::SHA1.new
129 @cr.readpartial(16384, buf)
135 assert_nothing_raised { Process.waitpid(pid) }
136 sha1_file = Digest::SHA1.new
137 File.open(tmp.path, 'rb') { |fp|
138 while fp.read(16384, buf)
139 sha1_file.update(buf)
142 assert_equal sha1_file.hexdigest, sha1.hexdigest