From 2dbae9b1f14d43f774153a7474dba9c6134dc5b4 Mon Sep 17 00:00:00 2001 From: akr Date: Wed, 7 May 2014 12:48:27 +0000 Subject: * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#accept): Consider Socket#accept as well as TCPServer#accept. Reported by Sam Stelfox. [ruby-core:62064] [Bug #9750] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45863 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/openssl/test_pair.rb | 69 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) (limited to 'test') diff --git a/test/openssl/test_pair.rb b/test/openssl/test_pair.rb index 38b6989bac..70ea47da75 100644 --- a/test/openssl/test_pair.rb +++ b/test/openssl/test_pair.rb @@ -56,6 +56,64 @@ module SSLPair end end +module SSLPairLowlevelSocket + def server + host = "127.0.0.1" + port = 0 + ctx = OpenSSL::SSL::SSLContext.new() + ctx.ciphers = "ADH" + ctx.tmp_dh_callback = proc { OpenSSL::TestUtils::TEST_KEY_DH1024 } + tcps = Addrinfo.tcp(host, port).listen + ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx) + return ssls + end + + def client(port) + host = "127.0.0.1" + ctx = OpenSSL::SSL::SSLContext.new() + ctx.ciphers = "ADH" + s = Addrinfo.tcp(host, port).connect + ssl = OpenSSL::SSL::SSLSocket.new(s, ctx) + ssl.connect + ssl.sync_close = true + ssl + end + + def ssl_pair + ssls = server + ths = Thread.new { + ns = ssls.accept + ssls.close + ns + } + port = ssls.to_io.connect_address.ip_port + thc = Thread.new { + client(port) + } + s = ths.value + c = thc.value + if block_given? + begin + yield c, s + ensure + c.close unless c.closed? + s.close unless s.closed? + end + else + return c, s + end + ensure + if ths && ths.alive? + ths.kill + ths.join + end + if thc && thc.alive? + thc.kill + thc.join + end + end +end + class OpenSSL::TestEOF1 < Test::Unit::TestCase include TestEOF include SSLPair @@ -309,4 +367,15 @@ class OpenSSL::TestPair < Test::Unit::TestCase end +class OpenSSL::TestPairLowlevelSocket < Test::Unit::TestCase + include SSLPairLowlevelSocket + + def test_getc + ssl_pair {|s1, s2| + s1 << "a" + assert_equal(?a, s2.getc) + } + end +end + end -- cgit v1.2.3