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

ruby-changes:37158

From: headius <ko1@a...>
Date: Wed, 14 Jan 2015 08:22:31 +0900 (JST)
Subject: [ruby-changes:37158] headius:r49239 (trunk): * test/socket/test_basicsocket.rb: Add basic tests for close_read

headius	2015-01-14 08:22:17 +0900 (Wed, 14 Jan 2015)

  New Revision: 49239

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=49239

  Log:
    * test/socket/test_basicsocket.rb: Add basic tests for close_read
      and close_write using TCPServer/Socket as a target.

  Modified files:
    trunk/test/socket/test_basicsocket.rb
Index: test/socket/test_basicsocket.rb
===================================================================
--- test/socket/test_basicsocket.rb	(revision 49238)
+++ test/socket/test_basicsocket.rb	(revision 49239)
@@ -5,6 +5,9 @@ rescue LoadError https://github.com/ruby/ruby/blob/trunk/test/socket/test_basicsocket.rb#L5
 end
 
 class TestSocket_BasicSocket < Test::Unit::TestCase
+  # JRuby, due to JDK, can't represent server and client Socket in one class
+  SERVER_SOCKET = RUBY_ENGINE == 'jruby' ? ServerSocket : Socket
+
   def inet_stream
     sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
     yield sock
@@ -85,4 +88,50 @@ class TestSocket_BasicSocket < Test::Uni https://github.com/ruby/ruby/blob/trunk/test/socket/test_basicsocket.rb#L88
       }
     end
   end
+
+  def socks(port) 
+    sserv = TCPServer.new(12345)
+    ssock = nil
+    t = Thread.new { ssock = sserv.accept }
+    csock = TCPSocket.new('localhost', 12345)
+    t.join
+    yield sserv, ssock, csock
+  ensure
+    ssock.close rescue nil
+    csock.close rescue nil
+    sserv.close rescue nil
+  end
+
+  def test_close_read
+    socks(12345) do |sserv, ssock, csock|
+
+      # close_read makes subsequent reads raise IOError
+      csock.close_read
+      assert_raise(IOError) { csock.read(5) }
+
+      # close_read ignores any error from shutting down half of still-open socket
+      assert_nothing_raised { csock.close_read }
+
+      # close_read raises if socket is not open
+      assert_nothing_raised { csock.close }
+      assert_raise(IOError) { csock.close_read }
+    end
+  end
+
+  def test_close_write
+    socks(12345) do |sserv, ssock, csock|
+
+      # close_write makes subsequent writes raise IOError
+      csock.close_write
+      assert_raise(IOError) { csock.write(5) }
+
+      # close_write ignores any error from shutting down half of still-open socket
+      assert_nothing_raised { csock.close_write }
+
+      # close_write raises if socket is not open
+      assert_nothing_raised { csock.close }
+      assert_raise(IOError) { csock.close_write }
+    end 
+  end
+
 end if defined?(BasicSocket)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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