diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-07-19 03:35:53 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-07-19 03:35:53 +0000 |
commit | e9c04509602be21fc41f06589999afce368296ce (patch) | |
tree | 61e3bae5bacea072a97b958a21cef3692e43df33 /test/socket | |
parent | 028d67b924642707b756ccf2cc8ef63d73a05aa7 (diff) | |
download | ruby-e9c04509602be21fc41f06589999afce368296ce.tar.gz |
* test/socket/test_tcp.rb (test_initialize_failure): Use EADDRNOTAVAIL
to test an error message generated by bind() failure.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42057 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/socket')
-rw-r--r-- | test/socket/test_tcp.rb | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/test/socket/test_tcp.rb b/test/socket/test_tcp.rb index aeceef6315..73747929e3 100644 --- a/test/socket/test_tcp.rb +++ b/test/socket/test_tcp.rb @@ -7,26 +7,41 @@ end 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 |