mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
test_gem_remote_fetcher.rb: leaked FDs
* test/rubygems/test_gem_remote_fetcher.rb (RemoteFetcherCleanup): close all pooled connections for each tests to fix leaked file descriptors. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48265 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
dd3aec25d6
commit
f6616071dc
2 changed files with 55 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
Tue Nov 4 16:23:57 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* test/rubygems/test_gem_remote_fetcher.rb (RemoteFetcherCleanup):
|
||||||
|
close all pooled connections for each tests to fix leaked file
|
||||||
|
descriptors.
|
||||||
|
|
||||||
Tue Nov 4 12:51:31 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Tue Nov 4 12:51:31 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* include/ruby/ruby.h (PRIsVALUE), vsnprintf.c (BSD_vfprintf): add
|
* include/ruby/ruby.h (PRIsVALUE), vsnprintf.c (BSD_vfprintf): add
|
||||||
|
|
|
@ -77,6 +77,30 @@ gems:
|
||||||
|
|
||||||
DIR = File.expand_path(File.dirname(__FILE__))
|
DIR = File.expand_path(File.dirname(__FILE__))
|
||||||
|
|
||||||
|
module RemoteFetcherCleanup
|
||||||
|
refine Gem::RemoteFetcher do
|
||||||
|
def close_all
|
||||||
|
@pools.each_value {|pool| pool.close_all}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
refine Gem::Request::ConnectionPools do
|
||||||
|
def close_all
|
||||||
|
@pools.each_value {|pool| pool.close_all}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
refine Gem::Request::HTTPPool do
|
||||||
|
def close_all
|
||||||
|
until @queue.empty?
|
||||||
|
if connection = @queue.pop(true) and connection.started?
|
||||||
|
connection.finish
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@queue.push(nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
using RemoteFetcherCleanup
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@proxies = %w[http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
|
@proxies = %w[http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
|
||||||
@old_proxies = @proxies.map {|k| ENV[k] }
|
@old_proxies = @proxies.map {|k| ENV[k] }
|
||||||
|
@ -108,6 +132,7 @@ gems:
|
||||||
end
|
end
|
||||||
|
|
||||||
def teardown
|
def teardown
|
||||||
|
@fetcher.close_all
|
||||||
self.class.stop_servers
|
self.class.stop_servers
|
||||||
super
|
super
|
||||||
Gem.configuration[:http_proxy] = nil
|
Gem.configuration[:http_proxy] = nil
|
||||||
|
@ -134,6 +159,7 @@ gems:
|
||||||
|
|
||||||
def test_fetch_size_bad_uri
|
def test_fetch_size_bad_uri
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
|
|
||||||
e = assert_raises ArgumentError do
|
e = assert_raises ArgumentError do
|
||||||
fetcher.fetch_size 'gems.example.com/yaml'
|
fetcher.fetch_size 'gems.example.com/yaml'
|
||||||
|
@ -144,6 +170,7 @@ gems:
|
||||||
|
|
||||||
def test_fetch_size_socket_error
|
def test_fetch_size_socket_error
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
def fetcher.request(uri, request_class, last_modified = nil)
|
def fetcher.request(uri, request_class, last_modified = nil)
|
||||||
raise SocketError, "tarded"
|
raise SocketError, "tarded"
|
||||||
end
|
end
|
||||||
|
@ -172,6 +199,7 @@ gems:
|
||||||
dns.expect :getresource, target, [String, Object]
|
dns.expect :getresource, target, [String, Object]
|
||||||
|
|
||||||
fetch = Gem::RemoteFetcher.new nil, dns
|
fetch = Gem::RemoteFetcher.new nil, dns
|
||||||
|
@fetcher = fetcher
|
||||||
assert_equal URI.parse("http://blah.com/foo"), fetch.api_endpoint(uri)
|
assert_equal URI.parse("http://blah.com/foo"), fetch.api_endpoint(uri)
|
||||||
|
|
||||||
target.verify
|
target.verify
|
||||||
|
@ -435,6 +463,7 @@ gems:
|
||||||
|
|
||||||
def test_fetch_path_gzip
|
def test_fetch_path_gzip
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
|
|
||||||
def fetcher.fetch_http(uri, mtime, head = nil)
|
def fetcher.fetch_http(uri, mtime, head = nil)
|
||||||
Gem.gzip 'foo'
|
Gem.gzip 'foo'
|
||||||
|
@ -445,6 +474,7 @@ gems:
|
||||||
|
|
||||||
def test_fetch_path_gzip_unmodified
|
def test_fetch_path_gzip_unmodified
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
|
|
||||||
def fetcher.fetch_http(uri, mtime, head = nil)
|
def fetcher.fetch_http(uri, mtime, head = nil)
|
||||||
nil
|
nil
|
||||||
|
@ -455,6 +485,7 @@ gems:
|
||||||
|
|
||||||
def test_fetch_path_io_error
|
def test_fetch_path_io_error
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
|
|
||||||
def fetcher.fetch_http(*)
|
def fetcher.fetch_http(*)
|
||||||
raise EOFError
|
raise EOFError
|
||||||
|
@ -472,6 +503,7 @@ gems:
|
||||||
|
|
||||||
def test_fetch_path_socket_error
|
def test_fetch_path_socket_error
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
|
|
||||||
def fetcher.fetch_http(uri, mtime, head = nil)
|
def fetcher.fetch_http(uri, mtime, head = nil)
|
||||||
raise SocketError
|
raise SocketError
|
||||||
|
@ -489,6 +521,7 @@ gems:
|
||||||
|
|
||||||
def test_fetch_path_system_call_error
|
def test_fetch_path_system_call_error
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
|
|
||||||
def fetcher.fetch_http(uri, mtime = nil, head = nil)
|
def fetcher.fetch_http(uri, mtime = nil, head = nil)
|
||||||
raise Errno::ECONNREFUSED, 'connect(2)'
|
raise Errno::ECONNREFUSED, 'connect(2)'
|
||||||
|
@ -507,6 +540,7 @@ gems:
|
||||||
|
|
||||||
def test_fetch_path_unmodified
|
def test_fetch_path_unmodified
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
|
|
||||||
def fetcher.fetch_http(uri, mtime, head = nil)
|
def fetcher.fetch_http(uri, mtime, head = nil)
|
||||||
nil
|
nil
|
||||||
|
@ -519,6 +553,7 @@ gems:
|
||||||
use_ui @ui do
|
use_ui @ui do
|
||||||
ENV['http_proxy'] = 'http://fakeurl:12345'
|
ENV['http_proxy'] = 'http://fakeurl:12345'
|
||||||
fetcher = Gem::RemoteFetcher.new :no_proxy
|
fetcher = Gem::RemoteFetcher.new :no_proxy
|
||||||
|
@fetcher = fetcher
|
||||||
assert_data_from_server fetcher.fetch_path(@server_uri)
|
assert_data_from_server fetcher.fetch_path(@server_uri)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -527,6 +562,7 @@ gems:
|
||||||
use_ui @ui do
|
use_ui @ui do
|
||||||
ENV['http_proxy'] = @proxy_uri
|
ENV['http_proxy'] = @proxy_uri
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
assert_data_from_proxy fetcher.fetch_path(@server_uri)
|
assert_data_from_proxy fetcher.fetch_path(@server_uri)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -535,6 +571,7 @@ gems:
|
||||||
use_ui @ui do
|
use_ui @ui do
|
||||||
ENV['HTTP_PROXY'] = @proxy_uri
|
ENV['HTTP_PROXY'] = @proxy_uri
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
assert_data_from_proxy fetcher.fetch_path(@server_uri)
|
assert_data_from_proxy fetcher.fetch_path(@server_uri)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -542,12 +579,14 @@ gems:
|
||||||
def test_implicit_proxy_no_env
|
def test_implicit_proxy_no_env
|
||||||
use_ui @ui do
|
use_ui @ui do
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
assert_data_from_server fetcher.fetch_path(@server_uri)
|
assert_data_from_server fetcher.fetch_path(@server_uri)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_fetch_http
|
def test_fetch_http
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
url = 'http://gems.example.com/redirect'
|
url = 'http://gems.example.com/redirect'
|
||||||
|
|
||||||
def fetcher.request(uri, request_class, last_modified = nil)
|
def fetcher.request(uri, request_class, last_modified = nil)
|
||||||
|
@ -571,6 +610,7 @@ gems:
|
||||||
|
|
||||||
def test_fetch_http_redirects
|
def test_fetch_http_redirects
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
url = 'http://gems.example.com/redirect'
|
url = 'http://gems.example.com/redirect'
|
||||||
|
|
||||||
def fetcher.request(uri, request_class, last_modified = nil)
|
def fetcher.request(uri, request_class, last_modified = nil)
|
||||||
|
@ -589,6 +629,7 @@ gems:
|
||||||
|
|
||||||
def test_fetch_s3
|
def test_fetch_s3
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
url = 's3://testuser:testpass@my-bucket/gems/specs.4.8.gz'
|
url = 's3://testuser:testpass@my-bucket/gems/specs.4.8.gz'
|
||||||
$fetched_uri = nil
|
$fetched_uri = nil
|
||||||
|
|
||||||
|
@ -613,6 +654,7 @@ gems:
|
||||||
|
|
||||||
def test_fetch_s3_no_creds
|
def test_fetch_s3_no_creds
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
url = 's3://my-bucket/gems/specs.4.8.gz'
|
url = 's3://my-bucket/gems/specs.4.8.gz'
|
||||||
e = assert_raises Gem::RemoteFetcher::FetchError do
|
e = assert_raises Gem::RemoteFetcher::FetchError do
|
||||||
fetcher.fetch_s3 URI.parse(url)
|
fetcher.fetch_s3 URI.parse(url)
|
||||||
|
@ -626,6 +668,7 @@ gems:
|
||||||
ENV["http_proxy"] = @proxy_uri
|
ENV["http_proxy"] = @proxy_uri
|
||||||
ENV["no_proxy"] = URI::parse(@server_uri).host
|
ENV["no_proxy"] = URI::parse(@server_uri).host
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
assert_data_from_server fetcher.fetch_path(@server_uri)
|
assert_data_from_server fetcher.fetch_path(@server_uri)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -635,12 +678,14 @@ gems:
|
||||||
ENV["http_proxy"] = @proxy_uri
|
ENV["http_proxy"] = @proxy_uri
|
||||||
ENV["no_proxy"] = "fakeurl.com, #{URI::parse(@server_uri).host}"
|
ENV["no_proxy"] = "fakeurl.com, #{URI::parse(@server_uri).host}"
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
assert_data_from_server fetcher.fetch_path(@server_uri)
|
assert_data_from_server fetcher.fetch_path(@server_uri)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_request_block
|
def test_request_block
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
|
|
||||||
assert_throws :block_called do
|
assert_throws :block_called do
|
||||||
fetcher.request URI('http://example'), Net::HTTP::Get do |req|
|
fetcher.request URI('http://example'), Net::HTTP::Get do |req|
|
||||||
|
@ -654,6 +699,7 @@ gems:
|
||||||
use_ui @ui do
|
use_ui @ui do
|
||||||
self.class.enable_yaml = false
|
self.class.enable_yaml = false
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
|
@fetcher = fetcher
|
||||||
assert_error { fetcher.size }
|
assert_error { fetcher.size }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -736,8 +782,10 @@ gems:
|
||||||
end
|
end
|
||||||
Gem.configuration = Gem::ConfigFile.new %W[--config-file #{temp_conf}]
|
Gem.configuration = Gem::ConfigFile.new %W[--config-file #{temp_conf}]
|
||||||
end
|
end
|
||||||
yield Gem::RemoteFetcher.new
|
fetcher = Gem::RemoteFetcher.new
|
||||||
|
yield fetcher
|
||||||
ensure
|
ensure
|
||||||
|
fetcher.close_all
|
||||||
Gem.configuration = nil
|
Gem.configuration = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue