* 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:
shugo 2016-11-06 02:50:51 +00:00
Родитель 5e214d40d5
Коммит af3f52674a
2 изменённых файлов: 29 добавлений и 9 удалений

Просмотреть файл

@ -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