зеркало из https://github.com/github/ruby.git
* test/net/smtp/test_smtp.rb (test_tls_connect, test_tls_connect):
use Socket.tcp_server_sockets in case localhost is resolved to ::1. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56623 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
5e214d40d5
Коммит
af3f52674a
|
@ -1,3 +1,8 @@
|
||||||
|
Sun Nov 6 11:48:55 2016 Shugo Maeda <shugo@ruby-lang.org>
|
||||||
|
|
||||||
|
* test/net/smtp/test_smtp.rb (test_tls_connect, test_tls_connect):
|
||||||
|
use Socket.tcp_server_sockets in case localhost is resolved to ::1.
|
||||||
|
|
||||||
Sun Nov 6 11:49:47 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sun Nov 6 11:49:47 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* lib/irb.rb (IRB::Irb#run): split from IRB.start.
|
* lib/irb.rb (IRB::Irb#run): split from IRB.start.
|
||||||
|
|
|
@ -104,7 +104,7 @@ module Net
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_tls_connect
|
def test_tls_connect
|
||||||
server = TCPServer.new("127.0.0.1", 0)
|
servers = Socket.tcp_server_sockets("localhost", 0)
|
||||||
ctx = OpenSSL::SSL::SSLContext.new
|
ctx = OpenSSL::SSL::SSLContext.new
|
||||||
ctx.ca_file = CA_FILE
|
ctx.ca_file = CA_FILE
|
||||||
ctx.key = File.open(SERVER_KEY) { |f|
|
ctx.key = File.open(SERVER_KEY) { |f|
|
||||||
|
@ -113,36 +113,38 @@ module Net
|
||||||
ctx.cert = File.open(SERVER_CERT) { |f|
|
ctx.cert = File.open(SERVER_CERT) { |f|
|
||||||
OpenSSL::X509::Certificate.new(f)
|
OpenSSL::X509::Certificate.new(f)
|
||||||
}
|
}
|
||||||
ssl_server = OpenSSL::SSL::SSLServer.new(server, ctx)
|
|
||||||
begin
|
begin
|
||||||
sock = nil
|
sock = nil
|
||||||
Thread.start do
|
Thread.start do
|
||||||
sock = ssl_server.accept
|
s = accept(servers)
|
||||||
|
sock = OpenSSL::SSL::SSLSocket.new(s, ctx)
|
||||||
|
sock.sync_close = true
|
||||||
|
sock.accept
|
||||||
sock.write("220 localhost Service ready\r\n")
|
sock.write("220 localhost Service ready\r\n")
|
||||||
sock.gets
|
sock.gets
|
||||||
sock.write("250 localhost\r\n")
|
sock.write("250 localhost\r\n")
|
||||||
sock.gets
|
sock.gets
|
||||||
sock.write("221 localhost Service closing transmission channel\r\n")
|
sock.write("221 localhost Service closing transmission channel\r\n")
|
||||||
end
|
end
|
||||||
smtp = Net::SMTP.new("localhost", server.addr[1])
|
smtp = Net::SMTP.new("localhost", servers[0].local_address.ip_port)
|
||||||
smtp.enable_tls
|
smtp.enable_tls
|
||||||
smtp.open_timeout = 0.1
|
smtp.open_timeout = 0.1
|
||||||
smtp.start do
|
smtp.start do
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
sock.close if sock
|
sock.close if sock
|
||||||
ssl_server.close
|
servers.each(&:close)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_tls_connect_timeout
|
def test_tls_connect_timeout
|
||||||
server = TCPServer.new("127.0.0.1", 0)
|
servers = Socket.tcp_server_sockets("localhost", 0)
|
||||||
begin
|
begin
|
||||||
sock = nil
|
sock = nil
|
||||||
Thread.start do
|
Thread.start do
|
||||||
sock = server.accept
|
sock = accept(servers)
|
||||||
end
|
end
|
||||||
smtp = Net::SMTP.new("127.0.0.1", server.addr[1])
|
smtp = Net::SMTP.new("localhost", servers[0].local_address.ip_port)
|
||||||
smtp.enable_tls
|
smtp.enable_tls
|
||||||
smtp.open_timeout = 0.1
|
smtp.open_timeout = 0.1
|
||||||
assert_raise(Net::OpenTimeout) do
|
assert_raise(Net::OpenTimeout) do
|
||||||
|
@ -151,7 +153,20 @@ module Net
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
sock.close if sock
|
sock.close if sock
|
||||||
server.close
|
servers.each(&:close)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def accept(servers)
|
||||||
|
loop do
|
||||||
|
readable, = IO.select(servers.map(&:to_io))
|
||||||
|
readable.each do |r|
|
||||||
|
sock, addr = r.accept_nonblock(exception: false)
|
||||||
|
next if sock == :wait_readable
|
||||||
|
return sock
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Загрузка…
Ссылка в новой задаче