aboutsummaryrefslogtreecommitdiffstats
path: root/test/rubygems
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-11-04 07:23:59 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-11-04 07:23:59 +0000
commitf6616071dc4089b772d3dcb6c1031653fb4d2054 (patch)
treea9f43483b0f894b6ce21835f09c1dc839a14d170 /test/rubygems
parentdd3aec25d63e865ce0e90b2ff870d7bcc39b1a56 (diff)
downloadruby-f6616071dc4089b772d3dcb6c1031653fb4d2054.tar.gz
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
Diffstat (limited to 'test/rubygems')
-rw-r--r--test/rubygems/test_gem_remote_fetcher.rb50
1 files changed, 49 insertions, 1 deletions
diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb
index 3769911522..7e08a8c663 100644
--- a/test/rubygems/test_gem_remote_fetcher.rb
+++ b/test/rubygems/test_gem_remote_fetcher.rb
@@ -77,6 +77,30 @@ gems:
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
@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] }
@@ -108,6 +132,7 @@ gems:
end
def teardown
+ @fetcher.close_all
self.class.stop_servers
super
Gem.configuration[:http_proxy] = nil
@@ -134,6 +159,7 @@ gems:
def test_fetch_size_bad_uri
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
e = assert_raises ArgumentError do
fetcher.fetch_size 'gems.example.com/yaml'
@@ -144,6 +170,7 @@ gems:
def test_fetch_size_socket_error
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
def fetcher.request(uri, request_class, last_modified = nil)
raise SocketError, "tarded"
end
@@ -172,6 +199,7 @@ gems:
dns.expect :getresource, target, [String, Object]
fetch = Gem::RemoteFetcher.new nil, dns
+ @fetcher = fetcher
assert_equal URI.parse("http://blah.com/foo"), fetch.api_endpoint(uri)
target.verify
@@ -435,6 +463,7 @@ gems:
def test_fetch_path_gzip
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
def fetcher.fetch_http(uri, mtime, head = nil)
Gem.gzip 'foo'
@@ -445,6 +474,7 @@ gems:
def test_fetch_path_gzip_unmodified
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
def fetcher.fetch_http(uri, mtime, head = nil)
nil
@@ -455,6 +485,7 @@ gems:
def test_fetch_path_io_error
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
def fetcher.fetch_http(*)
raise EOFError
@@ -472,6 +503,7 @@ gems:
def test_fetch_path_socket_error
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
def fetcher.fetch_http(uri, mtime, head = nil)
raise SocketError
@@ -489,6 +521,7 @@ gems:
def test_fetch_path_system_call_error
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
def fetcher.fetch_http(uri, mtime = nil, head = nil)
raise Errno::ECONNREFUSED, 'connect(2)'
@@ -507,6 +540,7 @@ gems:
def test_fetch_path_unmodified
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
def fetcher.fetch_http(uri, mtime, head = nil)
nil
@@ -519,6 +553,7 @@ gems:
use_ui @ui do
ENV['http_proxy'] = 'http://fakeurl:12345'
fetcher = Gem::RemoteFetcher.new :no_proxy
+ @fetcher = fetcher
assert_data_from_server fetcher.fetch_path(@server_uri)
end
end
@@ -527,6 +562,7 @@ gems:
use_ui @ui do
ENV['http_proxy'] = @proxy_uri
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
assert_data_from_proxy fetcher.fetch_path(@server_uri)
end
end
@@ -535,6 +571,7 @@ gems:
use_ui @ui do
ENV['HTTP_PROXY'] = @proxy_uri
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
assert_data_from_proxy fetcher.fetch_path(@server_uri)
end
end
@@ -542,12 +579,14 @@ gems:
def test_implicit_proxy_no_env
use_ui @ui do
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
assert_data_from_server fetcher.fetch_path(@server_uri)
end
end
def test_fetch_http
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
url = 'http://gems.example.com/redirect'
def fetcher.request(uri, request_class, last_modified = nil)
@@ -571,6 +610,7 @@ gems:
def test_fetch_http_redirects
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
url = 'http://gems.example.com/redirect'
def fetcher.request(uri, request_class, last_modified = nil)
@@ -589,6 +629,7 @@ gems:
def test_fetch_s3
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
url = 's3://testuser:testpass@my-bucket/gems/specs.4.8.gz'
$fetched_uri = nil
@@ -613,6 +654,7 @@ gems:
def test_fetch_s3_no_creds
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
url = 's3://my-bucket/gems/specs.4.8.gz'
e = assert_raises Gem::RemoteFetcher::FetchError do
fetcher.fetch_s3 URI.parse(url)
@@ -626,6 +668,7 @@ gems:
ENV["http_proxy"] = @proxy_uri
ENV["no_proxy"] = URI::parse(@server_uri).host
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
assert_data_from_server fetcher.fetch_path(@server_uri)
end
end
@@ -635,12 +678,14 @@ gems:
ENV["http_proxy"] = @proxy_uri
ENV["no_proxy"] = "fakeurl.com, #{URI::parse(@server_uri).host}"
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
assert_data_from_server fetcher.fetch_path(@server_uri)
end
end
def test_request_block
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
assert_throws :block_called do
fetcher.request URI('http://example'), Net::HTTP::Get do |req|
@@ -654,6 +699,7 @@ gems:
use_ui @ui do
self.class.enable_yaml = false
fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
assert_error { fetcher.size }
end
end
@@ -736,8 +782,10 @@ gems:
end
Gem.configuration = Gem::ConfigFile.new %W[--config-file #{temp_conf}]
end
- yield Gem::RemoteFetcher.new
+ fetcher = Gem::RemoteFetcher.new
+ yield fetcher
ensure
+ fetcher.close_all
Gem.configuration = nil
end