Skip to content

Commit

Permalink
* test/net/smtp/test_smtp.rb (test_tls_connect, test_tls_connect):
Browse files Browse the repository at this point in the history
  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
  • Loading branch information
shugo committed Nov 6, 2016
1 parent 5e214d4 commit af3f526
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 9 deletions.
5 changes: 5 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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>

* lib/irb.rb (IRB::Irb#run): split from IRB.start.
Expand Down
33 changes: 24 additions & 9 deletions test/net/smtp/test_smtp.rb
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ def test_crlf_injection
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|
Expand All @@ -113,36 +113,38 @@ def test_tls_connect
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
Expand All @@ -151,7 +153,20 @@ def test_tls_connect_timeout
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
Expand Down

0 comments on commit af3f526

Please sign in to comment.