test_send_timeout fails on FreeBSD
test_send_timeout
of the timeouts
system test fails on FreeBSD 13.0/13.1 with DNS python 2.2.1 on v9_16
(and only there):
S:timeouts:2022-05-16T17:21:18+0000
T:timeouts:1:A
A:timeouts:System test timeouts
I:timeouts:PORTRANGE:5300 - 5399
I:timeouts:starting servers
D:timeouts:============================= test session starts ==============================
D:timeouts:platform freebsd13 -- Python 3.8.13, pytest-4.6.11, py-1.9.0, pluggy-0.13.1 -- /usr/local/bin/python3.8
D:timeouts:cachedir: .pytest_cache
D:timeouts:hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase('/root/bind9/bin/tests/system/timeouts/.hypothesis/examples')
D:timeouts:rootdir: /root/bind9/bin/tests/system/timeouts
D:timeouts:plugins: hypothesis-6.28.0
D:timeouts:collecting ... collected 8 items
D:timeouts:
D:timeouts:tests-tcp.py::test_initial_timeout PASSED [ 12%]
D:timeouts:tests-tcp.py::test_idle_timeout PASSED [ 25%]
D:timeouts:tests-tcp.py::test_keepalive_timeout PASSED [ 37%]
D:timeouts:tests-tcp.py::test_pipelining_timeout PASSED [ 50%]
D:timeouts:tests-tcp.py::test_long_axfr PASSED [ 62%]
D:timeouts:tests-tcp.py::test_send_timeout FAILED [ 75%]
D:timeouts:tests-tcp.py::test_max_transfer_idle_out SKIPPED [ 87%]
D:timeouts:tests-tcp.py::test_max_transfer_time_out SKIPPED [100%]
D:timeouts:
D:timeouts:=================================== FAILURES ===================================
D:timeouts:______________________________ test_send_timeout _______________________________
D:timeouts:
D:timeouts:named_port = 5300
D:timeouts:
D:timeouts: def test_send_timeout(named_port):
D:timeouts: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
D:timeouts: sock.connect(("10.53.0.1", named_port))
D:timeouts:
D:timeouts: # Send and receive single large RDATA over TCP
D:timeouts: msg = create_msg("large.example.", "TXT")
D:timeouts: (sbytes, stime) = dns.query.send_tcp(sock, msg, timeout())
D:timeouts: (response, rtime) = dns.query.receive_tcp(sock, timeout())
D:timeouts:
D:timeouts: # Send and receive 28 large (~32k) DNS queries that should
D:timeouts: # fill the default maximum 208k TCP send buffer
D:timeouts: for n in range(28):
D:timeouts: (sbytes, stime) = dns.query.send_tcp(sock, msg, timeout())
D:timeouts:
D:timeouts: # configure idle interval is 5 seconds, sleep 6 to make sure we are
D:timeouts: # above the interval
D:timeouts: time.sleep(6)
D:timeouts:
D:timeouts: with pytest.raises(EOFError):
D:timeouts: try:
D:timeouts: (sbytes, stime) = dns.query.send_tcp(sock, msg, timeout())
D:timeouts: (response, rtime) = dns.query.receive_tcp(sock, timeout())
D:timeouts: except ConnectionError as e:
D:timeouts:> raise EOFError from e
D:timeouts:E Failed: DID NOT RAISE <class 'EOFError'>
D:timeouts:
D:timeouts:tests-tcp.py:206: Failed
D:timeouts:================ 1 failed, 5 passed, 2 skipped in 69.28 seconds ================
I:timeouts:stopping servers
R:timeouts:FAIL
E:timeouts:2022-05-16T17:22:32+0000
This is not yet visible in the CI because FreeBSD images use DNS python 1.16.0 and timeouts
system test requires DNS python v2.
The problem will be visible when FreeBSD images get rebuild (e.g. by FreeBSD 13.0 -> 13.1 upgrade).
Git bisect points to 7a386256, a backport of 6ddac2d5, which is already linked to #3214 and #3283 (closed), but I don't see core files nor uv_tcp_close_reset
-liked issues in ns1/named.run
.