summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/openssl/test_pair.rb27
-rw-r--r--test/socket/test_nonblock.rb2
-rw-r--r--test/socket/test_tcp.rb8
-rw-r--r--test/socket/test_unix.rb7
4 files changed, 44 insertions, 0 deletions
diff --git a/test/openssl/test_pair.rb b/test/openssl/test_pair.rb
index 3aca5f4833..2c2776b644 100644
--- a/test/openssl/test_pair.rb
+++ b/test/openssl/test_pair.rb
@@ -283,6 +283,33 @@ module OpenSSL::TestPairM
serv.close if serv && !serv.closed?
end
+ def test_accept_nonblock_no_exception
+ ctx2 = OpenSSL::SSL::SSLContext.new
+ ctx2.ciphers = "ADH"
+ ctx2.tmp_dh_callback = proc { OpenSSL::TestUtils::TEST_KEY_DH1024 }
+
+ sock1, sock2 = tcp_pair
+
+ s2 = OpenSSL::SSL::SSLSocket.new(sock2, ctx2)
+ accepted = s2.accept_nonblock(exception: false)
+ assert_equal :wait_readable, accepted
+
+ ctx1 = OpenSSL::SSL::SSLContext.new
+ ctx1.ciphers = "ADH"
+ s1 = OpenSSL::SSL::SSLSocket.new(sock1, ctx1)
+ th = Thread.new { s1.connect }
+ until th.join(0.01)
+ accepted = s2.accept_nonblock(exception: false)
+ assert_includes([s2, :wait_readable, :wait_writable ], accepted)
+ end
+ ensure
+ s1.close if s1
+ s2.close if s2
+ sock1.close if sock1
+ sock2.close if sock2
+ accepted.close if accepted.respond_to?(:close)
+ end
+
def test_connect_accept_nonblock
ctx = OpenSSL::SSL::SSLContext.new()
ctx.ciphers = "ADH"
diff --git a/test/socket/test_nonblock.rb b/test/socket/test_nonblock.rb
index 882e438deb..94ed198616 100644
--- a/test/socket/test_nonblock.rb
+++ b/test/socket/test_nonblock.rb
@@ -13,6 +13,8 @@ class TestSocketNonblock < Test::Unit::TestCase
serv.bind(Socket.sockaddr_in(0, "127.0.0.1"))
serv.listen(5)
assert_raise(IO::WaitReadable) { serv.accept_nonblock }
+ assert_equal :wait_readable, serv.accept_nonblock(exception: false)
+ assert_raise(IO::WaitReadable) { serv.accept_nonblock(exception: true) }
c = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
c.connect(serv.getsockname)
begin
diff --git a/test/socket/test_tcp.rb b/test/socket/test_tcp.rb
index 7328897d1e..a6c332c6c4 100644
--- a/test/socket/test_tcp.rb
+++ b/test/socket/test_tcp.rb
@@ -76,4 +76,12 @@ class TestSocket_TCPSocket < Test::Unit::TestCase
th.join
}
end
+
+ def test_accept_nonblock
+ TCPServer.open("localhost", 0) {|svr|
+ assert_raises(IO::WaitReadable) { svr.accept_nonblock }
+ assert_equal :wait_readable, svr.accept_nonblock(exception: false)
+ assert_raises(IO::WaitReadable) { svr.accept_nonblock(exception: true) }
+ }
+ end
end if defined?(TCPSocket)
diff --git a/test/socket/test_unix.rb b/test/socket/test_unix.rb
index 866c83906e..829eaa90a2 100644
--- a/test/socket/test_unix.rb
+++ b/test/socket/test_unix.rb
@@ -663,4 +663,11 @@ class TestSocket_UNIXSocket < Test::Unit::TestCase
assert(s0.closed?)
end
+ def test_accept_nonblock
+ bound_unix_socket(UNIXServer) {|serv, path|
+ assert_raises(IO::WaitReadable) { serv.accept_nonblock }
+ assert_raises(IO::WaitReadable) { serv.accept_nonblock(exception: true) }
+ assert_equal :wait_readable, serv.accept_nonblock(exception: false)
+ }
+ end
end if defined?(UNIXSocket) && /cygwin/ !~ RUBY_PLATFORM