open-uri: accept :open_timeout option
* lib/open-uri.rb (OpenURI::Options): add :open_timeout default * (def OpenURI.open_http): check :open_timeout option * (module OpenURI): rdoc for :open_timeout * test/open-uri/test_open-uri.rb (test_open_timeout): new test [Feature #10361] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47869 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
adfce27ee0
commit
9559b04e3d
@ -1,3 +1,11 @@
|
|||||||
|
Sat Oct 11 04:14:41 2014 Kir Shatrov <shatrov@me.com>
|
||||||
|
|
||||||
|
* lib/open-uri.rb (OpenURI::Options): add :open_timeout default
|
||||||
|
* (def OpenURI.open_http): check :open_timeout option
|
||||||
|
* (module OpenURI): rdoc for :open_timeout
|
||||||
|
* test/open-uri/test_open-uri.rb (test_open_timeout): new test
|
||||||
|
[Feature #10361]
|
||||||
|
|
||||||
Fri Oct 10 11:27:49 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Fri Oct 10 11:27:49 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* include/ruby/io.h (rb_io_mode_flags, rb_io_modenum_flags):
|
* include/ruby/io.h (rb_io_mode_flags, rb_io_modenum_flags):
|
||||||
|
@ -102,6 +102,7 @@ module OpenURI
|
|||||||
:content_length_proc => true,
|
:content_length_proc => true,
|
||||||
:http_basic_authentication => true,
|
:http_basic_authentication => true,
|
||||||
:read_timeout => true,
|
:read_timeout => true,
|
||||||
|
:open_timeout => true,
|
||||||
:ssl_ca_cert => nil,
|
:ssl_ca_cert => nil,
|
||||||
:ssl_verify_mode => nil,
|
:ssl_verify_mode => nil,
|
||||||
:ftp_active_mode => false,
|
:ftp_active_mode => false,
|
||||||
@ -307,6 +308,9 @@ module OpenURI
|
|||||||
if options.include? :read_timeout
|
if options.include? :read_timeout
|
||||||
http.read_timeout = options[:read_timeout]
|
http.read_timeout = options[:read_timeout]
|
||||||
end
|
end
|
||||||
|
if options.include? :open_timeout
|
||||||
|
http.open_timeout = options[:open_timeout]
|
||||||
|
end
|
||||||
|
|
||||||
resp = nil
|
resp = nil
|
||||||
http.start {
|
http.start {
|
||||||
@ -667,6 +671,13 @@ module OpenURI
|
|||||||
#
|
#
|
||||||
# :read_timeout option specifies a timeout of read for http connections.
|
# :read_timeout option specifies a timeout of read for http connections.
|
||||||
#
|
#
|
||||||
|
# [:open_timeout]
|
||||||
|
# Synopsis:
|
||||||
|
# :open_timeout=>nil (no timeout)
|
||||||
|
# :open_timeout=>10 (10 second)
|
||||||
|
#
|
||||||
|
# :open_timeout option specifies a timeout of open for http connections.
|
||||||
|
#
|
||||||
# [:ssl_ca_cert]
|
# [:ssl_ca_cert]
|
||||||
# Synopsis:
|
# Synopsis:
|
||||||
# :ssl_ca_cert=>filename
|
# :ssl_ca_cert=>filename
|
||||||
|
@ -122,6 +122,24 @@ class TestOpenURI < Test::Unit::TestCase
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_open_timeout
|
||||||
|
assert_raises(Net::OpenTimeout) do
|
||||||
|
URI("http://example.com/").read(open_timeout: 0.000001)
|
||||||
|
end if false # avoid external resources in tests
|
||||||
|
|
||||||
|
with_http {|srv, dr, url|
|
||||||
|
url += '/'
|
||||||
|
srv.mount_proc('/', lambda { |_, res| res.body = 'hi' })
|
||||||
|
begin
|
||||||
|
URI(url).read(open_timeout: 0.000001)
|
||||||
|
rescue Net::OpenTimeout
|
||||||
|
# not guaranteed to fire, since the kernel negotiates the
|
||||||
|
# TCP connection even if the server thread is sleeping
|
||||||
|
end
|
||||||
|
assert_equal 'hi', URI(url).read(open_timeout: 60), 'should not timeout'
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def test_invalid_option
|
def test_invalid_option
|
||||||
assert_raise(ArgumentError) { open("http://127.0.0.1/", :invalid_option=>true) {} }
|
assert_raise(ArgumentError) { open("http://127.0.0.1/", :invalid_option=>true) {} }
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user