diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-10 17:59:48 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-10 17:59:48 +0000 |
commit | 717b5a5f2d4761ccf2775ccb6c9931008773ad6c (patch) | |
tree | 627cbdb8010e8acf684cc23edc286c094ed1c064 | |
parent | 3ce642f5af3bff519102185538133cd620237c2c (diff) | |
download | ruby-717b5a5f2d4761ccf2775ccb6c9931008773ad6c.tar.gz |
add tests for open-uri.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24834 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | test/test-open-uri.rb | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/test/test-open-uri.rb b/test/test-open-uri.rb new file mode 100644 index 0000000000..9d9bfd77f0 --- /dev/null +++ b/test/test-open-uri.rb @@ -0,0 +1,151 @@ +require 'test/unit' +require 'open-uri' +require 'webrick' +require 'webrick/httpproxy' + +class TestOpenURI < Test::Unit::TestCase + + def with_http + Dir.mktmpdir {|dr| + srv = WEBrick::HTTPServer.new({ + :DocumentRoot => dr, + :ServerType => Thread, + :Logger => WEBrick::Log.new(StringIO.new("")), + :AccessLog => [[StringIO.new(""), ""]], + :BindAddress => '127.0.0.1', + :Port => 0}) + _, port, _, host = srv.listeners[0].addr + begin + th = srv.start + yield dr, "http://#{host}:#{port}" + ensure + srv.shutdown + end + } + end + + def test_200 + with_http {|dr, url| + open("#{dr}/foo200", "w") {|f| f << "foo200" } + open("#{url}/foo200") {|f| + assert_equal("200", f.status[0]) + assert_equal("foo200", f.read) + } + } + end + + def test_404 + with_http {|dr, url| + exc = assert_raise(OpenURI::HTTPError) { open("#{url}/not-exist") {} } + assert_equal("404", exc.io.status[0]) + } + end + + def test_open_uri + with_http {|dr, url| + open("#{dr}/foo_ou", "w") {|f| f << "foo_ou" } + u = URI("#{url}/foo_ou") + open(u) {|f| + assert_equal("200", f.status[0]) + assert_equal("foo_ou", f.read) + } + } + end + + def test_invalid_option + assert_raise(ArgumentError) { open("http://127.0.0.1/", :invalid_option=>true) {} } + end + + def test_mode + with_http {|dr, url| + open("#{dr}/mode", "w") {|f| f << "mode" } + open("#{url}/mode", "r") {|f| + assert_equal("200", f.status[0]) + assert_equal("mode", f.read) + } + open("#{url}/mode", "r", 0600) {|f| + assert_equal("200", f.status[0]) + assert_equal("mode", f.read) + } + assert_raise(ArgumentError) { open("#{url}/mode", "a") {} } + } + end + + def test_without_block + with_http {|dr, url| + open("#{dr}/without_block", "w") {|g| g << "without_block" } + begin + f = open("#{url}/without_block") + assert_equal("200", f.status[0]) + assert_equal("without_block", f.read) + ensure + f.close + end + } + end + + def test_multi_proxy_opt + assert_raise(ArgumentError) { + open("http://127.0.0.1/", :proxy_http_basic_authentication=>true, :proxy=>true) {} + } + end + + def test_proxy + with_http {|dr, url| + prxy = WEBrick::HTTPProxyServer.new({ + :ServerType => Thread, + :Logger => WEBrick::Log.new(StringIO.new("")), + :AccessLog => [[StringIO.new(""), ""]], + :BindAddress => '127.0.0.1', + :Port => 0}) + _, p_port, _, p_host = prxy.listeners[0].addr + begin + th = prxy.start + open("#{dr}/proxy", "w") {|f| f << "proxy" } + open("#{url}/proxy", :proxy=>"http://#{p_host}:#{p_port}/") {|f| + assert_equal("200", f.status[0]) + assert_equal("proxy", f.read) + } + ensure + prxy.shutdown + end + } + end + + def test_proxy_http_basic_authentication + with_http {|dr, url| + prxy = WEBrick::HTTPProxyServer.new({ + :ServerType => Thread, + :Logger => WEBrick::Log.new(StringIO.new("")), + :AccessLog => [[StringIO.new(""), ""]], + :ProxyAuthProc => lambda {|req, res| + if req["Proxy-Authorization"] != "Basic #{['user:pass'].pack('m').chomp}" + raise WEBrick::HTTPStatus::ProxyAuthenticationRequired + end + }, + :BindAddress => '127.0.0.1', + :Port => 0}) + _, p_port, _, p_host = prxy.listeners[0].addr + p_url = "http://#{p_host}:#{p_port}/" + begin + th = prxy.start + open("#{dr}/proxy", "w") {|f| f << "proxy" } + exc = assert_raise(OpenURI::HTTPError) { open("#{url}/proxy", :proxy=>p_url) {} } + assert_equal("407", exc.io.status[0]) + open("#{url}/proxy", + :proxy_http_basic_authentication=>[p_url, "user", "pass"]) {|f| + assert_equal("200", f.status[0]) + assert_equal("proxy", f.read) + } + assert_raise(ArgumentError) { + open("#{url}/proxy", + :proxy_http_basic_authentication=>[true, "user", "pass"]) {} + } + ensure + prxy.shutdown + end + } + end + +end + |