aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/dispatch
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2014-03-12 17:40:08 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2014-03-12 17:40:08 -0700
commit3df07d093a1e4207caa63fd2e3b67599211f5800 (patch)
tree253cf63f6757d8bfe0ba17dabdabc06305fe87a1 /actionpack/test/dispatch
parentc0a783610f5cf77050a55ad70b2cd2cf657bffe3 (diff)
downloadrails-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.rb14
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