ruby-changes:34006
From: hsbt <ko1@a...>
Date: Sun, 25 May 2014 09:07:25 +0900 (JST)
Subject: [ruby-changes:34006] hsbt:r46087 (trunk): * test/openssl/test_partial_record_read.rb: Testing read_nonblock on
hsbt 2014-05-25 09:07:19 +0900 (Sun, 25 May 2014) New Revision: 46087 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=46087 Log: * test/openssl/test_partial_record_read.rb: Testing read_nonblock on a partial TLS record results in IO::WaitReadable by @mohamedhafez. [fix GH-547] Added files: trunk/test/openssl/test_partial_record_read.rb Modified files: trunk/ChangeLog Index: ChangeLog =================================================================== --- ChangeLog (revision 46086) +++ ChangeLog (revision 46087) @@ -1,3 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Sun May 25 08:54:38 2014 SHIBATA Hiroshi <shibata.hiroshi@g...> + + * test/openssl/test_partial_record_read.rb: Testing read_nonblock on + a partial TLS record results in IO::WaitReadable by @mohamedhafez. + [fix GH-547] + Sun May 25 08:43:16 2014 SHIBATA Hiroshi <shibata.hiroshi@g...> * lib/logger.rb: refactored to include Logger::Period. Index: test/openssl/test_partial_record_read.rb =================================================================== --- test/openssl/test_partial_record_read.rb (revision 0) +++ test/openssl/test_partial_record_read.rb (revision 46087) @@ -0,0 +1,27 @@ https://github.com/ruby/ruby/blob/trunk/test/openssl/test_partial_record_read.rb#L1 +require_relative "utils" + +if defined?(OpenSSL) + + class OpenSSL::TestPartialRecordRead < OpenSSL::SSLTestCase + def test_partial_tls_record_read_nonblock + port = 12345 + + start_server(port, OpenSSL::SSL::VERIFY_NONE, true, :server_proc => + Proc.new do |server_ctx, server_ssl| + server_ssl.io.write("\x01") # the beginning of a TLS record + sleep 6 # do not finish prematurely before the read by the client is attempted + end + ) do |server, port| + sock = TCPSocket.new("127.0.0.1", port) + ssl = OpenSSL::SSL::SSLSocket.new(sock) + ssl.connect + sleep 3 # wait is required for the (incomplete) TLS record to arrive at the client socket + + # Should raise a IO::WaitReadable since a full TLS record is not available for reading. + assert_raise(IO::WaitReadable) { ssl.read_nonblock(1) } + end + end + + end + +end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/