summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorshugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-11-06 02:50:51 +0000
committershugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-11-06 02:50:51 +0000
commitaf3f52674ad7580346bf9a11617d4dbc9f5bcd61 (patch)
tree68c8178daf13177445a1a5985a2238cf9f93142b /test
parent5e214d40d5879e94cb076f12fc8d51d01f2c7174 (diff)
* 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
Diffstat (limited to 'test')
-rw-r--r--test/net/smtp/test_smtp.rb33
1 files changed, 24 insertions, 9 deletions
diff --git a/test/net/smtp/test_smtp.rb b/test/net/smtp/test_smtp.rb
index 656e77dc86..da85331805 100644
--- a/test/net/smtp/test_smtp.rb
+++ b/test/net/smtp/test_smtp.rb
@@ -104,7 +104,7 @@ module Net
end
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.ca_file = CA_FILE
ctx.key = File.open(SERVER_KEY) { |f|
@@ -113,36 +113,38 @@ module Net
ctx.cert = File.open(SERVER_CERT) { |f|
OpenSSL::X509::Certificate.new(f)
}
- ssl_server = OpenSSL::SSL::SSLServer.new(server, ctx)
begin
sock = nil
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.gets
sock.write("250 localhost\r\n")
sock.gets
sock.write("221 localhost Service closing transmission channel\r\n")
end
- smtp = Net::SMTP.new("localhost", server.addr[1])
+ smtp = Net::SMTP.new("localhost", servers[0].local_address.ip_port)
smtp.enable_tls
smtp.open_timeout = 0.1
smtp.start do
end
ensure
sock.close if sock
- ssl_server.close
+ servers.each(&:close)
end
end
def test_tls_connect_timeout
- server = TCPServer.new("127.0.0.1", 0)
+ servers = Socket.tcp_server_sockets("localhost", 0)
begin
sock = nil
Thread.start do
- sock = server.accept
+ sock = accept(servers)
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.open_timeout = 0.1
assert_raise(Net::OpenTimeout) do
@@ -151,7 +153,20 @@ module Net
end
ensure
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