[rubygems/rubygems] Move stuff to the instance level

I don't know why it was living at the class level. At first I thought it
would be to reuse some server instances between tests, but they seem to
be cleaned up after every test anyways, so I don't think any of it is
needed.

https://github.com/rubygems/rubygems/commit/04bee71216
This commit is contained in:
David Rodríguez 2020-04-10 21:59:13 +02:00 committed by Hiroshi SHIBATA
parent 0b40279d7d
commit 1ede0c15a1
Notes: git 2020-05-08 07:39:21 +09:00

View File

@ -100,12 +100,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
@proxies.each {|k| ENV[k] = nil } @proxies.each {|k| ENV[k] = nil }
super super
self.class.start_servers start_servers
self.class.enable_yaml = true self.enable_yaml = true
self.class.enable_zip = false self.enable_zip = false
base_server_uri = "http://localhost:#{self.class.normal_server_port}" base_server_uri = "http://localhost:#{normal_server_port}"
@proxy_uri = "http://localhost:#{self.class.proxy_server_port}" @proxy_uri = "http://localhost:#{proxy_server_port}"
@server_uri = base_server_uri + "/yaml" @server_uri = base_server_uri + "/yaml"
@server_z_uri = base_server_uri + "/yaml.Z" @server_z_uri = base_server_uri + "/yaml.Z"
@ -129,7 +129,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
def teardown def teardown
@fetcher.close_all @fetcher.close_all
self.class.stop_servers stop_servers
super super
Gem.configuration[:http_proxy] = nil Gem.configuration[:http_proxy] = nil
@proxies.each_with_index {|k, i| ENV[k] = @old_proxies[i] } @proxies.each_with_index {|k, i| ENV[k] = @old_proxies[i] }
@ -881,7 +881,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
def test_yaml_error_on_size def test_yaml_error_on_size
use_ui @stub_ui do use_ui @stub_ui do
self.class.enable_yaml = false self.enable_yaml = false
fetcher = Gem::RemoteFetcher.new nil fetcher = Gem::RemoteFetcher.new nil
@fetcher = fetcher @fetcher = fetcher
assert_error { fetcher.size } assert_error { fetcher.size }
@ -889,7 +889,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
end end
def test_ssl_connection def test_ssl_connection
ssl_server = self.class.start_ssl_server ssl_server = start_ssl_server
temp_ca_cert = File.join(DIR, 'ca_cert.pem') temp_ca_cert = File.join(DIR, 'ca_cert.pem')
with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher| with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml") fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
@ -897,7 +897,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
end end
def test_ssl_client_cert_auth_connection def test_ssl_client_cert_auth_connection
ssl_server = self.class.start_ssl_server({ ssl_server = start_ssl_server({
:SSLVerifyClient => :SSLVerifyClient =>
OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT}) OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
@ -912,7 +912,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
end end
def test_do_not_allow_invalid_client_cert_auth_connection def test_do_not_allow_invalid_client_cert_auth_connection
ssl_server = self.class.start_ssl_server({ ssl_server = start_ssl_server({
:SSLVerifyClient => :SSLVerifyClient =>
OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT}) OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
@ -929,7 +929,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
end end
def test_do_not_allow_insecure_ssl_connection_by_default def test_do_not_allow_insecure_ssl_connection_by_default
ssl_server = self.class.start_ssl_server ssl_server = start_ssl_server
with_configured_fetcher do |fetcher| with_configured_fetcher do |fetcher|
assert_raises Gem::RemoteFetcher::FetchError do assert_raises Gem::RemoteFetcher::FetchError do
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml") fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
@ -938,14 +938,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
end end
def test_ssl_connection_allow_verify_none def test_ssl_connection_allow_verify_none
ssl_server = self.class.start_ssl_server ssl_server = start_ssl_server
with_configured_fetcher(":ssl_verify_mode: 0") do |fetcher| with_configured_fetcher(":ssl_verify_mode: 0") do |fetcher|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml") fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
end end
end end
def test_do_not_follow_insecure_redirect def test_do_not_follow_insecure_redirect
ssl_server = self.class.start_ssl_server ssl_server = start_ssl_server
temp_ca_cert = File.join(DIR, 'ca_cert.pem') temp_ca_cert = File.join(DIR, 'ca_cert.pem')
expected_error_message = expected_error_message =
"redirecting to non-https resource: #{@server_uri} (https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri})" "redirecting to non-https resource: #{@server_uri} (https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri})"
@ -960,7 +960,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
end end
def test_nil_ca_cert def test_nil_ca_cert
ssl_server = self.class.start_ssl_server ssl_server = start_ssl_server
temp_ca_cert = nil temp_ca_cert = nil
with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher| with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
@ -1012,148 +1012,144 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
end end
class << self private
attr_reader :normal_server, :proxy_server attr_reader :normal_server, :proxy_server
attr_accessor :enable_zip, :enable_yaml attr_accessor :enable_zip, :enable_yaml
def start_servers def start_servers
@normal_server ||= start_server(SERVER_DATA) @normal_server ||= start_server(SERVER_DATA)
@proxy_server ||= start_server(PROXY_DATA) @proxy_server ||= start_server(PROXY_DATA)
@enable_yaml = true @enable_yaml = true
@enable_zip = false @enable_zip = false
@ssl_server = nil
@ssl_server_thread = nil
end
def stop_servers
if @normal_server
@normal_server.kill.join
@normal_server = nil
end
if @proxy_server
@proxy_server.kill.join
@proxy_server = nil
end
if @ssl_server
@ssl_server.stop
@ssl_server = nil @ssl_server = nil
end
if @ssl_server_thread
@ssl_server_thread.kill.join
@ssl_server_thread = nil @ssl_server_thread = nil
end end
utils = WEBrick::Utils # TimeoutHandler is since 1.9
utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
end
def stop_servers def normal_server_port
if @normal_server @normal_server[:server].config[:Port]
@normal_server.kill.join end
@normal_server = nil
end def proxy_server_port
if @proxy_server @proxy_server[:server].config[:Port]
@proxy_server.kill.join end
@proxy_server = nil
end DIR = File.expand_path(File.dirname(__FILE__))
if @ssl_server
@ssl_server.stop def start_ssl_server(config = {})
@ssl_server = nil null_logger = NilLog.new
end server = WEBrick::HTTPServer.new({
if @ssl_server_thread :Port => 0,
@ssl_server_thread.kill.join :Logger => null_logger,
@ssl_server_thread = nil :AccessLog => [],
end :SSLEnable => true,
utils = WEBrick::Utils # TimeoutHandler is since 1.9 :SSLCACertificateFile => File.join(DIR, 'ca_cert.pem'),
utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate) :SSLCertificate => cert('ssl_cert.pem'),
:SSLPrivateKey => key('ssl_key.pem'),
:SSLVerifyClient => nil,
:SSLCertName => nil
}.merge(config))
server.mount_proc("/yaml") do |req, res|
res.body = "--- true\n"
end end
server.mount_proc("/insecure_redirect") do |req, res|
def normal_server_port res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to'])
@normal_server[:server].config[:Port]
end end
server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
def proxy_server_port t = Thread.new do
@proxy_server[:server].config[:Port] begin
server.start
rescue Exception => ex
puts "ERROR during server thread: #{ex.message}"
raise
ensure
server.shutdown
end
end end
while server.status != :Running
DIR = File.expand_path(File.dirname(__FILE__)) sleep 0.1
unless t.alive?
def start_ssl_server(config = {}) t.join
null_logger = NilLog.new raise
server = WEBrick::HTTPServer.new({
:Port => 0,
:Logger => null_logger,
:AccessLog => [],
:SSLEnable => true,
:SSLCACertificateFile => File.join(DIR, 'ca_cert.pem'),
:SSLCertificate => cert('ssl_cert.pem'),
:SSLPrivateKey => key('ssl_key.pem'),
:SSLVerifyClient => nil,
:SSLCertName => nil
}.merge(config))
server.mount_proc("/yaml") do |req, res|
res.body = "--- true\n"
end end
server.mount_proc("/insecure_redirect") do |req, res|
res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to'])
end
server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
t = Thread.new do
begin
server.start
rescue Exception => ex
puts "ERROR during server thread: #{ex.message}"
raise
ensure
server.shutdown
end
end
while server.status != :Running
sleep 0.1
unless t.alive?
t.join
raise
end
end
@ssl_server = server
@ssl_server_thread = t
server
end end
@ssl_server = server
@ssl_server_thread = t
server
end
private def start_server(data)
null_logger = NilLog.new
def start_server(data) s = WEBrick::HTTPServer.new(
null_logger = NilLog.new :Port => 0,
s = WEBrick::HTTPServer.new( :DocumentRoot => nil,
:Port => 0, :Logger => null_logger,
:DocumentRoot => nil, :AccessLog => null_logger
:Logger => null_logger, )
:AccessLog => null_logger s.mount_proc("/kill") { |req, res| s.shutdown }
) s.mount_proc("/yaml") do |req, res|
s.mount_proc("/kill") { |req, res| s.shutdown } if req["X-Captain"]
s.mount_proc("/yaml") do |req, res| res.body = req["X-Captain"]
if req["X-Captain"] elsif @enable_yaml
res.body = req["X-Captain"] res.body = data
elsif @enable_yaml res['Content-Type'] = 'text/plain'
res.body = data res['content-length'] = data.size
res['Content-Type'] = 'text/plain' else
res['content-length'] = data.size res.status = "404"
else res.body = "<h1>NOT FOUND</h1>"
res.status = "404" res['Content-Type'] = 'text/html'
res.body = "<h1>NOT FOUND</h1>"
res['Content-Type'] = 'text/html'
end
end end
s.mount_proc("/yaml.Z") do |req, res| end
if @enable_zip s.mount_proc("/yaml.Z") do |req, res|
res.body = Zlib::Deflate.deflate(data) if @enable_zip
res['Content-Type'] = 'text/plain' res.body = Zlib::Deflate.deflate(data)
else res['Content-Type'] = 'text/plain'
res.status = "404" else
res.body = "<h1>NOT FOUND</h1>" res.status = "404"
res['Content-Type'] = 'text/html' res.body = "<h1>NOT FOUND</h1>"
end res['Content-Type'] = 'text/html'
end end
th = Thread.new do end
begin th = Thread.new do
s.start begin
rescue Exception => ex s.start
abort "ERROR during server thread: #{ex.message}" rescue Exception => ex
ensure abort "ERROR during server thread: #{ex.message}"
s.shutdown ensure
end s.shutdown
end end
th[:server] = s
th
end end
th[:server] = s
th
end
def cert(filename) def cert(filename)
OpenSSL::X509::Certificate.new(File.read(File.join(DIR, filename))) OpenSSL::X509::Certificate.new(File.read(File.join(DIR, filename)))
end end
def key(filename)
OpenSSL::PKey::RSA.new(File.read(File.join(DIR, filename)))
end
def key(filename)
OpenSSL::PKey::RSA.new(File.read(File.join(DIR, filename)))
end end
end if defined?(OpenSSL::SSL) end if defined?(OpenSSL::SSL)