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/