From 3c7fa04c598fcfd5048c308f8e22a1188797f890 Mon Sep 17 00:00:00 2001 From: Matt Martyn Date: Mon, 11 Mar 2019 13:56:59 -0400 Subject: [PATCH] Fixing issue with remote_addr persisting between requests - adding a test --- test/test_puma_server.rb | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/test/test_puma_server.rb b/test/test_puma_server.rb index fcd70866..73a7190e 100644 --- a/test/test_puma_server.rb +++ b/test/test_puma_server.rb @@ -803,6 +803,39 @@ EOF sock.close end + def test_chunked_keep_alive_two_back_to_back_with_set_remote_address + body = nil + remote_addr =nil + @server = Puma::Server.new @app, @events, { remote_address: :header, remote_address_header: 'HTTP_X_FORWARDED_FOR'} + @server.app = proc { |env| + body = env['rack.input'].read + remote_addr = env['REMOTE_ADDR'] + [200, {}, [""]] + } + + @server.add_tcp_listener @host, @port + @server.run + + sock = TCPSocket.new @host, @server.connected_port + sock << "GET / HTTP/1.1\r\nX-Forwarded-For: 127.0.0.1\r\nConnection: Keep-Alive\r\nTransfer-Encoding: chunked\r\n\r\n1\r\nh\r\n4\r\nello\r\n0\r\n\r\n" + + h = header(sock) + assert_equal ["HTTP/1.1 200 OK", "Content-Length: 0"], h + assert_equal "hello", body + assert_equal "127.0.0.1", remote_addr + + sock << "GET / HTTP/1.1\r\nX-Forwarded-For: 127.0.0.2\r\nConnection: Keep-Alive\r\nTransfer-Encoding: chunked\r\n\r\n4\r\ngood\r\n3\r\nbye\r\n0\r\n\r\n" + sleep 0.1 + + h = header(sock) + + assert_equal ["HTTP/1.1 200 OK", "Content-Length: 0"], h + assert_equal "goodbye", body + assert_equal "127.0.0.2", remote_addr + + sock.close + end + def test_empty_header_values @server.app = proc { |env| [200, {"X-Empty-Header" => ""}, []] }