1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

more tests.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24853 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2009-09-11 12:49:14 +00:00
parent 175bba395d
commit 726caa59a9

View file

@ -2,6 +2,7 @@ require 'test/unit'
require 'open-uri' require 'open-uri'
require 'webrick' require 'webrick'
require 'webrick/httpproxy' require 'webrick/httpproxy'
require 'zlib'
class TestOpenURI < Test::Unit::TestCase class TestOpenURI < Test::Unit::TestCase
@ -17,7 +18,7 @@ class TestOpenURI < Test::Unit::TestCase
_, port, _, host = srv.listeners[0].addr _, port, _, host = srv.listeners[0].addr
begin begin
th = srv.start th = srv.start
yield dr, "http://#{host}:#{port}" yield srv, dr, "http://#{host}:#{port}"
ensure ensure
srv.shutdown srv.shutdown
end end
@ -25,7 +26,7 @@ class TestOpenURI < Test::Unit::TestCase
end end
def test_200 def test_200
with_http {|dr, url| with_http {|srv, dr, url|
open("#{dr}/foo200", "w") {|f| f << "foo200" } open("#{dr}/foo200", "w") {|f| f << "foo200" }
open("#{url}/foo200") {|f| open("#{url}/foo200") {|f|
assert_equal("200", f.status[0]) assert_equal("200", f.status[0])
@ -34,15 +35,26 @@ class TestOpenURI < Test::Unit::TestCase
} }
end end
def test_200big
with_http {|srv, dr, url|
content = "foo200big"*10240
open("#{dr}/foo200big", "w") {|f| f << content }
open("#{url}/foo200big") {|f|
assert_equal("200", f.status[0])
assert_equal(content, f.read)
}
}
end
def test_404 def test_404
with_http {|dr, url| with_http {|srv, dr, url|
exc = assert_raise(OpenURI::HTTPError) { open("#{url}/not-exist") {} } exc = assert_raise(OpenURI::HTTPError) { open("#{url}/not-exist") {} }
assert_equal("404", exc.io.status[0]) assert_equal("404", exc.io.status[0])
} }
end end
def test_open_uri def test_open_uri
with_http {|dr, url| with_http {|srv, dr, url|
open("#{dr}/foo_ou", "w") {|f| f << "foo_ou" } open("#{dr}/foo_ou", "w") {|f| f << "foo_ou" }
u = URI("#{url}/foo_ou") u = URI("#{url}/foo_ou")
open(u) {|f| open(u) {|f|
@ -57,7 +69,7 @@ class TestOpenURI < Test::Unit::TestCase
end end
def test_mode def test_mode
with_http {|dr, url| with_http {|srv, dr, url|
open("#{dr}/mode", "w") {|f| f << "mode" } open("#{dr}/mode", "w") {|f| f << "mode" }
open("#{url}/mode", "r") {|f| open("#{url}/mode", "r") {|f|
assert_equal("200", f.status[0]) assert_equal("200", f.status[0])
@ -72,7 +84,7 @@ class TestOpenURI < Test::Unit::TestCase
end end
def test_without_block def test_without_block
with_http {|dr, url| with_http {|srv, dr, url|
open("#{dr}/without_block", "w") {|g| g << "without_block" } open("#{dr}/without_block", "w") {|g| g << "without_block" }
begin begin
f = open("#{url}/without_block") f = open("#{url}/without_block")
@ -91,7 +103,7 @@ class TestOpenURI < Test::Unit::TestCase
end end
def test_proxy def test_proxy
with_http {|dr, url| with_http {|srv, dr, url|
prxy = WEBrick::HTTPProxyServer.new({ prxy = WEBrick::HTTPProxyServer.new({
:ServerType => Thread, :ServerType => Thread,
:Logger => WEBrick::Log.new(StringIO.new("")), :Logger => WEBrick::Log.new(StringIO.new("")),
@ -106,6 +118,17 @@ class TestOpenURI < Test::Unit::TestCase
assert_equal("200", f.status[0]) assert_equal("200", f.status[0])
assert_equal("proxy", f.read) assert_equal("proxy", f.read)
} }
open("#{url}/proxy", :proxy=>URI("http://#{p_host}:#{p_port}/")) {|f|
assert_equal("200", f.status[0])
assert_equal("proxy", f.read)
}
open("#{url}/proxy", :proxy=>nil) {|f|
assert_equal("200", f.status[0])
assert_equal("proxy", f.read)
}
assert_raise(ArgumentError) {
open("#{url}/proxy", :proxy=>:invalid) {}
}
ensure ensure
prxy.shutdown prxy.shutdown
end end
@ -113,7 +136,7 @@ class TestOpenURI < Test::Unit::TestCase
end end
def test_proxy_http_basic_authentication def test_proxy_http_basic_authentication
with_http {|dr, url| with_http {|srv, dr, url|
prxy = WEBrick::HTTPProxyServer.new({ prxy = WEBrick::HTTPProxyServer.new({
:ServerType => Thread, :ServerType => Thread,
:Logger => WEBrick::Log.new(StringIO.new("")), :Logger => WEBrick::Log.new(StringIO.new("")),
@ -147,5 +170,147 @@ class TestOpenURI < Test::Unit::TestCase
} }
end end
def test_redirect
with_http {|srv, dr, url|
srv.mount_proc("/r1/") {|req, res| res.status = 301; res["location"] = "#{url}/r2"; res.body = "r1" }
srv.mount_proc("/r2/") {|req, res| res.body = "r2" }
srv.mount_proc("/to-file/") {|req, res| res.status = 301; res["location"] = "file:///foo" }
open("#{url}/r1/") {|f|
assert_equal("#{url}/r2", f.base_uri.to_s)
assert_equal("r2", f.read)
}
assert_raise(OpenURI::HTTPRedirect) { open("#{url}/r1/", :redirect=>false) {} }
assert_raise(RuntimeError) { open("#{url}/to-file/") {} }
}
end
def test_redirect_auth
with_http {|srv, dr, url|
srv.mount_proc("/r1/") {|req, res| res.status = 301; res["location"] = "#{url}/r2" }
srv.mount_proc("/r2/") {|req, res|
if req["Authorization"] != "Basic #{['user:pass'].pack('m').chomp}"
raise WEBrick::HTTPStatus::Unauthorized
end
res.body = "r2"
}
exc = assert_raise(OpenURI::HTTPError) { open("#{url}/r2/") {} }
assert_equal("401", exc.io.status[0])
open("#{url}/r2/", :http_basic_authentication=>['user', 'pass']) {|f|
assert_equal("r2", f.read)
}
exc = assert_raise(OpenURI::HTTPError) { open("#{url}/r1/", :http_basic_authentication=>['user', 'pass']) {} }
assert_equal("401", exc.io.status[0])
}
end
def test_userinfo
if "1.9.0" <= RUBY_VERSION
assert_raise(ArgumentError) { open("http://user:pass@127.0.0.1/") {} }
end
end
def test_progress
with_http {|srv, dr, url|
content = "a" * 10000
srv.mount_proc("/data/") {|req, res| res.body = content }
length = []
progress = []
open("#{url}/data/",
:content_length_proc => lambda {|n| length << n },
:progress_proc => lambda {|n| progress << n },
) {|f|
assert_equal(1, length.length)
assert_equal(content.length, length[0])
assert_equal(content.length, progress.inject(&:+))
assert_equal(content, f.read)
}
}
end
def test_progress_chunked
with_http {|srv, dr, url|
content = "a" * 10000
srv.mount_proc("/data/") {|req, res| res.body = content; res.chunked = true }
length = []
progress = []
open("#{url}/data/",
:content_length_proc => lambda {|n| length << n },
:progress_proc => lambda {|n| progress << n },
) {|f|
assert_equal(1, length.length)
assert_equal(nil, length[0])
assert_equal(content.length, progress.inject(&:+))
assert_equal(content, f.read)
}
}
end
def test_uri_read
with_http {|srv, dr, url|
open("#{dr}/uriread", "w") {|f| f << "uriread" }
data = URI("#{url}/uriread").read
assert_equal("200", data.status[0])
assert_equal("uriread", data)
}
end
def test_encoding
with_http {|srv, dr, url|
content_u8 = "\u3042"
content_ej = "\xa2\xa4".force_encoding("euc-jp")
srv.mount_proc("/u8/") {|req, res| res.body = content_u8; res['content-type'] = 'text/plain; charset=utf-8' }
srv.mount_proc("/ej/") {|req, res| res.body = content_ej; res['content-type'] = 'TEXT/PLAIN; charset=EUC-JP' }
srv.mount_proc("/nc/") {|req, res| res.body = "aa"; res['content-type'] = 'Text/Plain' }
open("#{url}/u8/") {|f|
assert_equal(content_u8, f.read)
assert_equal("text/plain", f.content_type)
assert_equal("utf-8", f.charset)
}
open("#{url}/ej/") {|f|
assert_equal(content_ej, f.read)
assert_equal("text/plain", f.content_type)
assert_equal("euc-jp", f.charset)
}
open("#{url}/nc/") {|f|
assert_equal("aa", f.read)
assert_equal("text/plain", f.content_type)
assert_equal("iso-8859-1", f.charset)
assert_equal("unknown", f.charset { "unknown" })
}
}
end
def test_last_modified
with_http {|srv, dr, url|
srv.mount_proc("/data/") {|req, res| res.body = "foo"; res['last-modified'] = 'Fri, 07 Aug 2009 06:05:04 GMT' }
open("#{url}/data/") {|f|
assert_equal("foo", f.read)
assert_equal(Time.utc(2009,8,7,6,5,4), f.last_modified)
}
}
end
def test_content_encoding
with_http {|srv, dr, url|
content = "abc" * 10000
Zlib::GzipWriter.wrap(StringIO.new(content_gz="".force_encoding("ascii-8bit"))) {|z| z.write content }
srv.mount_proc("/data/") {|req, res| res.body = content_gz; res['content-encoding'] = 'gzip' }
srv.mount_proc("/data2/") {|req, res| res.body = content_gz; res['content-encoding'] = 'gzip'; res.chunked = true }
srv.mount_proc("/noce/") {|req, res| res.body = content_gz }
open("#{url}/data/") {|f|
assert_equal ['gzip'], f.content_encoding
assert_equal(content_gz, f.read.force_encoding("ascii-8bit"))
}
open("#{url}/data2/") {|f|
assert_equal ['gzip'], f.content_encoding
assert_equal(content_gz, f.read.force_encoding("ascii-8bit"))
}
open("#{url}/noce/") {|f|
assert_equal [], f.content_encoding
assert_equal(content_gz, f.read.force_encoding("ascii-8bit"))
}
}
end
end end