Skip to content

Commit ec9da7e

Browse files
committed
verify correct WaitReadable is raised on connect_nonblock (~ MRI 2.3)
closing jruby/jruby#1716
1 parent fdd5a56 commit ec9da7e

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

src/test/ruby/ssl/test_socket.rb

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,28 @@ def test_connect_non_connected; require 'socket'
114114
end
115115
end if RUBY_VERSION > '2.2'
116116

117+
def test_connect_nonblock
118+
ssl_server = server
119+
thread = Thread.new do
120+
ssl_server.accept.tap { ssl_server.close }
121+
end
122+
123+
host = "127.0.0.1"
124+
ctx = OpenSSL::SSL::SSLContext.new()
125+
ctx.ciphers = "ADH"
126+
client = TCPSocket.new host, server_port(ssl_server)
127+
client = OpenSSL::SSL::SSLSocket.new(client, ctx)
128+
begin
129+
client.connect_nonblock
130+
rescue OpenSSL::SSL::SSLErrorWaitReadable => e
131+
# #<OpenSSL::SSL::SSLErrorWaitReadable: read would block>
132+
puts e.inspect if $VERBOSE
133+
ensure
134+
thread.kill if thread.alive?
135+
client.close unless client.closed?
136+
end
137+
end if RUBY_VERSION > '2.2'
138+
117139
private
118140

119141
def server
@@ -137,13 +159,16 @@ def client(port)
137159
ssl
138160
end
139161

162+
def server_port(ssl_server = server)
163+
ssl_server.to_io.local_address.ip_port
164+
end
165+
140166
def ssl_pair
141167
ssl_server = server
142168
thread = Thread.new do
143169
ssl_server.accept.tap { ssl_server.close }
144170
end
145-
port = ssl_server.to_io.local_address.ip_port
146-
ssl_client = client(port)
171+
ssl_client = client server_port(ssl_server)
147172
ssl_socket = thread.value
148173
if block_given?
149174
begin
@@ -156,9 +181,7 @@ def ssl_pair
156181
return ssl_client, ssl_socket
157182
end
158183
ensure
159-
if thread && thread.alive?
160-
thread.kill; thread.join
161-
end
184+
thread.tap { thread.kill; thread.join } if thread && thread.alive?
162185
end
163186

164187
end

0 commit comments

Comments
 (0)