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

ruby-changes:30005

From: akr <ko1@a...>
Date: Fri, 19 Jul 2013 12:36:03 +0900 (JST)
Subject: [ruby-changes:30005] akr:r42057 (trunk): * test/socket/test_tcp.rb (test_initialize_failure): Use EADDRNOTAVAIL

akr	2013-07-19 12:35:53 +0900 (Fri, 19 Jul 2013)

  New Revision: 42057

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

  Log:
    * test/socket/test_tcp.rb (test_initialize_failure): Use EADDRNOTAVAIL
      to test an error message generated by bind() failure.

  Modified files:
    trunk/ChangeLog
    trunk/test/socket/test_tcp.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 42056)
+++ ChangeLog	(revision 42057)
@@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Fri Jul 19 12:35:41 2013  Tanaka Akira  <akr@f...>
+
+	* test/socket/test_tcp.rb (test_initialize_failure): Use EADDRNOTAVAIL
+	  to test an error message generated by bind() failure.
+
 Fri Jul 19 11:27:38 2013  Zachary Scott  <e@z...>
 
 	* lib/racc/parser.rb: [DOC] Capitalize "Ruby" in documentation
Index: test/socket/test_tcp.rb
===================================================================
--- test/socket/test_tcp.rb	(revision 42056)
+++ test/socket/test_tcp.rb	(revision 42057)
@@ -7,26 +7,41 @@ end https://github.com/ruby/ruby/blob/trunk/test/socket/test_tcp.rb#L7
 
 class TestSocket_TCPSocket < Test::Unit::TestCase
   def test_initialize_failure
-    addr = '127.0.0.1'
-
-    s = TCPServer.new(addr, nil)
-    server_port = s.addr[1]
+    # These addresses are chosen from TEST-NET-1, TEST-NET-2, and TEST-NET-3.
+    # [RFC 5737]
+    # They are choosen because probably they are not used as a host address.
+    # Anyway the addresses are used for bind() and should be failed.
+    # So no packets should be generated.
+    test_ip_addresses = [
+      '192.0.2.1', '192.0.2.42', # TEST-NET-1
+      '198.51.100.1', '198.51.100.42', # TEST-NET-2
+      '203.0.113.1', '203.0.113.42', # TEST-NET-3
+    ]
+    begin
+      list = Socket.ip_address_list
+    rescue NotImplementedError
+      return
+    end
+    test_ip_addresses -= list.reject {|ai| !ai.ipv4? }.map {|ai| ai.ip_address }
+    if test_ip_addresses.empty?
+      return
+    end
+    client_addr = test_ip_addresses.first
+    client_port = 8000
 
-    c = TCPSocket.new(addr, server_port)
-    client_port = c.addr[1]
+    server_addr = '127.0.0.1'
+    server_port = 80
 
     begin
-      # TCPServer.new uses SO_REUSEADDR so we must create a failure on the
-      # local address.
-      TCPSocket.new(addr, server_port, addr, client_port)
+      # Since client_addr is not an IP address of this host,
+      # bind() in TCPSocket.new should fail as EADDRNOTAVAIL.
+      t = TCPSocket.new(server_addr, server_port, client_addr, client_port)
       flunk "expected SystemCallError"
     rescue SystemCallError => e
-      if /mswin|mingw/ =~ RUBY_PLATFORM
-        assert_match "for \"#{addr}\" port #{server_port}", e.message
-      else
-        assert_match "for \"#{addr}\" port #{client_port}", e.message
-      end
+      assert_match "for \"#{client_addr}\" port #{client_port}", e.message
     end
+  ensure
+    t.close if t && !t.closed?
   end
 
   def test_recvfrom

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

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