diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/test_server.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/test/test_server.rb b/test/test_server.rb index 69babb3..b7cb3e6 100644 --- a/test/test_server.rb +++ b/test/test_server.rb @@ -804,4 +804,43 @@ class TestServer < Testcase ensure quit_wait(pid) end + + def test_inherit_too_many + err = @err + s2 = TCPServer.new(ENV["TEST_HOST"] || "127.0.0.1", 0) + cfg = Yahns::Config.new + host, port = @srv.addr[3], @srv.addr[1] + cfg.instance_eval do + ru = lambda { |_| [ 200, {'Content-Length'=>'2'}, ['HI'] ] } + GTL.synchronize { app(:rack, ru) { listen "#{host}:#{port}" } } + logger(Logger.new(err.path)) + end + mkserver(cfg, @srv) do + s2.autoclose = false + ENV["YAHNS_FD"] = "#{@srv.fileno},#{s2.fileno}" + end + run_client(host, port) { |res| assert_equal "HI", res.body } + th = Thread.new do + c = s2.accept + c.readpartial(1234) + c.write "HTTP/1.0 666 OK\r\n\r\nGO AWAY" + c.close + :OK + end + Thread.pass + s2host, s2port = s2.addr[3], s2.addr[1] + Net::HTTP.start(s2host, s2port) do |http| + res = http.request(Net::HTTP::Get.new("/")) + assert_equal 666, res.code.to_i + assert_equal "GO AWAY", res.body + end + assert_equal :OK, th.value + tmpc = TCPSocket.new(s2host, s2port) + a2 = s2.accept + assert_nil IO.select([a2], nil, nil, 0.05) + tmpc.close + assert_nil a2.read(1) + a2.close + s2.close + end end |