1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

test/net/http/test_https.rb (test_get_SNI_failure): stop proxy settings

Because the test fails under HTTP proxy settings.

https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris10-gcc/ruby-master/log/20191210T000004Z.fail.html.gz
```
  1) Failure:
TestNetHTTPS#test_get_SNI_failure [/export/home/users/chkbuild/cb-gcc/tmp/build/20191210T000004Z/ruby/test/net/http/test_https.rb:81]:
[OpenSSL::SSL::SSLError] exception expected, not #<Net::HTTPServerException: 403 "Forbidden">.
```

The new SNI feature introduced at 54072e329c may need to be improved for
HTTP proxy environment.
This commit is contained in:
Yusuke Endoh 2019-12-10 09:41:33 +09:00
parent 6a22b2a091
commit 660388f6c5
3 changed files with 45 additions and 43 deletions

View file

@ -34,7 +34,7 @@ class TestNetHTTP < Test::Unit::TestCase
end
def test_class_Proxy_from_ENV
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
ENV['http_proxy'] = 'http://proxy.example:8000'
# These are ignored on purpose. See Bug 4388 and Feature 6546
@ -115,7 +115,7 @@ class TestNetHTTP < Test::Unit::TestCase
end
def test_proxy_address
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
http = Net::HTTP.new 'hostname.example', nil, 'proxy.example'
assert_equal 'proxy.example', http.proxy_address
@ -125,7 +125,7 @@ class TestNetHTTP < Test::Unit::TestCase
end
def test_proxy_address_no_proxy
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
http = Net::HTTP.new 'hostname.example', nil, 'proxy.example', nil, nil, nil, 'example'
assert_nil http.proxy_address
@ -135,7 +135,7 @@ class TestNetHTTP < Test::Unit::TestCase
end
def test_proxy_from_env_ENV
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
ENV['http_proxy'] = 'http://proxy.example:8000'
assert_equal false, Net::HTTP.proxy_class?
@ -146,7 +146,7 @@ class TestNetHTTP < Test::Unit::TestCase
end
def test_proxy_address_ENV
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
ENV['http_proxy'] = 'http://proxy.example:8000'
http = Net::HTTP.new 'hostname.example'
@ -156,13 +156,13 @@ class TestNetHTTP < Test::Unit::TestCase
end
def test_proxy_eh_no_proxy
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
assert_equal false, Net::HTTP.new('hostname.example', nil, nil).proxy?
end
end
def test_proxy_eh_ENV
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
ENV['http_proxy'] = 'http://proxy.example:8000'
http = Net::HTTP.new 'hostname.example'
@ -172,7 +172,7 @@ class TestNetHTTP < Test::Unit::TestCase
end
def test_proxy_eh_ENV_with_user
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
ENV['http_proxy'] = 'http://foo:bar@proxy.example:8000'
http = Net::HTTP.new 'hostname.example'
@ -189,13 +189,13 @@ class TestNetHTTP < Test::Unit::TestCase
end
def test_proxy_eh_ENV_none_set
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
assert_equal false, Net::HTTP.new('hostname.example').proxy?
end
end
def test_proxy_eh_ENV_no_proxy
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
ENV['http_proxy'] = 'http://proxy.example:8000'
ENV['no_proxy'] = 'hostname.example'
@ -204,7 +204,7 @@ class TestNetHTTP < Test::Unit::TestCase
end
def test_proxy_port
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
http = Net::HTTP.new 'example', nil, 'proxy.example'
assert_equal 'proxy.example', http.proxy_address
assert_equal 80, http.proxy_port
@ -216,7 +216,7 @@ class TestNetHTTP < Test::Unit::TestCase
end
def test_proxy_port_ENV
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
ENV['http_proxy'] = 'http://proxy.example:8000'
http = Net::HTTP.new 'hostname.example'
@ -226,7 +226,7 @@ class TestNetHTTP < Test::Unit::TestCase
end
def test_newobj
clean_http_proxy_env do
TestNetHTTPUtils.clean_http_proxy_env do
ENV['http_proxy'] = 'http://proxy.example:8000'
http = Net::HTTP.newobj 'hostname.example'
@ -235,25 +235,6 @@ class TestNetHTTP < Test::Unit::TestCase
end
end
def clean_http_proxy_env
orig = {
'http_proxy' => ENV['http_proxy'],
'http_proxy_user' => ENV['http_proxy_user'],
'http_proxy_pass' => ENV['http_proxy_pass'],
'no_proxy' => ENV['no_proxy'],
}
orig.each_key do |key|
ENV.delete key
end
yield
ensure
orig.each do |key, value|
ENV[key] = value
end
end
def test_failure_message_includes_failed_domain_and_port
# hostname to be included in the error message
host = Struct.new(:to_s).new("<example>")
@ -262,7 +243,7 @@ class TestNetHTTP < Test::Unit::TestCase
def host.to_str; raise SocketError, "open failure"; end
uri = Struct.new(:scheme, :hostname, :port).new("http", host, port)
assert_raise_with_message(SocketError, /#{host}:#{port}/) do
clean_http_proxy_env{ Net::HTTP.get(uri) }
TestNetHTTPUtils.clean_http_proxy_env{ Net::HTTP.get(uri) }
end
end

View file

@ -68,17 +68,19 @@ class TestNetHTTPS < Test::Unit::TestCase
end
def test_get_SNI_failure
http = Net::HTTP.new("invalid_servername", config("port"))
http.ipaddr = config('host')
http.use_ssl = true
http.cert_store = TEST_STORE
certs = []
http.verify_callback = Proc.new do |preverify_ok, store_ctx|
certs << store_ctx.current_cert
preverify_ok
TestNetHTTPUtils.clean_http_proxy_env do
http = Net::HTTP.new("invalid_servername", config("port"))
http.ipaddr = config('host')
http.use_ssl = true
http.cert_store = TEST_STORE
certs = []
http.verify_callback = Proc.new do |preverify_ok, store_ctx|
certs << store_ctx.current_cert
preverify_ok
end
@log_tester = lambda {|_| }
assert_raise(OpenSSL::SSL::SSLError){ http.start }
end
@log_tester = lambda {|_| }
assert_raise(OpenSSL::SSL::SSLError){ http.start }
end
def test_post

View file

@ -107,4 +107,23 @@ module TestNetHTTPUtils
def print(*args) end
def printf(*args) end
end
def self.clean_http_proxy_env
orig = {
'http_proxy' => ENV['http_proxy'],
'http_proxy_user' => ENV['http_proxy_user'],
'http_proxy_pass' => ENV['http_proxy_pass'],
'no_proxy' => ENV['no_proxy'],
}
orig.each_key do |key|
ENV.delete key
end
yield
ensure
orig.each do |key, value|
ENV[key] = value
end
end
end