[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:
parent
0b40279d7d
commit
1ede0c15a1
Notes:
git
2020-05-08 07:39:21 +09:00
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user