diff options
author | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-07-19 22:43:38 +0000 |
---|---|---|
committer | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-07-19 22:43:38 +0000 |
commit | b1a0509b5465ce77f52e0384159237889a8d60ec (patch) | |
tree | ea22ccb90a2367364e0c740f15ad571558b025f4 /test/net | |
parent | ef19dcf96dd2e84c4fe0a46888a5afd0cd457f80 (diff) | |
download | ruby-b1a0509b5465ce77f52e0384159237889a8d60ec.tar.gz |
* lib/net/http/response.rb: Automatically inflate gzip and
deflate-encoded response bodies. [Feature #6942]
* lib/net/http/generic_request.rb: Automatically accept gzip and
deflate content-encoding for requests. [Feature #6494]
* lib/net/http/request.rb: Updated documentation for #6494.
* lib/net/http.rb: Updated documentation for #6492 and #6494, removed
Content-Encoding handling now present in Net::HTTPResponse.
* test/net/http/test_httpresponse.rb: Tests for #6492
* test/net/http/test_http_request.rb: Tests for #6494
* test/open-uri/test_open-uri.rb (test_content_encoding): Updated test
for automatic content-encoding handling.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36473 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/net')
-rw-r--r-- | test/net/http/test_http_request.rb | 57 | ||||
-rw-r--r-- | test/net/http/test_httpresponse.rb | 158 |
2 files changed, 213 insertions, 2 deletions
diff --git a/test/net/http/test_http_request.rb b/test/net/http/test_http_request.rb new file mode 100644 index 0000000000..c01e52c0b4 --- /dev/null +++ b/test/net/http/test_http_request.rb @@ -0,0 +1,57 @@ +require 'net/http' +require 'test/unit' +require 'stringio' + +class HTTPRequestTest < Test::Unit::TestCase + + def test_initialize_GET + req = Net::HTTP::Get.new '/' + + assert_equal 'GET', req.method + refute req.request_body_permitted? + assert req.response_body_permitted? + + expected = { + 'accept' => %w[*/*], + 'user-agent' => %w[Ruby], + } + + expected['accept-encoding'] = %w[gzip;q=1.0,deflate;q=0.6,identity;q=0.3] if + Net::HTTP::HAVE_ZLIB + + assert_equal expected, req.to_hash + end + + def test_initialize_GET_range + req = Net::HTTP::Get.new '/', 'Range' => 'bytes=0-9' + + assert_equal 'GET', req.method + refute req.request_body_permitted? + assert req.response_body_permitted? + + expected = { + 'accept' => %w[*/*], + 'user-agent' => %w[Ruby], + 'range' => %w[bytes=0-9], + } + + assert_equal expected, req.to_hash + end + + def test_initialize_HEAD + req = Net::HTTP::Head.new '/' + + assert_equal 'HEAD', req.method + refute req.request_body_permitted? + refute req.response_body_permitted? + + expected = { + 'accept' => %w[*/*], + 'user-agent' => %w[Ruby], + } + + assert_equal expected, req.to_hash + end + +end + diff --git a/test/net/http/test_httpresponse.rb b/test/net/http/test_httpresponse.rb index ab6fdd0ea9..d57614bb73 100644 --- a/test/net/http/test_httpresponse.rb +++ b/test/net/http/test_httpresponse.rb @@ -4,7 +4,7 @@ require 'stringio' class HTTPResponseTest < Test::Unit::TestCase def test_singleline_header - io = dummy_io(<<EOS.gsub(/\n/, "\r\n")) + io = dummy_io(<<EOS) HTTP/1.1 200 OK Content-Length: 5 Connection: close @@ -17,7 +17,7 @@ EOS end def test_multiline_header - io = dummy_io(<<EOS.gsub(/\n/, "\r\n")) + io = dummy_io(<<EOS) HTTP/1.1 200 OK X-Foo: XXX YYY @@ -32,9 +32,163 @@ EOS assert_equal('XXX YYY', res.header['x-bar']) end + def test_read_body + io = dummy_io(<<EOS) +HTTP/1.1 200 OK +Connection: close +Content-Length: 5 + +hello +EOS + + res = Net::HTTPResponse.read_new(io) + + body = nil + + res.reading_body io, true do + body = res.read_body + end + + assert_equal 'hello', body + end + + def test_read_body_block + io = dummy_io(<<EOS) +HTTP/1.1 200 OK +Connection: close +Content-Length: 5 + +hello +EOS + + res = Net::HTTPResponse.read_new(io) + + body = '' + + res.reading_body io, true do + res.read_body do |chunk| + body << chunk + end + end + + assert_equal 'hello', body + end + + def test_read_body_content_encoding_deflate + io = dummy_io(<<EOS) +HTTP/1.1 200 OK +Connection: close +Content-Encoding: deflate +Content-Length: 13 + +x\x9C\xCBH\xCD\xC9\xC9\a\x00\x06,\x02\x15 +EOS + + res = Net::HTTPResponse.read_new(io) + + body = nil + + res.reading_body io, true do + body = res.read_body + end + + assert_equal 'hello', body + end + + def test_read_body_content_encoding_deflate_chunked + io = dummy_io(<<EOS) +HTTP/1.1 200 OK +Connection: close +Content-Encoding: deflate +Transfer-Encoding: chunked + +6 +x\x9C\xCBH\xCD\xC9 +7 +\xC9\a\x00\x06,\x02\x15 +0 + +EOS + + res = Net::HTTPResponse.read_new(io) + + body = nil + + res.reading_body io, true do + body = res.read_body + end + + assert_equal 'hello', body + end + + def test_read_body_content_encoding_deflate_no_length + io = dummy_io(<<EOS) +HTTP/1.1 200 OK +Connection: close +Content-Encoding: deflate + +x\x9C\xCBH\xCD\xC9\xC9\a\x00\x06,\x02\x15 +EOS + + res = Net::HTTPResponse.read_new(io) + + body = nil + + res.reading_body io, true do + body = res.read_body + end + + assert_equal 'hello', body + end + + def test_read_body_content_encoding_deflate_content_range + io = dummy_io(<<EOS) +HTTP/1.1 200 OK +Accept-Ranges: bytes +Connection: close +Content-Encoding: gzip +Content-Length: 10 +Content-Range: bytes 0-9/55 + +\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x03 +EOS + + res = Net::HTTPResponse.read_new(io) + + body = nil + + res.reading_body io, true do + body = res.read_body + end + + assert_equal "\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x03", body + end + + def test_read_body_string + io = dummy_io(<<EOS) +HTTP/1.1 200 OK +Connection: close +Content-Length: 5 + +hello +EOS + + res = Net::HTTPResponse.read_new(io) + + body = '' + + res.reading_body io, true do + res.read_body body + end + + assert_equal 'hello', body + end + private def dummy_io(str) + str = str.gsub(/\n/, "\r\n") + Net::BufferedIO.new(StringIO.new(str)) end end |