mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Warn open-uri's "open" method at Kernel.
Use URI.open instead. Thanks for the patch by jeremyevans0 (Jeremy Evans) [Misc #15893].
This commit is contained in:
		
							parent
							
								
									9987296b8b
								
							
						
					
					
						commit
						05aac90a1b
					
				
					 3 changed files with 85 additions and 64 deletions
				
			
		| 
						 | 
				
			
			@ -10,6 +10,21 @@ module Kernel
 | 
			
		|||
    alias open_uri_original_open open # :nodoc:
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def open(name, *rest, &block) # :nodoc:
 | 
			
		||||
    if (name.respond_to?(:open) && !name.respond_to?(:to_path)) ||
 | 
			
		||||
       (name.respond_to?(:to_str) &&
 | 
			
		||||
        %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} =~ name &&
 | 
			
		||||
        (uri = URI.parse(name)).respond_to?(:open))
 | 
			
		||||
      warn('calling URI.open via Kernel#open is deprecated, call URI.open directly', uplevel: 1)
 | 
			
		||||
      URI.open(name, *rest, &block)
 | 
			
		||||
    else
 | 
			
		||||
      open_uri_original_open(name, *rest, &block)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  module_function :open
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
module URI
 | 
			
		||||
  # Allows the opening of various resources including URIs.
 | 
			
		||||
  #
 | 
			
		||||
  # If the first argument responds to the 'open' method, 'open' is called on
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +41,7 @@ module Kernel
 | 
			
		|||
  #
 | 
			
		||||
  # We can accept URIs and strings that begin with http://, https:// and
 | 
			
		||||
  # ftp://. In these cases, the opened file object is extended by OpenURI::Meta.
 | 
			
		||||
  def open(name, *rest, &block) # :doc:
 | 
			
		||||
  def self.open(name, *rest, &block)
 | 
			
		||||
    if name.respond_to?(:open)
 | 
			
		||||
      name.open(*rest, &block)
 | 
			
		||||
    elsif name.respond_to?(:to_str) &&
 | 
			
		||||
| 
						 | 
				
			
			@ -35,16 +50,10 @@ module Kernel
 | 
			
		|||
      uri.open(*rest, &block)
 | 
			
		||||
    else
 | 
			
		||||
      open_uri_original_open(name, *rest, &block)
 | 
			
		||||
      # After Kernel#open override is removed:
 | 
			
		||||
      #super
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  module_function :open
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
module URI #:nodoc:
 | 
			
		||||
  # alias for Kernel.open defined in open-uri.
 | 
			
		||||
  def self.open(name, *rest, &block)
 | 
			
		||||
    Kernel.open(name, *rest, &block)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
# OpenURI is an easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,6 +68,18 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
    @proxies.each_with_index {|k, i| ENV[k] = @old_proxies[i] }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_deprecated_kernel_open
 | 
			
		||||
    with_http {|srv, dr, url|
 | 
			
		||||
      srv.mount_proc("/foo200", lambda { |req, res| res.body = "foo200" } )
 | 
			
		||||
      assert_warning(/calling URI.open via Kernel#open is deprecated, call URI.open directly/) {
 | 
			
		||||
        open("#{url}/foo200") {|f|
 | 
			
		||||
          assert_equal("200", f.status[0])
 | 
			
		||||
          assert_equal("foo200", f.read)
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_200_uri_open
 | 
			
		||||
    with_http {|srv, dr, url|
 | 
			
		||||
      srv.mount_proc("/urifoo200", lambda { |req, res| res.body = "urifoo200" } )
 | 
			
		||||
| 
						 | 
				
			
			@ -81,7 +93,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
  def test_200
 | 
			
		||||
    with_http {|srv, dr, url|
 | 
			
		||||
      srv.mount_proc("/foo200", lambda { |req, res| res.body = "foo200" } )
 | 
			
		||||
      open("#{url}/foo200") {|f|
 | 
			
		||||
      URI.open("#{url}/foo200") {|f|
 | 
			
		||||
        assert_equal("200", f.status[0])
 | 
			
		||||
        assert_equal("foo200", f.read)
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +104,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
    with_http {|srv, dr, url|
 | 
			
		||||
      content = "foo200big"*10240
 | 
			
		||||
      srv.mount_proc("/foo200big", lambda { |req, res| res.body = content } )
 | 
			
		||||
      open("#{url}/foo200big") {|f|
 | 
			
		||||
      URI.open("#{url}/foo200big") {|f|
 | 
			
		||||
        assert_equal("200", f.status[0])
 | 
			
		||||
        assert_equal(content, f.read)
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -105,7 +117,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
      assert_match(%r{ERROR `/not-exist' not found}, server_log[0])
 | 
			
		||||
    }
 | 
			
		||||
    with_http(log_tester) {|srv, dr, url, server_thread, server_log|
 | 
			
		||||
      exc = assert_raise(OpenURI::HTTPError) { open("#{url}/not-exist") {} }
 | 
			
		||||
      exc = assert_raise(OpenURI::HTTPError) { URI.open("#{url}/not-exist") {} }
 | 
			
		||||
      assert_equal("404", exc.io.status[0])
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +126,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
    with_http {|srv, dr, url|
 | 
			
		||||
      srv.mount_proc("/foo_ou", lambda { |req, res| res.body = "foo_ou" } )
 | 
			
		||||
      u = URI("#{url}/foo_ou")
 | 
			
		||||
      open(u) {|f|
 | 
			
		||||
      URI.open(u) {|f|
 | 
			
		||||
        assert_equal("200", f.status[0])
 | 
			
		||||
        assert_equal("foo_ou", f.read)
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +134,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def test_open_too_many_arg
 | 
			
		||||
    assert_raise(ArgumentError) { open("http://192.0.2.1/tma", "r", 0666, :extra) {} }
 | 
			
		||||
    assert_raise(ArgumentError) { URI.open("http://192.0.2.1/tma", "r", 0666, :extra) {} }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_read_timeout
 | 
			
		||||
| 
						 | 
				
			
			@ -169,28 +181,28 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def test_invalid_option
 | 
			
		||||
    assert_raise(ArgumentError) { open("http://127.0.0.1/", :invalid_option=>true) {} }
 | 
			
		||||
    assert_raise(ArgumentError) { URI.open("http://127.0.0.1/", :invalid_option=>true) {} }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_mode
 | 
			
		||||
    with_http {|srv, dr, url|
 | 
			
		||||
      srv.mount_proc("/mode", lambda { |req, res| res.body = "mode" } )
 | 
			
		||||
      open("#{url}/mode", "r") {|f|
 | 
			
		||||
      URI.open("#{url}/mode", "r") {|f|
 | 
			
		||||
        assert_equal("200", f.status[0])
 | 
			
		||||
        assert_equal("mode", f.read)
 | 
			
		||||
      }
 | 
			
		||||
      open("#{url}/mode", "r", 0600) {|f|
 | 
			
		||||
      URI.open("#{url}/mode", "r", 0600) {|f|
 | 
			
		||||
        assert_equal("200", f.status[0])
 | 
			
		||||
        assert_equal("mode", f.read)
 | 
			
		||||
      }
 | 
			
		||||
      assert_raise(ArgumentError) { open("#{url}/mode", "a") {} }
 | 
			
		||||
      open("#{url}/mode", "r:us-ascii") {|f|
 | 
			
		||||
      assert_raise(ArgumentError) { URI.open("#{url}/mode", "a") {} }
 | 
			
		||||
      URI.open("#{url}/mode", "r:us-ascii") {|f|
 | 
			
		||||
        assert_equal(Encoding::US_ASCII, f.read.encoding)
 | 
			
		||||
      }
 | 
			
		||||
      open("#{url}/mode", "r:utf-8") {|f|
 | 
			
		||||
      URI.open("#{url}/mode", "r:utf-8") {|f|
 | 
			
		||||
        assert_equal(Encoding::UTF_8, f.read.encoding)
 | 
			
		||||
      }
 | 
			
		||||
      assert_raise(ArgumentError) { open("#{url}/mode", "r:invalid-encoding") {} }
 | 
			
		||||
      assert_raise(ArgumentError) { URI.open("#{url}/mode", "r:invalid-encoding") {} }
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -198,7 +210,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
    with_http {|srv, dr, url|
 | 
			
		||||
      srv.mount_proc("/without_block", lambda { |req, res| res.body = "without_block" } )
 | 
			
		||||
      begin
 | 
			
		||||
        f = open("#{url}/without_block")
 | 
			
		||||
        f = URI.open("#{url}/without_block")
 | 
			
		||||
        assert_equal("200", f.status[0])
 | 
			
		||||
        assert_equal("without_block", f.read)
 | 
			
		||||
      ensure
 | 
			
		||||
| 
						 | 
				
			
			@ -211,7 +223,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
    with_http {|srv, dr, url|
 | 
			
		||||
      srv.mount_proc("/close200", lambda { |req, res| res.body = "close200" } )
 | 
			
		||||
      assert_nothing_raised {
 | 
			
		||||
        open("#{url}/close200") {|f|
 | 
			
		||||
        URI.open("#{url}/close200") {|f|
 | 
			
		||||
          f.close
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -223,7 +235,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
      content = "close200big"*10240
 | 
			
		||||
      srv.mount_proc("/close200big", lambda { |req, res| res.body = content } )
 | 
			
		||||
      assert_nothing_raised {
 | 
			
		||||
        open("#{url}/close200big") {|f|
 | 
			
		||||
        URI.open("#{url}/close200big") {|f|
 | 
			
		||||
          f.close
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -235,7 +247,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
    myheader2 = nil
 | 
			
		||||
    with_http {|srv, dr, url|
 | 
			
		||||
      srv.mount_proc("/h/") {|req, res| myheader2 = req['myheader']; res.body = "foo" }
 | 
			
		||||
      open("#{url}/h/", 'MyHeader'=>myheader1) {|f|
 | 
			
		||||
      URI.open("#{url}/h/", 'MyHeader'=>myheader1) {|f|
 | 
			
		||||
        assert_equal("foo", f.read)
 | 
			
		||||
        assert_equal(myheader1, myheader2)
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -244,13 +256,13 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
 | 
			
		||||
  def test_multi_proxy_opt
 | 
			
		||||
    assert_raise(ArgumentError) {
 | 
			
		||||
      open("http://127.0.0.1/", :proxy_http_basic_authentication=>true, :proxy=>true) {}
 | 
			
		||||
      URI.open("http://127.0.0.1/", :proxy_http_basic_authentication=>true, :proxy=>true) {}
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_non_http_proxy
 | 
			
		||||
    assert_raise(RuntimeError) {
 | 
			
		||||
      open("http://127.0.0.1/", :proxy=>URI("ftp://127.0.0.1/")) {}
 | 
			
		||||
      URI.open("http://127.0.0.1/", :proxy=>URI("ftp://127.0.0.1/")) {}
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -273,28 +285,28 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
      begin
 | 
			
		||||
        proxy_thread = proxy.start
 | 
			
		||||
        srv.mount_proc("/proxy", lambda { |req, res| res.body = "proxy" } )
 | 
			
		||||
        open("#{url}/proxy", :proxy=>proxy_url) {|f|
 | 
			
		||||
        URI.open("#{url}/proxy", :proxy=>proxy_url) {|f|
 | 
			
		||||
          assert_equal("200", f.status[0])
 | 
			
		||||
          assert_equal("proxy", f.read)
 | 
			
		||||
        }
 | 
			
		||||
        assert_match(/#{Regexp.quote url}/, proxy_auth_log); proxy_auth_log.clear
 | 
			
		||||
        open("#{url}/proxy", :proxy=>URI(proxy_url)) {|f|
 | 
			
		||||
        URI.open("#{url}/proxy", :proxy=>URI(proxy_url)) {|f|
 | 
			
		||||
          assert_equal("200", f.status[0])
 | 
			
		||||
          assert_equal("proxy", f.read)
 | 
			
		||||
        }
 | 
			
		||||
        assert_match(/#{Regexp.quote url}/, proxy_auth_log); proxy_auth_log.clear
 | 
			
		||||
        open("#{url}/proxy", :proxy=>nil) {|f|
 | 
			
		||||
        URI.open("#{url}/proxy", :proxy=>nil) {|f|
 | 
			
		||||
          assert_equal("200", f.status[0])
 | 
			
		||||
          assert_equal("proxy", f.read)
 | 
			
		||||
        }
 | 
			
		||||
        assert_equal("", proxy_auth_log); proxy_auth_log.clear
 | 
			
		||||
        assert_raise(ArgumentError) {
 | 
			
		||||
          open("#{url}/proxy", :proxy=>:invalid) {}
 | 
			
		||||
          URI.open("#{url}/proxy", :proxy=>:invalid) {}
 | 
			
		||||
        }
 | 
			
		||||
        assert_equal("", proxy_auth_log); proxy_auth_log.clear
 | 
			
		||||
        with_env("http_proxy"=>proxy_url) {
 | 
			
		||||
          # should not use proxy for 127.0.0.0/8.
 | 
			
		||||
          open("#{url}/proxy") {|f|
 | 
			
		||||
          URI.open("#{url}/proxy") {|f|
 | 
			
		||||
            assert_equal("200", f.status[0])
 | 
			
		||||
            assert_equal("proxy", f.read)
 | 
			
		||||
          }
 | 
			
		||||
| 
						 | 
				
			
			@ -330,7 +342,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
      begin
 | 
			
		||||
        th = proxy.start
 | 
			
		||||
        srv.mount_proc("/proxy", lambda { |req, res| res.body = "proxy" } )
 | 
			
		||||
        exc = assert_raise(OpenURI::HTTPError) { open("#{url}/proxy", :proxy=>proxy_url) {} }
 | 
			
		||||
        exc = assert_raise(OpenURI::HTTPError) { URI.open("#{url}/proxy", :proxy=>proxy_url) {} }
 | 
			
		||||
        assert_equal("407", exc.io.status[0])
 | 
			
		||||
        assert_match(/#{Regexp.quote url}/, proxy_auth_log); proxy_auth_log.clear
 | 
			
		||||
      ensure
 | 
			
		||||
| 
						 | 
				
			
			@ -363,14 +375,14 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
      begin
 | 
			
		||||
        th = proxy.start
 | 
			
		||||
        srv.mount_proc("/proxy", lambda { |req, res| res.body = "proxy" } )
 | 
			
		||||
        open("#{url}/proxy",
 | 
			
		||||
        URI.open("#{url}/proxy",
 | 
			
		||||
            :proxy_http_basic_authentication=>[proxy_url, "user", "pass"]) {|f|
 | 
			
		||||
          assert_equal("200", f.status[0])
 | 
			
		||||
          assert_equal("proxy", f.read)
 | 
			
		||||
        }
 | 
			
		||||
        assert_match(/#{Regexp.quote url}/, proxy_auth_log); proxy_auth_log.clear
 | 
			
		||||
        assert_raise(ArgumentError) {
 | 
			
		||||
          open("#{url}/proxy",
 | 
			
		||||
          URI.open("#{url}/proxy",
 | 
			
		||||
              :proxy_http_basic_authentication=>[true, "user", "pass"]) {}
 | 
			
		||||
        }
 | 
			
		||||
        assert_equal("", proxy_auth_log); proxy_auth_log.clear
 | 
			
		||||
| 
						 | 
				
			
			@ -404,7 +416,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
      begin
 | 
			
		||||
        th = proxy.start
 | 
			
		||||
        srv.mount_proc("/proxy", lambda { |req, res| res.body = "proxy" } )
 | 
			
		||||
        open("#{url}/proxy", :proxy => proxy_url) {|f|
 | 
			
		||||
        URI.open("#{url}/proxy", :proxy => proxy_url) {|f|
 | 
			
		||||
          assert_equal("200", f.status[0])
 | 
			
		||||
          assert_equal("proxy", f.read)
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -423,12 +435,12 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
      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|
 | 
			
		||||
      URI.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/") {} }
 | 
			
		||||
      assert_raise(OpenURI::HTTPRedirect) { URI.open("#{url}/r1/", :redirect=>false) {} }
 | 
			
		||||
      assert_raise(RuntimeError) { URI.open("#{url}/to-file/") {} }
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -436,7 +448,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
    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.status = 301; res["location"] = "#{url}/r1"; res.body = "r2" }
 | 
			
		||||
      assert_raise(RuntimeError) { open("#{url}/r1/") {} }
 | 
			
		||||
      assert_raise(RuntimeError) { URI.open("#{url}/r1/") {} }
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -515,7 +527,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
  def test_redirect_auth_success
 | 
			
		||||
    with_http {|srv, dr, url|
 | 
			
		||||
      setup_redirect_auth(srv, url)
 | 
			
		||||
      open("#{url}/r2/", :http_basic_authentication=>['user', 'pass']) {|f|
 | 
			
		||||
      URI.open("#{url}/r2/", :http_basic_authentication=>['user', 'pass']) {|f|
 | 
			
		||||
        assert_equal("r2", f.read)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -528,7 +540,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
    }
 | 
			
		||||
    with_http(log_tester) {|srv, dr, url, server_thread, server_log|
 | 
			
		||||
      setup_redirect_auth(srv, url)
 | 
			
		||||
      exc = assert_raise(OpenURI::HTTPError) { open("#{url}/r2/") {} }
 | 
			
		||||
      exc = assert_raise(OpenURI::HTTPError) { URI.open("#{url}/r2/") {} }
 | 
			
		||||
      assert_equal("401", exc.io.status[0])
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -540,13 +552,13 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
    }
 | 
			
		||||
    with_http(log_tester) {|srv, dr, url, server_thread, server_log|
 | 
			
		||||
      setup_redirect_auth(srv, url)
 | 
			
		||||
      exc = assert_raise(OpenURI::HTTPError) { open("#{url}/r1/", :http_basic_authentication=>['user', 'pass']) {} }
 | 
			
		||||
      exc = assert_raise(OpenURI::HTTPError) { URI.open("#{url}/r1/", :http_basic_authentication=>['user', 'pass']) {} }
 | 
			
		||||
      assert_equal("401", exc.io.status[0])
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_userinfo
 | 
			
		||||
    assert_raise(ArgumentError) { open("http://user:pass@127.0.0.1/") {} }
 | 
			
		||||
    assert_raise(ArgumentError) { URI.open("http://user:pass@127.0.0.1/") {} }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_progress
 | 
			
		||||
| 
						 | 
				
			
			@ -555,7 +567,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
      srv.mount_proc("/data/") {|req, res| res.body = content }
 | 
			
		||||
      length = []
 | 
			
		||||
      progress = []
 | 
			
		||||
      open("#{url}/data/",
 | 
			
		||||
      URI.open("#{url}/data/",
 | 
			
		||||
           :content_length_proc => lambda {|n| length << n },
 | 
			
		||||
           :progress_proc => lambda {|n| progress << n }
 | 
			
		||||
          ) {|f|
 | 
			
		||||
| 
						 | 
				
			
			@ -575,7 +587,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
      srv.mount_proc("/data/") {|req, res| res.body = content; res.chunked = true }
 | 
			
		||||
      length = []
 | 
			
		||||
      progress = []
 | 
			
		||||
      open("#{url}/data/",
 | 
			
		||||
      URI.open("#{url}/data/",
 | 
			
		||||
           :content_length_proc => lambda {|n| length << n },
 | 
			
		||||
           :progress_proc => lambda {|n| progress << n }
 | 
			
		||||
          ) {|f|
 | 
			
		||||
| 
						 | 
				
			
			@ -605,25 +617,25 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
      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|
 | 
			
		||||
      URI.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|
 | 
			
		||||
      URI.open("#{url}/ej/") {|f|
 | 
			
		||||
        assert_equal(content_ej, f.read)
 | 
			
		||||
        assert_equal("text/plain", f.content_type)
 | 
			
		||||
        assert_equal("euc-jp", f.charset)
 | 
			
		||||
        assert_equal(Encoding::EUC_JP, f.read.encoding)
 | 
			
		||||
      }
 | 
			
		||||
      open("#{url}/ej/", 'r:utf-8') {|f|
 | 
			
		||||
      URI.open("#{url}/ej/", 'r:utf-8') {|f|
 | 
			
		||||
        # override charset with encoding option
 | 
			
		||||
        assert_equal(content_ej.dup.force_encoding('utf-8'), f.read)
 | 
			
		||||
        assert_equal("text/plain", f.content_type)
 | 
			
		||||
        assert_equal("euc-jp", f.charset)
 | 
			
		||||
        assert_equal(Encoding::UTF_8, f.read.encoding)
 | 
			
		||||
      }
 | 
			
		||||
      open("#{url}/ej/", :encoding=>'utf-8') {|f|
 | 
			
		||||
      URI.open("#{url}/ej/", :encoding=>'utf-8') {|f|
 | 
			
		||||
        # override charset with encoding option
 | 
			
		||||
        assert_equal(content_ej.dup.force_encoding('utf-8'), f.read)
 | 
			
		||||
        assert_equal("text/plain", f.content_type)
 | 
			
		||||
| 
						 | 
				
			
			@ -631,9 +643,9 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
        assert_equal(Encoding::UTF_8, f.read.encoding)
 | 
			
		||||
      }
 | 
			
		||||
      assert_raise(ArgumentError) {
 | 
			
		||||
        open("#{url}/ej/", 'r:utf-8', :encoding=>'utf-8') {|f| }
 | 
			
		||||
        URI.open("#{url}/ej/", 'r:utf-8', :encoding=>'utf-8') {|f| }
 | 
			
		||||
      }
 | 
			
		||||
      open("#{url}/nc/") {|f|
 | 
			
		||||
      URI.open("#{url}/nc/") {|f|
 | 
			
		||||
        assert_equal("aa", f.read)
 | 
			
		||||
        assert_equal("text/plain", f.content_type)
 | 
			
		||||
        assert_equal("iso-8859-1", f.charset)
 | 
			
		||||
| 
						 | 
				
			
			@ -646,7 +658,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
    with_http {|srv, dr, url|
 | 
			
		||||
      content_u8 = "\u3042"
 | 
			
		||||
      srv.mount_proc("/qu8/") {|req, res| res.body = content_u8; res['content-type'] = 'text/plain; charset="utf\-8"' }
 | 
			
		||||
      open("#{url}/qu8/") {|f|
 | 
			
		||||
      URI.open("#{url}/qu8/") {|f|
 | 
			
		||||
        assert_equal(content_u8, f.read)
 | 
			
		||||
        assert_equal("text/plain", f.content_type)
 | 
			
		||||
        assert_equal("utf-8", f.charset)
 | 
			
		||||
| 
						 | 
				
			
			@ -657,7 +669,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
  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|
 | 
			
		||||
      URI.open("#{url}/data/") {|f|
 | 
			
		||||
        assert_equal("foo", f.read)
 | 
			
		||||
        assert_equal(Time.utc(2009,8,7,6,5,4), f.last_modified)
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -671,15 +683,15 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
      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|
 | 
			
		||||
      URI.open("#{url}/data/") {|f|
 | 
			
		||||
        assert_equal [], f.content_encoding
 | 
			
		||||
        assert_equal(content, f.read)
 | 
			
		||||
      }
 | 
			
		||||
      open("#{url}/data2/") {|f|
 | 
			
		||||
      URI.open("#{url}/data2/") {|f|
 | 
			
		||||
        assert_equal [], f.content_encoding
 | 
			
		||||
        assert_equal(content, f.read)
 | 
			
		||||
      }
 | 
			
		||||
      open("#{url}/noce/") {|f|
 | 
			
		||||
      URI.open("#{url}/noce/") {|f|
 | 
			
		||||
        assert_equal [], f.content_encoding
 | 
			
		||||
        assert_equal(content_gz, f.read.force_encoding("ascii-8bit"))
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -693,7 +705,7 @@ class TestOpenURI < Test::Unit::TestCase
 | 
			
		|||
        res.cookies << "name2=value2; blabla"
 | 
			
		||||
        res.body = "foo"
 | 
			
		||||
      }
 | 
			
		||||
      open("#{url}/mcookie/") {|f|
 | 
			
		||||
      URI.open("#{url}/mcookie/") {|f|
 | 
			
		||||
        assert_equal("foo", f.read)
 | 
			
		||||
        assert_equal(["name1=value1; blabla", "name2=value2; blabla"],
 | 
			
		||||
                     f.metas['set-cookie'].sort)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ class TestOpenURISSL
 | 
			
		|||
 | 
			
		||||
  def setup_validation(srv, dr)
 | 
			
		||||
    cacert_filename = "#{dr}/cacert.pem"
 | 
			
		||||
    open(cacert_filename, "w") {|f| f << CA_CERT }
 | 
			
		||||
    URI.open(cacert_filename, "w") {|f| f << CA_CERT }
 | 
			
		||||
    srv.mount_proc("/data", lambda { |req, res| res.body = "ddd" } )
 | 
			
		||||
    cacert_filename
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +75,7 @@ class TestOpenURISSL
 | 
			
		|||
  def test_validation_success
 | 
			
		||||
    with_https {|srv, dr, url|
 | 
			
		||||
      cacert_filename = setup_validation(srv, dr)
 | 
			
		||||
      open("#{url}/data", :ssl_ca_cert => cacert_filename) {|f|
 | 
			
		||||
      URI.open("#{url}/data", :ssl_ca_cert => cacert_filename) {|f|
 | 
			
		||||
        assert_equal("200", f.status[0])
 | 
			
		||||
        assert_equal("ddd", f.read)
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -85,7 +85,7 @@ class TestOpenURISSL
 | 
			
		|||
  def test_validation_noverify
 | 
			
		||||
    with_https {|srv, dr, url|
 | 
			
		||||
      setup_validation(srv, dr)
 | 
			
		||||
      open("#{url}/data", :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE) {|f|
 | 
			
		||||
      URI.open("#{url}/data", :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE) {|f|
 | 
			
		||||
        assert_equal("200", f.status[0])
 | 
			
		||||
        assert_equal("ddd", f.read)
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -103,7 +103,7 @@ class TestOpenURISSL
 | 
			
		|||
    end
 | 
			
		||||
    with_https(log_tester) {|srv, dr, url, server_thread, server_log|
 | 
			
		||||
      setup_validation(srv, dr)
 | 
			
		||||
      assert_raise(OpenSSL::SSL::SSLError) { open("#{url}/data") {} }
 | 
			
		||||
      assert_raise(OpenSSL::SSL::SSLError) { URI.open("#{url}/data") {} }
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -149,7 +149,7 @@ class TestOpenURISSL
 | 
			
		|||
    }
 | 
			
		||||
    with_https_proxy(proxy_log_tester) {|srv, dr, url_, cacert_filename, cacert_directory, proxy_host, proxy_port|
 | 
			
		||||
      url = url_
 | 
			
		||||
      open("#{url}/proxy", :proxy=>"http://#{proxy_host}:#{proxy_port}/", :ssl_ca_cert => cacert_filename) {|f|
 | 
			
		||||
      URI.open("#{url}/proxy", :proxy=>"http://#{proxy_host}:#{proxy_port}/", :ssl_ca_cert => cacert_filename) {|f|
 | 
			
		||||
        assert_equal("200", f.status[0])
 | 
			
		||||
        assert_equal("proxy", f.read)
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -165,7 +165,7 @@ class TestOpenURISSL
 | 
			
		|||
    }
 | 
			
		||||
    with_https_proxy(proxy_log_tester) {|srv, dr, url_, cacert_filename, cacert_directory, proxy_host, proxy_port|
 | 
			
		||||
      url = url_
 | 
			
		||||
      open("#{url}/proxy", :proxy=>"http://#{proxy_host}:#{proxy_port}/", :ssl_ca_cert => cacert_directory) {|f|
 | 
			
		||||
      URI.open("#{url}/proxy", :proxy=>"http://#{proxy_host}:#{proxy_port}/", :ssl_ca_cert => cacert_directory) {|f|
 | 
			
		||||
        assert_equal("200", f.status[0])
 | 
			
		||||
        assert_equal("proxy", f.read)
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue