[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]