Project

General

Profile

Actions

Bug #20403

closed

TestResolvDNS#test_query_ipv4_address_truncated_tcp_fallback can flake if TCP port is in use

Added by kjtsanaktsidis (KJ Tsanaktsidis) about 1 month ago. Updated about 1 month ago.


Description

The test TestResolvDNS#test_query_ipv4_address_truncated_tcp_fallback wants to make a TCP and UDP DNS server on the same port. It achieves this by binding to a random UDP port (with :0), and then trying to bind to that TCP port. However, just because the UDP port was free, does not mean the TCP port was, so this can fail.

This leads to test failures like this one: https://github.com/ruby/ruby/actions/runs/8497267556/job/23275642160

     1) Error:
  TestResolvDNS#test_query_ipv4_address_truncated_tcp_fallback:
  Errno::EACCES: Permission denied - bind(2) for "127.0.0.1" port 49701
      D:/a/ruby/ruby/src/test/resolv/test_dns.rb:48:in 'TCPServer#initialize'
      D:/a/ruby/ruby/src/test/resolv/test_dns.rb:48:in 'IO.new'
      D:/a/ruby/ruby/src/test/resolv/test_dns.rb:48:in 'TestResolvDNS#with_tcp'
      D:/a/ruby/ruby/src/test/resolv/test_dns.rb:181:in 'block in TestResolvDNS#test_query_ipv4_address_truncated_tcp_fallback'
      D:/a/ruby/ruby/src/test/resolv/test_dns.rb:61:in 'TestResolvDNS#with_udp'
      D:/a/ruby/ruby/src/test/resolv/test_dns.rb:179:in 'TestResolvDNS#test_query_ipv4_address_truncated_tcp_fallback'
  
  Finished tests in 401.425882s, 64.4851 tests/s, 15534.2649 assertions/s.
  25886 tests, 6235856 assertions, 0 failures, 1 errors, 502 skips

(note - it's EACCESS, not EADDRINUSE, because of this issue on Windows, I think: https://stackoverflow.com/questions/48478869/cannot-bind-to-some-ports-due-to-permission-denied)

Actions #2

Updated by Anonymous about 1 month ago

  • Status changed from Open to Closed

Applied in changeset git|80bda107c84187d90eeff9497d465e086364b420.


[ruby/resolv] Add an explicit with_udp_and_tcp helper to test_dns.rb

This helper tries to bind UDP and TCP sockets to the same port, by
retrying the bind if the randomly-assinged UDP port is already taken in
TCP. This fixes a flaky test.

[Bug #20403]

https://github.com/ruby/resolv/commit/3d135f99d9

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0