diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2014-03-12 17:40:08 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2014-03-12 17:40:08 -0700 |
commit | 3df07d093a1e4207caa63fd2e3b67599211f5800 (patch) | |
tree | 253cf63f6757d8bfe0ba17dabdabc06305fe87a1 /actionpack/test/dispatch | |
parent | c0a783610f5cf77050a55ad70b2cd2cf657bffe3 (diff) | |
download | rails-3df07d093a1e4207caa63fd2e3b67599211f5800.tar.gz rails-3df07d093a1e4207caa63fd2e3b67599211f5800.tar.bz2 rails-3df07d093a1e4207caa63fd2e3b67599211f5800.zip |
use the body proxy to freeze headers
avoid freezing the headers until the web server has actually read data
from the body proxy. Once the webserver has read data, then we should
throw an error if someone tries to set a header
Diffstat (limited to 'actionpack/test/dispatch')
-rw-r--r-- | actionpack/test/dispatch/live_response_test.rb | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/actionpack/test/dispatch/live_response_test.rb b/actionpack/test/dispatch/live_response_test.rb index 336fdd569b..512f3a8a7a 100644 --- a/actionpack/test/dispatch/live_response_test.rb +++ b/actionpack/test/dispatch/live_response_test.rb @@ -35,6 +35,7 @@ module ActionController @response.stream.close } + @response.await_commit @response.each do |part| assert_equal 'foo', part latch.release @@ -59,21 +60,30 @@ module ActionController assert_nil @response.headers['Content-Length'] end - def test_headers_cannot_be_written_after_write + def test_headers_cannot_be_written_after_webserver_reads @response.stream.write 'omg' + latch = ActiveSupport::Concurrency::Latch.new + t = Thread.new { + @response.stream.each do |chunk| + latch.release + end + } + + latch.await assert @response.headers.frozen? e = assert_raises(ActionDispatch::IllegalStateError) do @response.headers['Content-Length'] = "zomg" end assert_equal 'header already sent', e.message + @response.stream.close + t.join end def test_headers_cannot_be_written_after_close @response.stream.close - assert @response.headers.frozen? e = assert_raises(ActionDispatch::IllegalStateError) do @response.headers['Content-Length'] = "zomg" end |