move all #gets logic to tee_input out of chunked_reader
[unicorn.git] / test / unit / test_tee_input.rb
bloba6c61e69599c7941cf63e906879b9494d2f6fee2
1 # encoding: binary
2 require 'test/unit'
3 require 'digest/sha1'
4 require 'unicorn'
6 class TestTeeInput < Test::Unit::TestCase
8   def setup
9     @rs = $/
10     @env = {}
11     @rd, @wr = IO.pipe
12     @rd.sync = @wr.sync = true
13     @start_pid = $$
14   end
16   def teardown
17     return if $$ != @start_pid
18     $/ = @rs
19     @rd.close rescue nil
20     @wr.close rescue nil
21     begin
22       Process.wait
23     rescue Errno::ECHILD
24       break
25     end while true
26   end
28   def test_gets_long
29     ti = Unicorn::TeeInput.new(@rd, nil, "hello")
30     status = line = nil
31     pid = fork {
32       @rd.close
33       3.times { @wr.write("ffff" * 4096) }
34       @wr.write "#$/foo#$/"
35       @wr.close
36     }
37     @wr.close
38     assert_nothing_raised { line = ti.gets }
39     assert_equal(4096 * 4 * 3 + 5 + $/.size, line.size)
40     assert_equal("hello" << ("ffff" * 4096 * 3) << "#$/", line)
41     assert_nothing_raised { line = ti.gets }
42     assert_equal "foo#$/", line
43     assert_nil ti.gets
44     assert_nothing_raised { pid, status = Process.waitpid2(pid) }
45     assert status.success?
46   end
48   def test_gets_short
49     ti = Unicorn::TeeInput.new(@rd, nil, "hello")
50     status = line = nil
51     pid = fork {
52       @rd.close
53       @wr.write "#$/foo"
54       @wr.close
55     }
56     @wr.close
57     assert_nothing_raised { line = ti.gets }
58     assert_equal("hello#$/", line)
59     assert_nothing_raised { line = ti.gets }
60     assert_equal "foo", line
61     assert_nil ti.gets
62     assert_nothing_raised { pid, status = Process.waitpid2(pid) }
63     assert status.success?
64   end
66 end